一、项目概述
1.1 业务场景说明
主从复制(Master‑Slave),把主节点 (Master) 内存数据同步到从节点 (Slave),实现数据备份;读写分离,写请求交给主库,查询请求分发到从库分担压力;为主从切换、哨兵模式、Redis‑Cluster 集群打下基础。主库可以拥有多个从库,从库默认只读。
1.2 环境参数
项目
参数
操作系统
CentOS Linux release 7.9‑2009
Redis 版本
redis‑5.0.10
主节点
192.168.1.10:6379 master
从节点 1
192.168.1.10:6380 slave1
从节点 2
192.168.1.10:6381 slave2
安全策略
关闭 firewalld、SELinux
主库密码
Admin@123456
二、前期环境准备
2.1 关闭安全策略
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i ‘s/^SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config
2.2 主节点配置文件(6379)
port 6379
bind 0.0.0.0
daemonize yes
pidfile /var/run/redis_6379.pid
requirepass Admin@123456
dir /usr/local/redis/data
#开启RDB持久化
save 60 10
启动主服务:
redis-server /usr/local/redis/conf/redis-6379.conf
2.3 从节点配置两种方式
方式一:修改配置文件永久生效;
方式二:redis‑cli 命令动态设置,重启后失效。
方式 1:修改配置文件(生产环境)
6380 节点配置:
port 6380
bind 0.0.0.0
daemonize yes
pidfile /var/run/redis_6380.pid

指定主库IP和端口

slaveof 192.168.1.10 6379

填写主库密码

masterauth Admin@123456

从节点开启只读模式

replica-read-only yes
复制配置文件创建 6381 实例,修改端口。
cp /usr/local/redis/conf/redis-6380.conf /usr/local/redis/conf/redis-6381.conf
sed -i ‘s/6380/6381/’ /usr/local/redis/conf/redis-6381.conf
启动两个从节点:
redis-server /usr/local/redis/conf/redis-6380.conf
redis-server /usr/local/redis/conf/redis-6381.conf
方式 2:命令动态设置(临时测试)
进入从库客户端执行,重启 Redis 配置失效:
SLAVEOF 192.168.1.10 6379
CONFIG SET masterauth “Admin@123456”
CONFIG SET replica-read-only yes
取消主从关系,升级为独立主库:
SLAVEOF NO ONE
三、查看主从同步状态
登录主库或者从库,执行命令:
INFO replication
字段说明:

  1. role:master:当前节点为主节点;role:slave代表从节点;
  2. slave_io_running:yes:从节点网络连接正常;
  3. slave_sql_running:yes:数据同步正常;两个参数都为 yes,代表主从复制成功。
    四、主从复制完整流程(原理)
  4. 从节点发起连接请求,建立网络连接;
  5. 主库执行 BGSAVE,生成 RDB 全量快照,发送给从节点;
  6. 从节点清空自身旧数据,加载 RDB 文件完成全量同步;
  7. 主库把新产生的写命令存入复制缓冲区;
  8. 通过缓冲区持续向从库推送增量命令,实现增量同步;
  9. 网络中断重连之后,使用部分重同步机制,只同步断开期间的数据,不用全量同步。
    核心概念:复制积压缓冲区 (repl‑backlog)
    主库开辟一块内存缓冲区,保存最近一段写指令;从库断线重连,对比偏移量,只同步缺失数据,避免全量快照,提升同步效率。
    #配置文件调整缓冲区大小
    repl-backlog-size 128mb
    五、读写分离实战方案
  10. 写操作:全部连接主节点 (6379);
  11. 查询操作:程序连接两个从节点 (6380、6381),分担查询压力;
  12. 从节点默认只读,禁止业务写入数据。
    六、一主一从、一主多从、链式主从
  13. 一主多从:一个 master,多个 slave,本案例模式;
  14. 链式复制:A (master)‑B (slave+master)‑C (slave);B 既是 A 的从库,又是 C 的主库;缺点:主库故障,链式延迟变大,生产环境不推荐。
    七、动态运维命令(无需重启服务)
    #开启从库只读
    CONFIG SET replica-read-only yes
    #修改主库密码后,从库更新密码
    CONFIG SET masterauth “Admin@123456”
    #查看复制参数配置
    CONFIG GET repl*
    #取消主从身份
    SLAVEOF NO ONE
    八、ks.cfg 脚本批量部署 Redis 实例
    %post
    yum install -y gcc gcc-c++ make
    cd /usr/local/src
    wget https://download.redis.io/releases/redis-5.0.10.tar.gz
    tar -zxf redis-5.0.10.tar.gz
    cd redis-5.0.10
    make MALLOC=libc
    make install PREFIX=/usr/local/redis
    %end
    九、高频故障总结
    故障 1:INFO replication 中 slave_io_running 为 no,连接失败
  • 原因:防火墙拦截端口,bind 绑定 127.0.0.1,masterauth 密码填写错误;
  • 解决:关闭防火墙,bind 设置 0.0.0.0,核对主库密码。
    故障 2:slave‑io 正常,slave‑sql‑running 为 no,同步数据错乱
  • 原因:从库残留旧数据,版本不兼容;
  • 解决:清空从库数据文件,重启 Redis 重新全量同步。
    故障 3:网络频繁断开,每次都触发全量同步
  • 原因:repl‑backlog‑size 缓冲区空间过小,断线数据超出缓冲区;
  • 解决:调大 repl‑backlog‑size 缓冲区。
    故障 4:主库修改密码后,从库同步中断
  • 原因:从库 masterauth 配置没有更新;
  • 解决:从库执行 CONFIG SET masterauth,更新密码配置。
    文档不含文档不含@[toc]标记,可直接复制发布 CSDN 文档。
    CentOS7.9:Redis 主从复制结构化实战教程
    一、项目概述
    1.1 业务场景说明
    主从复制(Master‑Slave),把主节点 (Master) 内存数据同步到从节点 (Slave),实现数据备份;读写分离,写请求交给主库,查询请求分发到从库分担压力;为主从切换、哨兵模式、Redis‑Cluster 集群打下基础。主库可以拥有多个从库,从库默认只读。
    1.2 环境参数
    项目
    参数
    操作系统
    CentOS Linux release 7.9‑2009
    Redis 版本
    redis‑5.0.10
    主节点
    192.168.1.10:6379 master
    从节点 1
    192.168.1.10:6380 slave1
    从节点 2
    192.168.1.10:6381 slave2
    安全策略
    关闭 firewalld、SELinux
    主库密码
    Admin@123456
    二、前期环境准备
    2.1 关闭安全策略
    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0
    sed -i ‘s/^SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config
    2.2 主节点配置文件(6379)
    port 6379
    bind 0.0.0.0
    daemonize yes
    pidfile /var/run/redis_6379.pid
    requirepass Admin@123456
    dir /usr/local/redis/data
    #开启RDB持久化
    save 60 10
    启动主服务:
    redis-server /usr/local/redis/conf/redis-6379.conf
    2.3 从节点配置两种方式
    方式一:修改配置文件永久生效;
    方式二:redis‑cli 命令动态设置,重启后失效。
    方式 1:修改配置文件(生产环境)
    6380 节点配置:
    port 6380
    bind 0.0.0.0
    daemonize yes
    pidfile /var/run/redis_6380.pid

