OpsCenter 5.2无法连接到多直stream群集

我们有两个数据中心(192.XXX和10.XXX),闲谈(端口7001)是可能的,但不是节俭或本地协议。 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:Starting factory 
 2015-08-10 11:52:04 + 0200 [Cluster_01] DEBUG:[control connection]build立新的连接,注册观察者并刷新模式和拓扑
 2015-08-10 11:52:05 + 0200 [Cluster_01] DEBUG:[control connection]使用预加载结果刷新节点列表和令牌图

以下部分针对另一个数据中心中的每个节点以及本地数据中心中不在种子节点列表中的每个节点重复进行:

 2015-08-10 11:52:05 + 0200 [Cluster_01] DEBUG:[控制连接]find要连接的新主机:10.0.0.1
 2015-08-10 11:52:05 + 0200 [Cluster_01] INFO:发现新Cassandra主机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 [Cluster_01] DEBUG:由于负载均衡策略已将其标记为IGNORED,因此不会为新主机10.0.0.1添加连接缓冲池
 2015-08-10 11:52:05 + 0200 [] DEBUG:Host 10.0.0.1现在已经标记好了

日志会持续一点,直到控制连接closures:

 2015-08-10 11:52:05 + 0200 [Cluster_01] DEBUG:[控制连接]完成取环指令
 2015-08-10 11:52:05 + 0200 [Cluster_01] DEBUG:[控制连接]由于拓扑变化重build令牌映射
 2015-08-10 11:52:05 + 0200 [Cluster_01] DEBUG:[control connection]尝试使用预加载结果进行模式协议
 2015-08-10 11:52:05 + 0200 [Cluster_01] DEBUG:[控制连接]模式匹配
 2015-08-10 11:52:05 + 0200 [Cluster_01] DEBUG:[control connection]用户types表找不到
 2015-08-10 11:52:05 + 0200 [Cluster_01] DEBUG:[控制连接]获取模式,重build元数据
 2015-08-10 11:52:05 + 0200 [Cluster_01] DEBUG:创build控制连接
 2015-08-10 11:52:05 + 0200 [] DEBUG:初始化主机的新连接池192.168.0.100
 2015-08-10 11:52:05 + 0200 [] INFO:Starting factory 
 2015-08-10 11:52:05 + 0200 [] INFO:Starting factory 
 2015-08-10 11:52:05 + 0200 [] DEBUG:完成初始化主机的新连接池192.168.0.100
 2015-08-10 11:52:05 + 0200 [Cluster_01] DEBUG:将主机192.168.0.100池添加到会话中
 2015-08-10 11:52:05 + 0200 [Cluster_01] DEBUG:closuresCluster Scheduler
 2015-08-10 11:52:05 + 0200 [Cluster_01] DEBUG:由于计划程序closures,不执行计划任务
 2015-08-10 11:52:05 + 0200 [Cluster_01] DEBUG:closures控制连接
 2015-08-10 11:52:05 + 0200 [] DEBUG:closures连接(46700368)到192.168.0.100
 2015-08-10 11:52:05 + 0200 [] DEBUG:closuressocket到192.168.0.100
 2015-08-10 11:52:05 + 0200 [] DEBUG:closures连接(44407568)至192.168.0.100
 2015-08-10 11:52:05 + 0200 [] DEBUG:closuressocket到192.168.0.100
 2015-08-10 11:52:05 + 0200 [] DEBUG:连接失败:[失败实例:追踪(无帧失败)::连接被closures干净。
         ]
 2015-08-10 11:52:05 + 0200 [] DEBUG:closures连接(47567568)到192.168.0.100
 2015-08-10 11:52:05 + 0200 []信息:停止工厂 
 2015-08-10 11:52:05 + 0200 [] DEBUG:closuressocket到192.168.0.100
 2015-08-10 11:52:05 + 0200 [] DEBUG:连接失败:[失败实例:追踪(无帧失败)::连接被closures干净。
         ]
 2015-08-10 11:52:05 + 0200 []信息:停止工厂 
 2015-08-10 11:52:05 + 0200 [] DEBUG:连接失败:[失败实例:追踪(无帧失败)::连接被closures干净。
         ]
 2015-08-10 11:52:05 + 0200 []信息:停止工厂 

然后会发生一些奇怪的事情:build立到另一个数据中心的第一个节点的连接:

 2015-08-10 11:52:05 + 0200 [Cluster_01] DEBUG:连接到集群,联系点:['10 .0.0.1']; 协议版本:2
 2015-08-10 11:52:05 + 0200 [] DEBUG:Host 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:Starting factory 
 2015-08-10 11:52:07 + 0200 [] TRACE:发送心跳。
 2015-08-10 11:52:10 + 0200 [Cluster_01]警告:[控制连接]错误连接到10.0.0.1:错误=超时创build连接,last_host =无
 2015-08-10 11:52:10 + 0200 [Cluster_01]错误:控制连接无法连接,closures群集:('Unable to connect to any servers',{'10 .0.0.1':OperationTimedOut('errors = Timed out创build连接,last_host = None',)})
 2015-08-10 11:52:10 + 0200 [Cluster_01] DEBUG:closuresCluster Scheduler
 2015-08-10 11:52:10 + 0200 [Cluster_01] DEBUG:closures控制连接
 2015-08-10 11:52:10 + 0200 [Cluster_01] DEBUG:由于计划程序closures,不执行计划任务
 2015-08-10 11:52:10 + 0200 []警告:没有cassandra连接可用于hostlist ['192.168.0.100','192.168.0.101']。 重试。

这当然不会,因为我们不希望客户跨数据中心进行交stream。

即使使用此群集configuration,OpsCenter仍会尝试连接到其他(错误的)数据中心:

 [卡桑德拉]
 seed_hosts = 192.168.0.100,192.168.0.101
用户名= opscenter
密码= XXX
 local_dc_pref = DC1
 used_hosts_per_remote_dc = 0

直到5.2.0,此设置对所有版本的OpsCenter都没有任何问题。 所有节点必须能够通过OpsCenter的本地协议访问是否有新要求? 我不能告诉OpsCenter只连接到本地数据中心吗?

我可以确认你的bug,它可以作为OPSC-6299进行跟踪(对不起,没有公开的bug跟踪器,但是这可以用于与Datastax的通信或将来的票据参考)。

简而言之,OpsCenter应该尊重负载平衡策略,这是有效的,但在这种情况下有一个错误。