>>分享孙卫琴的Java技术专稿和著作 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 11731 个阅读者 刷新本主题
 * 贴子主题:  【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

[这个贴子最后由 sunweiqin 在 2024-07-11 13:45:20 重新编辑]
  Java面向对象编程-->多线程(上)
  JavaWeb开发-->面向对象开发方法概述之开发思想(上)
  JSP与Hibernate开发-->使用Session(Ⅱ)
  Java网络编程-->Web运作原理(Ⅰ)
  精通Spring-->域对象在持久化层的四种状态
  Vue3开发-->映射对象标识符
  【Vue.js技术专题】Vue组件的单向数据流
  【Spring Cloud Alibaba专题】Nacos配置属性的持久化
  【Spring专题】服务器端推送
  【Spring专题】控制器对象的生命周期
  【Spring专题】Spring框架的数据验证机制
  【Spring专题】@Query和@Modifying注解的增删改操作
  【持久化专题】@Enumerated注解映射枚举类型
  【持久化专题】对象-关系的映射概念
  【持久化专题】Spring与Hibernate与JPA的整合
  【Java网络编程专题】用Apache FTPClient在FTP服务器上创建目...
  【Java网络编程专题】优化访问数据库的程序代码的一些技巧
  【JavaWeb专题】在JavaWeb应用中对客户请求的异步处理
  【JavaWeb专题】Spring MVC创建Web应用范例,轻松入门
  【JavaWeb专题】Tomcat与IIS集成详解
  【Java基础编程专题】为什么说:继承关系最大的弱点就是打破...
  更多...
 IPIP: 已设置保密
树形列表:   
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。