指定主库IP和端口

slaveof 192.168.1.10 6379

填写主库密码

masterauth Admin@123456

从节点开启只读模式

replica-read-only yes
复制配置文件创建 6381 实例,修改端口。
cp /usr/local/redis/conf/redis-6380.conf /usr/local/redis/conf/redis-6381.conf
sed -i ‘s/6380/6381/’ /usr/local/redis/conf/redis-6381.conf
启动两个从节点:
redis-server /usr/local/redis/conf/redis-6380.conf
redis-server /usr/local/redis/conf/redis-6381.conf
方式 2:命令动态设置(临时测试)
进入从库客户端执行,重启 Redis 配置失效:
SLAVEOF 192.168.1.10 6379
CONFIG SET masterauth “Admin@123456”
CONFIG SET replica-read-only yes
取消主从关系,升级为独立主库:
SLAVEOF NO ONE
三、查看主从同步状态
登录主库或者从库,执行命令:
INFO replication
字段说明:

  1. role:master:当前节点为主节点;role:slave代表从节点;
  2. slave_io_running:yes:从节点网络连接正常;
  3. slave_sql_running:yes:数据同步正常;两个参数都为 yes,代表主从复制成功。
    四、主从复制完整流程(原理)
  4. 从节点发起连接请求,建立网络连接;
  5. 主库执行 BGSAVE,生成 RDB 全量快照,发送给从节点;
  6. 从节点清空自身旧数据,加载 RDB 文件完成全量同步;
  7. 主库把新产生的写命令存入复制缓冲区;
  8. 通过缓冲区持续向从库推送增量命令,实现增量同步;
  9. 网络中断重连之后,使用部分重同步机制,只同步断开期间的数据,不用全量同步。
    核心概念:复制积压缓冲区 (repl‑backlog)
    主库开辟一块内存缓冲区,保存最近一段写指令;从库断线重连,对比偏移量,只同步缺失数据,避免全量快照,提升同步效率。
    #配置文件调整缓冲区大小
    repl-backlog-size 128mb
    五、读写分离实战方案
  10. 写操作:全部连接主节点 (6379);
  11. 查询操作:程序连接两个从节点 (6380、6381),分担查询压力;
  12. 从节点默认只读,禁止业务写入数据。
    六、一主一从、一主多从、链式主从
  13. 一主多从:一个 master,多个 slave,本案例模式;
  14. 链式复制:A (master)‑B (slave+master)‑C (slave);B 既是 A 的从库,又是 C 的主库;缺点:主库故障,链式延迟变大,生产环境不推荐。
    七、动态运维命令(无需重启服务)
    #开启从库只读
    CONFIG SET replica-read-only yes
    #修改主库密码后,从库更新密码
    CONFIG SET masterauth “Admin@123456”
    #查看复制参数配置
    CONFIG GET repl*
    #取消主从身份
    SLAVEOF NO ONE
    八、ks.cfg 脚本批量部署 Redis 实例
    %post
    yum install -y gcc gcc-c++ make
    cd /usr/local/src
    wget https://download.redis.io/releases/redis-5.0.10.tar.gz
    tar -zxf redis-5.0.10.tar.gz
    cd redis-5.0.10
    make MALLOC=libc
    make install PREFIX=/usr/local/redis
    %end
    九、高频故障总结
    故障 1:INFO replication 中 slave_io_running 为 no,连接失败
  • 原因:防火墙拦截端口,bind 绑定 127.0.0.1,masterauth 密码填写错误;
  • 解决:关闭防火墙,bind 设置 0.0.0.0,核对主库密码。
    故障 2:slave‑io 正常,slave‑sql‑running 为 no,同步数据错乱
  • 原因:从库残留旧数据,版本不兼容;
  • 解决:清空从库数据文件,重启 Redis 重新全量同步。
    故障 3:网络频繁断开,每次都触发全量同步
  • 原因:repl‑backlog‑size 缓冲区空间过小,断线数据超出缓冲区;
  • 解决:调大 repl‑backlog‑size 缓冲区。
    故障 4:主库修改密码后,从库同步中断
  • 原因:从库 masterauth 配置没有更新;
  • 解决:从库执行 CONFIG SET masterauth,更新密码配置。
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