下载Redis源码并编译安装,下载编译这部分网上很多可参考。这里我选择的版本是3.0.7版本
集群搭建
1.准备搭建一个如下图的Redis集群,三个主节点,三个从节点
2.需要处理配置文件
由于只有一台机子,因此放到都放到同一目录下,在一目录下建立各个实例的文件夹
将每个redis.conf复制到各个文件夹中,并作对应的路径修改
以下配置供参考:
#使用守护进程方式启动
daemonize yes
#进程记录文件
pidfile /app/redis-prmi/5067/redis.pid
#端口号
port 5067
tcp-backlog 511
tcp-keepalive 0
loglevel notice
#日志文件,修改对应路径
logfile "/app/redis-prmi/5067/redis.log"
databases 16
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
dir "/app/redis-prmi/5067"
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 0
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
cluster-enabled yes
cluster-config-file "/app/redis-prmi/5067/nodes-5067.conf"
cluster-node-timeout 15000
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
#单个实例的最大容量,可以GB,MB,KB
maxmemory 100MB
maxmemory-policy volatile-ttl
#youcan add some rename commend here
#rename-command FLUSHALL ""
按照文件修改对应实例的关键点,如文件将文件中的5067改为5068,依次类推,并放到不同的目录下。
3.启动server
redis-server /xxx/xxx/redis.conf
启动完后的进程
连接集群,查看状态
发现cluster节点只有一个,现在将各个节点加入到集群中
添加一个后发现集群的节点已经有2个了,依次添加后的状态
节点状态,如下图,前面的一串数字为实例ID,master表示当前为master实例,一会会将其中的3个master转变为slave
此时的集群还未分配slot,Redis集群中需要将16384(0-16383)个slot分配到不同的实例上,并且要全部分配,cluster才生效,接下来使用命令进行分配。
以下命令为将编号0,1,2的slot分配给5067这个实例
一条条命令来分配slot太麻烦,这里写了个shell脚本,需要5个输入参数,分别为实例id,开始slot,结束slot,实例IP,实例端口号
chmod +x addslots.sh
./addslot.sh 055974b431ed46c9cc0a0d61635cd9b1a7f7d6ad 0 5461 127.0.0.1 5067
./addslot.sh 96ef79476e6a91173587516823dfab8c270df8a15462 5462 10922 127.0.0.1 6067
./addslot.sh c73bb8c7ad28da710966bc6f27dbbd33f37df81c10923 10923 16383 127.0.0.1 7067
此时slot已分配完毕,集群开始进行可用状态
接着单独连接上几个将要作为slave的实例,使用命令cluster replicate {nodeid}
全部操作完可以发现刚才的master实例已切换为slave实例
集群可用
set一个数据
附:addslots脚本
nodeid=$1
beginslot=$2
endslot=$3
ip=$4
port=$5
while [ $beginslot -le $endslot ]
do
echo $nodeid" "$beginslot
redis-cli -c -h $4 -p $5 cluster setslot $beginslot node $nodeid
let beginslot++
done