(1)主从搭建方式(2)哨兵模式 (3)cluster模式
主从模式:
Redis全量复制一般发生在slave的初始阶段,这时slave需要将master上的数据都复制一份,具体步骤如下:
(1)slave连接master,发送SYNC命令;
(2)master收到SYNC命令后,执行BGSAVE命令生产RDB文件并使用缓冲区记录此后执行的所有写命令;
(3)master的BGSAVE执行完成后,向所有的slave发送快照文件,并在发送过程中继续记录执行的写命令;
(4)slave收到快照后,丢弃所有的旧数据,载入收到的数据;
(5)master快照发送完成后就会开始向slave发送缓冲区的写命令;
(6)slave完成对快照的载入,并开始接受命令请求,执行来自master缓冲区的写命令;
(7)slave完成上面的数据初始化后就可以开始接受用户的读请求了。
主从模式需要注意的事项:(1)如果多个slave同时断线需要重启的时候,因为只要slave启动,就会和master建立连接发送SYNC请求和主机全量同步,如果多个同时发送SYNC请求,可能导致master IO突增而发送宕机。(2)为了降低主redis服务器写磁盘压力带来的开销,可以配置让主redis不在将数据持久化到磁盘,而是通过连接让一个配置的从redis服务器及时的将相关数据持久化到磁盘,不过这样会存在一个问题,就是主redis服务器一旦重启,因为主redis服务器数据为空,这时候通过主从同步可能导致从redis服务器上的数据也被清空;
哨兵模式:
在主从复制实现之后,如果想对master进行监控,Redis提供了一种哨兵机制,哨兵的含义就是监控Redis系统的运行状态,并做相应的响应。
在一个一主多从的集群中,可以启用多个哨兵进行监控以保证集群足够稳定性,这种情况下,哨兵不仅监控主从服务,哨兵之间也会相互监控,建议哨兵至少3个并且是奇数。
哨兵主要作用
(1)监控:哨兵会不断的检测master和slave之间是否运行正常;
(2)提醒:当监控的某个Redis出现问题,哨兵可以通过API向管理员或其他应用程序发送通知;
(3)故障迁移:当一个master不能正常工作时,哨兵会开始一次自动故障迁移操作,选举出新的master,当客户端试图连接失效的master时,集群也会向客户端返回新的master地址,使得集群可以使用新的master代替失效的master。
Redis集群的cluster模式:
(1)Redis集群的分片特征在于将空间拆分为16384个槽位,某一个节点负责其中一些槽位;
(2)Redis集群提供一定程度的可用性,可以在某个节点宕机或者不可达的情况继续处理命令;
(3)Redis集群不存在中心节点或代理节点,集群的其中一个最重要的设计目标是达到线性可扩展性;
Redis Cluster中有一个16384长度的槽的概念,他们的编号为0、1、2、3……16382、16383。这个槽是一个虚拟的槽,并不是真正存在的。正常工作的时候,Redis Cluster中的每个Master节点都会负责一部分的槽,当有某个key被映射到某个Master负责的槽,那么这个Master负责为这个key提供服务,至于哪个Master节点负责哪个槽,这是可以由用户指定的,也可以在初始化的时候自动生成(redis-trib.rb脚本)。在Redis Cluster中,只有Master才拥有槽的所有权,如果是某Master的slave,这个slave只负责槽的使用,但是没有所有权。