美文网首页
9:Redis哨兵模式

9:Redis哨兵模式

作者: _River_ | 来源:发表于2021-04-12 14:33 被阅读0次
1:哨兵概念
当Master挂掉的时候,我们需要做什么操作:
可能需要从一堆的slave中重新选举出一个新的master。

 当出现故障时通过投票机制选择新的master并将所有slave连接到新的master。

而这个投票机制就依赖于哨兵。
2:哨兵(哨兵系统)作用
    哨兵(sentinel)监控系统  是一个分布式系统,这个系统可以只有一个哨兵(但可能有偏差 因此也可能有多个哨兵)

    每一个哨兵 都会 用于对主从结构中的每台服务器进行监控,

1:监控:监控master和slave不断的检查master和slave是否正常运行
    master存活检测、master与slave运行情况检测
2:通知(提醒):当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知
3:自动故障转移:断开master与slave连接,选取一个slave作为master,将其他slave连接新的master,
    并告知客户端新的服务器地址
    
注意:哨兵也是一台redis服务器,只是不提供数据相关服务,通常哨兵的数量配置为单数
3:启用哨兵
配置哨兵配置一拖二的主从结构(利用之前的方式启动即可)
配置三个哨兵(配置相同,端口不同),参看sentinel.conf

注意:一共需要6个服务器的redis
注意:一共需要6个服务器的redis
注意:一共需要6个服务器的redis

sentinel.conf配置:
    1:设置哨兵监听的主服务器信息, sentinel_number表示参与投票的哨兵数量(sentinel除以2 再加1)
    sentinel monitor master_name  master_host   master_port  sentinel_number

    2:设置判定服务器宕机时长,该设置控制是否进行主从切换(多少秒后切换)
    sentinel down-after-milliseconds master_name    million_seconds

    3:设置故障切换的最大超时时(如果超过这个时间还没切换好  认为切换失败)
    sentinel failover-timeout master_name   million_seconds

    4:设置主从切换后,同时进行数据同步的slave数量,数值越大,要求网络资源越高,数值越小,同步时间越长
    sentinel parallel-syncs master_name sync_slave_number

启动哨兵:
redis-sentinel filename

以配置文件启动  :哨兵一启动
redis-sentinel sentinel.conf

注意
启动后的 redis-sentinel 配置文件
当哨兵二  哨兵三启动后  哨兵一的配置文件会进行改变 发现它会把哨兵二 哨兵三也找到了

在客户端使用info命令查看该哨兵的基本信息

也可以进入redis-sentinel 的配置文件查看信息
    设置哨兵监听的主服务器信息, sentinel_number表示参与投票的哨兵数量(sentinel加1 再除以2 )
    sentinel monitor mymaster 127.0.0.1 6401  2

    sentinel known-relpica mymaster 127.0.0.1 6402
    sentinel known-relpica mymaster 127.0.0.1 6403

    sentinel known-sentinel mymaster 127.0.0.1 26402   IdIdIdIdIdIdIdId
    sentinel known-sentinel mymaster 127.0.0.1 26403   IdIdIdIdIdIdIdId

4:主从切换演示
把 6401 (master )  关闭

查看其中一个哨兵日志:

1:master 6401掉线
    sdown master mymaster 127.0.0.1.6401 (该sentinel主观认为掉线)
    
2:进行投票
    new-epoch 1
    vote-for-leader IDIDIDDID 1 (salve发起投票)
    odown master mymaster 127.0.0.1.6401 #quorum 2/2 (满足投票下限  sentinel加1 再除以2)
    
 3:进行选举过程
    +confg-update-from sential ....
    
    
4:master切换成6403
    switch-master mymaster 127.0.01 6401 127.0.0.1 6403

5:6401 与 6402 以从节点连接 6403
    +slave slave  127.0.01 6401   127.0.01 6401 @mymaster 127.0.0.1 6403
    +slave slave  127.0.01 6402   127.0.01 6402 @mymaster 127.0.0.1 6403

6:slave 掉线
    +sdown slave  127.0.01 6401   127.0.01 6401 @mymaster 127.0.0.1 6403

把 6401 (slave) 重启
    6401 以slave的身份 重连  6403(master)
    convert - to slave slave  127.0.01 6401   127.0.01 6401 @mymaster 127.0.0.1 6403
    
使用info命令查询 master 或者 slave的信息 确认是否切换成功
4:哨兵工作原理(配置信息 master 与 slave)
1:监控节点
2:通知阶段
3:故障转移

1:监控节点
1:获取各个sentinel的状态(是否在线)
2:请求master 获取master的状态 并且 获取各个slave的信息
    master属性:
        prunid
        prole:master

3:请求slave  获取slave的详细信息
    slave属性:    
        prunid
        prole:slave
        pmaster_host、master_port
        poffset
第一个 sentinel
    1:sentinel  向 master  发送info命令   建立cmd连接(命令通道)
    2:sentinel  获取信息  (sentinelState)
    3:master   获取信息   (sentinelRedisInstance) 可以加上 第一个sentinel的信息

第二个 sentinel
    master 获取信息(sentinelRedisInstance  这时已经有第一个sentinel的信息) 可以加上 第二个sentinel的信息
    第二个sentinel 会根据  master 里面的 sentinelRedisInstance 的信息连接 第一个sentinel  (进行消息互通)

第三个 sentinel 以此类推

三个 sentinel 建立了一个信息网 通过发布订阅的方法进行交互
2:通知阶段
sentinel在通知阶段要不断的去获取master/slave的信息,
然后在各个sentinel之间进行共享。
3:故障转移
三次投票:
1:master是否宕机
2:投票选择 拥有决定权的sentinel
3:投票选择 哪个slave当master

1:当master宕机后sentinel是如何知晓并判断出master是真的宕机了呢

    1:当sentinel1给master发信息的时候 master没有回复 该sentinel主观的认为master宕机了   S_DOWN
    2:sentinel1在信息网里面和其他的sentinel进行交流
    3:其他的sentinel马上给master发信息    
    4:当到达投票下限的时候(sentinel加1 再除以2)  认为master  O_DOWN

2:投票选择 拥有决定权的sentinel

    1:每个人都会发出一个指令,在内网里边告诉大家我要当选举人。
    2:现在的sentinel1和sentinel4发出这个选举指令了,那么sentinel2既能接到sentinel1的也能接到sentinel4的,:        
    3:sentinel2 就会把他的一票投给:谁先过来我投给谁,假设sentinel1先过来,所以这个票就给到了sentinel1。
    4:对应的选举最终得票多的,那自然就成为了处理事故的人。

需要注意在这个过程中有可能会存在失败的现象,就是一轮选举完没有选取,那就会接着进行第二轮第三轮直到完成选举。    

3:投票选择 哪个slave当master
    
    首先它有一个在服务器列表中挑选备选master的原则
    不在线的OUT
    响应慢的OUT
    与原master断开时间久的OUT
    
    优先原则
        1:优先级 
        2:offset (同步master的数据是较多的)
        3:runid  (。。。)
    
    选出新的master之后,发送指令( sentinel )给其他的slave:
        向新的master发送slaveof no one
        向其他slave发送slaveof 新masterIP端口

总结:故障转移阶段
1:发现问题,主观下线与客观下线
2:竞选负责人
3:优选新master
4:新master上任,其他slave切换master,原master作为slave故障恢复后连接

相关文章

网友评论

      本文标题:9:Redis哨兵模式

      本文链接:https://www.haomeiwen.com/subject/dglxlltx.html