linux系统-----Redis主从复制

发布于:2025-07-12 ⋅ 阅读:(16) ⋅ 点赞:(0)

目录

一、环境概述

二、Redis主从结构

2.1、一主一从结构

2.2、一主多从结构

2.3、树状主从结构

三、主从复制原理

3.1、复制流程

案例步骤

环境准备

下载redis

一主一从

主配置文件

从配置文件

主从复制测试

测试同步

一主多从

树状主从

原理:主------->从(主)----->从

从(slave)配置

测试验证

哨兵集群

哨兵配置

1、master端

2、slave1端

3、slave2端

4、验证


一、环境概述

在分布式集群系统中为了解决服务单点故障问题,通常会把数据复制出多个副本部署到不同的机器中,满足故障恢复和负载均衡等需求。Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis副本。复制功能是高可用Redis的基础Redis的哨兵和集群(Cluster)模式都是在主从复制模式的基础上实现的。复制也是Redis日常运维的常见维护点。因此深刻理解复制的工作原理与使用技巧对日常的运维非常有帮助。

二、Redis主从结构

2.1、一主一从结构

一主一从结构是Redis最简单的复制拓扑结构,用于主节点出现宕机时从节点来提供故障转移支持。当应用写命令并发量较高且需要持久化时,可以只在从节点上开启AOF,这样既保证数据安全性同时,也避免了持久化对主节点的性能压力。

2.2、一主多从结构

一主多从结构(又称为星型拓扑结构)使得应用端可以利用多个从节点实现读写分离方案。对于读占比较大的场景,可以把读命令发送到多个从节点来分担主节点压力。同时在日常开发中如果需要执行一些比较耗时的读命令,可以在其中一台从节点上执行,防止慢查询对主节点造成阻塞从而影响线上服务的稳定性。对于写并发量较高的场景,多个从节点会导致主节点写命令的多次发送从而过度消耗网络带宽,同时也加重了主节点的负载影响服务稳定性。

2.3、树状主从结构

树状结构(级联结构)使得从节点不但可以复制主节点数据,同时可以作为其他从节点的主节点继续向下层复制。通过引入中间复制层,可以有效降低主节点负载和需要传送给从节点的数据量。当主节点需要挂载多个从节点时为了避免对主节点的性能干扰,可以采用树状主从结构降低主节点压力。

三、主从复制原理

3.1、复制流程

在从节点执行slaveof命令后,复制过程便开始运作,大致分为6个过程:

  1. 保存主节点信息

执行slaveof命令后从节点只保存主节点的地址信息便直接返回,这时建立复制流程还没有开始,在从节点执行info replication命令可以看到主节点的相关信息,并在日志中记录复制启动信息。

        2.主从建立socket连接

从节点内部通过每秒运行的定时任务维护复制相关逻辑,当定时任务发现存在新的主节点后,会尝试与该节点建立网络连接。

从节点会建立一个socket套接字连接,专门用于接收主节点发送的复制命令。如果从节点无法建立连接,定时任务会无限重试,直到连接成功或者执行slaveof no one命令取消复制。

        3.发送ping命令

连接建立成功后,从节点发送ping请求进行首次通信,目的在于:

  • 检测主从之间网络套接字是否可用。

  • 检测主节点当前是否可接受处理命令。

如果发送ping命令后,从节点没有收到主节点回复pong或者超时未回复,从节点会断开复制连接,等待下次定时任务发起重连。

        4.权限验证

如果主节点设置了requirepass参数,则需要密码验证,从节点必须配置masterauth参数保证与主节点相同的密码才能通过验证。如果验证失败复制将终止,从节点重新发起复制流程。

        5.同步数据集

主从复制连接正常通信后,对于首次建立复制的场景,主节点会把所有的数据全部发送给从节点,这部分操作是耗时最长的步骤。在同步过程中会分为两种情况:全量同步和部分同步。

6命令持续复制

当主节点把当前的数据同步给从节点后,便完成了复制建立的流程。接下来主节点会持续地把写命令发送给从节点,保证数据的一致性。

