首页 > 代码库 > redis集群搭建与管理
redis集群搭建与管理
server1:172.16.16.34server2:172.16.16.35redis版本:redis3.2
搭建环境:redis集群,server1有7001,7002,7003三主,server2有7001,7002,7003三从,总共六个节点。这样做是为了保证redis的集群的高可用。redis的复制也是采用异步复制的方式。
cd /home/maxiangqiantar xzf redis-3.2.8.tar.gzcd redis-3.2.8yum install gccmake
2:创建redis目录文件夹
mkdir /home/redis7001/datamkdir -p /home/redis7001/data /home/redis7001/log /home/redis7001/tmpmkdir -p /home/redis7002/data /home/redis7002/log /home/redis7002/tmpmkdir -p /home/redis7003/data /home/redis7003/log /home/redis7003/tmp
3:为server1和server2的三个节点分别配置配置文件
port 7001timeout 300 daemonize yespidfile "/home/redis7001/tmp/redis_7001.pid" loglevel noticelogfile "/home/redis7001/log/redis_7001.log" databases 16save 900 1save 300 10save 60 10000stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yesdbfilename "dump.rdb"dir "/home/redis7001/data" slave-serve-stale-data yes#slave-read-only yes # yes开启从库只读repl-diskless-sync norepl-diskless-sync-delay 5repl-disable-tcp-nodelay noslave-priority 100 appendonly yes#appendfilename "appendonly.aof"appendfsync everysecno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb lua-time-limit 5000slowlog-log-slower-than 10000slowlog-max-len 128latency-monitor-threshold 0 requirepass "maxiangqianredis"masterauth "maxiangqianredis" #clustercluster-enabled yescluster-config-file /home/redis7001/nodes7001.confcluster-node-timeout 5000
上面是redis7001的配置文件内容
redis-server /home/redis7001/redis7001.conf
我们看一下启动日志:
1574:M 03 May 16:22:53.444 * No cluster configuration found, I‘m 363ecec54c92c2548dcab016146bdb4c104e5e84
server1 7001server1 7002server1 7003server2 7001server2 7002server2 7003
OK,现在已经有六个已经启动的redis实例了。我们下一步开始做集群
redis-trib.rb create --replicas 1 10.103.16.34:7001 10.103.16.34:7002 10.103.16.34:7003 10.103.16.35:7001 10.103.16.35:7002 10.103.16.35:7003
执行报错:
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require‘: no such file to load -- redis (LoadError)from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require‘from /home/maxiangqian/redis-3.2.8/src/redis-trib.rb:25
我们需要安装以下几个包:
yum -y install zlib ruby rubygemsgem install redis
然后重新启动创建集群的操作:
[root@localhost redis7003]# redis-trib.rb create --replicas 1 10.103.16.34:7001 10.103.16.34:7002 10.103.16.34:7003 10.103.16.35:7001 10.103.16.35:7002 10.103.16.35:7003>>> Creating cluster[ERR] Sorry, can‘t connect to node 10.103.16.34:7001
又报错了我擦。
requirepass "maxiangqianredis"masterauth "maxiangqianredis"
群集是不支持认证的,把这两行注释掉就好了,然后我们在执行创建群集的命令:
[root@localhost redis7003]# redis-trib.rb create --replicas 1 10.103.16.34:7001 10.103.16.34:7002 10.103.16.34:7003 10.103.16.35:7001 10.103.16.35:7002 10.103.16.35:7003>>> Creating cluster>>> Performing hash slots allocation on 6 nodes...Using 3 masters:10.103.16.35:700110.103.16.34:700110.103.16.35:7002Adding replica 10.103.16.34:7002 to 10.103.16.35:7001Adding replica 10.103.16.35:7003 to 10.103.16.34:7001Adding replica 10.103.16.34:7003 to 10.103.16.35:7002M: 363ecec54c92c2548dcab016146bdb4c104e5e84 10.103.16.34:7001slots:5461-10922 (5462 slots) masterS: 93a0e8d405959480fcbd310a5d15a92346c69d43 10.103.16.34:7002replicates d015a22abc57c021f568973f4f1c03c7a5c7b772S: 78f77749f9f9a5f0d7c99427e0311912a3fa04e7 10.103.16.34:7003replicates 89147e5837e378b69233dd2b8290267975719bc4M: d015a22abc57c021f568973f4f1c03c7a5c7b772 10.103.16.35:7001slots:0-5460 (5461 slots) masterM: 89147e5837e378b69233dd2b8290267975719bc4 10.103.16.35:7002slots:10923-16383 (5461 slots) masterS: ce9d635236567ccde4c864f78863fa0a4b26f25a 10.103.16.35:7003replicates 363ecec54c92c2548dcab016146bdb4c104e5e84Can I set the above configuration? (type ‘yes‘ to accept):
OK,已经提示成功了,我们直接选择yes就好了。
>>> Nodes configuration updated>>> Assign a different config epoch to each node>>> Sending CLUSTER MEET messages to join the clusterWaiting for the cluster to join..>>> Performing Cluster Check (using node 10.103.16.34:7001)M: 363ecec54c92c2548dcab016146bdb4c104e5e84 10.103.16.34:7001slots:5461-10922 (5462 slots) master1 additional replica(s)S: 78f77749f9f9a5f0d7c99427e0311912a3fa04e7 10.103.16.34:7003slots: (0 slots) slavereplicates 89147e5837e378b69233dd2b8290267975719bc4M: d015a22abc57c021f568973f4f1c03c7a5c7b772 10.103.16.35:7001slots:0-5460 (5461 slots) master1 additional replica(s)M: 89147e5837e378b69233dd2b8290267975719bc4 10.103.16.35:7002slots:10923-16383 (5461 slots) master1 additional replica(s)S: ce9d635236567ccde4c864f78863fa0a4b26f25a 10.103.16.35:7003slots: (0 slots) slavereplicates 363ecec54c92c2548dcab016146bdb4c104e5e84S: 93a0e8d405959480fcbd310a5d15a92346c69d43 10.103.16.34:7002slots: (0 slots) slavereplicates d015a22abc57c021f568973f4f1c03c7a5c7b772[OK] All nodes agree about slots configuration.>>> Check for open slots...>>> Check slots coverage...[OK] All 16384 slots covered.
这样群集就设置成功了。
[root@mxqmongodb2 sa]# redis-cli -c -p 7001127.0.0.1:7001> get name-> Redirected to slot [5798] located at 10.103.16.34:7001"txt"10.103.16.34:7001> exit[root@mxqmongodb2 sa]# redis-cli -c -p 7002127.0.0.1:7002> get name-> Redirected to slot [5798] located at 10.103.16.34:7001"txt"10.103.16.34:7001> exit[root@mxqmongodb2 sa]# redis-cli -c -p 7003127.0.0.1:7003> get name-> Redirected to slot [5798] located at 10.103.16.34:7001"txt"
5:我们接下来查看一下集群的基本信息:
[root@localhost redis7003]# redis-cli -p 7001 cluster nodes78f77749f9f9a5f0d7c99427e0311912a3fa04e7 10.103.16.34:7003 slave 89147e5837e378b69233dd2b8290267975719bc4 0 1493879665448 5 connectedd015a22abc57c021f568973f4f1c03c7a5c7b772 10.103.16.35:7001 master - 0 1493879663946 4 connected 0-546089147e5837e378b69233dd2b8290267975719bc4 10.103.16.35:7002 master - 0 1493879664948 5 connected 10923-16383ce9d635236567ccde4c864f78863fa0a4b26f25a 10.103.16.35:7003 slave 363ecec54c92c2548dcab016146bdb4c104e5e84 0 1493879665949 6 connected93a0e8d405959480fcbd310a5d15a92346c69d43 10.103.16.34:7002 slave d015a22abc57c021f568973f4f1c03c7a5c7b772 0 1493879664446 4 connected363ecec54c92c2548dcab016146bdb4c104e5e84 10.103.16.34:7001 myself,master - 0 0 1 connected 5461-10922
可以看到现在的集群有六个节点,三个主节点和三个从节点。而且每个主节点都会记录自己分配的哈希槽,从中我们可以看到
103.16.35:7001 master - 0 1493879663946 4 connected 0-546010.103.16.34:7001 myself,master - 0 0 1 connected 5461-1092210.103.16.35:7002 master - 0 1493879664948 5 connected 10923-16383
当然我们也可以对这些节点的哈希槽进行重新的分配,我们现在打算将103.16.35:7001的前100个哈希槽移动到10.103.16.34:7001
[root@localhost redis7003]# redis-trib.rb reshard 10.103.16.34:7001
然后会提示我输入数值以及从哪里迁移到哪里:
How many slots do you want to move (from 1 to 16384)? 100What is the receiving node ID? 363ecec54c92c2548dcab016146bdb4c104e5e84Please enter all the source node IDs.Type ‘all‘ to use all the nodes as source nodes for the hash slots.Type ‘done‘ once you entered all the source nodes IDs.Source node #1:d015a22abc57c021f568973f4f1c03c7a5c7b772Source node #2:done
执行完以后就可以进行迁移了,迁移完以后我们再打印出来节点信息看一下:
[root@localhost redis7003]# redis-cli -p 7001 cluster nodes78f77749f9f9a5f0d7c99427e0311912a3fa04e7 10.103.16.34:7003 slave 89147e5837e378b69233dd2b8290267975719bc4 0 1493881167965 5 connectedd015a22abc57c021f568973f4f1c03c7a5c7b772 10.103.16.35:7001 master - 0 1493881166460 4 connected 101-546089147e5837e378b69233dd2b8290267975719bc4 10.103.16.35:7002 master - 0 1493881166962 5 connected 10923-16383ce9d635236567ccde4c864f78863fa0a4b26f25a 10.103.16.35:7003 slave 363ecec54c92c2548dcab016146bdb4c104e5e84 0 1493881167465 7 connected93a0e8d405959480fcbd310a5d15a92346c69d43 10.103.16.34:7002 slave d015a22abc57c021f568973f4f1c03c7a5c7b772 0 1493881167965 4 connected363ecec54c92c2548dcab016146bdb4c104e5e84 10.103.16.34:7001 myself,master - 0 0 7 connected 0-100 5461-10922
我们可以很清楚的看到已经迁移成功了。
[root@localhost redis7003]# redis-cli -p 7001 cluster nodes | grep masterd015a22abc57c021f568973f4f1c03c7a5c7b772 10.103.16.35:7001 master - 0 1493883826713 4 connected 101-546089147e5837e378b69233dd2b8290267975719bc4 10.103.16.35:7002 master - 0 1493883827213 5 connected 10923-16383363ecec54c92c2548dcab016146bdb4c104e5e84 10.103.16.34:7001 myself,master - 0 0 7 connected 0-100 5461-10922
我们现在要使10.103.16.35:7001这个主节点断掉,然后重启看一下基本信息
[root@mxqmongodb2 sa]# /home/maxiangqian/redis-3.2.8/src/redis-cli -p 7001127.0.0.1:7001> SHUTDOWNnot connected> exit[root@mxqmongodb2 sa]# redis-server /home/redis7001/redis7001.conf
然后再打印一下集群信息看一下:
[root@localhost redis7003]# redis-cli -p 7001 cluster nodes78f77749f9f9a5f0d7c99427e0311912a3fa04e7 10.103.16.34:7003 slave 89147e5837e378b69233dd2b8290267975719bc4 0 1493884247801 5 connectedd015a22abc57c021f568973f4f1c03c7a5c7b772 10.103.16.35:7001 slave 93a0e8d405959480fcbd310a5d15a92346c69d43 0 1493884247300 8 connected89147e5837e378b69233dd2b8290267975719bc4 10.103.16.35:7002 master - 0 1493884246798 5 connected 10923-16383ce9d635236567ccde4c864f78863fa0a4b26f25a 10.103.16.35:7003 slave 363ecec54c92c2548dcab016146bdb4c104e5e84 0 1493884246298 7 connected93a0e8d405959480fcbd310a5d15a92346c69d43 10.103.16.34:7002 master - 0 1493884248301 8 connected 101-5460363ecec54c92c2548dcab016146bdb4c104e5e84 10.103.16.34:7001 myself,master - 0 0 7 connected 0-100 5461-10922
通过信息我们可以很明显的看到了10.103.16.35:7001这个主节点已经变成了从节点,而本身他的从节点也上升为主节点了。
./redis-trib.rb add-node 10.103.16.34:7004 10.103.16.34:7001
这样我们就把10.103.16.34:7004添加为集群的新的主节点,不过我们要注意的是,这时候他仅仅是一个没有哈希槽的主节点,并不会存储任何数据。
./redis-trib.rb add-node 10.103.16.34:7004 10.103.16.34:7001redis 10.103.16.34::7004> cluster replicate 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e
将新节点指定为ID为3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e的从节点。
./redis-trib del-node 127.0.0.1:7000 `<node-id>`
但是我们要注意一点,移除主节点的时候必须保证主节点是空的,也就是事先将要移除的主节点的哈希槽给转移到其他的主节点上。
redis集群搭建与管理