当前位置: 首页 > news >正文

四、redis入门之集群部署

1、集群部署(Cluster)


- Redis集群是分布式运行模式,通过分片实现数据自动分区和管理,保障高可用性与可扩展性。
- 数据被分割为多个槽,分布在不同节点;节点分主从,主节点负责读写请求和集群信息维护,从节点复制主节点数据和状态。

2、Redis集群的作用


- **数据分区**:核心功能,将数据分散到多节点,突破单机内存限制以增加存储容量,且各主节点可提供读写服务以提升响应能力(单机内存过大会导致fork操作阻塞主进程、主从切换时从节点长时间不可用、全量复制阶段主节点复制缓冲区溢出等问题)。


- **高可用**:支持主从复制和主节点自动故障转移(类似哨兵),确保任一节点故障时集群仍能提供服务。

3、Redis集群的数据分片总结


1. **哈希槽机制**:

 
- 集群包含16384个哈希槽(编号0-16383),每个节点负责部分哈希槽。  
- Key通过CRC16校验后对16384取余,确定所属哈希槽及对应节点,实现自动存取。  

2. **主从复制模型**:  


- 示例:3个主节点(A、B、C)分别负责0-5460、5461-10922、10923-16383号哈希槽。  
- 单主节点(如B)故障时,集群因缺失对应哈希槽不可用。  
- 每个主节点配从节点(A1、B1、C1)后,主节点(如B)故障时,从节点(B1)会被选举为主节点继续服务;若主从节点(如B和B1)均故障,集群不可用。

4、集群部署

        Redis Cluster被配置为三主三从模式。这意味着每台服务器上的两个Redis节点中,一个节点作为主库(master),另一个作为从库(slave)。

4.1配置准备

       配置文件+目录创建

创建集群配置文件夹
mkdir -p /opt/software/redis/redis-stable/cluster
mkdir -p /opt/software/redis/cluster编辑6379端口的配置文件
vim ./cluster/redis_6379.conf
# 绑定地址,允许所有IP(IPv4和IPv6)访问
bind * -::*
# 以守护进程(后台)模式运行
daemonize yes
# 关闭保护模式,允许远程连接(生产环境需结合安全策略,如配合防火墙等)
protected-mode no
# 开启集群模式
cluster-enabled yes
# 集群节点超时时间,单位毫秒
cluster-node-timeout 5000
# 端口号
port 6379
# log日志文件路径
logfile "/opt/software/redis/redis-stable/cluster/redis6379.log"
# 集群配置文件,用于记录集群节点信息
cluster-config-file nodes-6379.conf
# AOF持久化文件名
appendfilename "appendonly6379.aof"
# RDB持久化文件名
dbfilename "dump6379.rdb"
# 数据存储目录,AOF、RDB等文件会存放在此目录(需确保目录存在且有对应权限 )
dir "/opt/software/redis/cluster"
# 开启AOF持久化
appendonly yes编辑6380端口的配置文件
vim ./cluster/redis_6380.conf
# 绑定地址,允许所有IP(IPv4和IPv6)访问
bind * -::*
# 以守护进程(后台)模式运行
daemonize yes
# 关闭保护模式,允许远程连接(生产环境需结合安全策略,如防火墙等 )
protected-mode no
# 开启集群模式
cluster-enabled yes
# 集群节点超时时间,单位毫秒
cluster-node-timeout 5000
# 端口号,对应 6380 端口
port 6380
# log 日志文件路径,记录该实例运行日志
logfile "/opt/software/redis/redis-stable/cluster/redis6380.log"
# 集群配置文件,用于记录集群节点信息
cluster-config-file nodes-6380.conf
# AOF 持久化文件名
appendfilename "appendonly6380.aof"
# RDB 持久化文件名
dbfilename "dump6380.rdb"
# 数据存储目录,AOF、RDB 等文件会存放在此目录(需确保目录存在且有对应权限 )
dir "/opt/software/redis/cluster"
# 开启 AOF 持久化
appendonly yes

4.2 启动redis

redis-server ./cluster/redis_6379.conf
redis-server ./cluster/redis_6380.conf

 插曲

如输入查看

ps aux|grep redis

出现哨兵,和6379不是以cluster启动的

说明之前的redis服务存在、redis哨兵也存在,需要做一些操作

4.2.1、关闭
关闭哨兵
redis-cli -p 26379 shutdown
关闭之前的6379端口,默认使用6379
redis-cli shutdown

再次查看出现如下

4.2.2、重启6379
redis-server ./cluster/redis_6379.confps aux|grep redis

发现6379和6380都是以cluster启动的

4.3 启动redis集群

在master节点执行命令,创建集群

redis-cli --cluster create --cluster-replicas 1 192.168.88.100:6379 192.168.88.100:6380 192.168.88.111:6379 192.168.88.111:6380 192.168.88.222:6379 192.168.88.222:6380

解释

  1. redis-cli --cluster create

    • redis-cli:Redis 官方提供的命令行客户端工具,用于与 Redis 服务器交互,执行各种操作(如读写数据、管理集群等 )。

    • --cluster:启用 redis-cli 的集群管理模式,后续可跟集群相关的子命令(这里是 create )。

    • create:子命令,功能是创建一个新的 Redis 集群,会自动为节点分配哈希槽(hash slot )、确定主从角色等,将多个 Redis 实例组织成集群。

  2. --cluster-replicas 1

    • 选项 --cluster-replicas 用于指定每个主节点(master )对应的从节点(replica,也叫 slave )数量。这里值为 1 ,意味着集群构建时,每有 1 个主节点,就会搭配 1 个从节点,用于数据冗余、故障转移,提升集群高可用性 。

  3. 192.168.88.100:6379 192.168.88.100:6380 192.168.88.111:6379 192.168.88.111:6380 192.168.88.222:6379 192.168.88.222:6380

    • 这是参与集群构建的 Redis 节点地址列表,格式为 IP:端口 。每个地址对应一个独立的 Redis 实例,这些实例需要提前正确配置(比如开启 cluster-enabled yes 等集群相关配置 )并启动。

