前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >REDIS 哨兵 DOWN DOWN 灾难恢复方法记录

REDIS 哨兵 DOWN DOWN 灾难恢复方法记录

作者头像
AustinDatabases
发布2021-06-10 14:45:48
7630
发布2021-06-10 14:45:48
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

为什么最近文章都开始在写灾难恢复,主要是DB TEAM 的每个DB 要掌握主机DOWN机后的恢复, 目前单位的虚拟机不是太稳定, 这边会遇到各种状况的DOWN ,可能是1 台可能是2台 可能全挂.

目前我们REDIS 的结构是哨兵 + VIP 的方式, 通过REDIS 的哨兵配合VIP 脚本的方式.

主要我们测试的几种故障的情况

1 一个从库DOWN

2 2个从库DOWN

3 主库DOWN

4 一主一从DOWN

5 全部DOWN

实验的机器主要

10.50.132.163 设置为主

10.50.132.164

10.50.132.165

1 一个从库DOWN机的情况下,如果程序并未指定此库为只读库的情况下不会影响业务

我们确认三台机器都是 redis 服务和 sentinel 服务都是工作中的.并且 VIP 也在主库上进行了登记

我们随机关闭一个从库 目前选择 10.50.132.165

相关的sential 服务会在其他的两台机器上 10.50.132.163 和 10.50.132.164 发现相关的 165 关闭的sdown 信息

但从库DOWN 机并不会影响整体的业务运行(假设,业务不会访问从库)

我们只需要恢复从库,将redis 和 sentinel 服务拉起

redis-server /usr/local/redis/etc/6379.conf

redis-sentinel /usr/local/redis/etc/sentinel.conf

并且在主库上访问 redis-cli 并且查看 info replication 项目中的连接数据库的情况

也可以通过sentinal 里面的信息判断整个集群的从库数量 和 sentinal 的数量

2 两个从库DOWN

此时主库继续工作

并且我们并未从sentinal 的日志中获得变化的信息, 这与sentinal 使用的raft协议有关,raft 需要大多数节点进行投票,而此时2个节点同时失效,则导致剩余的sentinal 没有任何响应.数据库仍然提供数据库服务, 我们仅仅需要重新启动两个从库的REDIS 和 sentinal 服务即可.

在启动redis 从库后我们会从主库的sentinal中看到两个从库sentinal 在主库sentinal中的日志信息.

然后在去主库,中键入 info replication, 会观察到 redis 的两个从库的信息

在这样的情况下仅仅需要将两个从库的服务拉起来 ,sentinal服务拉起来即可.

应用在两个从库DOWN的情况下,业务不会被影响.

3 主库DOWN

在REDIS 主库DOWN 之后, 会应该发生以下事件

1 REDIS 哨兵中会在选举出一个新的主库, 从已有的从库中选出

2 REDIS 会将VIP 从原主库 迁移至 新的主库中

VIP 已经从10.50.132.163 迁移到10.50.132.165 的新的REDIS 主库中

在从库中键入info replication 会查到新的主的redis 的地址 10.50.132.165

然后我们从相关的 10.50.132.164 中的 sentinal 信息中

在新主的sentinal 中会发现信息

1 主库 10.50.132.163 sdown

2431:X 17 May 2021 11:48:39.561 # -sdown sentinel 8b30336470b96b234f98248114735fdec027afcf 10.50.132.164 26379 @ mymaster 10.50.132.163 6379

2431:X 17 May 2021 13:10:21.871 # +sdown sentinel b552d809f176eb0e8470c9783f50f2362be52792 10.50.132.163 26379 @ mymaster 10.50.132.163 6379

2431:X 17 May 2021 13:10:22.009 # +sdown master mymaster 10.50.132.163 6379

开始进行选举活动

2431:X 17 May 2021 13:10:22.123 # +new-epoch 1

开始进行投票,选举出新的REDIS 的sentinal 的 leader ,并开始进行新主的提升的工作

2431:X 17 May 2021 13:10:22.124 # +vote-for-leader 8b30336470b96b234f98248114735fdec027afcf 1

2431:X 17 May 2021 13:10:22.518 # +config-update-from sentinel 8b30336470b96b234f98248114735fdec027afcf 10.50.132.164 26379 @ mymaster 10.50.132.163 6379

开始进行切换,将原163 主库迁移到 165

2431:X 17 May 2021 13:10:22.518 # +switch-master mymaster 10.50.132.163 6379 10.50.132.165 6379

