前段时间其中的一台redis服务器宕机了,当时的redis集群master节点下线后,redis主动选举对应的slave节点在同一台服务器上,到时我们的应用连接redis出现了异常。
最开始时,每个Redis实例自己是一个集群,我们通过cluster meet让各个结点互相握手(handshake)。这也是Redis Cluster目前的一个缺点:缺少节点的自动发现功能。组建一个真正的可工作的集群,必须将各个独立的节点连接起来,构成一个包含多个节点的集群。连接各个节点的工作使用CLUSTER MEET命令来完成:
CLUSTER MEET <ip> <port>
手动连接各个端口组成集群:
./redis-cli -c -h 172.16.0.45 -p 7379 -a "password" cluster meet 172.16.0.45 7380
./redis-cli -c -h 172.16.0.45 -p 7379 -a "password" cluster meet 172.16.0.47 7380
./redis-cli -c -h 172.16.0.45 -p 7379 -a "password" cluster meet 172.16.0.48 7380
./redis-cli -c -h 172.16.0.45 -p 7379 -a "password" cluster meet 172.16.0.47 7379
./redis-cli -c -h 172.16.0.45 -p 7379 -a "password" cluster meet 172.16.0.48 7379
查看集群节点信息
./redis-cli -c -h 172.16.0.45 -p 7379 -a "password" cluster nodes
角色设置,给slave节点端口指定master主从关系,replicate后面的ID是主节点标识:
./redis-cli -c -h 172.16.0.45 -p 7380 -a "password" cluster replicate 280a67093fda412bbc20496fd1b911979c925ba5
./redis-cli -c -h 172.16.0.47 -p 7380 -a "password" cluster replicate b414d7497b3f9f05c15ddd6d47d78f21e80f2dcc
./redis-cli -c -h 172.16.0.48 -p 7380 -a "password" cluster replicate 252d0b70ae31222be0f3b136fb8c7215c19be967
当我们的redis服务器故障宕机时,宕机的master节点会自动分配到指定好我们节点,自动leader到其他服务器的slave节点为master节点。