当前位置: 首页 > 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.dtcms.com/a/320448.html

相关文章:

  • 富士 Instax 12 和 Instax Mini 11 有什么区别?推荐购买哪一款?
  • 【JMeter】调试取样器的使用
  • 全场景音频工作流实践:Melody如何打造音源管理闭环
  • git | git bash变慢解决
  • 基于 Modbus TCP 的飞升 FSH-CF计量泵多段速控制优化研究
  • pdf文件转word免费使用几个工具
  • react+echarts实现个性化评分展示(类进度条)
  • Spark01-初识Spark
  • React+TypeScript代码注释规范指南
  • 前端开发(HTML,CSS,VUE,JS)从入门到精通!第八天(Vue框架及其安装)(完结篇) 重点 ! ! !
  • React SSR 水合问题
  • Spark在什么情况下CBO才会判断失误,如何避免
  • 零成本建站:将 Windows 电脑变身为个人网站服务器
  • ubuntu alias命令使用详解
  • AI赋能SEO关键词优化策略
  • 润乾报表、帆软报表的开源替代品—JimuReport(积木报表)
  • 从大数据视角理解时序数据库选型:为何选择 Apache IoTDB?
  • 【Mybatis入门】配置Mybatis(IDEA)
  • OpenAI 开源模型 GPT-OSS MCP服务器深度解密:从工具集成到系统提示全自动化,浏览器+Python无缝协同的底层逻辑
  • 服务器快照与备份的本质区别及正确使用指南 (2025)
  • 腾讯iOA:数据安全的港湾
  • apiSQL网关调优:释放单节点的最大潜能
  • 运维系统构建
  • 实现一个进程池(精讲)
  • Java 虚拟机之双亲委派机制
  • 动手学深度学习(pytorch版):第一章节——引言
  • 力扣300:最长递增子序列
  • pytorch入门3:使用pytorch进行多输出手写数据集模型预测
  • 2025 年最佳no-code和open-source AI Agents
  • java - 深拷贝 浅拷贝