资讯专栏INFORMATION COLUMN

Redis Sentinel

mengera88 / 368人阅读

摘要:架构故障转移的步骤多个发现却确认有问题选举出一个作为领导选出一个作为通知其余的成为新的的通知客户端主从变化等待老的复活成为新的的的安装和配置在这此前提是你现在当前的集群已经实现了的主从复制,要不无法实现以下的功能,如果还没有配置的可以找找我

Redis Sentinel 架构

redis sentinel故障转移的步骤

多个sentinel发现却确认master有问题

选举出一个sentinel作为领导

选出一个slave作为master

通知其余的slave成为新的master的slave

通知客户端主从变化

等待老的master复活成为新的master的slave

redis sentinel的安装和配置

在这此前提是你现在当前的集群已经实现了redis的主从复制,要不无法实现以下的功能,如果还没有配置的可以找找我之前写的文章

redis sentinel的配置

mymaster是我所监控的主节点的名字

port ${port}
daemonize yes
dir "XXX"#工作的目录
logfile "${port}.log"#因为有多个sentinel所以习惯性用端口来命令,容易区分日志
sentinel monitor mymaster 127.0.0.1 7000 2#表示有2台sentinel认为这个主节点有问题了,就会开始对它进行下限
sentinel down-after-milliseconds mymaster 30000#sentinel用于检测主节点是否还能连通,可以想象就是ping了之后30000毫秒不通就认为是断开
sentinel parallel-syncs mymaster 1#当主节点发生变化的时候,其余的从节点是如何复制主节点的数据,1是一个个来复制,0是同时进行复制,一个个来会减少主库的压力
sentinel failover-timeout mymaster 1800000#故障转移的时间

在我们的redis(我使用的是redis-4)中会已经有sentinel的模版,可以在通过这个模版进行一些修改配置

cat sentinel.conf |grep -v "#"|grep -v "^$"#可以去除空格和注释,这样便于修改

修改完成之后可以启动

./redis-sentinel ../config/redis-sentinel-26382.cnf(配置文件目录)#和启动redis-server是一样的

启动完之后,因为sentinel是特殊的redis,可以通过正常的方式启动,例如

redis-cli -p 26382

之后在执行info命令可以看出,sentinel已经知道这个集群的架构,有多少个从库

这是我们回过头去看,会发现配置已经发生了变化

然后我们可以按照自己的需求配置多个sentinel,并启动

在我配置的过程中,因为我是在一台服务器上进行,所以只是端口的差异,这样我们可以用一些命令去偷懒,哈哈

sed "s/26382/26384/g" redis-sentinel-26382.cnf > redis-sentinel-26384.cnf #这样就可以把redis-sentinel-26382.cnf的26382全部改为26384

具体的命令详情,自己去查询以下哈,因为不是我学习的重点,所以就没写了

我自己在测试的时候,我是启动了三个sentinel,把他们都配置完成并启动之后,执行info命令会发现

他们也互相得感知到了,检测到了当前集群有3个sentinel在管理中

三个定时任务

是为了让每个sentinel和redis节点保持连接,出现问题后可以准确地快速切换

1.每10秒每个sentinel对master和slave执行info

发现slave节点

确认主从关系

2.每2秒每个sentinel通过master节点的channel交换信息(pub/sub,即发布订阅)

通过master的内部频道(_sentinel_:hello)进行交互

交互对节点的“看法”和自身的信息

当有新的sentinel节点加入进来也会自动地加入该频道和其他的sentinel节点进行通信

3.每1秒每个sentinel对其他的sentinel和redis执行ping

故障检查

心跳检测,失败判定依据

主观下线和客观下线

当监控正在master的sentinel发现master出现问题了,就采取下线操作。
面前我们有提到两个配置

sentinel monitor mymaster 127.0.0.1 7000 2(quorum)
sentinel down-after-milliseconds mymaster 30000

主观下线:是单个sentinel节点对redis节点失败的“偏见”
客观下线:所有的sentinel节点对redis节点失败“达成共识”(quorum,可以自行根据需要配置)

如何认为master失败呢?
sentinel节点ping超过了第二条配置中设置的时间之后没有回应就认为是失败

当一个sentinel发现了问题,就会向其他的sentinel节点内部会发送sentinel is_master_down_by_addr去“咨询”其他sentinel的意见

