Redis - 主从复制
主从复制
定义
Redis 主从复制是一种实现高可用性和数据冗余的技术,它允许将一个 Redis 服务器(主服务器)的数据复制到一个或多个其他 Redis 服务器(从服务器)上。
master 以写为主,slave 以读为主,当 master 数据变化的时候,自动将新的数据异步同步到其他的 slave 数据库。
基本操作命令
配从 (库) 不配主 (库):在从数据库中,使用 replicaof 命令,指定主数据库的 IP 和端口。
权限细节,重要:master 如果配置了 requirepass 参数,需要密码登录 ,那么 slave 就要配置 masterauth 来设置校验密码,否则的话 master 会拒绝 slave 的访问请求。
info replication:可以查看复制结点的主从关系和配置信息。
replicaof 主库 IP 主库端口:一般写入进 Redis.conf 配置文件内,重启后依然生效。
slaveof 主库 IP 主库端口:每次与 master 断开之后,都需要重新连接,除非你配置进了 redis.conf 文件;在运行期间修改 slave 节点的信息,如果该数据库已经是某个主数据库的从数据库,那么会停止和原主数据库的同步关系转而和新的主数据库同步,重新拜码头。
slaveof no one:使当前数据库停止与其他数据库的同步,转成主数据库,自立为王。
主从复制相关问题
方案 1:配置文件固定写死主从关系
-
Q:从机可以执行写命令吗?
A:不可以,从机只能读。
-
Q:从机切入点问题,slave 是从头开始复制还是从切入点开始复制?
A:首次一锅端,后续跟随,master 写,slave 跟。如果中间 slave 停止运行了,重启 slave 后,之前写入到主机的内容也会同步更新到从机。
-
Q:主机 shutdown 后,从机会上位吗?
A:从机不动,原地待命,从机数据可以正常使用,等待主机重启归来。
-
Q:主机 shutdown 后,重启后主从关系还在吗?从机还能否顺利复制?
A:主从关系依然存在,从机依旧是从机,可以顺利复制。
-
Q:某台从机 down 后,master 继续,从机重启后它能跟上大部队吗?
A:可以,类似于从机切入点问题。
方案 2:命令操作手动主从关系指令
先设置各不从属 3 台 master,然后在其中两台机器上执行 salveof 命令,使其跟从另外一台主机,从而确定主从关系。
|
|
Q:用命令使用的话, 2 台从机重启后,关系还在吗?
A:不会存在了,只有写入 redis.conf 文件的主从关系才会在机器重启后仍然有效。
复制原理和工作流程
slave 启动,同步初清
- slave 启动成功链接到 master 后会发送一个 sync 命令
- slave 首次全新连接 master,一次完全同步(全量复制)将被自动执行,slave 自身原有数据会被 master 数据覆盖清除。
首次连接,全量复制
- master 节点收到 sync 命令后会开始在后台保存快照(即 RDB 持久化,主从复制时会触发 RDB),同时收集所有接收到的用于修改数据集的命令并缓存起来,master 节点执行 RDB 持久化完后,master 将 RDB 快照文件和所有缓存的命令发送到所有 slave,以完成一次完全同步。
- 而 slave 服务在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化。
心跳持续,保持通信
-
repl-ping-replica-period 10
进入平稳,增量复制
- master 继续将新的所有收集到的修改命令自动依次传送给 slave,完成同步。
从机下线,重连续传
- master 会检查 backlog 里面的 offset,master 和 slave 都会保存一个复制的 offset 还有一个 masterId,offset 是保存在 backlog 中 的。master 只会把已经缓存的 offset 后面的数据复制给 slave,类似断点续传。
复制的缺点
-
复制延时,信号衰减
由于所有的写操作都是先在 Master 上操作,然后同步更新到 Slave 上,所以从 Master 同步到 Slave 机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave 机器数量的增加也会使这个问题更加严重。
-
master 挂了怎么办?
默认情况下,不会在 slave 节点中自动选一个 master
那每次都要人工干预? —> 无人值守变成刚需