1、告诉我们槽位

        Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383

2、告诉我们每个主节点的从节点

        Adding replica 192.168.88.111:6380 to 192.168.88.100:6379
Adding replica 192.168.88.222:6380 to 192.168.88.111:6379
Adding replica 192.168.88.100:6380 to 192.168.88.222:6379

输入 yes,完成集群搭建

检查命令

检查集群状态、槽位、节点信息、消息

redis-cli cluster info

- **集群状态**:正常(ok)
- **槽位情况**:共16384个槽位,全部已分配且状态正常,无pfail或fail状态的槽位
- **节点信息**:已知节点6个,集群规模为3(主节点数量)
- ** epoch信息**:当前集群epoch为6,本节点epoch为1
- **消息统计**:
- 发送消息:共417条(ping 210条、pong 207条)
- 接收消息:共417条(ping 202条、pong 210条、meet 5条)
- **缓冲区限制**:无超出情况(total_cluster_links_buffer_limit_exceeded:0)

检查角色、链接、故障转移等等

redis-cli info replication

- **角色**:当前节点为Redis主节点(master)。
- **从节点连接**:有1个从节点(slave)在线,信息为:IP=192.168.88.222,端口=6380,状态=online,偏移量=238,延迟=0。
- **故障转移状态**:未进行故障转移(no-failover)。
- **复制ID与偏移量**:
- master_replid:232052df7c35c72003a244f3bcfa53c9c091d0dc
- master_replid2:0000000000000000000000000000000000000000(无备用复制ID)
- master_repl_offset:238(主节点当前复制偏移量)
- second_repl_offset:-1(无二次复制偏移量)
- **复制积压缓冲区**:
- 状态:激活(repl_backlog_active:1)
- 大小:1048576字节
- 起始偏移量:1
- 历史长度:238字节

检查主、从节点的信息

redis-cli cluster nodes

1. **主节点(master)及负责槽位**:
- 192.168.88.222:6379:负责槽位10923-16383(当前连接节点)
- 192.168.88.111:6379:负责槽位5461-10922
- 192.168.88.100:6379:负责槽位0-5460

2. **从节点(slave)及对应主节点**:
- 192.168.88.222:6380:从属于192.168.88.111:6379
- 192.168.88.111:6380:从属于192.168.88.100:6379
- 192.168.88.100:6380:从属于192.168.88.222:6379

3. **集群状态**:所有节点均处于“connected”(已连接)状态,槽位分配完整(0-16383全覆盖)。

5、模拟故障转移

故障产生

查看  192.168.88.222 的6380日志文件(看好对应从节点)

cd /opt/software/redis/redis-stable/clustertail -f redis6380.log

关闭 222的 100 主节点 6379

redis-cli shutdown

在日志中看到集群快速的进行了故障转移

在 222 查看节点信息

redis-cli -p 6380 info replication

6380变成了主节点还没有从节点

使用图中命令看到一个失败的master

故障恢复

重启被关掉的6379

再次查看节点信息,发现少了一个失败的master

多了个小弟

http://www.lryc.cn/news/614206.html

相关文章:

  • 惯量时间常数 H 与转动惯量 J 的关系解析
  • UE5 图片9宫格切割
  • B4263 [GESP202503 四级] 荒地开垦 题解
  • Go语言实战案例:简易JSON数据返回
  • PostgreSQL技术大讲堂 - 第100讲:玩转PG数据库对象权限卷之迷宫
  • day070-Jenkins自动化与部署java、前端代码
  • windows 上编译PostgreSQL
  • Flutter多引擎架构下原生通信的模块化封装与性能优化
  • 研发流程管理经验分享
  • Chrome与Firefox浏览器安全运维配置命令大全:从攻防到优化的专业实践
  • 【类与对象(中)】C++类默认成员函数全解析
  • 使用 Grunt 替换 XML 文件中的属性值
  • 50系显卡ubuntu20.04安装显卡驱动,解决gazebo不调用显卡的问题
  • Java文件读写(IO、NIO)
  • HttpURLConnection (JDK原生)和Hutool HTTP工具的区别
  • 浅析线程池工具类Executors
  • ASTM D4169-23版本有哪些实施指南
  • 2025年最新Java后端场景题+八股文合集(100w字面试题总结)
  • [激光原理与应用-176]:测量仪器 - 频谱型 - AI分类与检测相对于传统算法的优缺点分析
  • 零知开源——基于STM32F103RBT6的TDS水质监测仪数据校准和ST7789显示实战教程
  • 【优选算法】BFS解决拓扑排序
  • Rust语言序列化和反序列化vec<u8>,serde库Serialize, Deserialize,bincode库(2025年最新解决方案详细使用)
  • 全面了解svm
  • 海量数据处理问题详解
  • MySQL 正则表达式详细说明
  • [ MySQL 数据库 ] 环境安装配置和使用
  • 零基础深度学习规划路线:从数学公式到AI大模型的系统进阶指南
  • IPC总结
  • 【接口自动化测试】
  • FastAPI的BackgroundTasks如何玩转生产者-消费者模式?