>>分享孙卫琴的Java技术专稿和著作 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 8319 个阅读者 刷新本主题
 * 贴子主题:  【Spring Cloud Alibaba专题】按照集群模式搭建Redis集群 回复文章 点赞(0)  收藏  
作者:sunweiqin    发表时间:2022-08-25 11:17:03     消息  查看  搜索  好友  邮件  复制  引用

本文参考孙卫琴,杜聚宾所创作的<<Spring Cloud Alibaba微服务开发宝典>>一书,即将出版

本文按照集群模式来搭建Redis集群。如图1所示,一共建立6个节点,有三个是主节点,另外三个是从节点。这6个节点的安装文件分别位于C:\redis1、C:\redis2、C:\redis3、C:\redis4、C:\redis5、C:\redis6目录下。

点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小
图1  包括6个节点的Redis集群

创建图1所示的Redis集群的步骤如下。
(1)把Redis的安装压缩文件解压到C:\redis1目录下,作为第一个Redis节点。
(2)在C:\redis1目录下创建redis.conf配置文件,参见例程1。
例程1  redis.conf

#监听端口
port 7001
#开启集群功能
cluster-enabled yes
#集群的配置文件名称,不需要自己创建,由Redis自己维护
cluster-config-file node-7001.conf
#节点心跳失败的超时时间
cluster-node-timeout 5000
#持久化文件存放目录
dir "\data"
#绑定地址
bind 0.0.0.0
#是否让Redis后台运行
daemonize no
#保护模式
protected-mode no
#数据库数量
databases 1

(3)在C:\redis1目录下创建data子目录。Redis节点的存储数据以及node-7001.conf集群配置文件都会存放在该目录下。
(4)把C:\redis1目录中的内容复制到C:\redis2、C:\redis3、C:\redis4、C:\redis5、C:\redis6目录中。
(5)修改C:\redis2、C:\redis3、C:\redis4、C:\redis5、C:\redis6目录中的redis.conf配置文件,修改相应的端口号。例如C:\redis2目录下的redis.conf文件作如下修改,端口号改为为7002,集群配置文件改为node-7002.conf:

port 7002
……
cluster-config-file node-7002.conf

(6)在DOS命令行转到每个Redis节点的根目录下,运行以下命令:

redis-server   redis.conf

以上命令会根据redis.conf文件中的配置内容启动Redis节点。
(7)在DOS命令行转到C:\redis1目录,运行以下命令搭建Redis集群:

redis-cli --cluster create --cluster-replicas 1
127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003
127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006

以上命令会把6个Redis节点作为一个集群,打印以下信息:

Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
Adding replica 127.0.0.1:7006 to 127.0.0.1:7003

以上信息显式了各个节点之间的主从关系,例如端口为7001的节点为主节点,它的从节点的端口为7004。值得注意的是,主从节点的关系并不是一成不变的。redis-cli命令会按照特定算法选择一个可用的节点作为特定主节点的从节点。

问题:“向Redis集群中存入一对key/value,到底存放到哪个Redis节点呢?”
回答:“每个Redis主节点都包含若干哈希槽(hash slot)。这对key/value会存放到特定的哈希槽中。”

Redis 集群中内置了 16384 个哈希槽,分摊到所有的Redis主节点中。在图2中,三个主节点分别分配了5461、5462、5461个哈希槽。每个槽都有编号,依次为0、1、2,直到16383。例如编号为3的槽位于主节点1,编号为5463的槽位于主节点2,编号为10925的槽位于主节点3。

点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小
图2   Redis 集群中各节点的哈希槽分配

当应用程序向 Redis 集群中存入一对key/value时,与应用程序连接的Redis节点先按照key计算哈希槽的编号,运算表达式为:

crc16(key) % 16384        //crc16是一种校验算法

以上表达式的取值位于0到16384之间,表示槽的编号,假定取值为10925。由于编号为10925的槽位于主节点3中,这对key/value就会存放到主节点3的编号为10925的槽中。在一个槽中,可以存放多对key/value。此外,主节点存放的数据会同步到从节点中。

使用哈希槽的优点在于可以方便地添加或移除节点。当需要向Redis集群增加节点时,只需要把其他节点的某些哈希槽挪到新节点;当需要移除节点时,只需要把被移除节点的哈希槽挪到其他可用节点。




程序猿的技术大观园:www.javathinker.net
网站系统异常


系统异常信息
Request URL: http://www.javathinker.net/WEB-INF/lybbs/jsp/topic.jsp?postID=4211

java.lang.NullPointerException

如果你不知道错误发生的原因,请把上面完整的信息提交给本站管理人员