> 文档中心 > Redis主从复制与哨兵架构搭建

Redis主从复制与哨兵架构搭建


1. 主从复制

1.1 主从复制基本介绍

节点用来对外提供服务,从节点用来同步主节点的数据,主节点的数据发生变化时,从节点的数据会立即去同步,从节点并不对外提供服务,从节点仅仅用来对主节点进行数据备份。

主从复制仅仅用来解决数据的备份,并不能解决故障转移问题,从节点仅仅用来同步数据。什么叫故障转移呢,故障转移就是当主节点因为某些原因宕机时,从节点可以顶上去对外提供服务。

1.2 主从复制架构图

在这里插入图片描述

Master代表主节点,slave1、slave2代表从节点

1.3 搭建主从复制

接下来我们来搭建伪分布式,伪分布式就是在一台机器上起三个redis服务,分别把它们的端口改为 6379、6380、6381,以这三个端口去运行,然后让其中一个作为 master,然后让其他两个作为master的从节点,用来模拟在三台服务器上搭建主从复制(在三台服务器上搭建过程相似)

# 1.准备3台机器并修改配置分别创建三个文件夹,并且分别在里面复制默认的配置文件,修改端口号、开启远程连接对于从节点来说,还要设置其服务的主节点的ip地址以及其上的redis服务的端口号- master主节点port 6379bind 0.0.0.0开启远程连接权限-  slave1从节点1port 6380bind 0.0.0.0开启远程连接权限slaveof master的ip master的port- slave2从节点2port 6381bind 0.0.0.0开启远程连接权限slaveof master的ip master的port# 2.启动三台机器进行测试- cd /usr/redis/bin- ./redis-server /root/master/redis.conf- ./redis-server /root/slave1/redis.conf- ./redis-server /root/slave2/redis.conf这样redis的主从复制就搭建完成了

接下来我们来实际进行一下redis的主从复制搭建:

具体步骤

在根目录下创建 master、slave1、slave2 三个文件夹,并往其中分别放一个默认的配置文件,修改其中的端口在启动时分别使用其中的配置文件相当于启动了三个redis服务用来模拟主节点、从节点1、从节点2

在根目录下创建三个文件夹 master、slave1、slave2,并往其中分别放一个默认的配置文件

mkdir master slave1 slave2cp redis-4.0.10/redis.conf master/cp redis-4.0.10/redis.conf slave1/cp redis-4.0.10/redis.conf slave2/

修改主节点master的配置文件用于修改端口号6379以及开启远程连接

在这里插入图片描述

修改从节点1的配置文件以修改端口号6380、开启远程连接以及设置其服务的主节点的ip地址及其上的redis服务的端口号

在这里插入图片描述

在这里插入图片描述

修改从节点2的配置文件以修改端口号6381、开启远程连接以及设置其服务的主节点的ip地址及其上的redis服务的端口号

在这里插入图片描述

在这里插入图片描述

之后启动三个redis服务

在这里插入图片描述

这样主从复制就搭建完成了,之后测试即可

注意点

只要运行redis-server,如果当前目录有 dump.rdb,那么它会默认读取快照中的内容,和启动redis时的配置文件没有任何关系以及与redis服务的端口也没有任何关系

在这里插入图片描述

主从复制架构只能在主节点上写,从节点仅仅是来同步的,不能在从节点上写。

当然也可以调成可以在从节点上写,但是我们不建议这样改,

在这里插入图片描述

主从复制架构并不完美,主从复制架构仅仅只能完成主节点数据的备份,并不能完成故障的转移,也就是说当主节点因为某些原因宕机时从节点并不能顶上去。

如果用SpringBoot操作单机或者主从架构的话,配置文件像下面这样写就可以了

# 操作redis,如果是主从架构下面的写master皆就可以了,因为从机slave不对外通提供服务spring.redis.host=192.168.72.130spring.redis.port=7000spring.redis.database=0

2. 哨兵架构

2.1 哨兵Sentinel机制

Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。简单的说哨兵就是带有自动故障转移功能的主从架构

无法解决: 1.单节点并发压力问题 2.单节点内存和磁盘物理上限

注意:

  • 只有在主从架构的基础上才可以搭建哨兵架构
  • 哨兵架构是为了解决主从架构不能解决的故障转移问题,在 master 因为某些原因宕机的时候,可以让从机顶上去,成为新的master,如果旧的master之后由恢复了,则让其成为新的master的从机,当 master 宕机时,如果有多个从机,它们之间会”投票”选举谁成为新的master。
  • 建议多个哨兵,这样的话有多个哨兵组成的哨兵系统在只有半数以上的哨兵认为master宕机时才会去让从机选取新的master,不会因为网络延迟的原因造成 master 没有宕机而从机又选取了新的master而产生的多个master的问题。

2.2 哨兵架构原理

在这里插入图片描述

2.3 搭建哨兵架构

启动哨兵的时候要保证主从架构是可用的(并且开启的)# 1.在主节点上创建哨兵配置- 在Master同目录下(根目录下)创建一个sentinel文件夹,并在其中新建sentinel.conf文件,名字绝对不能错;# 2.配置哨兵,在sentinel.conf文件中填入内容:- sentinel monitor 被监控的主从架构的名字(自己起名字) ip port 1主节点的ip  主节点的端口 1代表有多少个哨兵认为宕机了然后才换master  # 3.启动哨兵模式进行测试- 进入 cd redis-4.0.10/src/ 将 redis-sentinel 文件复制到 /usr/redis/bin 下,之后进入其中启动- .redis-sentinel  /root/sentinel/sentinel.conf说明:这个后面的数字2,是指当有两个及以上的sentinel服务检测到master宕机,才会去执行主从切换的功能。

接下来我们来实际搭建一下

具体步骤

在根目录下创建sentinel文件夹,并在其中新建sentinel.conf文件(名字绝对不能出错)

在这里插入图片描述

设置哨兵的配置文件

因为一个哨兵可能管理多个主从架构,所以要给其管理的主从架构起一个名字

在这里插入图片描述

进入redis源码目录复制启动哨兵的脚本到 /usr/redis/bin 下

在这里插入图片描述

启动哨兵

启动哨兵的时候要保证主从架构是可用的(并且开启的)

在这里插入图片描述

好了,就这样,哨兵架构就搭建完成了。

另外:

如果想要在一台机器上启动多个哨兵,就需要新建新的哨兵配置文件,在里面修改端口,然后指定配置文启动,这样就可以启动多个哨兵了,

port 26379sentinel monitor 主从架构名字 主从架构的master的ip  主从架构的master的端口 哨兵系统哨兵数量

补充

哨兵架构无法解决单节点的并发压力问题以及单节点内存和磁盘物理上限

  • 单节点并发压力问题
  • 单节点内存和磁盘物理上限

要解决这两个问题就需要用到redis的集群了。

2.4 通过springboot操作哨兵

默认哨兵是不允许远程访问的,所以为了让我们的程序连接到哨兵,我们需要在哨兵的配置文件中开启远程连接

在这里插入图片描述

之后修改SpringBoot的配置文件application.properties中的redis配置

# redis sentinel 配置# master书写是使用哨兵监听的那个主从架构的名称spring.redis.sentinel.master=mymaster# 我们不确定master是谁,但是哨兵清除,写哨兵系统中的每个哨兵,形式为ip:端口,多个哨兵结点之间用逗号隔开spring.redis.sentinel.nodes=192.168.72.130:26379