前言
本文主要记录在centos7上搭建redis集群的过程及遇到的问题。
环境:centos7
节点:
node1 192.168.100.133 Redis(主、从)
node2 192.168.100.130 Redis(主、从)
node3 192.168.100.131 Redis(主、从)
注:一台服务器上一主一从不一定是一一对应关系,即133上的从节点可能对应130上的主节点,131上的从节点可能对应131上的主节点。具体分配情况视redis集群随机分配而定。
安装过程
# bind 0.0.0.0 (修改每个Redis绑定的Ip地址。0.0.0.0表示所有节点都可以访问该redis)bind 192.168.100.133 (默认绑定127.0.0.1。192.168.***.***网段内的ip地址都可以访问)protected-mode no (关闭保护模式)cluster-node-timeout 15000 (设置请求超时时间,默认为15秒,可以自行修改)appendonly yes (aop日志开启,会每次进行写操作都记录一条日志)cluster-config-file nodes_6661.confpidfile /var/run/redis_6661.piddbfilename dump_6661.rdbappendfilename "appendonly_6661.aof"port 6661 (修改每个Redis的端口地址,分别从6661-6666)cluster-enabled yes (把每个Redis的集群设置打开 重要!!! )daemonize yes (把每个Redis改为后台运行)
注:每个redis进程后必须有[cluster],标识以集群方式启动redis。如果没有,说明在启动redis对应的conf文件中,没有配置 cluster-enabled yes
6.分别在三台虚拟机上重复上述操作。一共安装六个redis。同个服务器上可以复制,再修改涉及端口的配置;不同服务器上可以借助xftp传递配置文件,再修改ip地址与涉及端口的配置即可。
三个服务器六个redis节点启动。
7.在任意一个节点上,开始配置redis集群。此处在第一个节点为例。
cd /usr/local/redis-cluster/redis-6661/bin
[root@192 bin]# ./redis-cli --cluster create 192.168.100.133:6661 192.168.100.133:6662 192.168.100.130:6663 192.168.100.130:6664 192.168.100.131:6665 192.168.100.131:6666 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.100.130:6664 to 192.168.100.133:6661
Adding replica 192.168.100.133:6662 to 192.168.100.130:6663
Adding replica 192.168.100.131:6666 to 192.168.100.131:6665
>>> Trying to optimize slaves allocation for anti-affinity
[OK] Perfect anti-affinity obtained!
M: 4947f609495d9e0add87ad4d6cb8f5ca708419bd 192.168.100.133:6661
slots:[0-5460] (5461 slots) master
S: a90d682d1925363d986ad27a7a71d5add80c0e01 192.168.100.133:6662
replicates 826943b1816238d307fcfb36ff63b77e8b2c2c7b
M: 826943b1816238d307fcfb36ff63b77e8b2c2c7b 192.168.100.130:6663
slots:[5461-10922] (5462 slots) master
S: 4eee5def94ab07f09745aed1d6c067a5d96f8552 192.168.100.130:6664
replicates 2b8c59badfaaa978cb9d606f2b364936fb5fd3f8
M: 2b8c59badfaaa978cb9d606f2b364936fb5fd3f8 192.168.100.131:6665
slots:[10923-16383] (5461 slots) master
S: cb474159bc6ad24a8c6b814923a039e9add2ec39 192.168.100.131:6666
replicates 4947f609495d9e0add87ad4d6cb8f5ca708419bd
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.......
>>> Performing Cluster Check (using node 192.168.100.133:6661)
M: 4947f609495d9e0add87ad4d6cb8f5ca708419bd 192.168.100.133:6661
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: 826943b1816238d307fcfb36ff63b77e8b2c2c7b 192.168.100.130:6663
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: a90d682d1925363d986ad27a7a71d5add80c0e01 192.168.100.133:6662
slots: (0 slots) slave
replicates 826943b1816238d307fcfb36ff63b77e8b2c2c7b
S: 4eee5def94ab07f09745aed1d6c067a5d96f8552 192.168.100.130:6664
slots: (0 slots) slave
replicates 2b8c59badfaaa978cb9d606f2b364936fb5fd3f8
S: cb474159bc6ad24a8c6b814923a039e9add2ec39 192.168.100.131:6666
slots: (0 slots) slave
replicates 4947f609495d9e0add87ad4d6cb8f5ca708419bd
M: 2b8c59badfaaa978cb9d606f2b364936fb5fd3f8 192.168.100.131:6665
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
可以看到,redis自动在六个节点上执行分配hash槽。主从节点已经确定。
8.验证redis集群
在node1节点上存储一个key,在node2节点上获取。
安装集群过程中遇到的问题
redis集群版本决定是否需要安装Ruby环境,参考:https://blog.csdn.net/HeyShHeyou/article/details/108937980
关于安装、升级ruby版本,参考: https://blog.csdn.net/HeyShHeyou/article/details/108937863
重新分配redis集群节点,提示:Node *** is not empty. Either the node already knows other nodes。参考: https://blog.csdn.net/HeyShHeyou/article/details/108937649
[ERR] Node xxx not configured as a cluster node. 参考: https://blog.csdn.net/HeyShHeyou/article/details/108937589
其他问题
" /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)"
参考链接
https://blog.csdn.net/zxd1435513775/article/details/88901992