Redis集群安装部署完整指南
Redis 集群安装部署完整指南
前言
Redis 集群是 Redis 官方提供的分布式解决方案,支持数据自动分片、主从复制和故障自动转移。本文将详细介绍如何在 Linux 服务器上部署 Redis 集群。
环境准备
服务器规划
本文使用 6 台服务器搭建 3 主 3 从的 Redis 集群:
| 服务器IP | 端口 | 角色 |
|---|---|---|
| 192.168.1.101 | 7000 | Master1 |
| 192.168.1.101 | 7001 | Slave1 |
| 192.168.1.102 | 7000 | Master2 |
| 192.168.1.102 | 7001 | Slave2 |
| 192.168.1.103 | 7000 | Master3 |
| 192.168.1.103 | 7001 | Slave3 |
系统要求
- 操作系统:CentOS 7+ / Ubuntu 18.04+
- 内存:最低 2GB,推荐 4GB+
- 网络:服务器之间内网互通
安装 Redis
1. 安装依赖
# CentOS
yum install -y gcc gcc-c++ make tcl
# Ubuntu
apt-get install -y build-essential tcl
2. 下载并编译 Redis
cd /usr/local/src
wget https://download.redis.io/releases/redis-7.0.15.tar.gz
tar xzf redis-7.0.15.tar.gz
cd redis-7.0.15
make -j4
make install PREFIX=/usr/local/redis
3. 创建目录结构
mkdir -p /usr/local/redis/{7000,7001,7002,7003,7004,7005}
mkdir -p /usr/local/redis/{7000,7001,7002,7003,7004,7005}/{data,logs}
配置 Redis 集群节点
节点配置文件示例(7000 端口)
cat > /usr/local/redis/7000/redis.conf << 'EOF'
# 基础配置
bind 0.0.0.0
port 7000
daemonize yes
pidfile /usr/local/redis/7000/redis.pid
loglevel notice
logfile /usr/local/redis/7000/logs/redis.log
# 持久化配置
dir /usr/local/redis/7000/data/
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
# AOF 持久化
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
# 网络配置
tcp-backlog 511
timeout 0
tcp-keepalive 300
# 内存管理
maxmemory 2gb
maxmemory-policy allkeys-lru
# 慢查询日志
slowlog-log-slower-than 10000
slowlog-max-len 128
# 集群配置
cluster-enabled yes
cluster-config-file /usr/local/redis/7000/nodes.conf
cluster-node-timeout 15000
cluster-require-full-coverage no
# 安全配置
requirepass your_password
# 连接数
maxclients 10000
EOF
批量创建配置文件
for i in {0..5}; do
port=$((7000 + i))
dir_port=$((7000 + i))
cat > /usr/local/redis/${dir_port}/redis.conf << EOF
bind 0.0.0.0
port ${port}
daemonize yes
pidfile /usr/local/redis/${dir_port}/redis.pid
loglevel notice
logfile /usr/local/redis/${dir_port}/logs/redis.log
dir /usr/local/redis/${dir_port}/data/
cluster-enabled yes
cluster-config-file /usr/local/redis/${dir_port}/nodes.conf
cluster-node-timeout 15000
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
maxmemory 2gb
maxmemory-policy allkeys-lru
EOF
done
启动 Redis 实例
1. 编写启动脚本
cat > /usr/local/redis/start-all.sh << 'EOF'
#!/bin/bash
for port in 7000 7001 7002 7003 7004 7005; do
echo "Starting Redis on port ${port}..."
/usr/local/redis/bin/redis-server /usr/local/redis/${port}/redis.conf
done
echo "All Redis instances started!"
EOF
chmod +x /usr/local/redis/start-all.sh
2. 启动 Redis
/usr/local/redis/start-all.sh
3. 验证启动
redis-cli -p 7000 ping
# 应该返回 PONG
redis-cli -p 7000 info server | grep tcp-port
# 查看端口信息
ps aux | grep redis-server
# 查看进程
创建 Redis 集群
使用 redis-cli 创建集群
/usr/local/redis/bin/redis-cli --cluster create \
192.168.1.101:7000 192.168.1.101:7001 \
192.168.1.102:7000 192.168.1.102:7001 \
192.168.1.103:7000 192.168.1.103:7001 \
--cluster-replicas 1 \
--cluster-yes
集群创建过程说明
执行上述命令后,Redis 会:
1. 分配槽位:自动将 16384 个槽位分配给 3 个主节点 2. 分配从节点:为每个主节点分配一个从节点 3. 数据同步:从节点从主节点同步数据 4. 集群就绪:完成后集群即可使用
验证集群状态
redis-cli -p 7000 cluster info
# 查看节点状态
redis-cli -p 7000 cluster nodes
# 查看槽位分配
redis-cli -p 7000 cluster slots
# 查看所有槽位信息
集群管理命令
查看集群信息
# 连接任意节点查看集群信息
redis-cli -c -p 7000 cluster info
# 查看所有主节点
redis-cli -c -p 7000 cluster nodes | grep master
# 查看槽位信息
redis-cli -c -p 7000 cluster slots
测试集群读写
# 开启集群模式连接
redis-cli -c -p 7000
# 设置键值(自动路由到对应节点)
127.0.0.1:7000> SET key1 value1
-> Redirected to slot [9189] located at 192.168.1.102:7000
OK
# 读取键值
127.0.0.1:7000> GET key1
-> Redirected to slot [9189] located at 192.168.1.102:7000
"value1"
节点管理
# 登录特定节点
redis-cli -c -p 7000
# 查看节点信息
127.0.0.1:7000> INFO replication
# 查看所有 key
127.0.0.1:7000> KEYS *
故障转移测试
手动故障转移
# 登录从节点
redis-cli -p 7001
# 执行故障转移
127.0.0.1:7001> CLUSTER FAILOVER
模拟主节点宕机
# 停止主节点
redis-cli -p 7000 SHUTDOWN
# 等待几秒,观察从节点是否提升为主节点
redis-cli -p 7001 cluster nodes
# 恢复原主节点
/usr/local/redis/bin/redis-server /usr/local/redis/7000/redis.conf
集群扩容操作
添加新节点
# 1. 启动新节点(端口 7006)
/usr/local/redis/bin/redis-server /usr/local/redis/7006/redis.conf
# 2. 添加新节点到集群
redis-cli --cluster add-node 192.168.1.103:7006 192.168.1.101:7000
# 3. 重新分配槽位(reshard)
redis-cli --cluster reshard 192.168.1.101:7000 \
--cluster-from all \
--cluster-to <新节点ID> \
--cluster-slots 4096 \
--cluster-yes
删除节点
# 1. 先将槽位移走
redis-cli --cluster reshard 192.168.1.103:7006 \
--cluster-from <要删除的节点ID> \
--cluster-to <目标节点ID> \
--cluster-slots <移槽位数> \
--cluster-yes
# 2. 删除节点
redis-cli --cluster del-node 192.168.1.103:7006 <要删除的节点ID>
配置 Systemd 服务
创建 Redis 服务文件
cat > /etc/systemd/system/redis@.service << 'EOF'
[Unit]
Description=Redis In-Memory Data Store (Cluster Node %i)
After=network.target
[Service]
Type=forking
User=redis
Group=redis
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/%i/redis.conf
ExecStop=/usr/local/redis/bin/redis-cli -p %i shutdown
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
EOF
管理 Redis 服务
# 启动服务
systemctl start redis@7000
systemctl start redis@7001
# 查看状态
systemctl status redis@7000
# 设置开机自启
systemctl enable redis@7000
systemctl enable redis@7001
# 查看所有 Redis 服务状态
systemctl list-units | grep redis
性能监控
Redis CLI 监控
# 实时监控
redis-cli -p 7000 --stat
# 内存信息
redis-cli -p 7000 INFO memory
# 客户端连接
redis-cli -p 7000 INFO clients
# 复制信息
redis-cli -p 7000 INFO replication
# 持久化信息
redis-cli -p 7000 INFO persistence
慢查询日志
# 查看慢查询
redis-cli -p 7000 SLOWLOG GET 10
# 查看慢查询数量
redis-cli -p 7000 SLOWLOG LEN
# 重置慢查询日志
redis-cli -p 7000 SLOWLOG RESET
常见问题
1. 集群创建失败
# 检查防火墙
firewall-cmd --list-ports
firewall-cmd --permanent --add-port=7000-7005/tcp
# 检查端口占用
netstat -tlnp | grep 70
2. 节点无法通信
# 检查节点间网络连通性
redis-cli -p 7000 -h 192.168.1.102 -p 7000 PING
# 检查集群配置
redis-cli -p 7000 cluster nodes
3. 槽位冲突
# 检查槽位分配
redis-cli -p 7000 cluster slots
# 如有冲突,修复槽位
redis-cli --cluster fix 192.168.1.101:7000
总结
本文详细介绍了 Redis 集群的完整部署流程,包括:
1. 环境准备和服务器规划 2. Redis 源码编译安装 3. 集群节点配置 4. 集群创建和管理 5. 故障转移测试 6. 扩容缩容操作 7. Systemd 服务配置 8. 性能监控和故障排查
通过本文的步骤,您可以在生产环境中成功部署和管理 Redis 集群,为应用提供高可用的分布式缓存服务。
参考资源:
- Redis 官方文档:https://redis.io/documentation
- Redis Cluster 教程:https://redis.io/topics/cluster-tutorial
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。






