Redis 集群模式
集群模式
作为缓存数据库,肯定要考虑缓存服务器稳定性相关的保障机制。
持久化机制就是一种保障方式,持久化机制保证了Redis服务器重启的情况下也不会损失(或少量损失)数据,因为持久化会把内存中的数据保存到硬盘上,重启会从硬盘上加载数据
随着Redis使用场景越来越多,技术发展越来越完善,在Redis整体服务上的容错、扩容、稳定各个方面都需要不断优化,因此在Redis的集群模式上也有不同的搭建方式来应对各种需求。
总结来说,Redis集群模式有三种:
主从模式
哨兵模式
Cluster集群模式
1、主从模式
主从复制是Redis最简单的集群模式。这个模式主要是为了解决单点故障的问题,所以将数据复制多个副本中,这样即使有一台服务器出现故障,其他服务器依然可以继续提供服务。
Redis服务器分为两类:一类是主数据库(Master),另一类是从数据库(Slave); 主数据库可以进行读写操作,当写操作导致数据变化时,会自动将数据同步给从数据库。 从数据库一般是只读的,并接受主数据库同步过来的数据。 一个主数据库可以拥有多个从数据库,而一个从数据库却只能拥有一个主数据库。
优点
1、一个主,可以有多个从,并以非阻塞的方式完成数据同步;
2、从服务器提供读服务,分散主服务的压力,实现读写分离;
3、从服务器之间可以彼此连接和同步请求,减少主服务同步压力;
缺点
1、不具备容错和恢复功能,主服务存在单点风险;
2、Redis的主从复制采用全量复制,需要服务器有足够的空余内存;
3、主从模式较难支持在线扩容;
2、哨兵模式——Sentinel 集群
为了解决主从模式的无法自动容错及恢复的问题,Redis引入了一种哨兵模式的集群架构。
哨兵节点是一种特殊的Redis节点,用于监控主节点和从节点的状态。当主节点发生故障时,哨兵节点可以自动进行故障转移,选择一个合适的从节点升级为主节点,并通知其他从节点和应用程序进行更新。 其核心原理:心跳机制+投票裁决。
在传统的主从架构中,引入哨兵节点的目的是监控Redis主节点和从节点的状态。每个Redis实例都可以作为哨兵节点,通常我们需要部署多个哨兵节点,以确保故障转移的可靠性。
哨兵节点的工作原理
1、定期发送PING命令:哨兵节点会定期向所有主节点和从节点发送PING命令。如果在指定的时间内没有收到PONG响应,哨兵节点会将该节点标记为主观下线。
2、客观下线:如果一个主节点被多数哨兵节点标记为主观下线,那么它将被标记为客观下线。
3、故障转移过程:当主节点被标记为客观下线时,哨兵节点会触发故障转移过程。它会从所有健康的从节点中选举一个新的主节点,并将所有从节点切换到新的主节点,实现自动故障转移。
4、更新客户端配置:哨兵节点会更新所有客户端的配置,指向新的主节点。
5、通知客户端:哨兵节点通过发布订阅功能来通知客户端有关主节点状态变化的消息。客户端收到消息后,会更新配置,将新的主节点信息应用于连接池,从而使客户端可以继续与新的主节点进行交互。
优点
1、哨兵模式主从可以切换,具备基本的故障转移能力;
2、哨兵模式具备主从模式的所有优点
缺点
1、哨兵模式也很难支持在线扩容操作
2、集群的配置信息管理比较复杂
3、Redis Cluster
Redis Cluster是一种服务器Sharding技术,采用CRC16算法来实现数据的分片,3.0版本开始正式提供,采用去中心化架构。由多个节点组成,每个节点分为主节点(Master)和从节点(Slave)。数据在主节点之间进行分片存储,每个主节点负责一部分数据。同时,各节点彼此互联(PING_PONG机制),内部使用二进制协议优化传输效率,且每个主节点都有一个或多个从节点,负责备份主节点的数据并在主节点故障时自动接管。
优点
1、无中心架构,节点间数据共享,可动态调整数据分布;
2、节点可动态添加删除,扩张性比较灵活;
3、部分节点异常,不影响整体集群的可用性;
缺点
1、集群实现比较复杂;
2、批量操作指令(mget、mset等)支持有限;
3、事务操作支持有限
- 感谢你赐予我前进的力量