专栏首页码农编程进阶笔记Redis中主、从库宕机如何恢复?

Redis中主、从库宕机如何恢复?

1、什么是哨兵

哨兵是对Redis的系统的运行情况的监控,它是一个独立进程,功能有二个:

  • 监控主数据库和从数据库是否运行正常;
  • 主数据出现故障后自动将从数据库转化为主数据库;

2、原理

单个哨兵的架构:

多个哨兵的架构:

多个哨兵,不仅同时监控主从数据库,而且哨兵之间互为监控。

多个哨兵,防止哨兵单点故障。

3、环境

当前处于一主多从的环境中:

4、设置哨兵

启动哨兵进程首先需要创建哨兵配置文件:

vim sentinel.conf

输入内容:

sentinel monitor taotaoMaster 127.0.0.1 6379 1

说明:

  • taotaoMaster:监控主数据的名称,自定义即可,可以使用大小写字母和“.-_”符号
  • 127.0.0.1:监控的主数据库的IP
  • 6379:监控的主数据库的端口
  • 1:最低通过票数

启动哨兵进程:

redis-sentinel ./sentinel.conf

由上图可以看到:

  • 哨兵已经启动,它的id为9059917216012421e8e89a4aa02f15b75346d2b7
  • 为master数据库添加了一个监控
  • 发现了2个slave(由此可以看出,哨兵无需配置slave,只需要指定master,哨兵会自动发现slave)

5、从宕机及恢复

kill掉2826进程后,30秒后哨兵的控制台输出:

2989:X 05 Jun 20:09:33.509 # +sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379

说明已经监控到slave宕机了,那么,如果我们将3380端口的redis实例启动后,会自动加入到主从复制吗?

2989:X 05 Jun 20:13:22.716 * +reboot slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379

2989:X 05 Jun 20:13:22.788 # -sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379

可以看出,slave从新加入到了主从复制中。-sdown:说明是恢复服务。

6、主宕机及恢复

哨兵控制台打印出如下信息:

2989:X 05 Jun 20:16:50.300 # +sdown master taotaoMaster 127.0.0.1 6379  说明master服务已经宕机

2989:X 05 Jun 20:16:50.300 # +odown master taotaoMaster 127.0.0.1 6379 #quorum 1/1 

2989:X 05 Jun 20:16:50.300 # +new-epoch 1

2989:X 05 Jun 20:16:50.300 # +try-failover master taotaoMaster 127.0.0.1 6379  开始恢复故障

2989:X 05 Jun 20:16:50.304 # +vote-for-leader 9059917216012421e8e89a4aa02f15b75346d2b7 1  投票选举哨兵leader,现在就一个哨兵所以leader就自己

2989:X 05 Jun 20:16:50.304 # +elected-leader master taotaoMaster 127.0.0.1 6379  选中leader

2989:X 05 Jun 20:16:50.304 # +failover-state-select-slave master taotaoMaster 127.0.0.1 6379 选中其中的一个slave当做master

2989:X 05 Jun 20:16:50.357 # +selected-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ taotaoMaster 127.0.0.1 6379  选中6381

2989:X 05 Jun 20:16:50.357 * +failover-state-send-slaveof-noone slave 127.0.0.1:6381 127.0.0.1 6381 @ taotaoMaster 127.0.0.1 6379  发送slaveof no one命令

2989:X 05 Jun 20:16:50.420 * +failover-state-wait-promotion slave 127.0.0.1:6381 127.0.0.1 6381 @ taotaoMaster 127.0.0.1 6379   等待升级master

2989:X 05 Jun 20:16:50.515 # +promoted-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ taotaoMaster 127.0.0.1 6379  升级6381为master

2989:X 05 Jun 20:16:50.515 # +failover-state-reconf-slaves master taotaoMaster 127.0.0.1 6379

2989:X 05 Jun 20:16:50.566 * +slave-reconf-sent slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379

2989:X 05 Jun 20:16:51.333 * +slave-reconf-inprog slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379

2989:X 05 Jun 20:16:52.382 * +slave-reconf-done slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379

2989:X 05 Jun 20:16:52.438 # +failover-end master taotaoMaster 127.0.0.1 6379 故障恢复完成

2989:X 05 Jun 20:16:52.438 # +switch-master taotaoMaster 127.0.0.1 6379 127.0.0.1 6381  主数据库从6379转变为6381

2989:X 05 Jun 20:16:52.438 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6381  添加6380为6381的从库

2989:X 05 Jun 20:16:52.438 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ taotaoMaster 127.0.0.1 6381  添加6379为6381的从库

2989:X 05 Jun 20:17:22.463 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ taotaoMaster 127.0.0.1 6381 发现6379已经宕机,等待6379的恢复

可以看出,目前,6381位master,拥有一个slave为6380.

接下来,我们恢复6379查看状态:

2989:X 05 Jun 20:35:32.172 # -sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ taotaoMaster 127.0.0.1 6381  6379已经恢复服务

