Redis集群方案
介绍几种常用的 Redis 高可用方案。
Redis 主从 + 哨兵
Sentinel(哨兵) 进程是用于监控 Redis 集群中 Master 主服务器工作的状态。在 Master
主服务器发生故障的时候,可以实现 Master 和 Slave 服务器的切换,保证系统的高可用(High Availability)
Redis cluster
3.0自带的集群,特点在于 他的分布式算法不是一致性hash,而是hash槽的概念,以及自身支持节点设置从节点。 Redis
集群采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 个 slot,每个 Redis 实例负责其中一部分
slot 。集群中的所有信息(节点、端口、slot等),都通过节点之间定期的数据交换而更新。 Redis 客户端可以在任意一个 Redis
实例发出请求,如果所需数据不在该实例中,通过重定向命令引导客户端访问所需的实例。
第三方(codis、twemproxy)
大概概念是,它类似于一个代理方式,使用方法和普通redis无任何区别,设置好它下属的多个redis实例后,
使用时在本需要连接redis的地方改为连接twemproxy,它会以一个代理的身份接收请求
并使用一致性hash算法,将请求转接到具体redis,将结果再返回twemproxy。使用方式简便(相对redis只需修改连接端口),
对旧项目扩展的首选, 问题:twemproxy自身单端口实例的压力,
使用一致性hash后,对redis节点数量改变时候的 计算值的改变,数据无法自动移动到新的节点。
云服务(阿里云Redis)
阿里云的redis集群同样基于proxy,用户对路由信息无感知,同时提供vip给客户端访问,客户端只需一个连接地址即可,
无须关心proxy访问的负载均衡等。
在业务代码层
起几个毫无关联的redis实例,在代码层,对key 进行hash计算,然后去对应的redis实例操作数据。
这种方式对hash层代码要求比较高,考虑部分包括,节点失效后的替代算法方案,数据震荡后的自动脚本恢复,实例的监控,等等。