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

单机 6 节点打造Redis Cluster(3主3从)——从零到可用与踩坑速修

文章目录

    • 1. 集群结构
    • 2. 准备目录与配置
    • 3. 启动所有实例
    • 4. 打开防火墙端口
    • 5. 创建集群
    • 6. 测试
      • 槽位机制
      • 正确的做法
    • 8. 查看集群节点信息
      • 节点分布表
    • 9. 总结

在前面我们已经体验了主从和 Sentinel,这次我们更进一步,手把手搭建一个 Redis 分片集群(Cluster)
Redis Cluster 可以自动完成数据分片与高可用,本篇演示如何在一台服务器上用 6 个实例模拟 3 主 3 从的集群。


1. 集群结构

我们在同一台服务器 156.238.xxx.xxx 上,开启 6 个 Redis 实例:

IPPORT角色
156.238.xxx.xxx7001master
156.238.xxx.xxx7002master
156.238.xxx.xxx7003master
156.238.xxx.xxx8001slave
156.238.xxx.xxx8002slave
156.238.xxx.xxx8003slave

最终形成一个最小可用的分片集群,每个 master 节点都有一个对应的 slave 节点。


2. 准备目录与配置

进入工作目录 /www/server,准备 6 个实例目录:

cd /www/server
mkdir 7001 7002 7003 8001 8002 8003

新建一个模板配置 redis.conf,内容如下:

port 6379
cluster-enabled yes
cluster-config-file /www/server/6379/nodes.conf
cluster-node-timeout 5000
dir /www/server/6379
bind 0.0.0.0
daemonize yes
replica-announce-ip 156.238.xxx.xxx
protected-mode no
databases 1
logfile /www/server/6379/run.log# 统一密码
requirepass 1111
masterauth 1111

将模板拷贝到各个实例目录:

echo 7001 7002 7003 8001 8002 8003 | xargs -t -n 1 cp redis.conf

在这里插入图片描述

批量修改端口号和目录:

printf '%s\n' 7001 7002 7003 8001 8002 8003 \| xargs -I{} -t sed -i 's/6379/{}/g' {}/redis.conf

这样每个实例都有自己的配置文件。
在这里插入图片描述


3. 启动所有实例

执行批量启动命令:

printf '%s\n' 7001 7002 7003 8001 8002 8003 \| xargs -I{} -t /www/server/redis/src/redis-server {}/redis.conf

在这里插入图片描述

确认进程:

ps -ef | grep redis

在这里插入图片描述

如果需要关闭所有实例,可以用:

printf '%s\n' 7001 7002 7003 8001 8002 8003 \| xargs -I{} -t /www/server/redis/src/redis-cli -a 1111 -p {} shutdown

4. 打开防火墙端口

Redis Cluster 不仅需要普通服务端口(7001–7003, 8001–8003),还需要额外的 集群总线端口(端口号 = 服务端口 + 10000,例如 17001–17003, 18001–18003)。

如果这些端口没有放行,节点之间无法通信,redis-cli --cluster create 会卡住,如下图。
在这里插入图片描述

由于我使用的是宝塔面板,所以我在直接在宝塔界面将端口放开了
在这里插入图片描述


5. 创建集群

Redis 5.0+ 已经内置了集群管理命令,可以直接用 redis-cli 来完成。执行以下命令:

redis-cli -a 1111 --cluster create --cluster-replicas 1 156.238.xxx.xxx:7001 156.238.xxx.xxx:7002 156.238.xxx.xxx:7003 156.238.xxx.xxx:8001 156.238.xxx.xxx:8002 156.238.xxx.xxx:8003

在这里插入图片描述

命令说明:

  • --cluster create:创建集群。
  • --cluster-replicas 1:每个 master 节点分配一个 slave 节点。
  • 前 3 个节点作为 master,后 3 个自动挂到不同的 master 作为 slave。

执行过程中输入 yes 确认,最终提示 [OK] 表示集群创建成功。
在这里插入图片描述


6. 测试

尝试连接 7001 节点,存储一个数据:

# 连接
redis-cli -a 1111 -p 7001
# 存储数据
set num 520
# 读取数据
get num
# 再次存储
set a 1

