1.主从模式
2.哨兵模式
3.cluster模式
一、主从模式
一个master可以有多个slave,但是一个slave只能对应一个matser;
matser可以进行读写操作,slave一般都是只读的,master每次接收到写命令都会同步发送给slave;
master挂了之后,不会在slave节点中重新选一个master,redis不再提供写服务,需要重启master后redis才会重新对外提供写服务;
缺点:master宕机,redis就不提供写服务了,不具备自动容错和恢复功能。
二、哨兵模式
哨兵是一个独立的进程,作为进程他会独立运行。其原理是哨兵通过发送命令等待redis服务器响应,从而监控运行的多个redis实例。然而哨兵进程也可能出现问题,为此,我们可以使用多个哨兵监控redis服务器,哨兵之间也会互相监控。当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其它服务器,修改配置文件让他们切换主机。
哨兵模式的工作方式:
1.每个哨兵进程以每秒一次的频率向整个集群中的服务器和其它哨兵进程发送ping命令
2.如果一个实例距离最后一次有效回复的时间超过down-after-milliseconds选项指定的值,则这个实例会被这个哨兵进程标记为主观下线
3.如果一个master被标记为主观下线,那么监视这个master的所有哨兵发送命令确认这个master是否已经下线。当有足够数量的哨兵进程确认master已经下线,那么master会被标记为客观下线;如果没有数量不够,客观下线的标记就会被移除
4.当master被标记为客观下线时,哨兵向这个master对应的所有slave发送INFO命令。若没有足够数量的哨兵同意master已经下线,或者master重新向哨兵返回了有效回复,那么matser的客观下线状态就会被移除。
5.如果master的确下线,那么哨兵会在salve中选择一个作为master,并修改他们的配置文件。
缺点:每台redia服务器存储次相同的内容,浪费内存。
三、cluster模式
当数据量过大,一台服务器存放不下,这个时候就需要对存储的数据进行分片。cluster模式的出现就是为了解决单机redis容量有限的问题,将redis的数据根据一定规则分配到多台机器。
工作方式:
给每个节点分配哈希槽的范围。
key到达,根据crc16的算法得到一个结果,把结果对16384取余,这样每个key会对应一个编号在0-16383之间的哈希槽。通过这个值,找到对应的节点,然后直接跳转到对应的节点进行存取操作。
特点:
一个主节点对应一个或者多个从节点,当主节点宕机了,就会启用从节点。
redis的所有节点彼此互联(ping-pong机制)
节点的fail是通过集群中超过半数的节点检测失效时才生效。