redis cluster 4.0.9 之二: failover

news/2024/7/8 4:55:42

os: centos7.4
redis:4.0.9
ruby:2.3.4

ip 规划

redis1    192.168.56.101
redis2    192.168.56.102

用两台虚拟机模拟6个redis节点。
分别为
192.168.56.101 的 9001、9002、9003 端口,
192.168.56.102 的 9001、9002、9003 端口。

连接redis

# redis-cli -h 192.168.56.101 -p 9001 -c
192.168.56.101:9001>
192.168.56.101:9001>
192.168.56.101:9001> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:23175
cluster_stats_messages_pong_sent:25275
cluster_stats_messages_sent:48450
cluster_stats_messages_ping_received:25270
cluster_stats_messages_pong_received:23175
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:48450

192.168.56.101:9001> cluster nodes
cf22edbc6463b8b31536819297ac50e9e39175ad 192.168.56.102:9003@19003 slave 8240d131c58c8b687c11462e03825bdba00af53b 0 1526649623970 6 connected
8240d131c58c8b687c11462e03825bdba00af53b 192.168.56.101:9001@19001 myself,master - 0 1526649623000 1 connected 0-5460
12e2353c9f0b085d2684da46ba0dc69575d68603 192.168.56.102:9001@19001 slave e38d78fc68b69d4e5f347cf96f31a9cb6a02dccf 0 1526649621000 7 connected
2b48fd08a8ec55eba5bfa0d163d02c8462637302 192.168.56.102:9002@19002 slave 0bdd8387a662984e95f5103522f52e75eceaab69 0 1526649624972 5 connected
0bdd8387a662984e95f5103522f52e75eceaab69 192.168.56.101:9002@19002 master - 0 1526649622000 2 connected 10923-16383
e38d78fc68b69d4e5f347cf96f31a9cb6a02dccf 192.168.56.101:9003@19003 master - 0 1526649622963 7 connected 5461-10922

kill某个redis master 进程

# ps -ef|grep -i redis
root     11301     1  0 21:09 ?        00:00:00 redis-server 192.168.56.101:9001 [cluster]
root     11330     1  0 21:10 ?        00:00:00 redis-server 192.168.56.101:9002 [cluster]
root     11340     1  0 21:10 ?        00:00:00 redis-server 192.168.56.101:9003 [cluster]
root     11358  1851  0 21:11 pts/0    00:00:00 redis-cli -h 192.168.56.101 -p 9001 -c
root     11484  5873  0 21:21 pts/1    00:00:00 grep --color=auto -i redis

# kill 11301

192.168.56.101:9002> cluster nodes
8240d131c58c8b687c11462e03825bdba00af53b 192.168.56.101:9001@19001 master,fail - 1526649753764 1526649753061 1 disconnected
12e2353c9f0b085d2684da46ba0dc69575d68603 192.168.56.102:9001@19001 slave e38d78fc68b69d4e5f347cf96f31a9cb6a02dccf 0 1526649779186 7 connected
0bdd8387a662984e95f5103522f52e75eceaab69 192.168.56.101:9002@19002 myself,master - 0 1526649778000 2 connected 10923-16383
e38d78fc68b69d4e5f347cf96f31a9cb6a02dccf 192.168.56.101:9003@19003 master - 0 1526649776000 7 connected 5461-10922
2b48fd08a8ec55eba5bfa0d163d02c8462637302 192.168.56.102:9002@19002 slave 0bdd8387a662984e95f5103522f52e75eceaab69 0 1526649777173 5 connected
cf22edbc6463b8b31536819297ac50e9e39175ad 192.168.56.102:9003@19003 master - 0 1526649778179 8 connected 0-5460

可以看到 192.168.56.101:9001 现在是 master,fail 状态

kill 之前redis的状态

master 192.168.56.101:9001、192.168.56.101:9002、192.168.56.101:9003
slave  192.168.56.102:9001、192.168.56.102:9002、192.168.56.102:9003

kill 之后redis的状态

master 192.168.56.101:9002、192.168.56.101:9003、192.168.56.102:9003
slave  192.168.56.102:9001、192.168.56.102:9002

master,fail 192.168.56.101:9001

可以看出,192.168.56.102:9003 充当了新的master,也可以推断kill之前,192.168.56.102:9003 是 192.168.56.101:9001 的slave

从输出求证,确实是这样

cf22edbc6463b8b31536819297ac50e9e39175ad 192.168.56.102:9003@19003 slave 8240d131c58c8b687c11462e03825bdba00af53b 0 1526649623970 6 connected
8240d131c58c8b687c11462e03825bdba00af53b 192.168.56.101:9001@19001 myself,master - 0 1526649623000 1 connected 0-5460

