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
字段说明:
- role:master:当前节点为主节点;role:slave代表从节点;
- slave_io_running:yes:从节点网络连接正常;
- slave_sql_running:yes:数据同步正常;两个参数都为 yes,代表主从复制成功。
四、主从复制完整流程(原理) - 从节点发起连接请求,建立网络连接;
- 主库执行 BGSAVE,生成 RDB 全量快照,发送给从节点;
- 从节点清空自身旧数据,加载 RDB 文件完成全量同步;
- 主库把新产生的写命令存入复制缓冲区;
- 通过缓冲区持续向从库推送增量命令,实现增量同步;
- 网络中断重连之后,使用部分重同步机制,只同步断开期间的数据,不用全量同步。
核心概念:复制积压缓冲区 (repl‑backlog)
主库开辟一块内存缓冲区,保存最近一段写指令;从库断线重连,对比偏移量,只同步缺失数据,避免全量快照,提升同步效率。
#配置文件调整缓冲区大小
repl-backlog-size 128mb
五、读写分离实战方案 - 写操作:全部连接主节点 (6379);
- 查询操作:程序连接两个从节点 (6380、6381),分担查询压力;
- 从节点默认只读,禁止业务写入数据。
六、一主一从、一主多从、链式主从 - 一主多从:一个 master,多个 slave,本案例模式;
- 链式复制: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
字段说明:
- role:master:当前节点为主节点;role:slave代表从节点;
- slave_io_running:yes:从节点网络连接正常;
- slave_sql_running:yes:数据同步正常;两个参数都为 yes,代表主从复制成功。
四、主从复制完整流程(原理) - 从节点发起连接请求,建立网络连接;
- 主库执行 BGSAVE,生成 RDB 全量快照,发送给从节点;
- 从节点清空自身旧数据,加载 RDB 文件完成全量同步;
- 主库把新产生的写命令存入复制缓冲区;
- 通过缓冲区持续向从库推送增量命令,实现增量同步;
- 网络中断重连之后,使用部分重同步机制,只同步断开期间的数据,不用全量同步。
核心概念:复制积压缓冲区 (repl‑backlog)
主库开辟一块内存缓冲区,保存最近一段写指令;从库断线重连,对比偏移量,只同步缺失数据,避免全量快照,提升同步效率。
#配置文件调整缓冲区大小
repl-backlog-size 128mb
五、读写分离实战方案 - 写操作:全部连接主节点 (6379);
- 查询操作:程序连接两个从节点 (6380、6381),分担查询压力;
- 从节点默认只读,禁止业务写入数据。
六、一主一从、一主多从、链式主从 - 一主多从:一个 master,多个 slave,本案例模式;
- 链式复制: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,更新密码配置。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)