redis的复制
1. 是什么
其实就是常说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的Master/slaver机制,Master以写为主,Slave以读为主
redis中replication文档
2. 能干嘛
2.1 读写分离
2.2 容灾恢复
3. 怎么玩
3.1 配从(库)不配主(库)
配置的时候配置的是从库,主库不需要进行配置,从库监听主库即可
3.2 从库配置:slaveof 主库IP 主库端口
3.3 修改配置文件细节操作
端口,名称等的修改
3.4 常用3招
-
- 三台redis均为空
- 三台redis均为空
-
- 查看当前redis角色
- 查看当前redis角色
3.4.1 一主二仆
-
- 6379为主,6380和6381为从;主机设置k1 k2 k3,然后设置6380和6381为从机,主机设置v4,从机获取v4,正常;从机获取k1 k2 k3是否正常?
- 6379为主,6380和6381为从;主机设置k1 k2 k3,然后设置6380和6381为从机,主机设置v4,从机获取v4,正常;从机获取k1 k2 k3是否正常?
-
- 获取k1 k2
正常获取k1 k2 说明从机在明确身份的时候会将主机的所有数据都进行备份
- 获取k1 k2
-
- 查看三台机器的主从身份:
- 查看三台机器的主从身份:
-
- 主机正常设置k5,从机能正常获取,主机设置k6,从机能否进行设置v6操作?
- 主机正常设置k5,从机能正常获取,主机设置k6,从机能否进行设置v6操作?
-
- 从机写入k7,失败
- 从机写入k7,失败
-
- 主机故障情况:
从机保持原有状态等待
- 主机故障情况:
-
- 主机故障后重新启动,保持原有的主从模式,设置k7,从机能正常获取k7
- 主机故障后重新启动,保持原有的主从模式,设置k7,从机能正常获取k7
-
- 从机故障,主机写入新值k8,从机2正常
从机6380重新启动为master,无法获取k8的值
- 从机故障,主机写入新值k8,从机2正常
-
- 从机每次断开需要重新指定主机,除非配置进配置文件,重新配置后正常
- 从机每次断开需要重新指定主机,除非配置进配置文件,重新配置后正常
3.4.2 薪火相传(去中心化)
-
- 恢复一主二仆
- 恢复一主二仆
-
- 6379为6380的master,6380为6379的slave,为6381的master
- 6379为6380的master,6380为6379的slave,为6381的master
-
- 薪火相传模式主机写入k9,从机正常获取k9
- 薪火相传模式主机写入k9,从机正常获取k9
3.4.3 反客为主
-
- 恢复一主二仆
- 恢复一主二仆
-
- 主机挂了后从机进行手动更新,成为master,另一台从机手动更改为成为master的从机的从机
- 主机挂了后从机进行手动更新,成为master,另一台从机手动更改为成为master的从机的从机
-
- 主机重启后不在主从体系中,两个从机成为新的主从体系
- 主机重启后不在主从体系中,两个从机成为新的主从体系
4. 复制原理
-
- slave启动成功连接到master后会发送一个sync命令
-
- Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,
在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
- Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,
-
- 全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
-
- 增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
-
- 但是只要是重新连接master,一次完全同步(全量复制)将被自动执行
5. 哨兵模式(反客为主的自动版)
5.1 是什么
哨兵模式相当于反客为主的自动版
5.2 怎么玩
5.2.1 调整结构,6379带着80、81
5.2.2 自定义的/myredis目录下新建sentinel.conf文件,名字绝不能错
5.2.3 配置哨兵,填写内容
5.2.4 启动哨兵
5.2.5 正常主从演示
5.2.6 原有的master挂了
5.2.7 投票新选(哨兵进行)
5.2.8 重新主从继续开工,info replication查查看
5.2.9 问题:如果之前的master重启回来,会不会双master冲突?
新的master重新启动后,成为刚刚选出来的master的从机
5.2.10 哨兵模式启动后会把主从信息写进对应的redis的配置文件
5.3 一组sentinel能同时监控多个Master
6. 复制的缺点
复制延时:
由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。