Redis Cluster 手动部署(小白的“升级打怪”成长之路)
目录
一、环境规划
二、基础环境
1、创建配置目录
2、生成配置文件
3、修改监听端口
4、修改数据目录
5、修改日志目录
6、修改PID文件目录
7、修改保护模式
8、修改进程运行模式
9、修改监听地址
10、生成集群配置
11、启动服务
三、构建集群
1、将其他节点加入集群
2、分配slot
3、建立主从关系
4、集群操作命令
四、故障恢复
1、模式故障
2、故障恢复
3、cluster failover命令
yum安装redis实现Cluster集群案例
1、更改配置文件
2、将其他节点加入集群
3、分配slot
4、建立主从关系
5、查看集群部署情况
6、验证不同节点管理不同槽位
7、模拟主节点出故障,从节点接替管理槽位
8、手动触发主从切换
一、环境规划
主机名 | 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