1、什么是主从复制:
主机数据更新后,根据配置和策略,自动同步到备机的master/slaver机制,master以写为主,slave以读为主。
2、主从复制的作用:
- 读写分离
- 容灾备份
3、分类:
- 一主二仆
- 薪火相传
- 反客为主
- 哨兵模式
4、 准备工作:
配置三个不同端口的服务(修改端口、rdb文件名字、aof文件名字等),然后分别打开三个各自的客户端(redis-cli.exe默认连接的是6379的服务,后面加-p 端口号即可连接不同的服务):
查看机器信息:info replication
参数说明:
(1)role:角色,master和slave两种,master为主机,slave为从机- - -目前三个都是主机。
(2)connected_slaves:从机个数,有几个从机跟着本机(当本机是主机的时候有)。
(3)master_link_status:up表示连接着主机,down表示主机挂了。
5、一主二仆:
步骤一:给80设置两个值,81和82中是没有的(等会有用)
步骤二:将81和82变成从机跟随80 - - -形成一主二仆模式
命令:slaveof 主机ip 端口号- - -跟着主机混,本身降级为从机,从机会将主机所有数据备份,无论是变成从机之前还是之后的主机数据,都会备份。
步骤三:检测是否能取到k1和k2 - - -能取到说明第一次复制是全量复制的。
步骤四:从机不具有写的功能- - -读写分离就是只有主机能写,从机只能读
步骤五:假如主机挂了,从机是原地待命呢,还是自己变成本身的主机了?
结论:主机挂了之后,从机是原地待命,状态从up转换为down。
步骤六:重启主机 - - - 依然是从机的老大,主机赋值,从机依然能拿到
步骤七:从机挂了,连接回来时什么身份???
结论:
(1)从机挂了回来之后,身份变成了主机,但是原来的数据还在,因为有rdb和aof文件的存在。再slaveof主机又能续接上。
(2)从机每次关闭服务之后,都需要重新执行从机的配置命令,如果不愿意重新执行,那就配到从机的配置文件中,让从机每次重启,都去配置文件中去读。
测试slaveof配置在配置文件中,看重启从机会不会还是从机
(1)再次关闭81,然后打开81的配置文件,配置slaveof命令 - - - 配从不配主
(2)重启81服务,查看身份 - - - 从机重启后身份就是slave,说明配置生效了
6、 薪火相传:
注意:
- 上一个slave可以是下一个slave的master,slave同样可以接受其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻master的压力。
- 中途变更转向:会清楚之前的数据,重新建立拷贝最新的。
- slaveof 新主库ip 新主库端口
步骤一:重启82服务 - - - 由以上结论可知,82重启之后身份是主机
步骤二:将82设置为81的从机,即82跟随81 - - - 形成薪火相传模式
注意:虽然81是82的主机,但是81的主身份还是从机,所以依然不能进行写操作
7、反客为主:一主二仆模式中,主机挂了,从机就原地待命,反客为主则是主机挂了之后,从机变成主机
步骤1:将主机80关闭服务,81反客为主变成主机,然后82跟随81
步骤2:原来的主机80重启之后,什么都不是了,只是本机的主机,并不是81和82的主机
8、哨兵模式:(我自己电脑不知道为什么启动不了哨兵,只能拿公司服务器测试)
步骤1:先完成一主二仆模式
步骤二:配置三个哨兵文件,文件名字为:sentinel.conf、sentinel26479.conf、sentinel26579.conf
步骤三:开启三个哨兵服务
步骤四:关闭80主机 - - - 投票产生新主机82
步骤五:给82设值,81能否获取 ,在查看一下两个的身份,发现82确实变成了主机
步骤六:80重新连接之后,80变成了82的从机