前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis开发与运维学习笔记---(18)

Redis开发与运维学习笔记---(18)

作者头像
AsiaYe
发布2020-04-30 17:09:37
4110
发布2020-04-30 17:09:37
举报
文章被收录于专栏:DBA随笔

//

Redis开发与运维学习笔记---(18)

//

Redis Sentinel实现原理---(二)

前面的文章讲述了redis sentinel实现原理当中的定时任务、主观下线和客观下线,今天我们来看sentinel领导者选举以及故障转移部分。

sentinel领导者选举

当sentinel节点对于主节点做了客观下线之后,紧接着是选取一位sentinel的领导者,然后这个领导者来完成故障转移工作,注意,这里不需要所有的sentinel都参与故障转移

Redis sentinel进行选举的过程是使用的raft算法,该算法大家可以搜一些专门的文章去了解,这里仅提供简化版的内容,大致思路如下:

1、每隔在线的sentinel节点都有资格成为领导者,当它确认主节点主观下线的时候(也就是他自己访问不了主节点的时候),会向其他其他sentinel节点发送sentinel is-master-down-by-addr的命令,要求让自己设置成为领导者。感觉有点一厢情愿。

2、收到命令的sentinel节点,如果没有同意过其他sentinel节点的sentinel is-master-down-by-addr命令,将同意该请求,否则的话,拒绝之

3、如果该sentinel节点发现自己的票数已经大于等于max[quorum,num(sentinel)/2+1],那么它将成为领导者。

4、如果此过程没有选举出领导者,将进入下一次选举。

从上面的例子,不难看出,最先完成了客观下线(超过<quorum>个sentinel节点对它反馈)的sentinel在选举中会占优,因为它能拿到最多的票数。

故障转移

领导者选举处的sentinel节点负责故障转移,具体步骤如下:

1、在所有的从节点中,选出一个节点作为新的主节点,选择方法如下:

a、过滤"不健康"(断线、主观下线)、5s内未回复ping响应、与主节点失联超过down-after-milliseconds*10s的从节点

b、选择slave-priority最高的从节点列表,如果存在则返回,如果不存在,则继续

c、选择复制偏移量最大的从节点,如果存在则返回,不存在则继续

d、选择runid最小的节点

2、sentinel领导者节点会对第一步选出来的从节点执行slaveof no one命令,让其成为主节点

3、sentinel领导者节点会向剩余的从节点发送命令,让他们成为新主节点的从节点,复制规则和parallel-syncs参数有关

4、sentinel节点集合会将原来的主节点更新为从节点,并保持着对其关注,当其恢复后,命令它去复制新的主节点

sentinel节点运维

节点下线

sentinel节点下线,一般分为临时下线和永久下线,临时下线是指暂时将sentinel节点关闭掉,之后还会重新启动,继续提供服务。永久下线是指将节点关掉后不再使用,需要做一些清理工作,如删除配置文件,持久化文件,日志文件等。

主节点下线方法:

如果需要对主节点进行下线,比较合理的做法是选出一个“更好”的从节点,一般是配置更高的从节点,使用sentinel failover功能将从节点晋升为主节点,注意,此时应该提前将该从节点的slave priority值调高,保证failover之后,它会被提升为主节点。sentinel failover执行命令如下:

sentinel failover master-name

从节点下线方法:

如果需要对从节点或者sentinel节点进行下线,只需要确定好是临时下线还是永久下线,并执行对应的操作即可。如果使用了读写分离,下线从节点需要保证应用方可以感知从节点的下线变化,并把读取请求转移到其他从节点上。

当然,sentinel还是会对这些从节点进行监控。

节点上线

1、添加从节点

添加从节点的场景大致有如下几种,

a、使用了读写分离,但是现有的从节点无法支撑应用方的流量

b、主节点没有可用的从节点,无法支持故障转移

c、添加一个更强悍的从节点利用手动failover替换主节点

添加方法:slaveof master_ip master_port

2、添加sentinel节点

添加sentinel节点的场景有如下几种,

a、当前sentinel节点数量不够,无法达到redis sentinel健壮性要求或者无法达到票数

b、原来的sentinel节点需要下线

添加方法:添加sentinel monitor主节点的配置,使用redis-sentinel启动即可,他将会被自动发现

3、添加主节点

redis sentinel中只有一个主节点,所以一般是需要通过手动failover来进行故障转移,从而产生新的主节点。

节点配置

redis sentinel节点的配置尽可能一致,这样在判断节点故障时会更加准确;redis sentinel节点支持的命令十分有限,不过所幸sentinel节点不存储数据,如果需要修改配置,重新启动即可,但是往往配置修改是所有sentinel节点都要修改,全部重启比较麻烦,所以尽量在一开始就规划好。

redis sentinel高可用读写分离

redis中,从节点一般是作为主节点的后备力量,当主节点出现故障之后,顶替主节点的位置的。如果我们要考虑读写分离的场景,那么从节点的高可用也要得到保证,因为从节点挂掉之后,redis sentinel并不会进行故障转移。

所以,在设计redis sentinel的高可用读写分离时,如果有多个从节点,需要将从节点的列表提供给业务方,让业务方轮询的从从节点的列表中获取能用的从节点,切不可一个业务对应一个从节点,这样极易出现读服务不可用现象。

错误的做法:

正确的做法:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档