Redis(四):集群模式
集群模式
作为缓存数据库,肯定要考虑缓存服务器稳定性相关的保障机制。
持久化机制就是一种保障方式,持久化机制保证了Redis服务器重启的情况下也不会损失(或少量损失)数据,因为持久化会把内存中的数据保存到硬盘上,重启会从硬盘上加载数据
随着Redis使用场景越来越多,技术发展越来越完善,在Redis整体服务上的容错、扩容、稳定各个方面都需要不断优化,因此在Redis的集群模式上也有不同的搭建方式来应对各种需求。
总结来说,Redis集群模式有三种:
- 主从模式
- 哨兵模式
- Cluster集群模式
1、主从模式
为了Redis服务避免单点故障,通常的做法是将redis的数据复制到多个副本以部署在不同的服务器上,这样即使有一台服务器出现故障,其他服务器依然可以继续提供服务,为此,Redis提供了复制(replication)功能,可以实现当一台数据库的数据更新后,自动将更新的数据同步到其他数据库上。
Redis服务器分为两类:一类是主数据库(Master),另一类是从数据库(Slave);
主数据库可以进行读写操作,当写操作导致数据变化时,会自动将数据同步给从数据库。
从数据库一般是只读的,并接受主数据库同步过来的数据。
一个主数据库可以拥有多个从数据库,而一个从数据库却只能拥有一个主数据库。
-
优点
1、一个主,可以有多个从,并以非阻塞的方式完成数据同步;
2、从服务器提供读服务,分散朱服务的压力,实现读写分离;
3、从服务器之间可以彼此连接和同步请求,减少主服务同步压力; -
缺点
1、不具备容错和恢复功能,主服务存在单点风险;
2、Redis的主从复制采用全量复制,需要服务器有足够的空余内存;
3、主从模式较难支持在线扩容;
2、哨兵模式
Redis提供的sentinel(哨兵)机制,通过sentinel模式启动redis后,自动监控Master/Slave的运行状态,基本原理是:心跳机制+投票裁决。
简单来说,哨兵的作用就是监控redis系统的运行状况,它的功能包括以下两个:
- 1、监控主数据库和从数据库是否正常运行
- 2、主数据库出现故障时,自动将从数据库转换为主数据库
哨兵模式主要以下几个内容:
- 监控(Monitoring):Sentinel会定期检查主从服务器是否处于正常工作状态
- 提醒(Notification):当被监控的某个Redis服务器出现异常时,Sentinel可以通过API向管理员或者其他应用程序发送通知
- 自动故障迁移(Antomatic failover):当一个主服务器不能正常工作时,Sentinel会开始一次自动故障迁移操作,它会将失效主服务器的其中一个从服务器升级为新的主服务器,并让失效主服务器的其他从服务器改为复制新的主服务器;当客户端试图连接失效的主服务器时,集群也会向客户端返回新主服务器的地址,使得集群可以使用新主服务器代替失效服务器
Redis Sentinel 是一个分布式系统,你可以在一个架构中运行多个Sentinel进程(progress)
image.png-
优点
1、哨兵模式主从可以切换,具备基本的故障转移能力;
2、哨兵模式具备主从模式的所有优点 -
缺点
1、哨兵模式也很难支持在线扩容操作
2、集群的配置信息管理比较复杂
3、Cluster集群模式
Redis Cluster是一种服务器Sharding技术,3.0版本开始正式提供,采用无中心架构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。
image.pngCluster集群结构特点:
-
1、Redis Cluster所有物理节点都映射到[0-16383]slot上(不一定均匀分布),Cluster负责维护节点、桶(slot)、值之间的关系;
-
2、在Redis集群中放置一个key-value时,根据CRC16(16) mod 16384的值,从之前划分的16384个桶中选择一个;
-
3、所有的Redis节点彼此互联(PING_PONG机制),内部使用二进制协议优化传输效率;
-
4、超过半数的节点检测到某个几点失效时,则判定该节点失效;
-
5、使用端与Redis节点连接,不需要中间proxy层,直接可以操作,使用端不需要连接集群所有节点,连接集群中任意一个可用节点即可。
-
优点
1、无中心架构,节点间数据共享,可动态调整数据分布;
2、节点可冬天添加删除,扩张性比较灵活;
3、部分节点异常,不影响整体集群的可用性; -
缺点
1、集群实现比较复杂;
2、批量操作指令(mget、mset等)支持有限;
3、事务操作支持有限