Kubernetes集群中gocql连接YugabyteDB出现peers表找不到主机配置问题
常见配置问题排查清单
- Tserver 广播地址配置不匹配:检查YugabyteDB TServer的
broadcast_rpc_address启动参数,确认该参数配置的是K8s集群中其他命名空间可直接访问的Pod IP,而非仅当前命名空间可见的内部地址、或者localhost/127.0.0.1这类回环地址。如果广播地址和实际Pod对外暴露的IP不一致,驱动通过system.peers表查询节点信息时就会匹配失败。 system.peers表数据异常:连接到YugabyteDB集群执行查询SELECT peer, rpc_address FROM system.peers;,对比返回的IP列表和DNS解析出的3个TServer Pod IP是否完全一致。如果有两个IP不在返回结果中,说明这两个TServer节点没有成功加入集群,或者注册到system.peers的地址和实际Pod IP不一致。- 驱动节点自动发现配置问题:gocql驱动默认会开启节点自动发现功能,会基于首次连接的节点返回的peer列表刷新集群节点信息。如果你的集群开启了TLS或者身份认证,确认驱动配置的证书、凭证有权限访问
system.peers表;如果不希望使用自动发现,可以在驱动初始化时添加配置DisableAutoDiscovery: true,强制仅使用你配置的DNS地址列表进行连接,即可消除该报错。 - K8s Service 端点异常:检查
yb-tservers.my-namespace.svc.cluster.local对应的Endpoint资源,确认3个TServer Pod的IP都已经正确注册到Endpoint中,没有异常剔除的情况。同时确认没有配置Service的会话粘性导致首次连接仅能命中其中一个正常的节点,另外两个节点的流量被拦截导致驱动无法拉取到对应信息。 - 网络策略限制:检查K8s集群的NetworkPolicy配置,确认应用所在的命名空间有权限访问TServer Pod的9042端口、以及7000等集群内部通信端口,避免另外两个TServer的返回包被网络策略拦截,导致驱动无法获取到这两个节点的peer信息。
- TServer多网卡地址选择异常:如果TServer Pod配置了多张网卡,确认启动参数中
rpc_bind_addresses指定的是对应K8s集群内部通信的网卡IP,避免节点注册时选到了其他网卡的地址,导致和实际Pod IP不匹配。
内容的提问来源于stack exchange,提问作者dh YB
相关产品推荐
相关产品推荐

