主从复制
Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制。这需要将一台Redis服务器的数据,前者为主节点,后者为从节点。一般情况下是主节点可读可写,从节点默认只能读数据。
当把一个redis库设定为另一个redis从节点时,该库下的数据会先被清除,然后根据主节点进行全量同步,之后自动进行增量同步。当从节点中间断连之后又连接上后,会就会发送sync请求和主机同步,自动获取这期间主节点的增量数据。在开启reids服务时使用redis-server [配置文件] --replicaof 127.0.0.1 [主节点端口号]即可将本机的某redis进程设为当前redis进程的主节点,而本redis进程为从节点。
主节点断连之后可以手动将别的从节点设置为主节点,再修改剩下从节点与这个库的主从关系。通过REPLICAOF no one指令让从节点停止进行复制,重新变回主节点。
Redis主从复制不阻塞主服务器端。也就是说当若干个从服务器在进行初始同步时,主服务器仍然可以处理请求。
哨兵sentinel
在 Redis 主从复制模式中,系统不具备自动恢复的功能,所以当主节点宕机后,需要手动把一台从节点切换为主节点。如果想要自动实现这种切换配置可以使用sentinel,当主节点出现故障,服务器宕机,内存满了等问题导致master不能再提供服务了,哨兵会自动从从节点中选择主节点重新形成一主多从的模式。
配置了哨兵之后哨兵能知道从节点信息,哨兵之间也知道各自的信息,哨兵之间是通过发布订阅发现其他哨兵并传递消息。
sentinel的配置文件再redis安装的源码目录中可以修改,在启动时也可以指定配置文件,如端口号,并通过sentinel monitor mymaster 127.0.0.1 [port] [权重]的指令指定要监听的redis服务。其中权重应设置为开启的sentinel服务数量的一半以上。
当配置了哨兵之后如果主节点断连了,哨兵会自动更改各个库的主从关系,从之前的从节点中选出新的主节点,并且改为监控该新主节点。断连的主节点会成为从节点,而且会修改各个库的配置文件。在该过程中sentinel自动投票选出新的主节点,并执行停止复制,使其重新变成主节点的命令等其他命令。