Redis Sentinel 哨兵模式

Sentinel(哨兵)是用于监控redis集群中Master状态的工具,其已经被集成在redis2.4+的版本中是Redis官方推荐的高可用性(HA)解决方案。

  • 作用:
    1). Master状态检测
    2). 如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave
    3). Master-Slave切换后,sentinel.conf的监控目标会随之调换
  • 工作模式:
    1). 每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令
    2). 如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。
    3). 如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。
    4). 当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线 。
  • 主观下线和客观下线
    1). 主观下线:Subjectively Down,简称 SDOWN,指的是当前 一个Sentinel 实例对某个redis服务器做出的下线判断。
    2). 客观下线:Objectively Down, 简称 ODOWN,指的是多个 Sentinel 实例在对Master Server做出 SDOWN 判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下线判断,然后开启failover

配置哨兵模式

redis-master 192.168.19.129
redis-slave-1 192.168.19.130
redis-slave-2 192.168.19.131
关闭防火墙和SELinux
全部配置好redis

#全部 vim redis.conf
bind 0.0.0.0

#全部 vim sentinel.conf
sentinel monitor mymaster 192.168.19.129 6379 2      #当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了。 (slave上面写的是master的ip,master写自己ip)
sentinel down-after-milliseconds mymaster 3000     #单位毫秒
sentinel failover-timeout mymaster 10000     #若sentinel在该配置值内未能完成failover(故障转移)操作(即故障时master/slave自动切换),则认为本次failover失败。
protected-mode no     #关闭加密模式--新添加到sentinel配置文件中

#全部启动redis
[root@redis-master redis]# src/redis-server ./redis.conf &

#全部启动sentinel服务
[root@redis-master redis]# ./src/redis-sentinel sentinel.conf &
image.png

测试

[root@redis-master redis]# src/redis-cli      #确认为主节点
127.0.0.1:6379> info replication
# Replication
role:master     #为主节点
connected_slaves:2
slave0:ip=192.168.19.130,port=6379,state=online,offset=45733,lag=1
slave1:ip=192.168.19.131,port=6379,state=online,offset=45733,lag=1
master_replid:4871e86197595dfb4613470881539176a5bbc3ee
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:46019
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:46019

[root@redis-master redis]# ps -ef|grep redis
root      14255      1  0 17:39 ?        00:00:02 src/redis-server 0.0.0.0:6379
root      14364   1253  0 18:08 pts/0    00:00:01 ./src/redis-sentinel *:26379 [sentinel]
root      14376   1253  0 18:16 pts/0    00:00:00 grep --color=auto redis
[root@redis-master redis]# kill -9 14255
image.png

192.168.19.129关闭后192.168.19.131切换为master(没有优先级,为随机切换)

#查看192.168.19.131
[root@redis-slave-2 redis]# src/redis-cli 
127.0.0.1:6379> INFO replication
# Replication
role:master     #为master
connected_slaves:1     #杀掉的redis没有启动所以仅有一个slave
slave0:ip=192.168.19.130,port=6379,state=online,offset=126811,lag=1
master_replid:2faf486cf6366c1545a4cc1e273ac76122b4fd02
master_replid2:4871e86197595dfb4613470881539176a5bbc3ee
master_repl_offset:126811
second_repl_offset:58259
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:155
repl_backlog_histlen:126657

#启动192.168.19.129的redis
[root@redis-master redis]# src/redis-server ./redis.conf &

[root@redis-master redis]# src/redis-cli 
127.0.0.1:6379> info replication
# Replication
role:slave     #角色变为slave
master_host:192.168.19.131
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:184555
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:2faf486cf6366c1545a4cc1e273ac76122b4fd02
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:184555
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:162800
repl_backlog_histlen:21756
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容