1、问题现象
线上部署一个40分片的Redis Cluster集群,初始化的时候日志输出一直是Waiting for the cluster to join ......(大集群初始化的时候会出现时间长)
2、问题分析
1)集群各节点实例肯定是起来了,否则会报错某个节点不可连接(可以写个shell脚本判断一下服务状态验证)
2)从日志上看是否有错误提示,查看redis server日志并没有明显错误
3)搞清楚集群初始化做那些事儿,组成集群需要各个节点通信(集群总线端口)
4)从命令结果提示入手排除解决
[ERR] Node 10.162.62.45:6007 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
5)集群初始化的报错,就查看每个节点初始化的状态,如cluster nodes(cluster nodes |wc -l),写个简单的shell脚本统计每个节点的初始化状态
3、问题解决
如果存在上述部分节点初始化状态不一致,则关闭这些节点(必须要清空缓存节点node信息),删除dump.rdb和nodes.conf文件(避免从磁盘重新加载),再启动实例,然后重新组成集群
注意:并不是关闭集群中所有的实例,实际只用关闭加入集群的节点即可,不要浪费时间,每个节点是独立的master才是正常的
4、问题根因
redis server启动需要开启客户端通讯端口和集群总线端口(客户端通讯端口+10000),如果集群总线端口未起来,集群初始化的时候部分节点成功,部分节点失败了(通信部分失败)