我们有两个数据中心(192.XXX 和 10.XXX),它们之间可以进行 gossip(端口 7001),但不能进行 thrift 或本机协议。OpsCenter 在第一个数据中心(192.XXX)的节点上运行。
在 CentOS 6.6 上从 OpsCenter 5.1.3 更新到 OpsCenter 5.2.0 后,仪表板仅显示“无法连接到集群”。
该opscenterd.log
文件显示重复尝试连接集群。
它首先连接到一个种子节点:
2015-08-10 11:52:04+0200 [Cluster_01] DEBUG:连接到集群,联系点:['192.168.0.100','192.168.0.101'];协议版本:2 2015-08-10 11:52:04+0200 [] DEBUG:主机 192.168.0.100 现已被标记 2015-08-10 11:52:04+0200 [] DEBUG:主机 192.168.0.101 现已被标记 2015-08-10 11:52:04+0200 [Cluster_01] DEBUG:[控制连接] 打开与 192.168.0.100 的新连接 2015-08-10 11:52:04+0200 [] INFO: 工厂启动 2015-08-10 11:52:04+0200 [Cluster_01] DEBUG:[控制连接] 建立新连接,注册观察者并刷新架构和拓扑 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG:[控制连接] 使用预加载的结果刷新节点列表和令牌图
以下部分对其他数据中心的每个节点以及不在种子节点列表的本地数据中心的每个节点重复:
2015-08-10 11:52:05+0200 [Cluster_01] DEBUG:[控制连接] 找到要连接的新主机:10.0.0.1 2015-08-10 11:52:05+0200 [Cluster_01] 信息:发现新的 Cassandra 主机 10.0.0.1 2015-08-10 11:52:05+0200 [Cluster_01] 调试:处理新主机 10.0.0.1 并通知侦听器 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG:未为新主机 10.0.0.1 添加连接池,因为负载平衡策略已将其标记为已忽略 2015-08-10 11:52:05+0200 [] DEBUG:主机 10.0.0.1 现已被标记
日志持续一段时间直到控制连接关闭:
2015-08-10 11:52:05+0200 [Cluster_01] DEBUG:[控制连接] 已完成获取环信息 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG:[控制连接] 由于拓扑变化而重建令牌图 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG:[控制连接] 尝试使用预加载的结果来实现架构协议 2015-08-10 11:52:05+0200 [Cluster_01] 调试:[控制连接] 架构匹配 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG:[控制连接] 未找到用户类型表 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG:[控制连接] 已获取架构,正在重建元数据 2015-08-10 11:52:05+0200 [Cluster_01] 调试:控制连接已创建 2015-08-10 11:52:05+0200 [] DEBUG:为主机 192.168.0.100 初始化新的连接池 2015-08-10 11:52:05+0200 [] INFO: 工厂启动 2015-08-10 11:52:05+0200 [] INFO: 工厂启动 2015-08-10 11:52:05+0200 [] DEBUG:已完成为主机 192.168.0.100 初始化新连接池 2015-08-10 11:52:05+0200 [Cluster_01] 调试:将主机 192.168.0.100 的池添加到会话 2015-08-10 11:52:05+0200 [Cluster_01] 调试:关闭集群调度程序 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG:由于调度程序关闭,未执行计划任务 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG:关闭控制连接 2015-08-10 11:52:05+0200 [] DEBUG: 关闭与 192.168.0.100 的连接 (46700368) 2015-08-10 11:52:05+0200 [] DEBUG: 关闭与 192.168.0.100 的套接字 2015-08-10 11:52:05+0200 [] DEBUG: 关闭与 192.168.0.100 的连接 (44407568) 2015-08-10 11:52:05+0200 [] DEBUG: 关闭与 192.168.0.100 的套接字 2015-08-10 11:52:05+0200 [] DEBUG:连接丢失:[失败实例:回溯(无框架失败)::连接已干净关闭。 ] 2015-08-10 11:52:05+0200 [] DEBUG: 关闭与 192.168.0.100 的连接 (47567568) 2015-08-10 11:52:05+0200 [] INFO: 停止工厂 2015-08-10 11:52:05+0200 [] DEBUG: 关闭与 192.168.0.100 的套接字 2015-08-10 11:52:05+0200 [] DEBUG:连接丢失:[失败实例:回溯(无框架失败)::连接已干净关闭。 ] 2015-08-10 11:52:05+0200 [] INFO: 停止工厂 2015-08-10 11:52:05+0200 [] DEBUG:连接丢失:[失败实例:回溯(无框架失败)::连接已干净关闭。 ] 2015-08-10 11:52:05+0200 [] INFO: 停止工厂
然后发生了一些奇怪的事情:与另一个数据中心的第一个节点建立了连接:
2015-08-10 11:52:05+0200 [Cluster_01] DEBUG:连接到集群,联系点:['10.0.0.1'];协议版本:2 2015-08-10 11:52:05+0200 [] DEBUG:主机 10.0.0.1 现已被标记 2015-08-10 11:52:05+0200 [Cluster_01] DEBUG:[控制连接] 打开与 10.0.0.1 的新连接 2015-08-10 11:52:05+0200 [] INFO: 工厂启动 2015-08-10 11:52:07+0200 [] TRACE: 发送心跳。 2015-08-10 11:52:10+0200 [Cluster_01] 警告:[控制连接] 连接到 10.0.0.1 时出错:错误=创建连接超时,last_host=无 2015-08-10 11:52:10+0200 [Cluster_01] 错误:控制连接失败,关闭集群:('无法连接到任何服务器',{'10.0.0.1':OperationTimedOut('错误=创建连接超时,last_host=None',)}) 2015-08-10 11:52:10+0200 [Cluster_01] 调试:关闭集群调度程序 2015-08-10 11:52:10+0200 [Cluster_01] DEBUG:关闭控制连接 2015-08-10 11:52:10+0200 [Cluster_01] DEBUG:由于调度程序关闭,未执行计划任务 2015-08-10 11:52:10+0200 [] 警告:主机列表 ['192.168.0.100', '192.168.0.101'] 没有可用的 Cassandra 连接。正在重试。
这当然会失败,因为我们不希望客户端跨数据中心进行通信。
即使采用这种集群配置,OpsCenter 仍会尝试连接到其他(错误的)数据中心:
[卡桑德拉] 种子主机 = 192.168.0.100,192.168.0.101 用户名 = opscenter 密码 = XXX local_dc_pref = DC1 used_hosts_per_remote_dc = 0
此设置对于 OpsCenter 的所有版本(直到 5.2.0 版)均没有问题。所有节点都必须通过 OpsCenter 的本机协议访问,这是一项新要求吗?我不能告诉 OpsCenter 仅连接到其本地数据中心吗?
答案1
我可以确认您的错误,它可以被跟踪为 OPSC-6299(抱歉,没有公共错误跟踪器,但这可以用于与 Datastax 的通信或未来的票证参考)。
简而言之,OpsCenter 应该尊重该负载平衡策略,它是有效的,但在这种情况下存在一个错误。