Redis 复制(replication)
前言
redis 复制是什么?
就是主从复制,master 以写为主,slave 以读为主,当 master 数据发生变化时,自动将新的数据异步同步到其他 slave 数据库。
redis 复制能做什么?
读写分离
容灾恢复
数据备份
水平扩容支撑高并发
配置
配从库,不配主库
master 如果配置了 requirepass 参数,需要密码登陆那么 slave 就要配置 masterauth 来设置校验密码,否则的话 master 会拒绝 slave 的访问请求。
基本操作命令
查看复制节点的主从关系和配置信息
主从复制
改换门庭
自立为王
搭建 redis 一主二从
一个 Master 和两个 Slave,详细的搭建过程参考 Redis 集群搭建过程
注意事项:三台主机需要保证两两互相能够 ping 通。
案例演示
一主二从
从机可以执行写命令吗?
从机不能执行写操作
从机切入点问题
Slave 是从头开始复制还是从切入点开始复制?
启动 master、slave00,先不启动 slave01,写入数据成功后再启动 slave01,之前的数据也仍然可以复制。
首次一锅端,后续跟随,master 写,slave 跟。
主机 shutdown 后,从机会不会上位?
从机不动,原地待命,从机数据可以正常使用;等待主机重启动归来
主机 shutdown 后,重启后主从关系还在吗?从机还能否顺利复制?
关系依然还在,不会发生改变
可以顺利复制
某台主机 down 后,master 继续,从机重启后还能跟上大部队吗?
可以
一主二从之手动指定操作命令
删除配置文件项
上面配置文件中的主、从机的关系是固定的,写在配置文件中的。
下面我们将从主机中删除配置文件中的配置项,3 台都是主机状态,各不从属。
# 注释掉 slave00、slave01中的下面内容 replication 192.168.157.115 6379
也即是三台 master
指定从属关系
slave00 从机
slave01 从机
配置 VS 命令
配置文件,持久生效
手动命令,当次生效
套娃
目的:有效的减轻主 master 的写压力
中途变更转向会清楚之前的数据,重新建立拷贝最新的。
命令:
仍然不具备写操作
反客为主
当前数据库停止与其它数据库的同步,转成主数据库。
不存在主从体系,自己当家做主。
命令:
复制的原理和工作流程
slave 启动成功连接到 master 后会发送一个 sync 命令,slave 首次全新连接到 master,一次完全同步(全量复制)将被自动执行,slave 自身原有的数据会被 master 数据覆盖清楚。
master 节点收到 sync 命令后会开始在后台保存快照(即 RDB 持久化,主从复制时会触发 RDB),同时收集所有接收到的用于修改数据集的命令并缓存起来,master 节点执行 RDB 持久化完成后,master 将 RDB 快照文件和所有缓存的命令发送到所有的 slave,以完成一次同步,而 slave 服务在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化。
repl-ping-replica-period 10(默认 10 秒),每十秒中保持依次联系,防止通信失败。
master 继续将新的收集到的修改命令自动依次传给 slave,完成同步。
master 会检查 backlog 里面的 offset,master 和 slave 都会保存一个复制的 offset 还有一个 masterId,offset 是保存在 backlog 中的。master 只会把已经复制的 offset 后面的数据复制给 slave,类似于断点续传。
复制的缺点
复制延时,信号衰减
由于所有的写操作都是先在 Master 上操作,然后同步更新到 Slave 上,所以从 Master 同步到 Slave 机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave 机器数量的增加也会使这个问题更加严重。
master 挂了,没有新的 master
默认情况下,不会在 slave 节点中自动重新选择一个 master,需要人工干预。
版权声明: 本文为 InfoQ 作者【京茶吉鹿】的原创文章。
原文链接:【http://xie.infoq.cn/article/72844259edb95d7b166401df0】。文章转载请联系作者。
评论