Redis | Redis高可用---主从复制、哨兵模式

x33g5p2x  于2021-12-06 转载在 Redis  
字(2.9k)|赞(0)|评价(0)|浏览(404)

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

主从复制的原理

主从复制配置

示例

1、创建Redis实例

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

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

哨兵模式简介

哨兵工作原理

哨兵故障修复原理

sentinel.conf配置讲解

哨兵模式的优点

哨兵模式的缺点

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

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

主从复制的原理

  1. 当启动一个从节点时,它会发送一个 PSYNC 命令(分为全量复制和部分复制)给主节点;
  2. 如果是从节点初次连接到主节点,那么会触发一次全量复制。此时主节点会启动一个后台线程,开始生成一份 RDB 快照文件;
  3. 同时还会将从客户端 client 新收到的所有写命令缓存在内存中。RDB 文件生成完毕后, 主节点会将RDB文件发送给从节点,从节点会先将RDB文件写入本地磁盘,然后再从本地磁盘加载到内存中
  4. 接着主节点会将内存中缓存的写命令发送到从节点,从节点同步这些数据;
  5. 如果从节点跟主节点之间网络出现故障,连接断开了,会自动重连,连接之后主节点仅会将部分缺失的数据同步给从节点。

主从复制配置

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

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

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

示例

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

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

从节点信息:

数据同步测试:

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

哨兵模式简介

sentinel工作过程:

  • 通过向主服务器和从服务器发送ping命令,让服务器返回运行状态。
  • 当哨兵监测到master宕机,会自动将一个slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

关于sentinel的三个定时任务:

  • 每1秒每个sentinel对其他sentinel和redis节点执行ping操作,心跳检测。
  • 每10秒每个sentinel会对master和slave执行info命令,目的是发现slave结点,确定主从关系。
  • 每2秒每个sentinel通过master节点的channel交换信息(pub/sub)。master节点上有一个发布订阅的频道(sentinel:hello)。sentinel节点通过sentinel:hello频道进行信息交换(对节点的"看法"和自身的信息),达成共识。

哨兵工作原理

  • 每个Sentinel以每秒钟一次的频率向它所知道的Master,Slave以及其他 Sentinel实例发送一个 PING命令。

  • 如果一个实例距离最后一次有效回复 PING 命令的时间超过指定值, 则这个实例会被 Sentine 标记为主观下线。

  • 如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel要以每秒一次的频率确认Master是否真正进入主观下线状态。

  • 当有足够数量的 Sentinel(大于等于配置文件指定值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线 。若没有足够数量的 Sentinel同意 Master 已经下线, Master 的客观下线状态就会被解除。若 Master重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。

  • 哨兵节点会选举出哨兵 leader,负责故障转移的工作。

  • 哨兵 leader 会推选出某个表现良好的从节点成为新的主节点,然后通知其他从节点更新主节点信息。

哨兵故障修复原理

1.主观下线:

2.客观下线:

3.sentinel的leader选举:

4.master选举:

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

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

示例:故障发生时:

故障切换:

Master重新上线后:

sentinel.conf配置讲解

配置哨兵配置文件 sentinel.conf

  • **name :**redis主服务名称,可以自行命名,但是在一个sentinel网络中,一个redis主服务只能有一个名称;
  • **ip和port :**redis主服务的IP地址和端口号.
  • **quorum :**表示要将这个主服务器判断为失效并下线至少需要2个sentinel同意
  • **protected-mode :**关闭保护模式(默认情况下,redis node和sentinel的protected-mode都是yes,在搭建集群时,若想从远程连接redis集群,需要将redis node和sentinel的protected-mode修改为no,若只修改redis node,从远程连接sentinel后,依然是无法正常使用的,且sentinel的配置文件中没有protected-mode配置项,需要手工添加。依据redis文档的说明,若protected-mode设置为no后,需要增加密码证或是IP限制等保护机制,否则是极度危险的。)

哨兵模式的优点

  • 哨兵集群、基于主从复制模式,所有的主从复制优点,它会有
  • 主从可以切换,故障可以转移,系统的可用性会更好
  • 哨兵模式就是主从模式的升级,手动转自动,更加健壮

哨兵模式的缺点

  • Redis不好在线扩展,集群容量一旦到达上限,在线扩容十分麻烦
  • 实现哨兵模式的配置很麻烦,里面有很多选择

相关文章