以 3 个哨兵为例,假设此时的 quorum 设置为 2,那么,任何一个想成为 Leader 的哨兵只要拿到 2 张赞成票,就可以了 。
新库选择
上面已经选举出了哨兵代表,此时代表需要完成新主库的选择,新库的选择需要满足以下几个标准
- 新库需要处于健康状态,也就是和哨兵之间保持正常的网络连接
- 选择salve-priority从节点优先级最高(redis.conf)的
- 选择复制偏移量最大,只复制最完整的从节点
故障转移
上面一小节哨兵已经选举出了新的主库,故障转移要实现新老主库之间的切换
故障转移流程如下:
文章插图
哨兵模式优缺点
优点
- 实现了集群的监控,故障转移,实现了高可用
- 拥有主从复制模式的所有优点
缺点
- 集群存储容量有限,容量上线就是主库的内存的大小,无法存储更多内容
Redis 的哨兵模式实现了高可用了,但是每台 Redis 服务器上存储的都是相同的数据,浪费内存,而且很难实现容量上的扩展 。所以在 redis3.0上加入了 Cluster 集群模式,实现了 Redis 的分布式存储,也就是说每台 Redis 节点上存储不同的内容 。
Redis 集群的数据分片
Redis 集群没有使用一致性hash, 而是引入了哈希槽的概念.
Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽,举个例子,比如当前集群有3个节点,那么:
- 节点 A 包含 0 到 5500号哈希槽.
- 节点 B 包含5501 到 11000 号哈希槽.
- 节点 C 包含11001 到 16384号哈希槽.
这种结构很容易添加或者删除节点. 比如如果我想新添加个节点D, 我需要从节点 A, B, C中得部分槽到D上. 如果我想移除节点A,需要将A中的槽移到B和C节点上,然后将没有任何槽的A节点从集群中移除即可. 由于从一个节点将哈希槽移动到另一个节点并不会停止服务,所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态.
Redis 集群实战
环境:
- Vmware 虚拟机
- centos 7
- Redis 6.0.6
因为我是在本机上演示的,所以用的虚拟机
主从复制
集群信息如下:
节点配置文件端口masterredis6379.conf6379slave1redis6380.conf6380slave1redis6381.conf6380
第一步:准备三个 redis.conf 配置文件,配置文件信息如下
# redis6379.conf master # 包含命令,有点复用的意思 include /soft/redis6.0.6/bin/redis.conf pidfile redis_6379.pid port 6379 dbfilename dump6379.rdb logfile "redis-6379.log" # redis6380.conf slave1 include /soft/redis6.0.6/bin/redis.conf pidfile redis_6380.pid port 6380 dbfilename dump6380.rdb logfile "redis-6380.log" # 最后一行设置了主节点的 ip 端口 replicaof 127.0.0.1 6379 # redis6381.conf slave2 include /soft/redis6.0.6/bin/redis.conf pidfile redis_6381.pid port 6381 dbfilename dump6381.rdb logfile "redis-6381.log" # 最后一行设置了主节点的 ip 端口 replicaof 127.0.0.1 6379 ## 注意 redis.conf 要调整一项,设置后台运行,对咱们操作比较友好 daemonize yes第二步:启动服务器
-- 首先启动 6379 这台服务器,因为他是主库(启动命令在 redis 安装目录的 bin 目录下) ../bin/redis-server redis6379.conf -- 接口启动 6380 和 6381 ../bin/redis-server redis6380.conf ../bin/redis-server redis6381.conf第三步:用客户端连接服务器
cd bin redis-cli -p 6379 redis-cli -p 6380 redis-cli -p 6381 这里我开了三个窗口分别连接三台 redis 服务器,方便查看在 6379 客户端输入命令: info replication 可用查看集群信息
文章插图
第四步:数据同步
现在集群已经搭建好了,我们在 6379 服务器写入几条数据,看下可不可以同步到 6380 和 6381
6379:
推荐阅读
- 谢霆锋|谢霆锋发文示爱王菲:我爱了你20年,打脸两子,渣男属性彻底暴露
- 谢霆锋|“锋菲恋”沸沸扬扬二十年,这次是否真的画上句号?
- 吉克隽逸|从淳朴大山妹到目中无人耍大牌,吉克隽逸彻底垮台!
- 唐莲|《少年歌行》两位主角结局被改,唐莲彻底下线,赵玉真重伤退隐
- 地下室怎么防潮除湿更彻底? 地下室如何防水防潮
- 乙肝能否彻底治愈? 治疗乙肝
- 叶童|靳东这次的“清醒”,让多少实力派演员“大梦初醒”?
- 李思思|李思思带儿子游玩,自拍大变样不敢认,尖下巴彻底没了一姐气派
- 家里的蚂蚁怎么彻底消除? 家里有蚂蚁怎么办
- 订阅号消息怎么彻底删除—手机微信上的订阅号消息怎么关闭?
