上一篇
最近小王公司的电商平台搞促销活动,平时运行良好的Redis突然开始频繁超时,甚至出现了几次缓存雪崩,导致数据库直接被流量打挂,运维团队紧急开会后决定:是时候上Redis集群了!但面对集群配置,小王和团队却犯了难——从哪开始?要注意哪些坑?别急,今天我就带你从零开始,一步步搭建一个高可用的Redis集群环境。
我建议至少准备3台物理机或虚拟机(如果预算有限,6个Docker容器也能凑合),每台配置:
避坑提示:千万别在单机上跑多个Redis节点还假装是集群,那样和单机没区别!
以CentOS 7为例(其他系统类似):
# 安装基础依赖 sudo yum install -y gcc make tcl # 下载Redis 7.2稳定版(截至2025年8月最新) wget https://download.redis.io/releases/redis-7.2.3.tar.gz tar xzf redis-7.2.3.tar.gz cd redis-7.2.3 # 编译安装 make && make install
假设我们有6个节点,3主3从,这样任意一台机器挂掉都不影响服务:
节点 | IP | 端口 | 角色 |
---|---|---|---|
节点1 | 168.1.101 | 7001 | 主节点 |
节点2 | 168.1.102 | 7002 | 主节点 |
节点3 | 168.1.103 | 7003 | 主节点 |
节点4 | 168.1.101 | 7004 | 从节点 |
节点5 | 168.1.102 | 7005 | 从节点 |
节点6 | 168.1.103 | 7006 | 从节点 |
重要原则:主从节点不要放在同一台机器上!
创建配置文件redis-cluster.conf
模板:
port ${PORT}
cluster-enabled yes
cluster-config-file nodes-${PORT}.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
protected-mode no
pidfile /var/run/redis_${PORT}.pid
logfile "/var/log/redis/redis-${PORT}.log"
dir /data/redis/${PORT}
用这个Shell脚本快速生成6个节点的配置:
#!/bin/bash PORTS=(7001 7002 7003 7004 7005 7006) for port in ${PORTS[@]}; do mkdir -p /data/redis/${port} mkdir -p /var/log/redis envsubst < redis-cluster.conf > redis-${port}.conf sed -i "s/\${PORT}/$port/g" redis-${port}.conf done
for port in {7001..7006}; do redis-server redis-${port}.conf done
使用redis-cli的集群命令自动分配主从:
redis-cli --cluster create \ 192.168.1.101:7001 \ 192.168.1.102:7002 \ 192.168.1.103:7003 \ 192.168.1.101:7004 \ 192.168.1.102:7005 \ 192.168.1.103:7006 \ --cluster-replicas 1
看到这个提示时输入yes
:
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.1.102:7005 to 192.168.1.101:7001
Adding replica 192.168.1.103:7006 to 192.168.1.102:7002
Adding replica 192.168.1.101:7004 to 192.168.1.103:7003
>>> Trying to optimize slaves allocation for anti-affinity
[OK] Perfect anti-affinity obtained.
# 查看集群节点 redis-cli -p 7001 cluster nodes # 检查集群健康状态 redis-cli --cluster check 192.168.1.101:7001
随便kill一个主节点进程,观察从节点是否自动升级:
# 查看当前主从关系 redis-cli -p 7001 cluster nodes | grep master kill -9 $(cat /var/run/redis_7001.pid) # 30秒后再检查 redis-cli -p 7004 cluster nodes | grep master
# 在原有配置上追加
cluster-require-full-coverage no # 部分slot不可用时不拒绝所有请求
maxmemory 6gb # 设置为物理内存的75%
maxmemory-policy volatile-lru # 内存满时淘汰策略
建议监控这些指标:
cluster info
中的cluster_state
cluster nodes
输出变化used_memory
与maxmemory
比值keyspace_hits/(keyspace_hits+keyspace_misses)
问题1:节点间无法通信
firewall-cmd --list-ports
问题2:MOVED重定向错误
问题3:新增节点后数据不均衡
# 手动重新分配slot redis-cli --cluster rebalance 192.168.1.101:7001
搭建Redis集群就像搭积木,步骤本身不复杂,但每个细节都关乎稳定性,记得第一次上线前一定要做:
现在你的Redis集群已经可以扛住单机故障了,不过真正的挑战才刚刚开始——下次我们可以聊聊如何在不停机的情况下扩展集群容量,有什么问题欢迎留言讨论!
本文由 线原 于2025-08-01发表在【云服务器提供商】,文中图片由(线原)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/506615.html
发表评论