2989:X 05 Jun 20:35:42.137 * +convert-to-slave slave 127.0.0.1:6379 127.0.0.1 6379 @ taotaoMaster 127.0.0.1 6381  将6379设置为6381的slave

7、配置多个哨兵

vim sentinel.conf

输入内容:

sentinel monitor taotaoMaster1 127.0.0.1 6381 1

sentinel monitor taotaoMaster2 127.0.0.1 6381 2

blog.csdn.net/py_tamir/article/details/82555338

本文分享自微信公众号 - 码农编程进阶笔记(lxw1844912514)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-08-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 宕机后,Redis如何实现快速恢复?

    对 Redis 来说,它实现类似照片记录效果的方式,就是把某一时刻的状态以文件的形式写到磁盘上,也就是快照。这样一来,即使宕机,快照文件也不会丢失,数据的可靠性...

    码农架构
  • 宕机后,Redis如何实现快速恢复?

    来自 | kaito-kidd.com/2020/07/02/redis-sentinel/

    7089bAt@PowerLi
  • 《叶问》34期,延迟从库加上MASTER_DELAY,主库宕机后如何快速恢复服务

    TA想问:在这样的场景下,还有办法让B库尽快跑完这7200秒延迟数据吗,或者正确的办法是什么呢?

    老叶茶馆
  • Redis 日志篇:无畏宕机快速恢复的杀手锏

    我们通常将 Redis 作为缓存使用,提高读取响应性能,一旦 Redis 宕机,内存中的数据全部丢失,假如现在直接访问数据库大量流量打到 MySQL 可能会带来...

    Bug开发工程师
  • Redis 日志篇:无畏宕机快速恢复的杀手锏

    我们通常将 Redis 作为缓存使用,提高读取响应性能,一旦 Redis 宕机,内存中的数据全部丢失,假如现在直接访问数据库大量流量打到 MySQL 可能会带来...

    喜欢天文的pony站长
  • redis主从,哨兵回忆手册

      Slave Server同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据(注意初次同步则会阻塞)。

    intsmaze-刘洋
  • ASP.NET Core分布式缓存Redis主从Sentinel哨兵模式实战演练

    一主(master)二从(slave)三哨兵(sentinel)的配置目标, 如下

    跟着阿笨一起玩NET
  • Redis 参数 cluster-require-full-coverage

    有个问题,Redis Cluster 集群三主三从结构,如果一台 down 机, 数据还可以不可以写入?

    王小明_HIT
  • 【Redis】Redis两种持久化RDB和AOF的区别

    Redis持久化备份数据的方式有两种:RDB(Redis DataBase) 、 AOF(Append Only File).

    瑞新
  • 小伙用 12 张图讲明白了 Redis 持久化!

    很多小伙伴都用 Redis 做缓存,那如果 Redis 服务器宕机,内存中数据全部丢失,应该如何做数据恢复呢?有人说很简单呀,直接从 MySQL 数据库再读回来...

    一个优秀的废人
  • Redis 高可用篇:你管这叫主从架构数据同步原理?

    在《Redis 核心篇:唯快不破的秘密》中,「码哥」揭秘了 Redis 五大数据类型底层的数据结构、IO 模型、线程模型、渐进式 rehash 掌握了 Redi...

    码哥字节
  • redis学习(二十二)

    通过持久化功能,Redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据。 但是由于数...

    崔笑颜
  • 案例:Redis命令不当 引起数据库雪崩 造成数百万损失

    最近的互联网线上事故发生比较频繁,9月19日网上爆料出顺丰近期发生了一起线上删库事件,在这里就不介绍了。

    Debian中国
  • redis学习笔记(二)AOF日志

    对于正常的redis使用,如果redis中存放了很重要的数据,并且一旦redis数据丢失的情况下,就需要重新恢复数据。一般情况最容易解决的方法是:从数据...

    虞大大
  • Redis 关键知识

    Redis 作为一个网络存储服务,需要独立部署,业务侧通过网络访问,这样业务服务和数据存储可以解耦。Redis是一个单线程的网络IO模型,如何做到高性能呢? 后...

    Check King
  • Java面试:2021.05.30

    1、什么是悲观锁?什么是乐观锁? 1)悲观锁 它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在 整个数据...

    夕梦
  • Redis居然还有比RDB和AOF更强大的持久化方式?

    Redis中的数据存在内存中,如果突然宕机,那么内存中的数据将全部丢失。如果数据能从后端数据库恢复还好,如果数据只存在Redis中,那数据就全丢失了。并且如果请...

    Java识堂
  • Redis宕机 快速恢复

    说明已经监控到slave宕机了,那么,如果我们将3380端口的redis实例启动后,会自动加入到主从复制吗?

    FHAdmin
  • Redis 数据持久化?-----意外宕机如何避免数据丢失

    我们在实际应用生产中,大部分公司会把 Redis 当做缓存使用,用它来把后端数据库中的数据存储在内存中,然后直接从内存中直接读取数据,这样会使这个程序响应速度变...

    张琳兮

扫码关注云+社区

领取腾讯云代金券