Redis

关注公众号 jb51net

关闭
首页 > 数据库 > Redis > Redis 高可用

Redis超详细讲解高可用主从复制基础与哨兵模式方案

作者:静静子♡

Redis因为其高性能和易用性在我们后端的服务中发挥了巨大的作用,并且很多重要功能的实现都会依赖redis,本篇我们来了解Redis高可用主从复制与哨兵模式

高可用基础---主从复制

Redis的复制功能是支持将多个数据库之间进行数据同步,主数据库可以进行读写操作。当主数据库数据发生改变时会自动同步到从数据库,从数据库一般是只读的,会接收注数据库同步过来的数据。

一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库,默认情况下,每台服务器都是主节点,可以通过配置来设置Redis节点称为从数据库。

img

主从复制的原理

主从复制配置

默认情况下,每个节点都是主节点,只需要配置从节点。可以通过复制Redis.conf配置文件,修改主要信息,例如:端口号、pid名称、log文件名称、dump.rdb名称等,可以修改配置,配置就永久有效,也可以通过命令形式做处理。

命令:info replication:查看当前库信息

img

命令:slaveof ip port :在从服务器上执行名,给定主服务器的端口和IP

命令:Slave no one :可以让从节点恢复为主机

示例

启动三个Redis服务,给定端口6380、6381、6382。给定6380为主节点

1、创建Redis实例

nohup redis-server --port 6380 >> /usr/local/redis/data/log/6380.log 2>&1 &
nohup redis-server --port 6381 >> /usr/local/redis/data/log/6381.log 2>&1 &
nohup redis-server --port 6382 >> /usr/local/redis/data/log/6382.log 2>&1 &
 
[root@redis ~]# ps -ef |grep redis
root      16421  16314  0 03:01 pts/1    00:00:00 redis-server *:6380
root      16427  16314  0 03:01 pts/1    00:00:00 redis-server *:6381
root      16431  16314  0 03:01 pts/1    00:00:00 redis-server *:6382

2、连接数据库并设置主从复制

Gong-Dezhe-MBP:log gongdezhe$ redis-cli -p 6380
127.0.0.1:6380> 
​
Gong-Dezhe-MBP:~ gongdezhe$ redis-cli -p 6381
127.0.0.1:6381> slaveof 127.0.0.1 6380
OK
​
Gong-Dezhe-MBP:~ gongdezhe$ redis-cli -p 6382
127.0.0.1:6382> slaveof 127.0.0.1 6380
OK

主从配置完成后,主节点信息:

img

从节点信息:

img

数据同步测试:

img

img

高可用方案---哨兵模式sentinel

搭建好的主从复制方案可以达到数据同步目的,但是当主服务器宕机后,需要手动将一个从服务器切换为主服务器,这个过程需要人工干预,同时切换会导致Redis的写入功能不可用。需要一种能够自动完成master故障发现并能够将一个Slave切换为master,这个时候需要哨兵sentinel模式,哨兵模式可以自动切换主从节点。

哨兵模式简介

sentinel是官方提供的高可用方案,其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。同时 sentinel是一个分布式系统,可以在一个架构中运行多个Sentinel进程。所以监控同一个Master的Sentinel会自动连接,组成一个分布式的Sentinel网络,互相通信并交换彼此关于被监视服务器信息。

img

sentinel工作过程:

关于sentinel的三个定时任务:

哨兵工作原理

然而一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控,各个哨兵之间还会进行监控,这样就形成了多哨兵模式。

img

哨兵故障修复原理

1.主观下线:

当主服务器发生故障时,此时一个sentinel发现了故障,系统并不会马上进行failover过程(这个现象称为主观下线),它会向网络中的其他Sentinel进行确认。

2.客观下线:

接着其他Sentinel也陆续发现故障,这个时候其中一个Sentinel就会发起投票。一定数量的哨兵(在配置文件中指定)确认Master被标记为主观下线,此时将Master标记为客观下线。

3.sentinel的leader选举:

要想完成故障切换(将故障master剔除,并将一个slave提升为master)就必须先选举一个leader。最先发现故障的sentinel向其他哨兵发起请求成为leader,其他哨兵在没有同意别的哨兵的leader请求时,就会把票投给该sentinel。当半数以上的sentinel投票通过后就认定该sentinel为leader。接下来的故障切换有该leader完成。

4.master选举:

leader选好后将故障master剔除,从slave中挑选一个成为master。遵照的原则如下:

5.新Master再通过发布订阅模式通知所有sentinel更新监控主机信息。

6.故障的主服务器修复后将成为从服务器继续工作。

示例:故障发生时:

img

故障切换:

img

Master重新上线后:

img

sentinel.conf配置讲解

配置哨兵配置文件 sentinel.conf

#Sentinel monitor <name> <ip> <port> <quorum>

img

img

img

img

哨兵模式的优点

哨兵模式的缺点

到此这篇关于Redis超详细讲解高可用主从复制基础与哨兵模式方案的文章就介绍到这了,更多相关Redis 高可用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文