注意 8240d131c58c8b687c11462e03825bdba00af53b

redis的slave在master down后,可以自动提升为master。这个很重要。

重新启动被kill的那个redis

# redis-server /usr/redis/redis-cluster-data/9001/redis.conf
[root@pgsql1 9001]# redis-cli -h 192.168.56.101 -p 9001 -c
192.168.56.101:9001>
192.168.56.101:9001> cluster nodes
12e2353c9f0b085d2684da46ba0dc69575d68603 192.168.56.102:9001@19001 slave e38d78fc68b69d4e5f347cf96f31a9cb6a02dccf 0 1526650968543 7 connected
2b48fd08a8ec55eba5bfa0d163d02c8462637302 192.168.56.102:9002@19002 slave 0bdd8387a662984e95f5103522f52e75eceaab69 0 1526650969546 5 connected
cf22edbc6463b8b31536819297ac50e9e39175ad 192.168.56.102:9003@19003 master - 0 1526650967000 8 connected 0-5460
8240d131c58c8b687c11462e03825bdba00af53b 192.168.56.101:9001@19001 myself,slave cf22edbc6463b8b31536819297ac50e9e39175ad 0 1526650967000 1 connected
e38d78fc68b69d4e5f347cf96f31a9cb6a02dccf 192.168.56.101:9003@19003 master - 0 1526650969000 7 connected 5461-10922
0bdd8387a662984e95f5103522f52e75eceaab69 192.168.56.101:9002@19002 master - 0 1526650966534 2 connected 10923-16383
192.168.56.101:9001> set peiyb1 abc
-> Redirected to slot [6161] located at 192.168.56.101:9003
OK
192.168.56.101:9001> 

此时,redis各节点的状态为

master 192.168.56.101:9002、192.168.56.101:9003、192.168.56.102:9003
slave  192.168.56.102:9001、192.168.56.102:9002、192.168.56.101:9001

可以看出,新启动的redis 192.168.56.101:9001@19001 状态为slave,并没有抢夺master的权限。
此外,在slave上操作 set 时,能自动计算 hash slot ,抛给对应的master执行。


http://www.niftyadmin.cn/n/2124310.html

相关文章

为什么要坚持写blog

(一)为什么你应该(从现在开始就)写博客 用一句话来说就是,写一个博客有很多好处,却没有任何明显的坏处。(阿灵顿的情况属于例外,而非常态,就像不能拿抽烟活到一百岁的英…

RMAN备份全集

1、切换服务器归档模式,如果已经是归档模式可跳过此步: %sqlplus /nolog (启动sqlplus) SQL> conn / as sysdba (以DBA身份连接数据库) SQL> shutdown immediate; (立即关闭数…

oracle后台进程

DBWR进程:该进程执行将缓冲区写入数据文件,是负责缓冲存储区管理的一个ORACLE后台进程。当缓冲区中的一缓冲区被修改,它被标志为“弄脏”,DBWR的主要任务是将“弄脏”的缓冲区写入磁盘,使缓冲区保持“干净”。由于缓冲…

redis cluster 4.0.9 之三: startup stop

os: centos7.4 redis:4.0.9 ruby:2.3.4 ip 规划 redis1 192.168.56.101 redis2 192.168.56.102用两台虚拟机模拟6个redis节点。 分别为 192.168.56.101 的 9001、9002、9003 端口, 192.168.56.102 的 9001、9002、9003 端口。 start redis cluster # redi…

emctl start dbconsole起不来问题的解决

emctl start dbconsole起不来问题的解决 要想打开OEM的web管理程序,必须先启动Database listener,再启动Datebase Control端口监控程序,但是碰到下面的情况. [oracleredhat bin]$ emctl dbconsole start TZ set to PRC EM Configuration…

postgresql 监控 table、column 的备注

最近在整理postgresql数据库的表、列的备注信息时,用到了如下的sql 表、视图、分区表的备注 with tmp_tab as (select pc.oid as ooid,pn.nspname,pc.*from pg_class pcleft outer join pg_namespace pnon pc.relnamespace pn.oidwhere 11and pc.relkind in (r,v,…

初识Oracle裸设备二十问

1.什么叫做裸设备? 裸设备,也叫裸分区(原始分区),是一种没有经过格式化,不被Unix通过文件系统来读取的特殊字符设备。它由应用程序负责对它进行读写操作。不经过文件系统的缓冲。 2&#xff0…

postgresql 使用 analyze 收集统计信息

os: centos7.4 postgresql:9.6.8 查看os进程 $ ps -ef|grep -i post |grep -i stat postgres 10782 10770 0 May09 ? 00:02:42 postgres: stats collector process表的信息 mondb# select pg_size_pretty(pg_relation_size(t_gather_pgsql_space_table)), pg_size_…