重新写入新的从库信息

2431:X 17 May 2021 13:10:22.519 * +slave slave 10.50.132.164:6379 10.50.132.164 6379 @ mymaster 10.50.132.165 6379

2431:X 17 May 2021 13:10:22.519 * +slave slave 10.50.132.163:6379 10.50.132.163 6379 @ mymaster 10.50.132.165 6379

然后在写入163 已经DOWN掉的信息

2431:X 17 May 2021 13:10:52.544 # +sdown slave 10.50.132.163:6379 10.50.132.163 6379 @ mymaster 10.50.132.165 6379

从另一个从库上看到的sentinal 的信息如下

从另一个从库中的sentinal 信息

接受到 163 DOWN

2363:X 17 May 2021 13:10:21.806 # +sdown sentinel b552d809f176eb0e8470c9783f50f2362be52792 10.50.132.163 26379 @ mymaster 10.50.132.163 6379

164 上的sentinal 发现并开始标注163 主观DOWN 客观 DOWN

2363:X 17 May 2021 13:10:22.072 # +sdown master mymaster 10.50.132.163 6379

获得 2票信息确认 163 已经DOWN机

2363:X 17 May 2021 13:10:22.134 # +odown master mymaster 10.50.132.163 6379 #quorum 2/2

剩下的工作主题是在这个SENTINAL进行的

2363:X 17 May 2021 13:10:22.134 # +new-epoch 1

开始进行主从的切换

2363:X 17 May 2021 13:10:22.134 # +try-failover master mymaster 10.50.132.163 6379

投票先出新的SENTINAL LEADER

2363:X 17 May 2021 13:10:22.136 # +vote-for-leader 8b30336470b96b234f98248114735fdec027afcf 1

2363:X 17 May 2021 13:10:22.139 # 56d6c01d3b27dff3552d63c0d211a77726e4c5a3 voted for 8b30336470b96b234f98248114735fdec027afcf 1

下面的过程为将 163 变为从库 ,然后提升165 为主库

2363:X 17 May 2021 13:10:22.191 # +elected-leader master mymaster 10.50.132.163 6379

2363:X 17 May 2021 13:10:22.191 # +failover-state-select-slave master mymaster 10.50.132.163 6379

2363:X 17 May 2021 13:10:22.243 # +selected-slave slave 10.50.132.165:6379 10.50.132.165 6379 @ mymaster 10.50.132.163 6379

2363:X 17 May 2021 13:10:22.244 * +failover-state-send-slaveof-noone slave 10.50.132.165:6379 10.50.132.165 6379 @ mymaster 10.50.132.163 6379

2363:X 17 May 2021 13:10:22.320 * +failover-state-wait-promotion slave 10.50.132.165:6379 10.50.132.165 6379 @ mymaster 10.50.132.163 6379

2363:X 17 May 2021 13:10:22.467 # +promoted-slave slave 10.50.132.165:6379 10.50.132.165 6379 @ mymaster 10.50.132.163 6379

2363:X 17 May 2021 13:10:22.467 # +failover-state-reconf-slaves master mymaster 10.50.132.163 6379

2363:X 17 May 2021 13:10:22.531 * +slave-reconf-sent slave 10.50.132.164:6379 10.50.132.164 6379 @ mymaster 10.50.132.163 6379

2363:X 17 May 2021 13:10:23.123 * +slave-reconf-inprog slave 10.50.132.164:6379 10.50.132.164 6379 @ mymaster 10.50.132.163 6379

2363:X 17 May 2021 13:10:23.123 * +slave-reconf-done slave 10.50.132.164:6379 10.50.132.164 6379 @ mymaster 10.50.132.163 6379

2363:X 17 May 2021 13:10:23.195 # +failover-end master mymaster 10.50.132.163 6379

2363:X 17 May 2021 13:10:23.195 # +switch-master mymaster 10.50.132.163 6379 10.50.132.165 6379

2363:X 17 May 2021 13:10:23.195 * +slave slave 10.50.132.164:6379 10.50.132.164 6379 @ mymaster 10.50.132.165 6379

2363:X 17 May 2021 13:10:23.195 * +slave slave 10.50.132.163:6379 10.50.132.163 6379 @ mymaster 10.50.132.165 6379

2363:X 17 May 2021 13:10:53.210 # +sdown slave 10.50.132.163:6379 10.50.132.163 6379 @ mymaster 10.50.132.165 6379

此时由于主库DOWN 机后整体业务不会受到影响, 但之前正在 163 工作的线程会报错,应用会报错.

