第十章、哨兵

第十章、哨兵

1、是什么?

1、吹哨人巡查监控后台的master主机是否有问题,如果有故障,就票选一个从机作为主机,继续对外服务

2、作用:俗称无人值守运维

2、能干嘛?

1、主从监控

  • 看看主机和从机运行是否正常

2、消息通知

  • 哨兵可以把故障结果发送给客户端

3、故障转移

  • 如果主机挂了,从机就会成为新主机,继续工作

4、配置中心

  • 客户端通过连接哨兵来获取当前Redis服务的主节点地址

3、怎么玩?

1、redis Sentinel架构

1、就是有3个哨兵

2、1个主机,两个从机

2、案例

1、这里我们用1个主机6379端口来作为主机。同时也把3个哨兵配置在这个虚拟机里面。

2、然后另外两个从机,就是两个虚拟机

1、配置文件

1、我们把sentinel.conf这个文件给拷贝出来。就是配置哨兵的配置文件

2、我们配置bind

  • 监听服务地址,客户端连接,默认本机

3、配置daemonize

  • 后台daemon的运行方式

4、配置protected-mode

  • 安全保护模式

5、port端口

6、logfile:日志文件路径

7、pidfile:pid文件路径

8、dir:工作路径

9、设置要监控的master服务器

  • sentinel monitor 
  • quorum表示最少有几个哨兵任课客观下线,同意故障迁移的法定票数

10、master设置密码,连接master服务的密码

  • sentienl auth-pass

11、指定多少毫秒之后,主节点没有应答哨兵,此时哨兵主观上认为主节点下线

  • sentinel down-after-milliseconds  

12、表示允许并行同步的slave个数,当Master挂了后,哨兵会选出新的Master,此时,剩余的slave会向新的master发起同步数据

sentinel parallel-syncs <master-name> <nums>:

13、故障转移的超时时间,进行故障转移时,如果超过设置的毫秒,表示故障转移失败

sentinel failover-timeout <master-name> <milliseconds>:

14、配置当某一事件发生时所需要执行的脚本

sentinel notification-script <master-name> <script-path> :

15、客户端重新配置主节点参数脚本

sentinel client-reconfig-script <master-name> <script-path>:

2、配置文件—实例

1、我们把3个哨兵和192.168.171.129 6379这个虚拟机上

2、sentinel26379.conf

bind 0.0.0.0
daemonize yes
protected-mode no
port 26379
logfile "/myredis/sentinel26379.log"
pidfile /var/run/redis-sentinel26379.pid
dir /myredis
sentinel monitor mymaster 192.168.171.129 6379 2
sentinel auth-pass mymaster 111111

3、sentinel26380.conf

bind 0.0.0.0
daemonize yes
protected-mode no
port 26380
logfile "/myredis/sentinel26380.log"
pidfile /var/run/redis-sentinel26380.pid
dir "/myredis"
sentinel monitor mymaster 192.168.171.129 6379 2
sentinel auth-pass mymaster 111111

4、sentinel26381.conf

bind 0.0.0.0
daemonize yes
protected-mode no
port 26381
logfile "/myredis/sentinel26381.log"
pidfile /var/run/redis-sentinel26381.pid
dir "/myredis"
sentinel monitor mymaster 192.168.171.129 6379 2
sentinel auth-pass mymaster 111111

3、启动

1、分别启动三个虚拟机

redis-server /myredis/redis6379.conf
redis-cli -a 111111 -p 6379

redis-server /myredis/redis6380.conf
redis-cli -a 111111 -p 6380

redis-server /myredis/redis6381.conf
redis-cli -a 111111 -p 6381

2、在第一个6379端口号的主机,启动3个哨兵

redis-sentinel sentinel26379.conf --sentinel
redis-sentinel sentinel26380.conf --sentinel
redis-sentinel sentinel26381.conf --sentinel

4、模拟master挂了

1、直接在6379虚拟机上

shutdown

2、结果

  • 两台从机的数据还是在
  • 会从剩下两个从机选个主机出来
  • image-20240404131001098
  • 如果挂了的老大,重新启动,老大也不会重新上位,而是便成奴隶

3、遇到问题

Configuration loaded
  4 2989:X 03 Apr 2024 23:38:22.778 * Increased maximum number of open files to 10032 (it was originally set to 1024).

4、其他备注

1、一般不会出现哨兵全挂了的现象

2、可以同时监控多个master,一行一个

3、哨兵的运行流程和选举原理

1、运行流程

1、当一个主机挂了,sentine可以选举一个新的主机master

2、用来自动接替master原来的工作,主从配置中的其他redis服务器(从机)就会自动指向新的master同步数据

3、一般sentinel采取奇数,繁殖某一台sentinel无法连接而进行master误切换

2、运行流程、故障切换

1、SDown主观下线

1、单个sentinel自己主观检测到master状态

2、sentinel角度来看,如果发送的Ping心跳,一段时间没有收到回复,就认为达到了SDOWN的条件

3、实操:sentinel配置文件中,主管下线的时间长度

down-after-milliseconds xxxx
2、ODown客观下线

1、需要多个sentinel认为,达成一致条件才能认为,master已经客观死了

3、选举出领导者哨兵(哨兵中选出兵王)

1、如果master客观下线了,就要哨兵来协商,协商期间,要推选一个领导者哨兵节点(兵王),这个领导者哨兵来进行故障迁移(failover)

2、如图日志

image-20240405003651641

4、兵王开始推动故障切换流程,选举新master

1、三步骤

1、新主登基

  • 某个slave成为了master
  • 选举规则(slave要健康在线)
    • slave-priority这个优先级决定(越小,优先级越高)
    • 复制偏移位置offset最大的从节点
    • 从最小run Id的结点开始

2、群臣俯首

  • slave重新跟随新的master
  • sentinel leader 会读对选举出的心master执行 slaveof no one操作,将其提升为master节点啊
  • sentinel leader向其他slave发送命令,让剩余的slave成为新的master结点的slave

3、旧主拜服

  • 之前死掉的master,复活了,现在重新回来也只能是个slave了
  • sentinel leader 会让原来的master降级为slave并回复正常工作

4、以上3个操作都是自动完成,无需人工干预

4、哨兵使用的建议

1、结点尽量多个,保证高可用

2、哨兵节点应该是奇数

3、各个哨兵之间的配置都应该一致

4、如果哨兵部署在docker容器,要注意端口的正确映射

5、哨兵集群和主从复制,并不能保证数据的0丢失

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