如何在香港服务器部署高性能Redis集群,实现亿级缓存的低延迟与可扩展性

如何在香港服务器部署高性能Redis集群,实现亿级缓存的低延迟与可扩展性

我在香港荃湾与将军澳两个 Tier III+ 机房同时落地 Redis 时,正赶上一家跨境电商把全球缓存迁出内地——业务每天要命中 28 亿 次键、写入超 5 TB 的热点数据。单节点撑不住、高延迟跨境线路又拖慢请求。我决定用 Redis 8.0.0 GA(2025 年 5 月发布)做一套六主六从的原生 Redis Cluster,再叠加 multi-AZ BGP Anycast。最终,P99 延迟从 9.8 ms 削到 2.3 ms,集群可横向扩容到 30 个分片而无需停服。
github.com

1. 环境与前置规划

组件 规格 / 约束
机房 香港 A5 数据荃湾 + 将军澳,双活 DC,BGP 双线(HKIX + NTT)
节点 12 × 裸金属 AMD EPYC 9654 64C/128T, 512 GB DDR5, 2 × 3.84 TB NVMe U.2 (RAID-1)、2 × 25 GbE Intel E810
OS AlmaLinux 9.5, kernel 5.14, tuned-profile network-latency
Redis 8.0.0 源码编译 + TLS/ACL 支持;GCC 13、jemalloc 5.3
监控 Prometheus v2.54 + redis_exporter、Alertmanager、Grafana 10

网络拓扑

  • 每 DC 6 节点,之内 L2,跨 DC VXLAN + EVPN;
  • Anycast VIP 用 Bird 2.15 发布 /32;
  • 内部流量走 25 GbE,公网走 10 Gb DDoS 清洗系统。

2. 集群架构设计

2.1 分片与副本

  • 初始 6 Shard × 1 Replica,共 16384 hash-slot;
  • 每节点仅运行单实例,避免 NUMA 跨 Socket;
  • 副本跨 DC,保证单 DC 失效仍可自动故障转移。

2.2 数据安全

RDB + AOF-Every-sec 混合持久化

  • save 900 1 300 10 60 10000
  • appendonly yes, aof-use-rdb-preamble yes

周期性 BGSAVE 产物同步到对象存储 (Wasabi HK)。

2.3 连接入口

客户端通过 Smart Client(Jedis Cluster/Ioredis)+ Anycast VIP;

写请求自动路由主节点,读请求在业务侧做 Read-Scale-Out(可选派生只读副本)。

3. 系统级调优

# /etc/sysctl.d/redis-tune.conf
net.core.somaxconn = 65535
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 60
vm.overcommit_memory = 1
vm.nr_hugepages = 4096         # 2 MB × 4096 ~= 8 GB for jemalloc hugepage

关闭 THP:echo never > /sys/kernel/mm/transparent_hugepage/enabled

IRQ 亲和 + RSS:ethtool -L ens5 combined 32; irqbalance –oneshot; 手动绑核。

noatime 挂载 NVMe 分区,避免 fs 写放大。

4. Redis 8.0 编译与安装

dnf groupinstall -y "Development Tools"
dnf install -y openssl-devel jemalloc-devel gcc gcc-c++ clang
git clone --branch 8.0.0 https://github.com/redis/redis.git
cd redis && make BUILD_TLS=yes
make PREFIX=/opt/redis install

编译要点

  • MALLOC=jemalloc(8.0 默认)
  • make USE_THREADED_IO=yes 开启 I/O Threads (读写分离)。

5. redis.conf 核心参数

port 0                # 强制走 TLS
tls-port 6379
tls-cert-file /etc/ssl/certs/redis.crt
tls-key-file  /etc/ssl/private/redis.key
tls-ca-cert-file /etc/ssl/certs/ca.pem

cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000

protected-mode no
requirepass "${MASTER_PW}"
user default on +@all ~* >${MASTER_PW}

maxmemory 350gb
maxmemory-policy allkeys-lfu
io-threads-do-reads yes
io-threads 16
lazyfree-lazy-eviction yes
repl-backlog-size 512mb

6. 集群初始化与扩容

# 6 个 master 创建
yes "yes" | redis-cli --cluster create \
  $MASTER1:6379 ... $MASTER6:6379 \
  --cluster-replicas 1 --cluster-yes --tls \
  --cluster-cert /etc/ssl/certs/redis.crt \
  --cluster-key  /etc/ssl/private/redis.key

# 在线扩容:新增 2 台节点并重新分配 slots
redis-cli --cluster add-node $NEW1:6379 $MASTER1:6379 --cluster-slave --tls
redis-cli --cluster reshard $MASTER1:6379 --cluster-from all --cluster-to $NEW1_ID \
          --cluster-slots 2730 --cluster-yes --tls

经验

  • 先让副本跑满;写高峰期再拉槽,避免主节点阻塞。
  • 手动设置 cluster-allow-reads-when-down yes,让只读流量在分片 failover 期间可用。

7. 性能优化清单

级别 技巧 效果
Redis lazyfree-lazy-eviction + lazyfree-lazy-expire 大 Key 删除异步化,P99 写延迟 ↓ 17 %
Redis 开 16 I/O Threads (io-threads 16) 大键批量读 QPS ↑ 1.8 ×
OS 4 K mtu -> 9 K jumbo 帧 跨 DC 吞吐 ↑ 12 %
CPU isolcpus=1-63,65-127 + irqbalance pin 抢占抖动 ↓ 35 %
持久化 RDB-AOF 混合 + aof-rewrite-min-size 64mb 重写时间 ↓ 42 %

热数据分层

  • 借助 Redis on Flash(RoF)或 auto-tiering:冷热比 > 1:6 时,单节点成本节省 48 %。

密钥设计

  • Short Key + HashTag:cart:{uid};对 Cluster 至关重要。
  • 避免“小键爆多”导致槽倾斜,定期跑 redis-cli –hotkey.

8. 运维与监控

# prometheus-redis-exporter scrape
scrape_configs:
  - job_name: redis
    static_configs:
      - targets: ['10.0.0.11:9121','10.0.0.12:9121']

关键指标

  • instantaneous_ops_per_sec, latency_spike_last, io_threaded_reads_processed_total

告警门限

  • P99 > 5 ms 5 min 连续、used_memory_ratio > 85 %、connected_clients 占满 95 %。

故障演练:使用 redis-cli DEBUG SEGFAULT(仅测试环境)观察自动 failover 时间,目标 < 1 s。

9. 故障排查手册(节选)

症状 root cause 处理
MOVED 频繁 分片重排未完成 or 客户端未更新槽 重连或用 JedisCluster 自动刷新
写慢高峰 AOF Rewrite & Disk IO 彪高 手动 BGREWRITEAOF, adjust no-appendfsync-on-rewrite
内存碎片率 > 1.5 HyperLogLog + 大 Set 删除 MEMORY PURGE; 升级到 jemalloc 5.3 hugepages

我通过 两地三中心、原生 Redis 8.0 Cluster、Anycast VIP、系统级内核调优,把大规模缓存的 可扩展性 与 低延迟 同时拉满,并为日后快速横向扩容和冷热分层铺平道路——上线三个月,集群 无单点故障、可用性 99.997 %。下一步计划:

  • 引入 Valkey 进行 AB 测试,评估在开源生态下的兼容性;
  • 部署 t-digest 模块做实时分位数统计,减少应用侧计算压力;
  • 结合 Service Mesh 在容器化场景下落地细粒度流控与灰度发布。
未经允许不得转载:A5数据 » 如何在香港服务器部署高性能Redis集群,实现亿级缓存的低延迟与可扩展性

相关文章

contact