Redis 6.2.20 单机三节点 Cluster 部署手册
·
1. 部署说明
本文档用于在一台裸金属服务器上部署 Redis 6.2.20 Cluster。
本方案部署 3 个 Redis 进程:
192.168.200.2:7000
192.168.200.2:7001
192.168.200.2:7002
集群模式:
3 master,0 replica
说明:
该方案可以实现 Redis Cluster 分片。
该方案没有副本节点,因此不具备 Redis Cluster 高可用能力。
任意一个节点停止后,对应 hash slot 将不可用。
Redis 安装根目录:
/server/cluster/redis-6.2.20
Redis 密码:
Redis@123456
如需修改密码,三个 Redis 配置文件和脚本中的密码需要保持一致。
2. 目录规划
进入 Redis 根目录:
cd /server/cluster/redis-6.2.20
创建目录:
mkdir -p /server/cluster/redis-6.2.20/opt/7000
mkdir -p /server/cluster/redis-6.2.20/opt/7001
mkdir -p /server/cluster/redis-6.2.20/opt/7002
mkdir -p /server/cluster/redis-6.2.20/data/7000
mkdir -p /server/cluster/redis-6.2.20/data/7001
mkdir -p /server/cluster/redis-6.2.20/data/7002
mkdir -p /server/cluster/redis-6.2.20/var/log
mkdir -p /server/cluster/redis-6.2.20/var/run
mkdir -p /server/cluster/redis-6.2.20/sh
最终目录结构:
/server/cluster/redis-6.2.20
├── bin
├── data
│ ├── 7000
│ ├── 7001
│ └── 7002
├── opt
│ ├── 7000
│ ├── 7001
│ └── 7002
├── sh
└── var
├── log
└── run
3. Redis 7000 配置
配置文件:
vi /server/cluster/redis-6.2.20/opt/7000/redis.conf
内容:
port 7000
bind 0.0.0.0
protected-mode no
daemonize yes
pidfile /server/cluster/redis-6.2.20/var/run/redis-7000.pid
logfile /server/cluster/redis-6.2.20/var/log/redis-7000.log
dir /server/cluster/redis-6.2.20/data/7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 15000
cluster-announce-ip 192.168.200.2
cluster-announce-port 7000
cluster-announce-bus-port 17000
requirepass Redis@123456
masterauth Redis@123456
appendonly yes
appendfilename "appendonly-7000.aof"
tcp-backlog 511
timeout 0
tcp-keepalive 300
databases 16
save 900 1
save 300 10
save 60 10000
maxmemory-policy noeviction
ignore-warnings ARM64-COW-BUG
4. Redis 7001 配置
配置文件:
vi /server/cluster/redis-6.2.20/opt/7001/redis.conf
内容:
port 7001
bind 0.0.0.0
protected-mode no
daemonize yes
pidfile /server/cluster/redis-6.2.20/var/run/redis-7001.pid
logfile /server/cluster/redis-6.2.20/var/log/redis-7001.log
dir /server/cluster/redis-6.2.20/data/7001
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000
cluster-announce-ip 192.168.200.2
cluster-announce-port 7001
cluster-announce-bus-port 17001
requirepass Redis@123456
masterauth Redis@123456
appendonly yes
appendfilename "appendonly-7001.aof"
tcp-backlog 511
timeout 0
tcp-keepalive 300
databases 16
save 900 1
save 300 10
save 60 10000
maxmemory-policy noeviction
ignore-warnings ARM64-COW-BUG
5. Redis 7002 配置
配置文件:
vi /server/cluster/redis-6.2.20/opt/7002/redis.conf
内容:
port 7002
bind 0.0.0.0
protected-mode no
daemonize yes
pidfile /server/cluster/redis-6.2.20/var/run/redis-7002.pid
logfile /server/cluster/redis-6.2.20/var/log/redis-7002.log
dir /server/cluster/redis-6.2.20/data/7002
cluster-enabled yes
cluster-config-file nodes-7002.conf
cluster-node-timeout 15000
cluster-announce-ip 192.168.200.2
cluster-announce-port 7002
cluster-announce-bus-port 17002
requirepass Redis@123456
masterauth Redis@123456
appendonly yes
appendfilename "appendonly-7002.aof"
tcp-backlog 511
timeout 0
tcp-keepalive 300
databases 16
save 900 1
save 300 10
save 60 10000
maxmemory-policy noeviction
ignore-warnings ARM64-COW-BUG
6. 启动 Redis 节点脚本
脚本文件:
vi /server/cluster/redis-6.2.20/sh/start-redis.sh
内容:
#!/bin/bash
/server/cluster/redis-6.2.20/bin/redis-server /server/cluster/redis-6.2.20/opt/7000/redis.conf
/server/cluster/redis-6.2.20/bin/redis-server /server/cluster/redis-6.2.20/opt/7001/redis.conf
/server/cluster/redis-6.2.20/bin/redis-server /server/cluster/redis-6.2.20/opt/7002/redis.conf
授权:
chmod +x /server/cluster/redis-6.2.20/sh/start-redis.sh
启动:
/server/cluster/redis-6.2.20/sh/start-redis.sh
检查端口:
ss -lntp | grep -E '7000|7001|7002|17000|17001|17002'
正常应看到:
7000
7001
7002
17000
17001
17002
7. 创建 Redis Cluster 脚本
注意:该脚本只需要执行一次。集群创建成功后,后续重启只执行 start-redis.sh。
脚本文件:
vi /server/cluster/redis-6.2.20/sh/start-cluster.sh
内容:
#!/bin/bash
/server/cluster/redis-6.2.20/bin/redis-cli -a Redis@123456 --cluster create \
192.168.200.2:7000 \
192.168.200.2:7001 \
192.168.200.2:7002 \
--cluster-replicas 0 \
--cluster-yes
授权:
chmod +x /server/cluster/redis-6.2.20/sh/start-cluster.sh
创建集群:
/server/cluster/redis-6.2.20/sh/start-cluster.sh
成功标志:
[OK] All 16384 slots covered.
其中 --cluster-yes 表示自动确认,不需要手动输入 yes。
8. 停止 Redis Cluster 脚本
脚本文件:
vi /server/cluster/redis-6.2.20/sh/stop-cluster.sh
内容:
#!/bin/bash
REDIS_HOME=/server/cluster/redis-6.2.20
REDIS_CLI=$REDIS_HOME/bin/redis-cli
PASSWORD=Redis@123456
PORTS=(7000 7001 7002)
for PORT in "${PORTS[@]}"; do
echo "Stopping Redis node on port ${PORT}..."
$REDIS_CLI -p ${PORT} -a ${PASSWORD} shutdown
sleep 1
if ss -lntp | grep -q ":${PORT} "; then
echo "Redis ${PORT} is still running, try killing by pidfile..."
PID_FILE=$REDIS_HOME/var/run/redis-${PORT}.pid
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
kill "$PID"
echo "Killed Redis ${PORT}, pid=${PID}"
else
echo "PID file not found for Redis ${PORT}: $PID_FILE"
fi
else
echo "Redis ${PORT} stopped."
fi
done
echo "Redis cluster stopped."
授权:
chmod +x /server/cluster/redis-6.2.20/sh/stop-cluster.sh
停止:
/server/cluster/redis-6.2.20/sh/stop-cluster.sh
检查端口:
ss -lntp | grep -E '7000|7001|7002|17000|17001|17002'
没有输出表示停止完成。
9. 验证集群
连接集群:
/server/cluster/redis-6.2.20/bin/redis-cli -c -h 192.168.200.2 -p 7000 -a Redis@123456
查看集群信息:
cluster info
正常结果包含:
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
查看节点:
cluster nodes
测试读写:
set name zhangsan
get name
也可以直接用命令测试:
/server/cluster/redis-6.2.20/bin/redis-cli -c -h 192.168.200.2 -p 7000 -a Redis@123456 set k1 v1
/server/cluster/redis-6.2.20/bin/redis-cli -c -h 192.168.200.2 -p 7000 -a Redis@123456 get k1
10. Spring Boot 连接配置
Spring Boot 2.x 常用配置:
spring:
redis:
password: Redis@123456
timeout: 3000ms
cluster:
nodes:
- 192.168.200.2:7000
- 192.168.200.2:7001
- 192.168.200.2:7002
max-redirects: 3
Spring Boot 3.x 常用配置:
spring:
data:
redis:
password: Redis@123456
timeout: 3000ms
cluster:
nodes:
- 192.168.200.2:7000
- 192.168.200.2:7001
- 192.168.200.2:7002
max-redirects: 3
11. 常见问题
11.1 提示 17000 端口被占用
报错:
Could not create server TCP listening socket 0.0.0.0:17000: bind: Address already in use
Failed listening on port 7000 (cluster), aborting.
原因:
Redis Cluster 节点会使用两个端口。
7000 是客户端端口。
17000 是集群总线端口。
17000 默认等于 7000 + 10000。
处理:
ss -lntp | grep 17000
ps -ef | grep redis
如确认是旧 Redis 进程,停止后重新启动。
11.2 创建集群时 Connection refused
报错:
Could not connect to Redis at 192.168.200.2:7000: Connection refused
原因:
7000 端口没有 Redis 进程监听。
处理:
ss -lntp | grep -E '7000|7001|7002|17000|17001|17002'
cat /server/cluster/redis-6.2.20/var/log/redis-7000.log
确认节点启动成功后再执行创建集群脚本。
11.3 ARM64-COW-BUG 报错
报错:
WARNING Your kernel has a bug that could lead to data corruption during background save.
Redis will now exit to prevent data corruption.
ignore-warnings ARM64-COW-BUG
处理:
在三个 Redis 配置文件中加入:
ignore-warnings ARM64-COW-BUG
本手册中的配置已经包含该参数。
11.4 创建集群时卡在 yes
提示:
Can I set the above configuration? (type 'yes' to accept):
处理:
创建集群命令增加:
--cluster-yes
本手册中的 start-cluster.sh 已经包含该参数。
11.5 密码命令行安全提示
提示:
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
说明:
这是 redis-cli 的安全提醒,不影响部署和使用。
12. 日常操作命令
启动 Redis 进程:
/server/cluster/redis-6.2.20/sh/start-redis.sh
首次创建集群:
/server/cluster/redis-6.2.20/sh/start-cluster.sh
停止集群:
/server/cluster/redis-6.2.20/sh/stop-cluster.sh
查看进程:
ps -ef | grep redis
查看端口:
ss -lntp | grep -E '7000|7001|7002|17000|17001|17002'
查看日志:
tail -100 /server/cluster/redis-6.2.20/var/log/redis-7000.log
tail -100 /server/cluster/redis-6.2.20/var/log/redis-7001.log
tail -100 /server/cluster/redis-6.2.20/var/log/redis-7002.log
连接集群:
/server/cluster/redis-6.2.20/bin/redis-cli -c -h 192.168.200.2 -p 7000 -a Redis@123456
查看集群状态:
/server/cluster/redis-6.2.20/bin/redis-cli -c -h 192.168.200.2 -p 7000 -a Redis@123456 cluster info
13. 端口说明
本部署需要使用以下端口:
7000 Redis 客户端端口
7001 Redis 客户端端口
7002 Redis 客户端端口
17000 Redis Cluster 总线端口
17001 Redis Cluster 总线端口
17002 Redis Cluster 总线端口
如果服务器启用了防火墙,需要放行以上端口。
14. 重新部署说明
如果需要彻底重建集群,先停止 Redis:
/server/cluster/redis-6.2.20/sh/stop-cluster.sh
清理旧集群数据:
rm -f /server/cluster/redis-6.2.20/data/7000/nodes-7000.conf
rm -f /server/cluster/redis-6.2.20/data/7001/nodes-7001.conf
rm -f /server/cluster/redis-6.2.20/data/7002/nodes-7002.conf
rm -f /server/cluster/redis-6.2.20/data/7000/appendonly-7000.aof
rm -f /server/cluster/redis-6.2.20/data/7001/appendonly-7001.aof
rm -f /server/cluster/redis-6.2.20/data/7002/appendonly-7002.aof
rm -f /server/cluster/redis-6.2.20/data/7000/dump.rdb
rm -f /server/cluster/redis-6.2.20/data/7001/dump.rdb
rm -f /server/cluster/redis-6.2.20/data/7002/dump.rdb
重新启动:
/server/cluster/redis-6.2.20/sh/start-redis.sh
重新创建集群:
/server/cluster/redis-6.2.20/sh/start-cluster.sh
更多推荐




所有评论(0)