Redis Sentinel哨兵

Sentinel是Redis高可用的体现:通过多个Sentinel实例组成的Sentinel系统可以监视多个主服务器和这些主服务器对应的从服务器,当被监视的主服务器下线时,自动将它对应的某个从服务器升级为主服务器,继续处理请求。

1、初始化服务器

Sentinel本质是一个运行在特殊模式下的Redis服务器,Sentinel状态中的masters字典记录了被监视的主服务器相关信息。创建和主服务器的异步网络连接和订阅连接(订阅主服务器的Sentinel:hello频道)。异步连接是为了降低服务器压力,订阅连接是为了不丢失频道的任何信息。

2、Sentinel和主服务器通信

  • Sentinel默认会以每10秒1次的频率向主服务器发送INFO命令,获取主服务器运行ID、主服务器下所有从服务器信息。对于每一个与Sentinel1连接的服务器,
  • Sentinel1每2秒1次会通过命令连接向被监视的主从服务器的sentinel1:hello频道发送信息,以此来向其他sentinel宣告自己的存在,又通过订阅连接从服务器sentinel1:hello接受信息,集群的其他sentinel也会接受该频道信息,从而自己对于更新Sentinel1的认知,

3、创建和其他Sentinel的命令连接

Sentinel通过频道信息发现新的Sentinel,多个Sentinel之间是网状连接。Sentinel集群之间会互相创建命令连接用于通信,因为已经有主从服务器作为发送和接收hello信息的中介,sentinel之间不会创建订阅连接。

1、 检测主观下线

Sentinel会以每秒1次的频率向所有与它建立命令连接的实例发送PING命令,根据回复判断实例是否在线;有效回复包括+PONG、-LOADING、-MASTERDOWN,除此之外的都是无效回复,或指定时间内未返回。Sentinel配置文件中down-after-milliseconds选项指定了该Sentinel判断该实例主观下线的时间长度,多个Sentinel判断实例下线的时间长度可能不尽相同

2、检测客观下线

当Sentinel判断某个主服务器主观下线之后,为了确认,会向同样监视该主服务器的Sentinel询问,当足够多的Sentinel都判断主服务器主观下线,该主服务器就会被Sentinel判断为客观下线,并进行故障转移。

2.1、发送Sentinel is-master-down-by-addr

Sentinel发送 SENTINEL is-master-down-by-addr <ip> <port> <current_epoch> <runid>询问其他Sentinel,该主服务器是否下线。

2.2、接受 is-master-down-by-addr

当目标Sentinel接收到源Sentinel发来的命令时,会根据ip和port判断对应主服务器是否下线,并回复<down_state>(1表示认为下线) <leader_runid> (*表示只是普通的回复,源Sentinel的运行ID,表示在该leader_epoch中,目标Sentinel把源Sentinel设为局部Leader)<leader_epoch>(当前纪元,用在选举Leader Sentinel)

2.3、接受回复

在sentinel启动时配置sentinel monitor master 127.0.0.1 6379 2 ; 表示2个sentinel主观认为主服务器下线,就可以表示该主服务器客观下线了,每个sentinel判断的条件可能不一致。

选举领头Sentinel

在一个配置纪元current_epoch里,每一个sentinel都有一次把某个sentinel置为局部领头sentinel的机会
-- 当一个sentinel A向另一个sentinel B发送is-master-down-by-addr命令时,B返回是A的runid,表明B已经把A选为当前纪元的局部Leader,并且拒绝其他设置请求
-- A会取出回复的runid和current_epoch和自己这边的参数进行比对,当一致时,则记录A已被B选为局部Leader,当A被半数以上的sentinel设为局部Leader,它就是Leader Sentinel。
-- 如果给定时间内,没有一个sentinel满足要求,则在一段时间之后继续选举,知道选出Leader Sentinel为止。

故障转移

从已下线的主服务器的从服务器选取一个作为主服务器;让其他的从服务器复制新的主服务器,把已下线的旧主服务器设置为新主服务器的从服务器,以便重新上线时作为从服务器服务。
1、向一个从服务器发送SLAVEOF no one命令,将这个从服务器转换为主服务器。挑选原则:首先删除处于断线状态和下线的从服务器;然后删除最近5秒内没有回复过Leader Sentinel的INFO命令的从服务器;最后删除和已下线服务器连接断开超过down-after-milliseconds*10时间的从服务器,这个可以保证剩下的从服务器数据都比较新。如果这时候还有多个从服务器,则挑选出复制偏移量最大的从服务器;如果还有多个从服务器,则挑选出runID最小的从服务器;
2、假设挑选出来的从服务器为A,已下线的旧的主服务器为D,则向剩余的D的从服务器B、C发送SLAVEOF A_ip A_port,把B、C指定为A的从服务器;
3、故障转移的最后就是把D设置为A的从服务器,因为D已经下线,所以在下线状态时,D内部的数据结构会记录主服务器A,待到D重新上线,Sentinel会向它发送SLAVEOF命令,使其复制A的数据。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容