目录
一、环境规划
主机名 | IP地址 | 端口 | 描述 |
---|---|---|---|
redis-master | 192.168.166.9 | 6379 | redis-master01 |
6381 | redis-master02 | ||
6383 | redis-master03 | ||
redis-slave | 192.168.166.9 | 6380 | redis-slave01 |
6382 | redis-slave02 | ||
6384 | redis-slave03 |
二、基础环境
1、创建配置目录
mkdir /etc/redis mv /etc/redis.conf /etc/redis/6379.conf cd /etc/redis cat 6379.com bind 192.168.166.9 protected-mode no port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize yes supervised systemd pidfile /var/run/redis_6379.pid loglevel notice logfile /var/log/redis/redis.log databases 16 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename "dump.rdb" dir /var/lib/redis replica-serve-stale-data yes replica-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no replica-priority 100 lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly no appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 stream-node-max-bytes 4096 stream-node-max-entries 100 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 dynamic-hz yes aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yes
2、生成配置文件
[root@localhost redis]# for i in {6380..6384};do cp ./6379.conf ${i}.conf ;done [root@localhost redis]# ls 6379.conf 6380.conf 6381.conf 6382.conf 6383.conf 6384.conf
3、修改监听端口
[root@localhost redis]# for i in {6380..6384};do sed -i "s/port 6379/port ${i}/" ./${i}.conf;done [root@localhost redis]# for i in {6380..6384};do grep "^port" ./${i}.conf;done port 6380 port 6381 port 6382 port 6383 port 6384
4、修改数据目录
[root@localhost redis]# for i in {6379..6384};do sed -i "s#dir /var/lib/redis#dir /var/lib/redis/${i}#" ./${i}.conf;done [root@localhost redis]# for i in {6379..6384};do grep "^di" ./${i}.conf;done dir /var/lib/redis/6379 dir /var/lib/redis/6380 dir /var/lib/redis/6381 dir /var/lib/redis/6382 dir /var/lib/redis/6383 dir /var/lib/redis/6384
5、修改日志目录
[root@localhost redis]# for i in {6379..6384};do sed -i "s#logfile /var/log/redis/redis.log#logfile /var/log/redis/${i}.log#" ./${i}.conf;done [root@localhost redis]# for i in {6379..6384};do grep "^logfile" ./${i}.conf;done logfile /var/log/redis/6379.log logfile /var/log/redis/6380.log logfile /var/log/redis/6381.log logfile /var/log/redis/6382.log logfile /var/log/redis/6383.log logfile /var/log/redis/6384.log
6、修改PID文件目录
[root@localhost redis]# for i in {6379..6384};do sed -i "s#pidfile /var/run/redis_6379.pid#pidfile /var/run/redis/${i}.pid#" ${i}.conf;done [root@localhost redis]# for i in {6379..6384};do grep "^pidfile" ${i}.conf;done pidfile /var/run/redis/6379.pid pidfile /var/run/redis/6380.pid pidfile /var/run/redis/6381.pid pidfile /var/run/redis/6382.pid pidfile /var/run/redis/6383.pid pidfile /var/run/redis/6384.pid
7、修改保护模式
[root@localhost redis]# for i in {6379..6384};do sed -i "s#protected-mode yes#protected-mode no#" ${i}.conf;done [root@localhost redis]# for i in {6379..6384};do grep "^protected-mode" ${i}.conf;done protected-mode no protected-mode no protected-mode no protected-mode no protected-mode no protected-mode no
8、修改进程运行模式
[root@localhost redis]# for i in {6379..6384};do sed -i "s#daemonize no#daemonize yes#" ${i}.conf;done [root@localhost redis]# for i in {6379..6384};do grep "^daemonize" ${i}.conf;done daemonize yes daemonize yes daemonize yes daemonize yes daemonize yes daemonize yes
9、修改监听地址
[root@localhost redis]# for i in {6379..6384};do sed -i "s#bind 127.0.0.1#bind 192.168.166.9#" ${i}.conf;done [root@localhost redis]# for i in {6379..6384};do grep "^bind" ${i}.conf;done bind 192.168.166.9 bind 192.168.166.9 bind 192.168.166.9 bind 192.168.166.9 bind 192.168.166.9 bind 192.168.166.9
10、生成集群配置
[root@localhost ~]# cd /var/lib/redis/ [root@localhost redis]# mkdir {6379..6384} [root@localhost redis]# ls 6379 6380 6381 6382 6383 6384 [root@localhost ~]# cd /var/run/ [root@localhost run]# mkdir redis [root@localhost run]# cd /etc/redis [root@localhost redis]# for i in {6379..6384};do echo -e "cluster-enabled yes\ncluster-config-file nodes-${i}.conf\ncluster-node-timeout 15000" >> ${i}.conf;done [root@localhost redis]# for i in {6379..6384};do tail -3 ${i}.conf;done cluster-enabled yes cluster-config-file nodes-6379.conf cluster-node-timeout 15000 cluster-enabled yes cluster-config-file nodes-6380.conf cluster-node-timeout 15000 cluster-enabled yes cluster-config-file nodes-6381.conf cluster-node-timeout 15000 cluster-enabled yes cluster-config-file nodes-6382.conf cluster-node-timeout 15000 cluster-enabled yes cluster-config-file nodes-6383.conf cluster-node-timeout 15000 cluster-enabled yes cluster-config-file nodes-6384.conf cluster-node-timeout 15000
11、启动服务
[root@localhost redis]# for((i=6379;i<=6384;i++));do redis-server /etc/redis/${i}.conf;done [root@localhost redis]# netstat -anptu | grep redis tcp 0 0 192.168.166.9:16380 0.0.0.0:* LISTEN 3154/redis-server 1 tcp 0 0 192.168.166.9:16381 0.0.0.0:* LISTEN 3156/redis-server 1 tcp 0 0 192.168.166.9:16382 0.0.0.0:* LISTEN 3160/redis-server 1 tcp 0 0 192.168.166.9:16383 0.0.0.0:* LISTEN 3166/redis-server 1 tcp 0 0 192.168.166.9:16384 0.0.0.0:* LISTEN 3170/redis-server 1 tcp 0 0 192.168.166.9:6379 0.0.0.0:* LISTEN 3150/redis-server 1 tcp 0 0 192.168.166.9:6380 0.0.0.0:* LISTEN 3154/redis-server 1 tcp 0 0 192.168.166.9:6381 0.0.0.0:* LISTEN 3156/redis-server 1 tcp 0 0 192.168.166.9:6382 0.0.0.0:* LISTEN 3160/redis-server 1 tcp 0 0 192.168.166.9:6383 0.0.0.0:* LISTEN 3166/redis-server 1 tcp 0 0 192.168.166.9:6384 0.0.0.0:* LISTEN 3170/redis-server 1 tcp 0 0 192.168.166.9:16379 0.0.0.0:* LISTEN 3150/redis-server 1
三、构建集群
以下操作需要登录某个节点的redis数据库
1、将其他节点加入集群
[root@localhost redis]# redis-cli -h 192.168.166.9 192.168.166.9:6379> CLUSTER MEET 192.168.166.9 6380 OK 192.168.166.9:6379> CLUSTER MEET 192.168.166.9 6381 OK 192.168.166.9:6379> CLUSTER MEET 192.168.166.9 6382 OK 192.168.166.9:6379> CLUSTER MEET 192.168.166.9 6383 OK 192.168.166.9:6379> CLUSTER MEET 192.168.166.9 6384 OK ########或者终端执行如下指令##### for i in {6380..6384};do redis-cli -h 192.168.166.9 -p 6379 cluster meet 192.168.166.9 $i;done
2、分配slot
也是在规划谁是master节点
[root@localhost redis]# redis-cli -h 192.168.166.9 -p 6379 cluster addslots {0..5461} OK [root@localhost redis]# redis-cli -h 192.168.166.9 -p 6381 cluster addslots {5462..10922} OK [root@localhost redis]# redis-cli -h 192.168.166.9 -p 6383 cluster addslots {10923..16383} OK
3、建立主从关系
查看所有群集节点
[root@localhost redis]# redis-cli -h 192.168.166.9 -p 6379 cluster nodes 69ed2c9d99ac83e52851d67e2597927142f47ebf 192.168.166.9:6381 master - 0 1709263044558 5 connected 5462-10922 c3f6d16785ab3de1b88f8ddb8e5bea3e7c6de5d4 192.168.166.9:6382 master - 0 1709263043555 0 connected a8b96d687e681dd4c606e6959468b2bc1a5b0b1f 192.168.166.9:6379 myself,master - 0 0 2 connected 0-5461 bbdc8d353e2afa87d3d1430eecbbe436206fd213 192.168.166.9:6384 master - 0 1709263042550 4 connected 20a5e5bb03ab273fea553b3ccafeba01e83a6eb2 192.168.166.9:6380 master - 0 1709263043052 1 connected 98fe02fecd9f99d2d220cbf3de921063a9413428 192.168.166.9:6383 master - 0 1709263045565 3 connected 10923-16383
查看master节点ID
[root@localhost redis]# redis-cli -h 192.168.166.9 -p 6380 cluster replicate a8b96d687e681dd4c606e6959468b2bc1a5b0b1f OK [root@localhost redis]# redis-cli -h 192.168.166.9 -p 6382 cluster replicate 69ed2c9d99ac83e52851d67e2597927142f47ebf OK [root@localhost redis]# redis-cli -h 192.168.166.9 -p 6384 cluster replicate 98fe02fecd9f99d2d220cbf3de921063a9413428 OK
4、集群操作命令
命令 | 作用 |
---|---|
cluster info | 打印集群的信息 |
cluster nodes | 列出集群当前已知的所有节点( node),以及这些节点的相关信息。 |
cluster meet <ip> <port> | 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。 |
cluster forget <node_id> | 从集群中移除 node_id 指定的节点。 |
cluster replicate <master_node_id> | 将当前从节点设置为 node_id 指定的master节点的slave节点。只能针对slave节点操作。 |
cluster saveconfig | 将节点的配置文件保存到硬盘里面。 |
cluster addslots <slot> [slot ...] | 将一个或多个槽( slot)指派( assign)给当前节点。 |
cluster delslots <slot> [slot ...] | 移除一个或多个槽对当前节点的指派。 |
cluster flushslots | 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。 |
cluster setslot <slot> node <node_id> | 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。 |
cluster setslot <slot> migrating <node_id> | 将本节点的槽 slot 迁移到 node_id 指定的节点中。 |
cluster setslot <slot> importing <node_id> | 从 node_id 指定的节点中导入槽 slot 到本节点。 |
cluster setslot <slot> stable | 取消对槽 slot 的导入( import)或者迁移( migrate)。 |
cluster keyslot <key> | 计算键 key 应该被放置在哪个槽上。 |
cluster countkeysinslot <slot> | 返回槽 slot 目前包含的键值对数量。 |
cluster getkeysinslot <slot> <count> | 返回 count 个 slot 槽中的键 。 |
cluster reset | 重置集群命令 |
四、故障恢复
1、模式故障
kill -9 PID #杀死其中一个redis进程
2、故障恢复
-
启动杀死的redis进程
-
通过 cluster nodes查看节点状态
-
通过 cluster info 查看集群状态
-
登录所有从节点
3、cluster failover命令
Redis Cluster模式下的cluster failover(集群故障转移)的作用是确保Redis集群在主节点(Master)发生故障或不可用的情况下,能够自动将主节点的工作负载转移到备用节点(Slave)上,并使备用节点成为新的主节点,保证Redis集群的高可用性和持续可用性。
当主节点发生故障时,Redis Cluster会自动检测到主节点的不可用,并从备用节点中选出一个合适的备用节点作为新的主节点。该备用节点经过选举后,会接管原主节点的数据和工作负载,并开始对外提供服务。集群的其它节点也会更新集群拓扑信息,以便客户端能够正确地路由请求到新的主节点。
cluster failover的作用主要包括:
-
高可用性:当主节点发生故障时,能够及时切换到备用节点,保证Redis集群的继续正常运行,避免因单点故障而导致服务不可用。
-
数据保护:在主节点发生故障时,能够将数据从主节点复制到备用节点,并在故障转移时将备用节点提升为新的主节点,从而保证数据的持久性和一致性。
-
自动化管理:集群故障转移是自动化过程,无需人工干预,减少了对系统运维的依赖,并提高了系统的可靠性和可维护性。
yum安装redis实现Cluster集群案例
yum安装
准备两台主机(ip分别为192.168.58.180、192.168.58.182、192.168.58.183)
1、更改配置文件
####192.168.58.180 ##安装redis-server [root@localhost ~]# yum install -y redis-server ##更改配置文件 [root@localhost ~]# vim /etc/redis.conf ##找到bind 127.0.0.1 -::1并把它改为: bind 192.168.58.180 ##找到protected-mode no把它改为: protected-mode no ##找到daemonize no把它改为: daemonize yes ##在最后加上 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 15000 [root@localhost ~]# cp /etc/reddis.conf /etc/redis_6380.conf [root@localhost ~]# vim /etc/redis_6380.conf ##在文件里面使用改命令,把6379全部改为6380 :%s/6379/6380/g ##在最后把cluster-config-file nodes.conf改为: cluster-config-file nodes_6380.conf [root@localhost ~]# ps aux | grep redis root 548851 0.0 0.2 21992 7804 pts/0 S+ 16:36 0:00 grep --color=auto redis ##注意要用绝对路径启动服务 [root@localhost ~]# redis-server /etc/redis.conf [root@localhost ~]# redis-server /etc/redis_6380.conf [root@localhost ~]# !ps ps aux | grep redis root 549663 0.1 0.3 154880 12172 ? Ssl 16:38 0:00 redis-server 192.168.58.180:6379 [cluster] root 549724 0.2 0.3 154880 12136 ? Ssl 16:38 0:00 redis-server 192.168.58.180:6380 [cluster] root 549839 0.0 0.2 21992 7908 pts/0 S+ 16:38 0:00 grep --color=auto redis
####192.168.58.182 ##安装redis-server [root@localhost ~]# yum install -y redis-server ##更改配置文件 [root@localhost ~]# vim /etc/redis.conf ##找到bind 127.0.0.1 -::1并把它改为: bind 192.168.58.182 ##找到protected-mode no把它改为: protected-mode no ##找到daemonize no把它改为: daemonize yes ##在最后加上 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 15000 [root@localhost ~]# cp /etc/reddis.conf /etc/redis_6380.conf [root@localhost ~]# vim /etc/redis_6380.conf ##在文件里面使用改命令,把6379全部改为6380 :%s/6379/6380/g ##在最后把cluster-config-file nodes.conf改为: cluster-config-file nodes_6380.conf [root@localhost redis]# redis-server /etc/redis.conf [root@localhost redis]# redis-server /etc/redis_6380.conf
####192.168.58.183 ##安装redis-server [root@localhost ~]# yum install -y redis-server ##更改配置文件 [root@localhost ~]# vim /etc/redis.conf ##找到bind 127.0.0.1 -::1并把它改为: bind 192.168.58.183 ##找到protected-mode no把它改为: protected-mode no ##找到daemonize no把它改为: daemonize yes ##在最后加上 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 15000 [root@localhost ~]# cp /etc/reddis.conf /etc/redis_6380.conf [root@localhost ~]# vim /etc/redis_6380.conf ##在文件里面使用改命令,把6379全部改为6380 :%s/6379/6380/g ##在最后把cluster-config-file nodes.conf改为: cluster-config-file nodes_6380.conf [root@localhost redis]# redis-server /etc/redis.conf [root@localhost redis]# redis-server /etc/redis_6380.conf
2、将其他节点加入集群
####192.168.58.180 [root@localhost ~]# redis-cli -h 192.168.58.180 192.168.58.180:6379> cluster nodes 83025a16978dbd24bed4d7c4404c247e3b267f43 :6379@16379 myself,master - 0 0 0 connected 192.168.58.180:6379> CLUSTER MEET 192.168.58.180 6380 OK 192.168.58.180:6379> cluster nodes ab9daba33fd7aba28734f3c43734aec5d42944a6 192.168.58.180:6380@16380 master - 0 1752223123275 0 connected 83025a16978dbd24bed4d7c4404c247e3b267f43 192.168.58.180:6379@16379 myself,master - 0 0 1 connected 192.168.58.180:6379> CLUSTER MEET 192.168.58.182 6379 OK 192.168.58.180:6379> CLUSTER MEET 192.168.58.182 6380 OK 192.168.58.180:6379> CLUSTER MEET 192.168.58.183 6379 OK 192.168.58.180:6379> CLUSTER MEET 192.168.58.183 6380 OK 192.168.58.180:6379> cluster nodes d9e5540b8e54d4340903380998bf1dacad77c990 192.168.58.183:6380@16380 master - 0 1752223229129 0 connected 8b426ac7d752f8f65ecf035b555b8ef9465cd517 192.168.58.183:6379@16379 master - 0 1752223231304 6 connected ab9daba33fd7aba28734f3c43734aec5d42944a6 192.168.58.180:6380@16380 master - 0 1752223232466 0 connected 83025a16978dbd24bed4d7c4404c247e3b267f43 192.168.58.180:6379@16379 myself,master - 0 1752223228000 1 connected 0b2ffa9b8510eeebffddbdf242d968b784768891 192.168.58.182:6379@16379 master - 0 1752223231000 2 connected 2ef3226f071ca16473adc3edf17869b266b91773 192.168.58.182:6380@16380 master - 0 1752223227919 3 connected 192.168.58.180:6379> exit
3、分配slot
####192.168.58.180 ##分配slot(也是在规划谁是master节点及管理的槽位) [root@localhost ~]# redis-cli -h 192.168.58.180 -p 6379 cluster addslots {0..5461} OK [root@localhost ~]# redis-cli -h 192.168.58.182 -p 6381 cluster addslots {5462..10922} Could not connect to Redis at 192.168.58.182:6381: Connection refused [root@localhost ~]# redis-cli -h 192.168.58.182 -p 6379 cluster addslots {5462..10922} OK [root@localhost ~]# redis-cli -h 192.168.58.183 -p 6379 cluster addslots {10923..16383} OK [root@localhost ~]# redis-cli -h 192.168.58.180 192.168.58.180:6379> cluster nodes d9e5540b8e54d4340903380998bf1dacad77c990 192.168.58.183:6380@16380 master - 0 1752223535303 0 connected 8b426ac7d752f8f65ecf035b555b8ef9465cd517 192.168.58.183:6379@16379 master - 0 1752223534145 6 connected 10923-16383 ab9daba33fd7aba28734f3c43734aec5d42944a6 192.168.58.180:6380@16380 master - 0 1752223533000 7 connected 83025a16978dbd24bed4d7c4404c247e3b267f43 192.168.58.180:6379@16379 myself,master - 0 1752223527000 1 connected 0-5461 0b2ffa9b8510eeebffddbdf242d968b784768891 192.168.58.182:6379@16379 master - 0 1752223536464 2 connected 5462-10922 2ef3226f071ca16473adc3edf17869b266b91773 192.168.58.182:6380@16380 master - 0 1752223537591 3 connected 192.168.58.180:6379> exit
4、建立主从关系
####192.168.58.180 ##用主的节点ID建立一一对应的主从关系 [root@localhost ~]# redis-cli -h 192.168.58.180 -p 6380 cluster replicate 83025a16978dbd24bed4d7c4404c247e3b267f43 OK [root@localhost ~]# redis-cli -h 192.168.58.180 192.168.58.180:6379> cluster nodes d9e5540b8e54d4340903380998bf1dacad77c990 192.168.58.183:6380@16380 master - 0 1752223782000 0 connected 8b426ac7d752f8f65ecf035b555b8ef9465cd517 192.168.58.183:6379@16379 master - 0 1752223782076 6 connected 10923-16383 ab9daba33fd7aba28734f3c43734aec5d42944a6 192.168.58.180:6380@16380 slave 83025a16978dbd24bed4d7c4404c247e3b267f43 0 1752223782428 1 connected 83025a16978dbd24bed4d7c4404c247e3b267f43 192.168.58.180:6379@16379 myself,master - 0 1752223765000 1 connected 0-5461 0b2ffa9b8510eeebffddbdf242d968b784768891 192.168.58.182:6379@16379 master - 0 1752223783575 2 connected 5462-10922 2ef3226f071ca16473adc3edf17869b266b91773 192.168.58.182:6380@16380 master - 0 1752223784731 3 connected 192.168.58.180:6379> exit [root@localhost ~]# redis-cli -h 192.168.58.182 -p 6380 cluster replicate 0b2ffa9b8510eeebffddbdf242d968b784768891 OK [root@localhost ~]# redis-cli -h 192.168.58.183 -p 6380 cluster replicate 8b426ac7d752f8f65ecf035b555b8ef9465cd517 OK
5、查看集群部署情况
####192.168.58.180 [root@localhost ~]# redis-cli -h 192.168.58.180 192.168.58.180:6379> cluster nodes d9e5540b8e54d4340903380998bf1dacad77c990 192.168.58.183:6380@16380 slave 8b426ac7d752f8f65ecf035b555b8ef9465cd517 0 1752223872659 6 connected 8b426ac7d752f8f65ecf035b555b8ef9465cd517 192.168.58.183:6379@16379 master - 0 1752223871510 6 connected 10923-16383 ab9daba33fd7aba28734f3c43734aec5d42944a6 192.168.58.180:6380@16380 slave 83025a16978dbd24bed4d7c4404c247e3b267f43 0 1752223874577 1 connected 83025a16978dbd24bed4d7c4404c247e3b267f43 192.168.58.180:6379@16379 myself,master - 0 1752223874000 1 connected 0-5461 0b2ffa9b8510eeebffddbdf242d968b784768891 192.168.58.182:6379@16379 master - 0 1752223873778 2 connected 5462-10922 2ef3226f071ca16473adc3edf17869b266b91773 192.168.58.182:6380@16380 slave 0b2ffa9b8510eeebffddbdf242d968b784768891 0 1752223874915 2 connected
6、验证不同节点管理不同槽位
####192.168.58.180 ##验证:不同的槽位放在固定的数值,需要进入对应的节点才能设置键值对,否则做出提示让你到对应的节点设置 192.168.58.180:6379> set a 1 (error) MOVED 15495 192.168.58.183:6379 192.168.58.180:6379> exit [root@localhost ~]# redis-cli -h 192.168.58.183 192.168.58.183:6379> set a 1 OK 192.168.58.183:6379> set b 2 (error) MOVED 3300 192.168.58.180:6379 192.168.58.183:6379> exit [root@localhost ~]# redis-cli -h 192.168.58.180 192.168.58.180:6379> set b 2 OK 192.168.58.180:6379> exit
7、模拟主节点出故障,从节点接替管理槽位
####192.168.58.180 [root@localhost ~]# ps aux | grep redis root 549663 0.2 0.3 154880 11896 ? Ssl 16:38 0:03 redis-server 192.168.58.180:6379 [cluster] root 549724 0.2 0.3 154880 11868 ? Ssl 16:38 0:03 redis-server 192.168.58.180:6380 [cluster] root 563007 0.0 0.2 21992 7912 pts/0 S+ 17:00 0:00 grep --color=auto redis [root@localhost ~]# kill 549663 [root@localhost ~]# ps aux | grep redis root 549724 0.2 0.3 154880 11868 ? Ssl 16:38 0:03 redis-server 192.168.58.180:6380 [cluster] root 563171 0.0 0.2 21992 8012 pts/0 S+ 17:00 0:00 grep --color=auto redis [root@localhost ~]# redis-cli -h 192.168.58.180 Could not connect to Redis at 192.168.58.180:6379: Connection refused not connected> exit [root@localhost ~]# redis-cli -h 192.168.58.180 -p 6380 192.168.58.180:6380> cluster nodes 0b2ffa9b8510eeebffddbdf242d968b784768891 192.168.58.182:6379@16379 master - 0 1752224473097 2 connected 5462-10922 ab9daba33fd7aba28734f3c43734aec5d42944a6 192.168.58.180:6380@16380 myself,master - 0 1752224417000 8 connected 0-5461 d9e5540b8e54d4340903380998bf1dacad77c990 192.168.58.183:6380@16380 slave 8b426ac7d752f8f65ecf035b555b8ef9465cd517 0 1752224471974 6 connected 83025a16978dbd24bed4d7c4404c247e3b267f43 192.168.58.180:6379@16379 master,fail - 1752224435167 1752224430704 1 disconnected 2ef3226f071ca16473adc3edf17869b266b91773 192.168.58.182:6380@16380 slave 0b2ffa9b8510eeebffddbdf242d968b784768891 0 1752224474256 2 connected 8b426ac7d752f8f65ecf035b555b8ef9465cd517 192.168.58.183:6379@16379 master - 0 1752224470842 6 connected 10923-16383 192.168.58.180:6380> get b "2" 192.168.58.180:6380> exit ##等原来的192.168.58.180 6379重新连接上,已经从master变为了slave [root@localhost ~]# redis-server /etc/redis.conf [root@localhost ~]# ps aux | grep redis root 549724 0.2 0.3 154880 11996 ? Ssl 16:38 0:03 redis-server 192.168.58.180:6380 [cluster] root 564268 0.2 0.3 157952 12048 ? Ssl 17:02 0:00 redis-server 192.168.58.180:6379 [cluster] root 564383 0.0 0.2 21992 7912 pts/0 S+ 17:02 0:00 grep --color=auto redis [root@localhost ~]# redis-cli -h 192.168.58.180 -p 6380 192.168.58.180:6380> cluster nodes 0b2ffa9b8510eeebffddbdf242d968b784768891 192.168.58.182:6379@16379 master - 0 1752224565575 2 connected 5462-10922 ab9daba33fd7aba28734f3c43734aec5d42944a6 192.168.58.180:6380@16380 myself,master - 0 1752224558000 8 connected 0-5461 d9e5540b8e54d4340903380998bf1dacad77c990 192.168.58.183:6380@16380 slave 8b426ac7d752f8f65ecf035b555b8ef9465cd517 0 1752224564418 6 connected 83025a16978dbd24bed4d7c4404c247e3b267f43 192.168.58.180:6379@16379 slave ab9daba33fd7aba28734f3c43734aec5d42944a6 0 1752224563299 8 connected 2ef3226f071ca16473adc3edf17869b266b91773 192.168.58.182:6380@16380 slave 0b2ffa9b8510eeebffddbdf242d968b784768891 0 1752224565222 2 connected 8b426ac7d752f8f65ecf035b555b8ef9465cd517 192.168.58.183:6379@16379 master - 0 1752224562181 6 connected 10923-16383 192.168.58.180:6380> exit
8、手动触发主从切换
####192.168.58.180 ##在 Redis 集群中使用CLUSTER FAILOVER命令手动触发主从切换 [root@localhost ~]# redis-cli -h 192.168.58.180 -p 6379 192.168.58.180:6379> CLUSTER FAILOVER OK 192.168.58.180:6379> CLUSTER NODES ab9daba33fd7aba28734f3c43734aec5d42944a6 192.168.58.180:6380@16380 slave 83025a16978dbd24bed4d7c4404c247e3b267f43 0 1752224639970 9 connected 0b2ffa9b8510eeebffddbdf242d968b784768891 192.168.58.182:6379@16379 master - 0 1752224642000 2 connected 5462-10922 2ef3226f071ca16473adc3edf17869b266b91773 192.168.58.182:6380@16380 slave 0b2ffa9b8510eeebffddbdf242d968b784768891 0 1752224643000 2 connected 8b426ac7d752f8f65ecf035b555b8ef9465cd517 192.168.58.183:6379@16379 master - 0 1752224642296 6 connected 10923-16383 83025a16978dbd24bed4d7c4404c247e3b267f43 192.168.58.180:6379@16379 myself,master - 0 1752224639000 9 connected 0-5461 d9e5540b8e54d4340903380998bf1dacad77c990 192.168.58.183:6380@16380 slave 8b426ac7d752f8f65ecf035b555b8ef9465cd517 0 1752224644527 6 connected