Redis Sentinel的信息同步

Gossip算法学习 ,有兴趣的同学可以看下
其核心思想如下:
1. 去中心化,各个节点之间完全对等,不需要任何的中心节点。
2. 每个参与者都有关于一个自己信息的表, 同时每一个参与者要知道所有其他参与者的信息, 即要维护一个全局的表

Sentinel本地维护了2个字典,包括其监控的各个master节点的信息,以及对应master所关联的sentinel和slave的信息
struct sentinelState {
    uint64_t current_epoch;   //当前处在第几个世纪(每次fail over,current_epoch+1)
    dict *masters;      /* master实例字典(一个sentinle可监控多个master)*/
    int tilt;           /*是否在TITL模式中,后面详细介绍TITL模式*/
    int running_scripts;    /* 当前正在执行的脚本 */
    mstime_t tilt_start_time;   /* TITL模式开始的时间 */
    mstime_t previous_time;     /* 上次执行sentinel周期性执行任务的时间,用以判断是否进入TITL模式*/
    list *scripts_queue;    /* 待执行脚本队列 */
} sentinel;
typedef struct sentinelRedisInstance {
    ......
    /* Master specific. */
    dict *sentinels;    /* 监控该master实例的其他sentinel结点字典*/
    dict *slaves;       /* 该master实例说包含的slave结点字典 */
    ......
} sentinelRedisInstance;

通过在Redis instance节点上运行“./redis-cli -p 6383 monitor” 可以看到sentinle和该instance的交互,如下:
1397099907.404663 [0 192.168.213.245:64000] "INFO"
1397099908.132342 [0 192.168.213.245:64000] "PING"
1397099908.482543 [0 192.168.213.245:64000] "PUBLISH" "__sentinel__:hello" "192.168.213.245,26381,ccae95dadb891b0f237c5271bd12c116eb6321da,2,node_3,10.1.110.77,6383,0"

信息包括:
INFO:获取该instance相关的信息
PING:获取该instance存活状态
PUBLISH:向“__sentinel__:hello”频道发布其本身信息,其它sentinel订阅“__sentinel__:hello”频道以获取这些信息

在sentinle获取到上述信息后,会更新本地字典,并会向探测到的其它sentinle发送PING命令以获取其存活状态。
通过上述获取信息方式,每个sentinel维护一张其能够连接到的整个redis集群的状态信息表
各个sentinel完全对等,新的sentinel可以方便的加入

转载于:https://my.oschina.net/zipu888/blog/549652

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值