1.主从复制之一主二从
启动三台redis:
从现在看来三台redis的端口分别为6379\6380\6381。
而且三台机器都是主机,等级相同。
将6380、6381端口的redis作为备机
情况1:6380、6381端口的redis,再去获取主机6379设置的值:
可以发现只要作为备机了,那么之前设置的值同样也可以获取。
此时查看三台redis机器的信息:
情况2:如果主机6379设置了键v5,那么从机6380、6381修改值则会提示,不可以修改。
情况3:如果主机6379挂掉了。那么从机6380、6381依然还是从机。不会变成主机。
情况4:主机6379死而复生。那么从机6380、6381会依然保持主从关系。
情况5:从机6380挂了,那么主机6379和从机6381不变。如果6380从机死而复生则成为主机,与主机6379的主从关系消失。
所以从机每次与主机断开连接之后,都需要重新连接,除非你配置进了redis.conf文件。
2.主从复制之链式连接
可以发现6379作为主机,6380作为6379端口的从机,6381作为6380端口的从机。
情况1:如果6379主机设置键值对,那么6780、6381端口的主机依然可以取到值。
情况2:如果主机6379挂掉了,那么6380端口的机器变为主机,使用 SLAVEOF no one命令。使6380端口的机器成为主机。
情况3:如果主机6379又重启成功了,那么6379依然还是主机,但是却没有从机了。
主从复制的过程原理:
① 当主库与从库建立了主从关系之后,从库会向主库发送SYNC的命令。
② 主库接收到SYNC命令后会开始在后台保存快照(RDB持久化过程),并将期间接收到的写命令缓存起来。
③ 当快照完成后,主Redis会将快照文件和所有缓存的写命令发送给从Redis。
④ Redis接收到后,会载入快照文件并且执行收到的缓存的命令。
⑤ 然后,主Redis每当接收到写命令时就会将命令发送从Redis,从而保证数据的一致。
复制架构中出现宕机情况:一 从redis宕机:
从redis重新启动后会自动加入到主从架构中去的,自动完成数据的同步。从机断开的期间,主机发生变化,那么从机恢复后,将进行增量复制。
二 主redis宕机:
首先从数据库执行slaveoof no one 命令,断开主从关系并且从库提升为主库继续服务。然后主库重新启动后,使用slaveof命令,将其设置为其他库的从库,数据就能重新更新回来。(就是从升级为主了,主重启后,回来当个从)。
3.主从复制之哨兵方式
什么是哨兵方式?
如果主机出现故障,那么就从剩下的从机中投票数自动将从库转换为主库。
自定义文件:sentinel.conf 在/myredis目录下。
编写sentinel.conf文件:
sentinel monitor host6379 127.0.0.1 6379 1
命令监控主机host6379下的地址127.0.0.1下的端口6379,投票超过1的当选主机。
启动哨兵:redis-sentinel /myredis/sentinel.conf
此时哨兵就一直监控6379端口
此时关闭6379端口主机。剩下两台从机6380和6381。
可以看到此时自动选出6381为主机。
情况1:如果主机6379重新启动成功,那么在未被监控到之前是主机。被监控到之后变成从机。