“Bad response from node”错误主因是集群总线端口16379不通,因其专用于节点间Gossip通信(握手、心跳、故障检测等),而6379仅处理客户端请求;需从其他节点执行redis-cli -h IP -p 16379 ping验证连通性,并检查防火墙、bind、cluster-enabled及时间同步等配置。
“Bad response from node” 错误基本就是集群总线通信失败,不是 Redis 服务端口(6379)不通,而是集群专用端口(默认 16379)被防火墙拦了或没监听。
Redis 集群节点之间用两套独立通道:
6379(或你配的业务端口)走客户端命令请求 —— 这个通不代表集群能工作16379(port + 10000)走集群总线(cluster bus),专用于节点握手、心跳、故障检测、槽迁移 —— CLUSTER NODES 返回 fail 或 noaddr、Bad response from node 多半卡在这儿telnet 或 curl 无法验证;必须用 redis-cli --cluster 或直连总线端口发 PING别只查 netstat -tuln | grep 16379,那只能说明本机监听了;关键得从其他节点发起连接测试:
redis-cli -h -p 16379 ping —— 如果返回 PONG,说明总线端口通且服务正常;如果超时或报 Connection refused,说明目标没监听或被拦截grep "cluster-enabled yes" /etc/redis/6379.conf,没这行或值为 no,16379 根本不会启动127.0.0.1:grep "^bind" /etc/redis/6379.conf,必须包含实际网卡 IP 或 0.0.0.0(不推荐生产)iptables -L INPUT -n | grep 16379,若无匹配,补规则:iptables -A INPUT -p tcp --dport 16379 -j ACCEPT
即使所有节点都开了 16379,仍可能因以下原因返回 “Bad response”:
ntpq -p 或 timedatectl status 检查并同步sestatus 查状态,临时关闭测试:setenforce 0
cluster-announce-ip 但填的是内网地址,而节点实际通过公网通信 —— 导致其他节点尝试连错 IPcluster-config-file 被多个实例共用(比如没按端口区分文件名),导致节点元数据错乱,重启后仍报错总线端口问题往往藏得深:它不报错在日志里,也不阻断单点访问,只让集群视图分裂、槽信息不同步、重定向失败 —— 所以只要看到 “Bad response from node”,先盯死 16379 的连通性,比调配置、重刷 nodes.conf 更快定位根因。