企业级 Redis 高可用集群部署指南—— 基于天枢平台的标准化实践

一、概述

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、内存配额;
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值