You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两台服务器搭建Redis Cluster时一直卡在等待集群加入状态求助

Redis Cluster创建卡在等待节点加入状态的排查与解决

问题场景

  • 架构规划:2台服务器搭建3主3从Redis Cluster
    • 服务器1(IP:10.27.62.95):部署端口7000、7002、7003的Redis实例
    • 服务器2(IP:10.27.62.124):部署端口7001、7004、7005的Redis实例
  • 执行的集群创建命令:
./redis-cli --cluster create 10.27.62.95:7000 10.27.62.124:7001 10.27.62.95:7002 10.27.62.95:7003 10.27.62.124:7004 10.27.62.124:7005 --cluster-replicas 1
  • 异常现象:输入yes确认集群分配方案后,进程一直卡在等待节点加入的状态
  • 实例配置示例(以7001端口为例):
protected-mode no
port 7001
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
loglevel notice
logfile /home/redis2/redis-log.log
databases 16
always-show-logo no
set-proc-title yes
proc-title-template "{title} {listen-addr} {server-mode}"
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
rdb-del-sync-files no
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
lazyfree-lazy-user-flush no
oom-score-adj no
oom-score-adj-values 0 200 800
disable-thp yes
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
cluster-enabled yes
cluster-node-timeout 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes

排查与解决方法

1. 修复实例绑定地址问题

当前配置未设置bind参数,Redis默认绑定127.0.0.1,导致跨服务器实例无法互相通信(即使protected-mode设为no也无效)。

  • 解决:在每个实例的redis.conf中添加bind 0.0.0.0(允许所有IP访问),或绑定服务器实际IP(如10.27.62.95/10.27.62.124),然后重启所有Redis实例。

2. 确认集群总线端口连通性

Redis Cluster除业务端口(7000-7005)外,还会使用业务端口+10000的端口(如7000对应17000,7001对应17001)进行节点间总线通信。需确保所有服务器的这些端口能互相访问:

  • 测试命令示例(在服务器1上测试服务器2的7001端口对应的总线端口):
nc -zv 10.27.62.124 17001

所有实例对应的总线端口都需连通。

3. 调整工作目录权限

配置中dir ./表示使用当前启动目录作为数据目录,若启动Redis的用户无该目录读写权限,会导致RDB/AOF文件无法生成,集群初始化失败。

  • 解决:修改dir为有读写权限的绝对路径(如dir /home/redis2/data),确保启动用户对该目录拥有读写权限,重启实例。

4. 检查实例启动日志

查看实例日志(如配置中的/home/redis2/redis-log.log),排查启动是否存在异常:

  • 查看错误日志命令:
cat /home/redis2/redis-log.log | grep ERROR

常见问题包括端口被占用、文件权限不足、配置项语法错误等,根据日志修复后重启实例。

5. 调整集群创建命令的节点顺序

--cluster-replicas 1会按命令中节点顺序分配主从,原命令的节点顺序可能导致从节点集中在同一服务器,虽不会直接导致卡住,但调整顺序可优化主从分布:

  • 调整后的命令示例:
./redis-cli --cluster create 10.27.62.95:7000 10.27.62.95:7002 10.27.62.95:7003 10.27.62.124:7001 10.27.62.124:7004 10.27.62.124:7005 --cluster-replicas 1

先列出所有主节点,再列出从节点,Redis会自动尽量将从节点分配到不同服务器。

建议操作流程

  1. 停止所有Redis实例
  2. 统一修改所有实例的bind和dir配置项
  3. 启动所有实例,检查日志确认无启动错误
  4. 测试所有业务端口和总线端口的连通性
  5. 重新执行集群创建命令

内容的提问来源于stack exchange,提问作者Robin Revialus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 10:31:07