去中心化模式特点

之前介绍的主从模式和哨兵模式都只有一个master主节点,如果写操作并发比较大时,这两个模式就会堵塞。这时就可以使用集群化模式,也称之为去中心化模式,其特点是多master和多slave。

去中心化的原理为:Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 会先对 key 使用 crc16 算法算出一个结果,然后将结果对 16384 求余,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点上。当你往Redis Cluster中加入一个Key时,会根据 crc16(key) mod 16384计算这个 key 应该分布到哪个 hash slot 中,一个hash slot 中会有很多key和value。你可以理解成分区,使用单节点时的redis时只有一个表,所有的key都放在这个表里,当改用Redis Cluster以后会自动为你生成16384个分区表,写入数据时会根据上面的算法来决定你的 key 应该存在哪个分区。

搭建去中心化模式

准备工作

在这里插入图片描述
此次使用同一主机的不同端口来模拟多个服务进程,分别使用7001、7002、7003、7004、7005、7006六个端口来搭建去中心化模式。

首先修改配置文件中的以下内容。

# 设置远程连接IP改为任意
bind 0.0.0.0 -::1
# 服务进程端口
port 7001
# 使用守护线程方式启动
daemonize yes
# 开启 aof 持久化
appendonly yes
# 日志文件名称
appendfilename "appendonly7001.aof"
# 日志文件夹名称
appenddirname "appendonlydir7001"
# 开启集群模式
cluster-enabled yes
# 集群配置文件
cluster-config-file nodes-7001.conf
# 集群超时时间
cluster-node-timeout 5000

并为其他五个端口生成配置文件。

在这里插入图片描述

开始搭建

启动所有配置文件,并查看进程状况。

在这里插入图片描述

使用redis-cli --cluster命令为端口配置主从关系及哈希槽。

# 1为每个主节点的从节点个数 
redis-cli --cluster create --cluster-replicas 1 192.168.112.66:7001 192.168.112.66:7002 192.168.112.66:7003 192.168.112.66:7004 192.168.112.66:7005 192.168.112.66:7006

运行完成后可以查看各个服务的主从关系。

在这里插入图片描述

测试

登入服务测试搭建结果。

# -c为使用集群化模式 -p为链接端口号 -h为服务器IP(本地可以省略)
 redis-cli -c -p 7001

写入数据时,redis会先对 key 使用 crc16 算法算出一个结果,然后将结果对 16384 求余,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点上,然后根据数值选择对应的主服务器进行写操作。

在这里插入图片描述

模拟其中一个主节点(此处例举为7003端口)宕机。
在这里插入图片描述

使用命令重新查看集群状态。

# 检查当前集群状态 链接的IP地址以及服务端口
redis-cli --cluster check 192.168.112.66:7001

在这里插入图片描述
可以看到7003的从节点7004已经替代选举为主节点,说明集群模式集成了哨兵模式,可以对从节点进行选举。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