现在我们开始恢复 163

redis-server /usr/local/redis/etc/6379.conf

redis-sentinel /usr/local/redis/etc/sentinel.conf

在执行如上命令后, 164 和 165 均发现了新加入的 163

登陆到新主165上确认 163

整体数据库redis sentinal 模式集群恢复完毕.

4 一主一从 DOWN

下面模拟一主一从down机, 将 主库 165 和 从库 164 关闭,

1 无法选出新的主, 并且IP 无法进行切换, 剩下的一台主机,作为从库运行

此时我们有两个可能性

1 两个机器立即可以启动并恢复

在两台机器恢复后,(先恢复原来为主的机器 10.50.132.165, 然后在恢复 10.50.132.164)

2 从10.50.132.163 上查看sentinal 日志信息

记录 165 sentinel Down 机

+sdown sentinel 56d6c01d3b27dff3552d63c0d211a77726e4c5a3 10.50.132.165 26379 @ mymaster 10.50.132.165 6379

11418:X 17 May 2021 13:45:00.000 # +sdown master mymaster 10.50.132.165 6379

11418:X 17 May 2021 13:45:02.009 # +sdown sentinel 8b30336470b96b234f98248114735fdec027afcf 10.50.132.164 26379 @ mymaster 10.50.132.165 6379

记录 10.50.132.164 Down机

11418:X 17 May 2021 13:45:02.145 # +sdown slave 10.50.132.164:6379 10.50.132.164 6379 @ mymaster 10.50.132.165 6379

记录 10.50.132.165 启动

11418:X 17 May 2021 13:57:44.277 * +reboot master mymaster 10.50.132.165 6379

11418:X 17 May 2021 13:57:44.332 # -sdown master mymaster 10.50.132.165 6379

11418:X 17 May 2021 13:57:45.359 # -sdown sentinel 56d6c01d3b27dff3552d63c0d211a77726e4c5a3 10.50.132.165 26379 @ mymaster 10.50.132.165 6379

记录 10.50.132.164 启动

11418:X 17 May 2021 13:57:48.360 * +reboot slave 10.50.132.164:6379 10.50.132.164 6379 @ mymaster 10.50.132.165 6379

11418:X 17 May 2021 13:57:48.421 # -sdown slave 10.50.132.164:6379 10.50.132.164 6379 @ mymaster 10.50.132.165 6379

11418:X 17 May 2021 13:57:48.422 # -sdown sentinel 8b30336470b96b234f98248114735fdec027afcf 10.50.132.164 26379 @ mymaster 10.50.132.165 6379

从10.50.132.163 查看复制信息, 此时 165还为 整体REDIS sentinel 的主库.

我们在添加 VIP 到 10.50.132.165 上后

sudo /sbin/ip addr add 10.50.132.126/24 dev ens192

整体集群恢复完毕

2 两台机器无法理解启动并恢复

继续关闭 10.50.132.165 和 10.50.132.164 ,然后163 机器上的sentinel 会发现主库DOWN

此时为了保证业务持续运行, 需要将复制解体, 将集群变为单库运行.

只需要在10.50.132.163 上执行 SLAVEOF NO ONE

在 10.50.132.163 上配置 VIP

sudo /sbin/ip addr add 10.50.132.126/24 dev ens192

业务恢复

5 三台机器均挂机

首先三台机器挂掉后,业务会中断, 在等待三台机器恢复后,.重建集群

如果仅仅恢复一台机器 ,或者两台机器,可以按照第四中情况中的第二个方法进行单机的恢复.

这里我们先确认 10.50.132.165 为新的主节点 并在其上执行SLAVEOF NO ONE 的命令. 将其先变为单机, 然后在 10.50.132.164 163 两台机器上修改

redis 配置文件中的replicaof 变更IP地址改为 replicaof 10.50.132.165 6379

启动服务,

redis-server /usr/local/redis/etc/6379.conf

redis-sentinel /usr/local/redis/etc/sentinel.conf

数据库集群就恢复了.

这里注意, 如果是突然断点则REDIS 不保证即时在集群状态下的信息是完整的,可能会根据相关设置丢失1-2秒的数据.

另注: 如果AOF 文件损坏的情况下 ,需要通过 redis-check-aof --fix 来修复AOF 文件,让REDIS 正常启动.

下面通过一个思维导图来将上面的知识总结

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

本文分享自 AustinDatabases 微信公众号,前往查看

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

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

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