此文是我看尚硅谷教学视频后的个人的redis学习笔记,每一张截图都是我亲自敲后截图放在笔记中的,粘贴在博客上可能会有点点模糊,若有错误或不足,还望各位大神多多指正!
9 Redis的复制(Master/Slave)
9.1 是什么
行话:也就是我们所说的主从复制(读写分离),主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主
9.2 能干嘛
① 读写分离
② 容灾恢复
9.3 怎么玩
9.3.1 配库
配从(库)不配主(库)
9.3.2 从库配置
① 命令:slaveof 主库IP 主库端口;
② 每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件;
③ info replication
9.3.3 修改配置文件细节操作
本次示例用三个客户端测试。
① 拷贝多个redis.conf文件
② 修改复制了的三个配置文件
6380和6381以此改。
9.3.4 常用3招
9.3.4.1 一主二仆
1.Init
开启三台客户端
最初时三个客户端的角色都是一样的,都是master
2.一个Master两个Slave
3.日志查看
① 主机日志
② 备机日志
跟主机操作一样
③ info replication
查看主机从机的信息
4.主从问题演示
① 问题一:当主机设置了值后从机是否可以对同一个key设值?
② 问题二:当主机关机后,从机的角色是什么?
当主机关机后,从机是原地待命的。
③ 问题三:当主机启动后,再存值,从机可以取到吗?
④ 问题四:当从机关机后,再开机,是什么角色?时候还可以取到以前主机的值?
每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件;
9.3.4.2 薪火相传
① 上一个Slave可以是下一个slave的Master,Slave同样可以接收其他,slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻master的写压力;
② 中途变更转向:会清除之前的数据,重新建立拷贝最新的slaveof 新主库IP 新主库端口;
9.3.4.3 反客为主
SLAVEOF no one:使当前数据库停止与其他数据库的同步,转成主数据库
① 第一步
② 第二步
9.4 复制原理
slave启动成功连接到master后会发送一个sync命令,Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
全量复制:slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步,但是只要是重新连接master,一次完全同步(全量复制)将被自动执行即,首次是全量复制,之后的是增量复制,只要是重连了一次主机,就是全量复制。
9.5 哨兵模式(sentinel)
9.5.1 是什么
反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库
9.5.2 怎么玩(使用步骤)
① 调整结构,6379带着6380、6381,6379作为主机,80和81作为从机
② 自定义的/root/Myredis目录(我自己是这个目录)下新建sentinel.conf文件,名字绝不能错
③ 配置哨兵,填写内容
sentinel monitor 被监控数据库名字(自己起名字) 127.0.0.1 6379 1
上面最后一个数字1,表示主机挂掉后salve投票看让谁接替成为主机,得票数多少后成为主机。
④ 启动哨兵
redis-sentinel /myredis/sentinel.conf,上述目录依照各自的实际情况配置,可能目录不同
⑤ 正常主从演示
⑥ 原有的master挂了
⑦ 投票新选
⑧ 重新主从继续开工,info replication查查看
⑨ 问题:如果之前的master重启回来,会不会双master冲突?
9.5.3 一组sentinel能同时监控多个Master
9.6 复制的缺点
复制延时