Redis 主从复制
是什么
主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制,**Master以写为主,Slave以读为主

image.png
有什么用
- 读写分离,性能扩展
- 容灾快速恢复
如何配置
配从(库),不配主(库):在从库上,执行命令,成为某个实例的从服务器
slaveof <主库ip> <port>
这样,在主机上写,在从机上可以读取数据
在从机上写数据,会报错
常见场景
一主二仆
- 其中一个 slave 挂了,在它挂了期间,主机写入了一些数据data
- 当这个 slave 恢复之后,会将上面的 date,重新写入自己内存当中
- 主机shutdown后,从机原地待命
薪火相传
上一个Slave可以是下一个slave的Master,Slave同样可以接收其他 slaves的连接和同步请求,那么该slave作为了链条中下一个的master, 可以有效减轻master的写压力 ,去中心化降低风险。

image.png
中途变更转向:会清除之前的数据,重新建立拷贝最新的
风险是一旦某个slave宕机,后面的slave都没法备份(上图中,中间的从机down后,最后的从机也没法备份)
反客为主
当一个master宕机后,后面的slave可以立刻通过命令,升为master(需要手动执行),其后面的slave不用做任何修改。
slaveof no one
复制原理
-
Slave启动成功连接到master后会发送一个sync命令(从机仅在启动时,才主动同步)-- 全量复制 -
Master向主机主动同步(从机启动之后,都是主机主动同步),分为增量同步和全量同步- 收集所有接收到的用于修改数据集命令, 在后台进程执行完毕之后,
master将传送整个数据文件(RBD文件)到slave,以完成一次完全同步 -- 全量复制 -
Master将新的所有收集到的修改命令依次传给slave,完成同步 -- 增量同步
- 收集所有接收到的用于修改数据集命令, 在后台进程执行完毕之后,

image.png
哨兵模式
是什么
反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库

image.png
配置方式
自定义 sentinel.conf,配置命令:
sentinel monitor mymaster ip port num
其中mymaster为监控对象起的服务器名称,ip 是监控对象的ip
num :至少有num个哨兵同意,才进行迁移
选举方式
当主机挂掉,从机选举中产生新的主机
哪个从机会被选举为主机呢?根据优先级别:slave-priority 、偏移量:从机所复制主机数据的数据量(复制的越多,越可能成为主机)、随机runid
故障恢复
当故障的主机恢复之后,但此时已经有了新的主机,那么它就变为从机,"俯首称臣"。

image.png
优先级在redis.conf中默认:slave-priority 100,值越小优先级越高
偏移量是指获得原主机数据最全的
每个redis实例启动后都会随机生成一个40位的runid