一、概述
1.1 目的
本指南面向企业运维工程师、开发运维人员,提供一套基于天枢一体化虚拟仿真靶场平台的 Redis Cluster 分布式集群标准化部署方案。通过遵循本指南,可快速搭建具备高可用、高性能、水平扩展能力的 Redis 集群,满足缓存系统、会话管理、排行榜、消息队列等关键业务场景的生产环境需求。
1.2 适用范围
- 业务规模较大,需要水平扩展能力的企业级应用
- 对系统可用性、数据可靠性要求较高的生产环境
- 基于天枢一体化虚拟仿真靶场平台及 openEuler 操作系统的基础设施环境
1.3 前置条件
- 3 台已部署 openEuler 操作系统的服务器
- 服务器已接入天枢一体化虚拟仿真靶场平台,通过 doubleNat 外网服务设备和 accessPoint 网络接入设备实现网络互通
- 服务器之间网络通畅,无防火墙策略阻断关键端口
- 服务器已配置 yum/dnf 软件源,可正常安装软件包

1.4 集群架构说明
本次部署采用 三主三从 架构,将 6 个 Redis 实例分布式部署在 3 台服务器上,每台服务器同时承担 1 个主节点(Master)和 1 个从节点(Slave),具体架构如下:
| 服务器 | IP 地址 | 运行实例 | 角色分配 |
| Server1 | 10.10.0.168 | redis-7001、redis-7002 | 主节点(7001)、从节点(7002) |
| Server2 | 10.10.0.158 | redis-7001、redis-7002 | 主节点(7001)、从节点(7002) |
| Server3 | 10.10.0.88 | redis-7001、redis-7002 | 主节点(7001)、从节点(7002) |
核心特性:
- 数据分片:16384 个哈希槽均匀分配给 3 个主节点,实现水平扩展
- 高可用:每个主节点对应 1 个从节点,主节点故障时从节点自动切换
- 网络架构:通过天枢平台的 doubleNat 和 accessPoint 设备,支持用户无缝接入集群局域网
二、环境准备
2.1 系统配置优化(server1配置为例)
2.1.1 调整内核参数
编辑系统内核配置文件,启用内存优化(解决 Redis 内存分配警告问题):
| [root@localhost 7002]# vi /etc/sysctl.conf |
添加 / 修改以下配置项:
| kernel.sysrq = 0 net.ipv4.ip_forward = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.tcp_syncookies = 1 kernel.dmesg_restrict = 1 net.ipv6.conf.all.accept_redirects = 0 net.ipv6.conf.default.accept_redirects = 0 # Redis 内存分配优化:允许内核过量分配内存,避免 Redis 启动时报告内存不足 vm.overcommit_memory = 1 |
生效配置:
| [root@localhost ~]# sysctl -p |
2.2 安装 Redis(server1配置为例)
通过 dnf 命令快速安装 Redis(openEuler 官方源自带 Redis 包):
| [root@localhost ~]# dnf install redis -y |
三、Redis 实例配置(server1配置为例)
3.1 创建实例目录结构
为每个 Redis 实例创建独立的配置目录和数据目录(区分 7001 和 7002 端口实例):
| [root@localhost etc]# mkdir -p /etc/redis/7001 # 7001 端口实例配置目录 [root@localhost etc]# mkdir -p /etc/redis/7002 # 7002 端口实例配置目录 |
3.2 编写 Redis 配置文件
3.2.1 7001 端口实例配置(/etc/redis/7001/redis.conf)
| [root@localhost 7001]# cat redis.conf |
配置内容如下(关键参数已标注说明):
| # 实例端口号(客户端连接端口) port 7001 # 绑定所有网卡(允许跨服务器访问) bind 0.0.0.0 # 后台运行模式 daemonize yes # 数据存储目录 dir /etc/redis/7001 # PID 文件路径 pidfile /var/run/redis_7001.pid # 启用集群模式 cluster-enabled yes # 集群配置文件 cluster-config-file nodes-7001.conf # 集群节点超时时间(毫秒),超时未响应则判定为节点故障 cluster-node-timeout 5000 # 启用 AOF 持久化 appendonly yes # 关闭保护模式(允许外部网络访问) protected-mode no # TCP 保活时间(秒),保持连接稳定性 tcp-keepalive 300 # 日志级别(notice:仅记录关键信息) loglevel notice # 日志输出路径(空表示输出到控制台,生产环境可指定文件如 /var/log/redis_7001.log) logfile "" # 数据库数量(默认 16,此处简化为 1) databases 1 |
3.2.2 7002 端口实例配置(/etc/redis/7002/redis.conf)
复制 7001 端口配置文件,修改端口相关参数:
| [root@localhost 7002]# cat redis.conf |
修改以下关键参数:
| port 7002 bind 0.0.0.0 daemonize yes dir /etc/redis/7002 pidfile /var/run/redis_7002.pid cluster-enabled yes cluster-config-file nodes-7002.conf cluster-node-timeout 5000 appendonly yes protected-mode no tcp-keepalive 300 loglevel notice logfile "" databases 1 |
3.3 启动 Redis 实例(所有服务器)
分别启动 7001 和 7002 端口的 Redis 实例:
| # 启动 7001 端口实例 [root@localhost ~]# redis-server /etc/redis/7001/redis.conf # 启动 7002 端口实例 [root@localhost ~]# redis-server /etc/redis/7002/redis.conf |
验证实例启动状态:
| [root@localhost ~]# ps -aux | grep redis |
预期输出(两个实例均为 [cluster] 模式):
| root 4962 0.0 0.3 74884 10672 ? Ssl 15:52 0:00 redis-server 0.0.0.0:7001 [cluster] root 4968 0.0 0.3 74884 10744 ? Ssl 15:52 0:00 redis-server 0.0.0.0:7002 [cluster] root 4974 0.0 0.0 22108 2232 pts/0 S+ 15:52 0:00 grep --color=auto redis |
3.4 防火墙端口放行(所有服务器)
Redis 集群需要开放两类端口:
- 客户端端口:7001、7002(用于客户端连接)
- 集群总线端口:17001、17002(用于节点间通信,端口号 = 客户端端口 + 10000)
执行以下命令放行端口:
| # 永久放行客户端端口和集群总线端口 [root@localhost ~]# firewall-cmd --permanent --add-port=7001-7002/tcp [root@localhost ~]# firewall-cmd --permanent --add-port=17001-17002/tcp # 重新加载防火墙规则 [root@localhost ~]# firewall-cmd --reload |
验证端口放行结果:
| [root@localhost ~]# firewall-cmd --list-ports # 预期输出:7001-7002/tcp 17001-17002/tcp |
Server2,server3同server1一样的配置和操作,平台中也可以将配置好的server1镜像进行克隆后修改服务器名称及IP,就得到了相同的配置结果。
四、Redis Cluster 集群创建
4.1 前提条件
- 3 台服务器的 6 个 Redis 实例均已正常启动(ps -aux | grep redis 可查)
- 所有服务器的防火墙端口已放行(7001-7002、17001-17002)
- 服务器之间网络互通(可通过 ping 目标IP 验证)
4.2 执行集群创建命令
在任意一台服务器(如 Server1)执行以下命令,创建三主三从集群:
| [root@localhost ~]# redis-cli --cluster create \ 10.10.0.168:7001 \ # Server1-7001 10.10.0.168:7002 \ # Server1-7002 10.10.0.158:7001 \ # Server2-7001 10.10.0.158:7002 \ # Server2-7002 10.10.0.88:7001 \ # Server3-7001 10.10.0.88:7002 \ # Server3-7002 --cluster-replicas 1 # 每个主节点分配 1 个从节点 |
4.3 确认集群配置
命令执行后,Redis 会自动分配哈希槽和主从关系,输出如下:
| >>> Performing hash slots allocation on 6 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 Adding replica 10.10.0.158:7002 to 10.10.0.168:7001 Adding replica 10.10.0.88:7002 to 10.10.0.158:7001 Adding replica 10.10.0.168:7002 to 10.10.0.88:7001 M: 86cf9518cdd77570ec07fb46d7860cd1cccbb98b 10.10.0.168:7001 slots:[0-5460] (5461 slots) master S: e3610b1f944b9deb0bebec80bb1fa7b3746c8272 10.10.0.168:7002 replicates b2ceff7023f2ee98b52392d1c22f03c197d2e94b M: f6bc5e3c6fef5dc43fae92ecf9816df37ac529ba 10.10.0.158:7001 slots:[5461-10922] (5462 slots) master S: f5e83e984f6f5bb436ac190cf27548f675477544 10.10.0.158:7002 replicates 86cf9518cdd77570ec07fb46d7860cd1cccbb98b M: b2ceff7023f2ee98b52392d1c22f03c197d2e94b 10.10.0.88:7001 slots:[10923-16383] (5461 slots) master S: 36a1ad3d55a6629214c825e93884ce4607c75e65 10.10.0.88:7002 replicates f6bc5e3c6fef5dc43fae92ecf9816df37ac529ba Can I set the above configuration? (type 'yes' to accept): |
这里可以看到主从信息和每个主redis对应的slot号输入 yes 确认配置,集群创建完成。
五、集群验证与测试
5.1 集群状态检查
5.1.1 查看集群配置信息
| [root@localhost 7001]# redis-cli -c -p 7001 cluster nodes |
预期输出:
| f6bc5e3c6fef5dc43fae92ecf9816df37ac529ba 10.10.0.158:7001@17001 myself,master - 0 1764662769000 3 connected 5461-10922 36a1ad3d55a6629214c825e93884ce4607c75e65 10.10.0.88:7002@17002 slave f6bc5e3c6fef5dc43fae92ecf9816df37ac529ba 0 1764662771075 3 connected 80089b956ef2d851f6e1b5575a568c1cc3b64721 10.10.0.168:7001@17001 master - 0 1764662771075 1 connected 0-5460 f5e83e984f6f5bb436ac190cf27548f675477544 10.10.0.158:7002@17002 slave 80089b956ef2d851f6e1b5575a568c1cc3b64721 0 1764662770000 1 connected b2ceff7023f2ee98b52392d1c22f03c197d2e94b 10.10.0.88:7001@17001 master - 0 1764662771075 5 connected 10923-16383 11b6e4746140578402fa6de06fd29d828e5bd627 10.10.0.168:7002@17002 slave b2ceff7023f2ee98b52392d1c22f03c197d2e94b 0 1764662770573 5 connected |
5.1.2 查看节点拓扑与主从关系
| [root@localhost 7001]# redis-cli -c -p 7002 cluster nodes |
输出中包含每个节点的 IP、端口、角色(master/slave)、槽位分配等关系。
| 11b6e4746140578402fa6de06fd29d828e5bd627 10.10.0.168:7002@17002 slave b2ceff7023f2ee98b52392d1c22f03c197d2e94b 0 1764662779778 5 connected b2ceff7023f2ee98b52392d1c22f03c197d2e94b 10.10.0.88:7001@17001 master - 0 1764662778000 5 connected 10923-16383 f6bc5e3c6fef5dc43fae92ecf9816df37ac529ba 10.10.0.158:7001@17001 master - 0 1764662778774 3 connected 5461-10922 80089b956ef2d851f6e1b5575a568c1cc3b64721 10.10.0.168:7001@17001 master - 0 1764662779577 1 connected 0-5460 f5e83e984f6f5bb436ac190cf27548f675477544 10.10.0.158:7002@17002 myself,slave 80089b956ef2d851f6e1b5575a568c1cc3b64721 0 1764662778000 1 connected 36a1ad3d55a6629214c825e93884ce4607c75e65 10.10.0.88:7002@17002 slave f6bc5e3c6fef5dc43fae92ecf9816df37ac529ba 0 1764662779000 3 connected |
| [root@localhost 7001]# redis-cli -c -p 7001 cluster info |
预期输出:
| cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:3 cluster_stats_messages_ping_sent:295 cluster_stats_messages_pong_sent:297 cluster_stats_messages_meet_sent:1 cluster_stats_messages_sent:593 cluster_stats_messages_ping_received:297 cluster_stats_messages_pong_received:296 cluster_stats_messages_received:593 total_cluster_links_buffer_limit_exceeded:0 |
5.1.3 查看槽位分配详情
| [root@localhost 7001]# redis-cli -c -p 7001 cluster slots |
输出 3 组槽位范围,对应 3 个主节点的分片情况。
| 1) 1) (integer) 0 2) (integer) 5460 3) 1) "10.10.0.168" 2) (integer) 7001 3) "80089b956ef2d851f6e1b5575a568c1cc3b64721" 4) (empty array) 4) 1) "10.10.0.158" 2) (integer) 7002 3) "f5e83e984f6f5bb436ac190cf27548f675477544" 4) (empty array) 2) 1) (integer) 5461 2) (integer) 10922 3) 1) "10.10.0.158" 2) (integer) 7001 3) "f6bc5e3c6fef5dc43fae92ecf9816df37ac529ba" 4) (empty array) 4) 1) "10.10.0.88" 2) (integer) 7002 3) "36a1ad3d55a6629214c825e93884ce4607c75e65" 4) (empty array) 3) 1) (integer) 10923 2) (integer) 16383 3) 1) "10.10.0.88" 2) (integer) 7001 3) "b2ceff7023f2ee98b52392d1c22f03c197d2e94b" 4) (empty array) 4) 1) "10.10.0.168" 2) (integer) 7002 3) "11b6e4746140578402fa6de06fd29d828e5bd627" 4) (empty array) |
5.2 数据读写测试
5.2.1 写入数据并验证主从同步
在 Server1 的 7001 主节点写入数据:
| [root@localhost 7001]# redis-cli -p 7001 -c set testkey "hello" OK [root@localhost 7001]# redis-cli -p 7001 -c get testkey "hello" [root@localhost 7001]# redis-cli -p 7002 -c get testkey "hello" [root@localhost 7001]# 这是server2的效果 [root@localhost 7001]# redis-cli -p 7002 -c get testkey "hello" [root@localhost 7001]# |
六、总结与扩展
6.1 部署成果
通过本指南部署的 Redis Cluster 集群具备以下特性:
- 高可用:三主三从架构,主节点故障自动切换,无单点故障;
- 高性能:数据分片到 3 个主节点,支持水平扩展;
- 易运维:结合天枢一体化虚拟仿真靶场平台,可一键创建虚拟机、快速搭建网络拓扑;
- 安全性:通过防火墙端口控制、网络隔离保障集群安全;
6.2 平台优势
天枢一体化虚拟仿真靶场平台为 Redis 集群部署提供了以下便利:
- 自动化节点创建:一键启动虚拟机,无需手动配置操作系统;
- 网络拓扑可视化:直观展示集群节点、网络设备连接关系;
- 远程接入能力:通过 accessPoint 节点实现远程主机无缝接入局域网;
- 资源弹性伸缩:根据业务负载动态调整服务器 CPU、内存配额;

被折叠的 条评论
为什么被折叠?



