尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Redis学习笔记:主从集群搭建实战,从零掌握读写分离与数据同步

Redis学习笔记:主从集群搭建实战,从零掌握读写分离与数据同步 本文首发于 栏轩·阁欢迎访问阅读原文获取更好的阅读体验。什么是主从复制主从复制Master-Slave Replication是 Redis 高可用的基石。一个主库Master负责写入多个从库Replica实时同步主库数据并提供读服务。主要作用读写分离主库写从库读分摊读压力数据热备份从库拥有主库的完整副本主库宕机时数据不丢高可用基础配合哨兵Sentinel可实现自动故障转移环境准备操作系统WSL2Windows Subsystem for Linux容器环境Docker Docker Compose目录结构与配置文件准备挂载的数据卷mkdir-predis-master-slave/{config,data/master,data/replica1,data/replica2}cdredis-master-slave主库配置config/master.conf# 允许所有IP连接Docker容器间通信必须bind0.0.0.0# 监听端口port6379# 开启AOF持久化便于观察数据落地appendonlyyes# 规定日志级别方便查错loglevel notice# 设定密码为了安全但主从都必须配一致这里先留空方便入门# requirepass 123456# 数据库数量保持默认databases16从库1配置config/replica1.confbind0.0.0.0 port6380appendonlyyesloglevel notice# ****** 核心主从指令 ******# 声明我跟随谁注意这里填的是Docker Compose里的服务名 master而不是IPreplicaof master6379# 如果主库有密码需开启下面这行目前没设密码注释掉# masterauth 123456从库2配置config/replica2.confbind0.0.0.0 port6381appendonlyyesloglevel notice# 同样跟随主库replicaof master6379Docker Compose编排使用 Docker Compose 将三个 Redis 实例编排在同一个自定义网络中通过服务名互相通信。version:3.8services:# ---------- 主节点 ----------master:image:redis:7.2.4container_name:redis-masterrestart:alwaysports:-6379:6379volumes:-./config/master.conf:/usr/local/etc/redis/redis.conf-./data/master:/datacommand:redis-server /usr/local/etc/redis/redis.confnetworks:-redis-net# ---------- 从节点 1 ----------replica1:image:redis:7.2.4container_name:redis-replica-1restart:alwaysports:-6380:6380volumes:-./config/replica1.conf:/usr/local/etc/redis/redis.conf-./data/replica1:/datacommand:redis-server /usr/local/etc/redis/redis.confdepends_on:-masternetworks:-redis-net# ---------- 从节点 2 ----------replica2:image:redis:7.2.4container_name:redis-replica-2restart:alwaysports:-6381:6381volumes:-./config/replica2.conf:/usr/local/etc/redis/redis.conf-./data/replica2:/datacommand:redis-server /usr/local/etc/redis/redis.confdepends_on:-masternetworks:-redis-netnetworks:redis-net:driver:bridge启动集群docker-composeup-d验证主从状态查看主库状态进入 master 容器并执行INFO replicationredis-cli-p6379INFO replication输出如下即表示两个从库已成功连接# Replication role:master connected_slaves:2 slave0:ip172.23.0.3,port6381,stateonline,offset252,lag1 slave1:ip172.23.0.4,port6380,stateonline,offset252,lag1 master_failover_state:no-failover master_replid:7be3860eae78aa0c884546e40d444ba5708ca4c5 master_repl_offset:252 ...观察偏移量变化master_repl_offset是主库当前的复制偏移量表示已复制数据流的字节数。当主库写入数据时该值会增长。在主库写入数据setnameDockerMasterINFO replication可以看到master_repl_offset从 252 增长到 499从库同步该数据后也维持相同的偏移量。验证从库数据分别进入从库查看 name 字段会发现数据已自动同步完成。断线重连机制操作场景暂停一个从库容器 → 在主库写入新数据 → 重新启动该从库重启后从库会增量同步而不是全量同步。这是因为 Redis 的主从复制采用带有部分重同步PSYNC的复制协议主库维护一个replication backlog环形缓冲区默认 1MB从库断线后重连时将自己的replid和偏移量发给主库主库检查该偏移量是否仍在 backlog 中在 backlog 内→ 部分重同步只发送断线期间缺失的数据超出 backlog→ 全量重同步重新发送 RDB 快照这就是高可用的一大保障短暂的网络抖动不会触发昂贵的全量重同步。读写分离验证主库负责写入从库只读。在从库执行写入命令会被拒绝settesttestREADONLY You cantwriteagainst areadonly replica.这一特性确保了集群数据的一致性流向所有写入必须经过主库从库只负责复制和应用。总结本文从零搭建了一套 Redis 一主两从集群涵盖了知识点说明主从配置replicaof指令指定主库Docker Compose 编排自定义网络、服务名通信、数据卷挂载复制原理INFO replication中的关键指标解读偏移量master_repl_offset标记复制进度断线重连PSYNC 协议支持增量同步部分重同步读写分离从库只读保障数据一致性以上是 Redis 主从复制的完整动手实践。理解这部分后可以继续学习**哨兵模式Sentinel实现自动故障转移或集群模式Cluster**实现数据分片与高可用。
返回列表