-
哨兵模式是为了解决在主节点宕机的情况下,自动选举从一个从节点为新的主节点。
-
新的主节点选举成功后,先的主节点重启后只能做从节点。
-
启动3个测试节点
一个主节点(6379),两个从节点(6380,6381)
主节点信息:
127.0.0.1:6379> INFO replication # Replication role:master connected_slaves:2 slave0:ip=127.0.0.1,port=6380,state=online,offset=196,lag=1 slave1:ip=127.0.0.1,port=6381,state=online,offset=196,lag=1 master_replid:f9aed96a50befab6510cacf02b51c014a01f9f71 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:196 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:196 127.0.0.1:6379>
两个从节点信息:
#6380节点信息 127.0.0.1:6380> INFO replication # Replication role:slave master_host:127.0.0.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:6 master_sync_in_progress:0 slave_repl_offset:154 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:f9aed96a50befab6510cacf02b51c014a01f9f71 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:154 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:154 127.0.0.1:6380> #6381节点信息 127.0.0.1:6381> INFO replication # Replication role:slave master_host:127.0.0.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:4 master_sync_in_progress:0 slave_repl_offset:182 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:f9aed96a50befab6510cacf02b51c014a01f9f71 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:182 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:43 repl_backlog_histlen:140 127.0.0.1:6381>
-
编写哨兵模式配置文件
vim sentinel.conf #内容 #最后面的1表示 最少有1个哨兵指明主节点失效,主节点就失效了 sentinel monitor myredis 127.0.0.1 6379 1
-
启动哨兵节点,使用单哨兵模式
redis-sentinel /opt/redisconfig/sentinel.conf
-
此时结束主节点,哨兵节点等待一段时间(默认30秒)后会选取一个新的主节点
6380此时的信息为:
127.0.0.1:6380> info replication
# Replication
role:master #变为主节点
connected_slaves:1
slave0:ip=127.0.0.1,port=6381,state=online,offset=33791,lag=0
master_replid:6e535aa5eaca02161c97dd36466da292289180fc
master_replid2:f9aed96a50befab6510cacf02b51c014a01f9f71
master_repl_offset:33791
second_repl_offset:20963
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:33791
127.0.0.1:6380>
127.0.0.1:6380>
6381此时的信息为:
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6380 #变为了6380的从节点
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:44033
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:6e535aa5eaca02161c97dd36466da292289180fc
master_replid2:f9aed96a50befab6510cacf02b51c014a01f9f71
master_repl_offset:44033
second_repl_offset:20963
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:43
repl_backlog_histlen:43991
127.0.0.1:6381>
此时再启动6379,并查看信息:
127.0.0.1:6379> info replication
# Replication
role:slave #变为了从节点
master_host:127.0.0.1
master_port:6380
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:54444
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:6e535aa5eaca02161c97dd36466da292289180fc
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:54444
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:53206
repl_backlog_histlen:1239
127.0.0.1:6379>
-
多哨兵模式(3个哨兵节点)
编写配置文件
#编辑文件 vim sentine79.conf #已守护进程模式运行 daemonize yes #运行端口号 port 26379 # 添加指明日志文件名 logfile "/usr/local/bin/sentinel26379.log" # 修改工作目录 dir "/usr/local/bin" # 关闭保护模式 protected-mode no # sentinel monitor sentinel monitor my-master 127.0.0.1 6379 2 #同样编写sentine80.conf、sentine81.conf文件 #只需修改相应端口号的地方26380、26381
-
启动3个哨兵节点
redis-sentinel /opt/redisconfig/sentinel79.conf redis-sentinel /opt/redisconfig/sentinel80.conf redis-sentinel /opt/redisconfig/sentinel81.conf
查看进程
现在断开主节点6379,3个哨兵节点开始退票选取新的主节点
最终选择了6780为主节点。6379重启后只能作为从节点