领导者选举

在集群中,虽然有多个sentinel进行监控,但是只有一个sentinel节点完成故障转移

当一个节点发现问题之后会向其他的sentinel节点发送sentinel is_master_down_by_addr“咨询”其他sentinel的意见,同时也“发表”了要求将它设置为领导者

收到命令的sentinel节点如果没有同意通过其他的sentinel节点发送的命令,那么将同意该请求,否则拒绝

如果该sentinel节点发现自己的票数已经超过sentinel集合半数且超过(quorum),那么它将成为领导者

如果此过程有多个sentinel节点成为了领导者,那么将等待一段时间重新进行选举

故障转移(sentinel 领导者节点完成)

从slave节点中选出一个“合适的”节点作为新的master节点

对上面的slave节点执行slave no one命令让其成为master节点

向剩余的slave节点发送命令,让他们成为新的master节点的slave节点,复制的规则和parallvel_syncs参数有关;sentinel parallel-syncs mymaster 1#当主节点发生变化的时候,其余的从节点是如何复制主节点的数据,1是一个个来复制,0是同时进行复制,一个个来会减少主库的压力`

将更新对原来的master节点配置为slave,并保持对其的“关注”,当其恢复后命令它去复制新的master节点

如何选举“合适的”slave节点

选择slave_priority(slave节点的优先级)最高的slave节点,如果存在即返回,不存在则继续

选择复制偏移量最大的slave节点(复制得最完整),如果存在即返回,不存在则继续

选择runid最小的slave节点

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/36764.html

相关文章

  • RedisRedis Sentinel

    摘要:提醒当被监控的某个服务器出现问题时,可以通过向管理员或者其他应用程序发送通知。一个监视给定主服务器的新已经被识别并添加。当前的纪元已经被更新。赢得指定纪元的选举,可以进行故障迁移操作了。 IP:192.168.225.128、192.168.225.129环境:centos7版本:redis-3.2.10 一、Redis sentinel Redis 的 Sentinel 系统用于管理...

    z2xy 评论0 收藏0
  • Redis Sentinel机制与用法(一)

    摘要:一段时候后死了,有一个被授权用版本号对其进行。这意味着集群保证了第二种活跃性一个能够互相通信的集群最终会采用版本号最高且相同的配置。 本专栏与Redis相关的文章 Redis Sentinel机制与用法(一)Redis Sentinel机制与用法(二)Jedis的JedisSentinelPool源代码分析Jedis的Sharded源代码分析Redis 主从 Replication 的...

    gotham 评论0 收藏0
  • Redis Sentinel实现高可用配置

    摘要:为了真正的标记为失败,并最终是否需要启动一个故障转移进程。无论怎样,只用于检测故障。为了实际执行故障转移,需要选举并进行授权。这只发生在大多数进程的选举。 一般情况下yum安装redis的启动目录在:/usr/sbin ;配置目录在/etc/redis/在其目录下会有默认的redis.conf和redis-sentinel.conf redis高可用配置:配置哨兵(redis-sen...

    wuyumin 评论0 收藏0
  • redis学习笔记(六)--哨兵Sentinel

    摘要:基本知识是的高可用性解决方案。启动可以看到搭建成功了。运维相关节点运维因为某些原因可能要对某一节点进行下线。只要在任意上执行即可例如如果想要对某一节点上线,直接让某一执行后,会自动进行发现。 基本知识 Sentinel是Redis的高可用性解决方案。一个或多个Sentinel组成的Sentinel系统可以监控任意多个主服务器从而实现高可用的需求。例如:showImg(https://s...

    shevy 评论0 收藏0
  • 基于腾讯云CVM自建高可用Redis实践

    摘要:环境说明需求与目标本文将通过对目前主流的几种高可用方案进行对比分析,并基于腾讯云和等基础产品进行搭建配置测试总结。 本文来源 | 云+社区专栏文章作者 | 万守兵,腾讯云资深架构师。8年以上大型互联网公司运维工作经验,腾讯云资深迁云架构师,一直从事大型互联网服务端架构设计和优化工作。个人专注于云计算、k8s和 DevOps领域。 导读:在企业实际生产环境中为了能够给业务上层应用提供高...

    DataPipeline 评论0 收藏0

发表评论

0条评论

mengera88

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<