
一、项目概述1.1 业务场景说明主从复制Master‑Slave把主节点 (Master) 内存数据同步到从节点 (Slave)实现数据备份读写分离写请求交给主库查询请求分发到从库分担压力为主从切换、哨兵模式、Redis‑Cluster 集群打下基础。主库可以拥有多个从库从库默认只读。1.2 环境参数项目参数操作系统CentOS Linux release 7.9‑2009Redis 版本redis‑5.0.10主节点192.168.1.10:6379 master从节点 1192.168.1.10:6380 slave1从节点 2192.168.1.10:6381 slave2安全策略关闭 firewalld、SELinux主库密码Admin123456二、前期环境准备2.1 关闭安全策略systemctl stop firewalldsystemctl disable firewalldsetenforce 0sed -i ‘s/^SELINUXenforcing/SELINUXdisabled/’ /etc/selinux/config2.2 主节点配置文件6379port 6379bind 0.0.0.0daemonize yespidfile /var/run/redis_6379.pidrequirepass Admin123456dir /usr/local/redis/data#开启RDB持久化save 60 10启动主服务redis-server /usr/local/redis/conf/redis-6379.conf2.3 从节点配置两种方式方式一修改配置文件永久生效方式二redis‑cli 命令动态设置重启后失效。方式 1修改配置文件生产环境6380 节点配置port 6380bind 0.0.0.0daemonize yespidfile /var/run/redis_6380.pid指定主库IP和端口slaveof 192.168.1.10 6379填写主库密码masterauth Admin123456从节点开启只读模式replica-read-only yes复制配置文件创建 6381 实例修改端口。cp /usr/local/redis/conf/redis-6380.conf /usr/local/redis/conf/redis-6381.confsed -i ‘s/6380/6381/’ /usr/local/redis/conf/redis-6381.conf启动两个从节点redis-server /usr/local/redis/conf/redis-6380.confredis-server /usr/local/redis/conf/redis-6381.conf方式 2命令动态设置临时测试进入从库客户端执行重启 Redis 配置失效SLAVEOF 192.168.1.10 6379CONFIG SET masterauth “Admin123456”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 (slavemaster)‑C (slave)B 既是 A 的从库又是 C 的主库缺点主库故障链式延迟变大生产环境不推荐。七、动态运维命令无需重启服务#开启从库只读CONFIG SET replica-read-only yes#修改主库密码后从库更新密码CONFIG SET masterauth “Admin123456”#查看复制参数配置CONFIG GET repl*#取消主从身份SLAVEOF NO ONE八、ks.cfg 脚本批量部署 Redis 实例%postyum install -y gcc gcc-c makecd /usr/local/srcwget https://download.redis.io/releases/redis-5.0.10.tar.gztar -zxf redis-5.0.10.tar.gzcd redis-5.0.10make MALLOClibcmake install PREFIX/usr/local/redis%end九、高频故障总结故障 1INFO replication 中 slave_io_running 为 no连接失败原因防火墙拦截端口bind 绑定 127.0.0.1masterauth 密码填写错误解决关闭防火墙bind 设置 0.0.0.0核对主库密码。故障 2slave‑io 正常slave‑sql‑running 为 no同步数据错乱原因从库残留旧数据版本不兼容解决清空从库数据文件重启 Redis 重新全量同步。故障 3网络频繁断开每次都触发全量同步原因repl‑backlog‑size 缓冲区空间过小断线数据超出缓冲区解决调大 repl‑backlog‑size 缓冲区。故障 4主库修改密码后从库同步中断原因从库 masterauth 配置没有更新解决从库执行 CONFIG SET masterauth更新密码配置。文档不含文档不含[toc]标记可直接复制发布 CSDN 文档。CentOS7.9Redis 主从复制结构化实战教程一、项目概述1.1 业务场景说明主从复制Master‑Slave把主节点 (Master) 内存数据同步到从节点 (Slave)实现数据备份读写分离写请求交给主库查询请求分发到从库分担压力为主从切换、哨兵模式、Redis‑Cluster 集群打下基础。主库可以拥有多个从库从库默认只读。1.2 环境参数项目参数操作系统CentOS Linux release 7.9‑2009Redis 版本redis‑5.0.10主节点192.168.1.10:6379 master从节点 1192.168.1.10:6380 slave1从节点 2192.168.1.10:6381 slave2安全策略关闭 firewalld、SELinux主库密码Admin123456二、前期环境准备2.1 关闭安全策略systemctl stop firewalldsystemctl disable firewalldsetenforce 0sed -i ‘s/^SELINUXenforcing/SELINUXdisabled/’ /etc/selinux/config2.2 主节点配置文件6379port 6379bind 0.0.0.0daemonize yespidfile /var/run/redis_6379.pidrequirepass Admin123456dir /usr/local/redis/data#开启RDB持久化save 60 10启动主服务redis-server /usr/local/redis/conf/redis-6379.conf2.3 从节点配置两种方式方式一修改配置文件永久生效方式二redis‑cli 命令动态设置重启后失效。方式 1修改配置文件生产环境6380 节点配置port 6380bind 0.0.0.0daemonize yespidfile /var/run/redis_6380.pid指定主库IP和端口slaveof 192.168.1.10 6379填写主库密码masterauth Admin123456从节点开启只读模式replica-read-only yes复制配置文件创建 6381 实例修改端口。cp /usr/local/redis/conf/redis-6380.conf /usr/local/redis/conf/redis-6381.confsed -i ‘s/6380/6381/’ /usr/local/redis/conf/redis-6381.conf启动两个从节点redis-server /usr/local/redis/conf/redis-6380.confredis-server /usr/local/redis/conf/redis-6381.conf方式 2命令动态设置临时测试进入从库客户端执行重启 Redis 配置失效SLAVEOF 192.168.1.10 6379CONFIG SET masterauth “Admin123456”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 (slavemaster)‑C (slave)B 既是 A 的从库又是 C 的主库缺点主库故障链式延迟变大生产环境不推荐。七、动态运维命令无需重启服务#开启从库只读CONFIG SET replica-read-only yes#修改主库密码后从库更新密码CONFIG SET masterauth “Admin123456”#查看复制参数配置CONFIG GET repl*#取消主从身份SLAVEOF NO ONE八、ks.cfg 脚本批量部署 Redis 实例%postyum install -y gcc gcc-c makecd /usr/local/srcwget https://download.redis.io/releases/redis-5.0.10.tar.gztar -zxf redis-5.0.10.tar.gzcd redis-5.0.10make MALLOClibcmake install PREFIX/usr/local/redis%end九、高频故障总结故障 1INFO replication 中 slave_io_running 为 no连接失败原因防火墙拦截端口bind 绑定 127.0.0.1masterauth 密码填写错误解决关闭防火墙bind 设置 0.0.0.0核对主库密码。故障 2slave‑io 正常slave‑sql‑running 为 no同步数据错乱原因从库残留旧数据版本不兼容解决清空从库数据文件重启 Redis 重新全量同步。故障 3网络频繁断开每次都触发全量同步原因repl‑backlog‑size 缓冲区空间过小断线数据超出缓冲区解决调大 repl‑backlog‑size 缓冲区。故障 4主库修改密码后从库同步中断原因从库 masterauth 配置没有更新解决从库执行 CONFIG SET masterauth更新密码配置。