案例步骤

  • 安装并配置master角色的redis服务;

  • 安装并配置slave角色的redis服务(双实例);

  • 配置master角色的文件;vim /etc/redis.conf

  • 配置slave角色的文件;vim  /etc/redis.conf

  • 验证主从复制功能; redis-cli -h  192.168.235.159     

环境准备

systemctl stop firewalld

setenforce 0

下载redis

一主一从

主配置文件

修改主配置文件: vim  /etc/redis.conf

bind IP 绑定主的IP

关闭保护模式,允许外部访问Redis服务器,如果是yes的话是需要访问密码

端口号是6379

注意:这个是确保安全的,打开这个之后下次登录需要密码(一般都注释)

例如:requirepass 123.com

如果设置了密码,那么从配置文件也需要master主的密码位置修改为主的密码

从配置文件

修改从配置文件: vim  /etc/redis.conf

绑定从的IP

关闭保护模式

这个位置就是主从复制的配置信息了

# replicaof <masterip> <masterport>

replicaof 192.168.235.160 6379

                        主的IP         主的端口号

如果主配置信息   requirepass foobarad   打开了并设置密码

那么从配置信息    masterauth <master-password>   设置主的密码

没有就默认注释

配置里的默认为只读(不用管)

登录主redis输入info进行查看

此时192.168.235.160为主(master)

192.168.235.159 是 192.168.235.160的从(slave)

登录从redis输入info进行查看

此时192.168.235.160为从(slave)

主从复制测试

主从重启 Redis 服务

登录reids数据库,查看存在的数据

切换从服务器,数据已经复制过来了

测试同步

一主多从

将192.168.235.153 作为192.18.235.160 的从

切换到192.18.235.153 

先下载  yum -y install redis

启用redis    systemctl start  redis

修改配置文件:  vim  /etc/redis.conf

查看监听

登录redis(slave)

redis-cli -h 192.168.235.153(slave)

主从复制已成功,数据已同步

输入info进行查看

切换到192.168.235.160(mastet)

登录redis查看

查看监听

树状主从

树状结构(级联结构)使得从节点不但可以复制主节点数据,同时可以作为其他从节点的主节点继续向下层复制。通过引入中间复制层,可以有效降低主节点负载和需要传送给从节点的数据量。当主节点需要挂载多个从节点时为了避免对主节点的性能干扰,可以采用树状主从结构降低主节点压力。

原理:主------->从(主)----->从

基于上述步骤

从(slave)配置

将192.168.235.153的主设置为192.168.235.159

重启redis

查看监听

已修改为将192.168.235.159作为192.168.235.153的主(master)

切换到192.168.235.159

登录redis

redis-cli -h 192.168.235.159

info

此时192.168.235.159 即是160的从(slave)也是153的主(master)

注意:159只是作为其他从节点的主节点继续向下层复制,只有读的权限。

树状主从结构目的是通过引入中间复制层,可以有效降低主节点负载和需要传送给从节点的数据量

测试验证

主(master)

192.168.235.160

从(slave)

192.168.235.153

哨兵集群

基于上述操作之后,现在把153的主改回为160

哨兵配置

基于OpenEuler

1、master端
[root@master ~]# vim /etc/redis-sentinel.conf    #修改哨兵配置

[root@master ~]# systemctl start redis-sentinel    #启用哨兵模式
[root@master ~]# netstat -anptu | grep redis        #查看监听状态

2、slave1端

(从)192.168.235.159

[root@slave1 ~]# vim /etc/redis-sentinel.conf  #修改哨兵配置

[root@slave1 ~]# systemctl start redis-sentinel    #启用哨兵模式
[root@slave1 ~]# netstat -anptu | grep redis    #查看redis服务监听状态

3、slave2端

(从)192.168.235.153

[root@slave ~]# vim /etc/redis-sentinel.conf  #修改哨兵配置

[root@slave ~]# systemctl start redis-sentinel    #启用哨兵模式
[root@slave ~]# netstat -anptu | grep redis        #查看redis监听状态

4、验证

master端

5、故障模拟

然后另外几台slave就会选举出一个新主(master)

哨兵集群下配置slave至少要三台机子

注意:slave与slave之间的IP不要相连


网站公告

今日签到

点亮在社区的每一天
去签到