
本文详细介绍如何在 Red Hat Enterprise Linux (RHEL) 8 的香港服务器环境下 搭建、配置及调优 Redis Sentinel 高可用集群,并确保在主节点故障时数据的一致性和服务的连续性。文章内容覆盖硬件建议、系统优化、Redis/Sentinel 配置、故障切换流程、性能评估与调优方法。
一、背景与目标
Redis 是一款高性能的内存键值数据库,广泛用于缓存、消息队列、实时分析等场景。为了提高 Redis 服务的可用性,通常使用 Redis Sentinel 来实现主从监控与自动故障切换。但单靠默认配置在生产环境往往无法满足高可用及数据一致性要求。
本文目标:
- 搭建一个具有自动故障转移能力的 Redis Sentinel 集群;
- 实现 Redis 主从复制与故障自动切换机制;
- 做好 Redis 在 RHEL 8 系统上的性能调优;
- 提供测试评估数据,并分析性能表现。
二、环境准备
2.1 香港服务器www.a5idc.com硬件配置建议(3 节点 Sentinel + 3 节点 Redis 主从)
| 节点角色 | CPU | 内存 | 存储 | 网络 |
|---|---|---|---|---|
| Redis 主节点 | 8 cores @ 2.5GHz | 32 GB | NVMe SSD 500GB | 10 Gbps |
| Redis 从节点 | 8 cores @ 2.5GHz | 32 GB | NVMe SSD 500GB | 10 Gbps |
| Sentinel 节点 | 4 cores @ 2.0GHz | 8 GB | SSD 120GB | 1 Gbps |
说明:
- Redis 使用内存作为主要存储,建议内存根据业务峰值设置,并预留 20% 余量;
- SSD 提高 AOF/RDB 持久化效率;
- 10Gbps 网络可以显著降低主从复制延迟。
2.2 软件版本
| 软件 | 版本 |
|---|---|
| RHEL | 8.x |
| Redis | 7.x(建议使用最新稳定版) |
| Redis Sentinel | 随 Redis 安装包提供 |
| GCC / Make | 兼容编译 Redis |
三、RHEL 8 系统优化
3.1 内核参数调整(/etc/sysctl.d/99-redis.conf)
conf
# 最大文件句柄
fs.file-max = 1000000
# 网络设置
net.core.somaxconn = 1024
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
# 内存过度使用保护
vm.overcommit_memory = 1
vm.swappiness = 10
使参数生效:
bash
sudo sysctl --system
3.2 用户限制(/etc/security/limits.d/99-redis.conf)
redis soft nofile 65536
redis hard nofile 65536
四、安装 Redis
4.1 编译安装(适用于没有 yum 源的环境)
bash
sudo yum groupinstall -y "Development Tools"
wget https://download.redis.io/releases/redis-7.0.11.tar.gz
tar -zxvf redis-7.0.11.tar.gz
cd redis-7.0.11
make BUILD_TLS=yes
sudo make install
4.2 创建 Redis 用户与目录结构
bash
sudo useradd -r -s /sbin/nologin redis
sudo mkdir -p /var/lib/redis /etc/redis /var/log/redis
sudo chown redis:redis /var/lib/redis /etc/redis /var/log/redis
五、Redis 主从复制配置
5.1 主节点配置(/etc/redis/redis.conf)
conf
bind 0.0.0.0
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
dir /var/lib/redis
logfile /var/log/redis/redis.log
# 持久化策略
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfilename "appendonly.aof"
5.2 从节点配置
复制主节点:
conf
replicaof <master_ip> 6379
其余配置项与主节点类似。
六、搭建 Redis Sentinel 集群
6.1 Sentinel 配置示例(/etc/redis/sentinel.conf)
conf
port 26379
daemonize yes
dir /var/lib/redis
logfile /var/log/redis/sentinel.log
sentinel monitor mymaster <master_ip> 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1
关键参数说明:
| 参数 | 作用 |
|---|---|
| sentinel monitor | 注册监控 Redis 主节点 |
| down-after-milliseconds | 触发主节点下线前等待时间 |
| failover-timeout | 故障切换超时时间 |
| parallel-syncs | 允许同时同步的从节点数 |
6.2 启动 Sentinel
bash
sudo -u redis redis-sentinel /etc/redis/sentinel.conf
在三台 Sentinel 节点上分别执行,确保多个 Sentinel 组成多数派。
七、性能调优建议
7.1 持久化策略
Redis 提供 RDB 和 AOF 两种持久化方式:
| 持久化 | 优点 | 缺点 |
|---|---|---|
| RDB | 快照小、恢复快 | 可能丢失最后几秒数据 |
| AOF | 更高数据安全性 | 文件较大、重写开销 |
建议:
- 关键数据启用 AOF;
- 设置
appendfsync everysec,在性能与持久性之间取得平衡。
7.2 内存配置
在高负载场景,调整以下内存相关参数:
conf
maxmemory 24gb
maxmemory-policy allkeys-lru
确保 Redis 不因内存飙升导致 OOM。
7.3 Sentinel 超时调整
根据实际网络延迟调整:
conf
sentinel down-after-milliseconds mymaster 10000
sentinel failover-timeout mymaster 20000
八、测试与评估
8.1 故障切换测试
- 在主节点执行
redis-cli DEBUG sleep 100模拟无响应; - Sentinel 发现主节点不可用并执行故障切换;
- 一个从节点晋升为主;
查看 Sentinel 状态:
bash
redis-cli -p 26379 sentinel masters
8.2 性能测试
使用 redis-benchmark 测试读写性能:
bash
redis-benchmark -h <ip> -p 6379 -c 50 -n 100000 -d 1024
| 测试项 | QPS(每秒请求数) | 说明 |
|---|---|---|
| SET 1K | ~110,000 | 写入性能 |
| GET 1K | ~250,000 | 读取性能 |
| INCR | ~300,000 | 单增操作 |
8.3 数据一致性验证
使用主从同步延迟监控:
bash
redis-cli INFO replication
关注 master_repl_offset 与 slave_repl_offset 的差异。
九、常见问题及解决方案
9.1 Sentinel 选举失败
原因:
- 节点数量过少;
- 网络延迟较高。
解决:
- 使用至少 3 个 Sentinel;
- 确保各节点网络稳定。
9.2 数据丢失
可能原因:
- AOF 重写失败;
- RDB 快照时机不合适。
解决:
- 启用 AOF 且
appendfsync everysec; - 监控 AOF 重写日志。
十、结语
通过本文步骤,你可以:
- 在 RHEL 8 上搭建稳定可靠的 Redis 主从 + Sentinel 高可用集群;
- 优化内核参数与 Redis 配置以提升性能;
- 通过性能测试、故障模拟确保系统在真实生产环境的稳定性;
- 利用监控与调优实践确保数据一致性。
在生产部署前,A5数据建议结合业务负载实际情况进一步调优,如网络延迟、持久化方案选型、内存策略等,以达到更高的可用性与性能。