哨兵模式sentinel
哨兵是 redis 集群机构中非常重要的一个组件,主要有以下功能:
集群监控:负责监控
redis master
和
slave
进程是否正常工作。
消息通知:如果某个
redis
实例有故障,那么哨兵负责发送消息作为报警通知给管理员。
故障转移:如果
master node
挂掉了,会自动转移到
slave node
上。
配置中心:如果故障转移发生了,通知
client
客户端新的
master
地址。
哨兵用于实现
redis
集群的高可用,本身也是分布式的,作为一个哨兵集群去运行,互相协同工作。 故障转移时,判断一个 master node
是否宕机了,需要大部分的哨兵都同意才行,涉及到了分布式选举的问题。 即使部分哨兵节点挂掉了,哨兵集群还是能正常工作的,因为如果一个作为高可用机制重要组成部分的故障转移系统本身是单点的,那就很坑了。 哨兵的核心知识哨兵至少需要
3
个实例,来保证自己的健壮性。 哨兵 + redis
主从的部署架构,是不保证数据零丢失的,只能保证
redis
集群的高可用性。
Redis Cluster模式
Redis Cluster
是一种服务端
Sharding
技术,
3.0
版本开始正式提供。
Redis Cluster并没有使用一致性
hash
,而是采用
slot(
槽
)
的概念,一共分成
16384
个 槽。将请求发送到任意节点,接收到请求的节点会将查询请求发送到正确的节点上执行
方案说明
1.
通过哈希的方式,将数据分片,每个节点均分存储一定哈希槽
(
哈希值
)
区间的数据,默认分配了
16384
个槽位
2.
每份数据分片会存储在多个互为主从的多节点上
3.
数据写入先写主节点,再同步到从节点
(
支持配置为阻塞同步
)
4.
同一分片多个节点间的数据不保持一致性
5.
读取数据时,当客户端操作的
key
没有分配在该节点上时,
redis
会返回转向指令,指向正确的节点
6.
扩容时时需要需要把旧节点的数据迁移一部分到新节点