elasticsearch: can't select channel size is 0 for types: [RECOVERY, BULK, STATE]

elasticsearch跨集群搜索的bug

遇到这个问题时在网上只搜到了一个elasticsearch的GitHub关于这个问题的讨论,讨论链接

这个问题出现的原因是在集群中配置了跨集群的功能(es跨集群文档),可以通过GET _cluster/settings查看集群的配置。其中的search.remote.xxxx就是远程集群的配置信息。

产生这个错误的原因是TransportService跟本地集群正常建立的链接后,在搜索(插入新数据也会有同样问题)时会连接远程集群,但是这个TransportService是跟本地连接的,所以拿一个本地集群的连接去连远程集群就出现这个错误。

在哪个GitHub讨论连接中提出的解决方案是“we could also skip adding the managed connection until we fetch the cluster state and only add it there if we really need to”(知道获取到集群的状态才添加管理连接,并且只有在确实需要的时候才添加)

这个问题在6.1.1的版本中是在org.elasticsearch.transport.RemoteClusterConnection类里的491行做的握手连接创建,代码比较复杂没有太深的研究。

我遇到这个问题到写这篇博客还没有彻底解决,因为对集群的配置我没办法修改,我只有使用集群的权限。但是也找到一些可能会解决问题的办法,写在这里跟有同样问题的一起讨论。

在es的集群配置中有一个search.remote.${cluster_alias}.skip_unavailable配置,这个是跳过不可用的远程集群,这个应该是可以解决这个问题的,但是实验几次都出现错误。

问题还在解决中,做一个记录。

猜你喜欢

转载自blog.csdn.net/zpzkitt/article/details/83313797
今日推荐