Redis作为高性能的内存数据库,在缓存、会话存储、消息队列等场景中广泛应用。当单机Redis实例无法满足性能或容量需求时,搭建Redis集群成为必然选择。Redis集群通过数据分片(Sharding)和主从复制(Replication)实现高可用与横向扩展,官方推荐至少6个节点(3主3从)的部署方案。
我在实际生产环境中部署过数十次Redis集群,遇到过各种网络配置、持久化、故障转移等问题。本文将基于Linux环境,详细讲解从零开始部署Redis集群的全过程,包含关键配置解析、性能调优和运维技巧。
Redis集群对服务器配置有特定要求:
提示:资源有限时可用单机多端口模拟,但生产环境务必分离部署
以Redis 7.0为例的安装步骤:
bash复制# 安装编译依赖
sudo apt-get install -y build-essential tcl
# 下载解压
wget https://download.redis.io/releases/redis-7.0.12.tar.gz
tar xzf redis-7.0.12.tar.gz
cd redis-7.0.12
# 编译安装
make -j$(nproc) && make test
sudo make install
关键编译选项说明:
MALLOC=libc:默认内存分配器BUILD_TLS=yes:启用TLS支持USE_SYSTEMD=yes:systemd集成每个节点需要独立的redis.conf,关键参数:
conf复制port 6379
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
appendonly yes
daemonize yes
protected-mode no
重要参数解析:
cluster-node-timeout:故障判定阈值(毫秒)protected-mode:生产环境应通过bind+密码加强安全appendonly:建议开启持久化bash复制# 为每个节点创建数据目录
mkdir -p /var/lib/redis/6379
# 启动实例(每个节点执行)
redis-server /path/to/redis.conf
验证节点状态:
bash复制redis-cli -p 6379 ping
# 应返回 PONG
bash复制redis-cli --cluster create \
192.168.1.101:6379 \
192.168.1.102:6379 \
192.168.1.103:6379 \
192.168.1.104:6379 \
192.168.1.105:6379 \
192.168.1.106:6379 \
--cluster-replicas 1
参数说明:
--cluster-replicas 1:每个主节点有1个从节点bash复制redis-cli --cluster check 192.168.1.101:6379
预期输出应包含:
connected节点宕机恢复流程:
cluster failover槽位迁移命令示例:
bash复制redis-cli --cluster reshard 192.168.1.101:6379
| 参数 | 推荐值 | 作用 |
|---|---|---|
tcp-backlog |
511 | 连接队列长度 |
maxmemory |
物理内存70% | 防止OOM |
cluster-require-full-coverage |
no | 部分槽位可用 |
repl-disable-tcp-nodelay |
no | 降低复制延迟 |
conf复制requirepass yourstrongpassword
masterauth yourstrongpassword
conf复制bind 192.168.1.101
conf复制rename-command FLUSHDB ""
rename-command CONFIG ""
通过redis-cli --cluster info获取:
推荐使用Prometheus+Redis_exporter实现可视化监控。
添加新节点:
bash复制# 添加主节点
redis-cli --cluster add-node new_host:port existing_host:port
# 添加从节点
redis-cli --cluster add-node --slave new_host:port existing_host:port
重新平衡集群:
bash复制redis-cli --cluster rebalance --cluster-use-empty-masters existing_host:port
网络配置:
持久化策略:
客户端连接:
java复制JedisCluster jedis = new JedisCluster(
new HostAndPort("192.168.1.101", 6379),
1000, 1000, 5, "password", poolConfig);
升级注意事项:
我在实际运维中发现,集群性能瓶颈往往出现在网络延迟和内存碎片问题上。建议每月定期执行MEMORY PURGE命令清理内存碎片,并使用redis-cli --cluster info持续监控集群状态。