结果发现 num 正常写入,但 a 却报错了:
在这里插入图片描述

槽位机制

在 Redis Cluster 中,所有 key 都会通过 CRC16 算法计算出一个值,再对 16384 取模,得到一个槽位号(slot)。
集群会把 16384 个槽平均分配给不同的 master 节点

  • num 这个 key 的槽位是 2765,刚好属于 7001 节点负责的区间,所以可以直接写入。
  • a 这个 key 的槽位是 15495,分配给了 7003 节点,因此 7001 会返回 MOVED 错误,告诉客户端去 7003 存储。

我们可以用命令直接查看槽位号:

redis-cli -a 1111 -p 7001 cluster keyslot num
redis-cli -a 1111 -p 7001 cluster keyslot a

输出示例:

(integer) 2765
(integer) 15495

再配合 cluster nodes 就能看到每个槽位段由哪个 master 节点负责。

正确的做法

集群模式下,必须带上 -c 参数,让 redis-cli 自动跟随槽位跳转:

redis-cli -c -a 1111 -p 7001

这次 set a 1 就能自动重定向到 7003 节点:
在这里插入图片描述


8. 查看集群节点信息

集群创建完成后,可以通过以下命令查看拓扑:

redis-cli -a 1111 -p 7001 cluster nodes

示例输出:
在这里插入图片描述

节点分布表

节点角色槽位范围关联关系
7001master0–5460有从节点 8001
7002master5461–10922有从节点 8002
7003master10923–16383有从节点 8003
8001slave-复制 7001
8002slave-复制 7002
8003slave-复制 7003

9. 总结

  • 我们在单机上运行了 6 个实例,组成了一个最小可用的 Redis Cluster
  • 创建集群前必须放行 服务端口总线端口,否则会卡在创建命令。
  • 通过 redis-cli --cluster create 一键完成槽位分配与主从关系配置。
  • 集群模式下要用 redis-cli -c 才能正确跟随槽位进行读写。
  • 槽位是集群分片的核心机制,每个 key 会通过哈希计算映射到某个槽位,从而决定存在哪个节点。
  • 最终集群的节点分布如下:
MasterSlot 范围对应 Slave
70010–54608001
70025461–109228002
700310923–163838003

http://www.dtcms.com/a/427653.html

相关文章:

  • Cesium快速入门到精通系列教程二十:Cesium 1.95 给实体添加事件
  • 02、命令行的介绍
  • 三五互联网站管理登录地址wordpress 黑色
  • 小杰深度学习(four)——神经网络可解释性、欠拟合、过拟合
  • 【手撕机器学习 03】从“生数据”到“黄金特征”:机器学习项目中价值最高的一步
  • 网站关键字优化教程株洲发布信息网
  • 昆明优化网站公司在与客户谈网页广告时如何让客户相信网站流量
  • UNIX下C语言编程与实践21-UNIX 文件访问权限控制:st_mode 与权限宏的解析与应用
  • 瑞芯微RK35XX系列FFmpeg硬件编解码实测,详细性能对比!
  • php网站后台搭建wordpress购买返现
  • 首架机下线!“四川造”大型载客eVTOL筑低空新里程碑
  • 基于STM32与influxDB的电力监控系统-13
  • 250925-0930技术总结
  • AI 重塑实体经济:从技术落地到价值创造的实践路径
  • 认识软件测试
  • 网站服务器数据库湛江网站建设公司哪个好
  • 动手实现简单Vue.js ,探索Vue原理
  • UNIX下C语言编程与实践18-UNIX 文件存储原理:目录、i 节点、数据块协同存储文件的过程
  • 珠宝怎么做网站wordpress 活动报名插件
  • 除自身以外数组的乘积
  • 爬虫逆向--Day25Day26--原型链补环境
  • 拍拍灯电路(用咪头识别拍拍动作)
  • 极限!ubuntu系统联网
  • 第三章 字典与集合
  • 网站设计的价格沪深300指数基金
  • Java-01-基础篇-JDK日志(JUL)
  • (基于江协科技)51单片机入门:7.LED点阵屏
  • 江协科技 CAN总线入门课程(错误处理)
  • 网站的建设与规划方案企业网站建设要素
  • antdv- Tooltip 文字提示组件