小白学Redis系列:哨兵机制(上)

     Redis一般以一主多从的形式部署,以实现读写分离,减轻单个Redis实例的负载压力。今天我们来讨论下,在主数据库宕机停止服务的情况下,如何恢复主数据库,保持整个Redis系统的高可用性。


方式一:手工通过从数据库恢复主数据库

    手工通过从数据库恢复主数据是一个相对繁琐且危险的过程,操作不当可能导致整个Redis系统数据丢失。因此,手工操作时需要严格按照以下两步进行:

  1. 从备选从数据库中选择一个作为新的主数据库,即使用 "SLAVEOF NO ONE命令",将其升格为主数据。若存在多个从数据库,则将其他从数据库作为新的主数据库的从数据库,即使用"SLAVEOF  新主数据IP  新主数据PORT "命令。
  2. 启动旧的主数据,使用"SLAVEOF 新主数据库IP  新主数据PORT"命令将其作为新主数据库的从数据库。

     前文提到,手工恢复的过程伴随着一定的风险性,这里的风险指什么?

  在一主多从的Redis系统中,为了提高性能,一般会关闭主数据库的持久化功能,而开启从数据库的持久化功能。若使用Supervisor以及类似的进程管理工具使得主数据库崩溃后直接自动重启或直接手动重启,由于主数据库没有开启持久化功能(无RDB和AOF文件),重启后主数据中没有数据,而复制功能使得主数据库的数据向从数据库同步,从而可能导致从数据库的数据也被清空,这是个十分危险的行为。另外,人为介入也给系统恢复带来一定的风险。

    无论如何,手工恢复都是相对繁琐且不推荐的。好在Redis提供了一种自动化方案--哨兵来实现这一过程,避免了手工维护的麻烦和容易出错的问题。


方式二:自动化监控方案--哨兵

    什么是哨兵?哨兵就是一个独立的进程,其作用就是监控Redis系统的运行状况,它包含以下两个功能:

  1. 监控主从数据库是否运行正常
  2. 当主数据异常时,自动将从数据库升格为主数据库

我们通过一个简单的案例来探究哨兵机制的原理:

1、开启三个Redis服务器,端口号分别为6379、6380、6381,其中6379作为主数据库,其余两个作为从数据库。
2、分别执行INFO REPLICATION命令查看三种主从关系是否正确。
3、编写 哨兵配置文件,例如my_sentinel.conf,内容如下:
注意: 配置哨兵监控系统时,只需要配置监控主数据库即可, 哨兵会自动依据主数据库找到其他关联的从数据库。

4、执行命令 redis-sentinel /path/to/my_sentinel.conf,开启一个哨兵进程
5、分析哨兵进程启动后的输出信息:


+monitor : 表示发现了主数据库
+slave : 表示哨兵新发现了从数据库
6、这时,我们手动杀死主数据进程,继续查看输出信息
+sdown : 表示哨兵 主观认为主数据库停止服务了
+odown : 表示哨兵 客观认为主数据停止服务了
+try-failover : 表示开始进行故障修复;
+failover-end:表示完成故障修复。二者期间完成领头哨兵选举、备选从数据库选择等
+switch-master : 表示主数据从6379端口切换到了6380端口,即6380从数据库被升格为主数据库。后面两个 +slave列出了新的主数据库的从数据库。可以发现先前的主数据库6379虽然还没修复,但是哨兵将它作为新的主数据库的从数据库,以便当6379数据库重启后能够按照新的主从关系继续提供服务。

7、手动重启原主数据库,继续查看输出信息


-sdown : 表示6379数据库已经恢复服务(与+sdown相反)
+convert-to-slave : 表示将6379实例设置为6380端口实例的从数据库


至此,我们模拟了哨兵的一次完整工作流程,在下一章节中我们将继续讨论哨兵机制的原理。

Ending ...大笑

猜你喜欢

转载自blog.csdn.net/someonemh/article/details/80942804
今日推荐