首页 > 解决方案 > 访问 ElasticSearch2.4.3 集群环境的 URL

问题描述

我们有两个节点的 ElasticSearch2.4.3 集群环境。我想问我应该提供什么 URL 来访问环境,以便它在高可用性下工作?

我们有两个主节点 Node1 和 Node2。Node1 的主机名是 node1.elastic.com,Node2 是 node2.elastic.com。根据公式(n/2 +1),两个节点都是主节点。

我们通过 为两个节点添加discovery.zen.ping.unicast.hosts来修改 elastic.yml 文件来启用集群设置。

从我们的 java 应用程序中,我们连接到 node1.elastic.com。在两个节点都启动之前它工作正常。数据正在两个 ES 服务器中填充,一切都很好。但是一旦 Node1 出现故障,整个弹性搜索集群就会断开连接。而且它不会自动切换到 Node2 来处理请求。

我觉得我提供的 URL 不正确,它必须是其他东西才能提供自动切换。

来自 Node1 的日志 [2020-02-10 12:15:45,639][INFO ][node ] [Wildpride] initialized [2020-02-10 12:15:45,639][INFO ][node ] [Wildpride] starting ... [2020-02-10 12:15:45,769][WARN ][common.network ] [Wildpride] _non_loopback_ is deprecated as it picks an arbitrary interface. specify explicit scope(s), interface(s), address(es), or hostname(s) instead [2020-02-10 12:15:45,783][WARN ][common.network ] [Wildpride] _non_loopback_ is deprecated as it picks an arbitrary interface. specify explicit scope(s), interface(s), address(es), or hostname(s) instead [2020-02-10 12:15:45,784][INFO ][transport ] [Wildpride] publish_address {000.00.00.204:9300}, bound_addresses {[fe80::9af2:b3ff:fee9:90ca]:9300}, {000.00.00.204:9300} [2020-02-10 12:15:45,788][INFO ][discovery ] [Wildpride] XXXX/Hg_5eGZIS0e249KUTQqPPg [2020-02-10 12:16:15,790][WARN ][discovery ] [Wildpride] waited for 30s and no initial state was set by the discovery [2020-02-10 12:16:15,799][WARN ][common.network ] [Wildpride] _non_loopback_ is deprecated as it picks an arbitrary interface. specify explicit scope(s), interface(s), address(es), or hostname(s) instead [2020-02-10 12:16:15,802][WARN ][common.network ] [Wildpride] _non_loopback_ is deprecated as it picks an arbitrary interface. specify explicit scope(s), interface(s), address(es), or hostname(s) instead [2020-02-10 12:16:15,803][INFO ][http ] [Wildpride] publish_address {000.00.00.204:9200}, bound_addresses {[fe80::9af2:b3ff:fee9:90ca]:9200}, {000.00.00.204:9200} [2020-02-10 12:16:15,803][INFO ][node ] [Wildpride] started [2020-02-10 12:16:35,552][INFO ][node ] [Wildpride] stopping ... [2020-02-10 12:16:35,619][WARN ][discovery.zen.ping.unicast] [Wildpride] [17] failed send ping to {#zen_unicast_1#}{000.00.00.206}{000.00.00.206:9300} java.lang.IllegalStateException: can't add nodes to a stopped transport at org.elasticsearch.transport.netty.NettyTransport.connectToNode(NettyTransport.java:916) at org.elasticsearch.transport.netty.NettyTransport.connectToNodeLight(NettyTransport.java:906) at org.elasticsearch.transport.TransportService.connectToNodeLight(TransportService.java:267) at org.elasticsearch.discovery.zen.ping.unicast.UnicastZenPing$3.run(UnicastZenPing.java:395) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) [2020-02-10 12:16:35,620][WARN ][discovery.zen.ping.unicast] [Wildpride] failed to send ping to [{Wildpride}{Hg_5eGZIS0e249KUTQqPPg}{000.00.00.204}{000.00.00.204:9300}] SendRequestTransportException[[Wildpride][000.00.00.204:9300][internal:discovery/zen/unicast]]; nested: TransportException[TransportService is closed stopped can't send request]; at org.elasticsearch.transport.TransportService.sendRequest(TransportService.java:340) at org.elasticsearch.discovery.zen.ping.unicast.UnicastZenPing.sendPingRequestToNode(UnicastZenPing.java:440) at org.elasticsearch.discovery.zen.ping.unicast.UnicastZenPing.sendPings(UnicastZenPing.java:426) at org.elasticsearch.discovery.zen.ping.unicast.UnicastZenPing$2.doRun(UnicastZenPing.java:249) at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) Caused by: TransportException[TransportService is closed stopped can't send request] at org.elasticsearch.transport.TransportService.sendRequest(TransportService.java:320) ... 7 more [2020-02-10 12:16:35,623][INFO ][node ] [Wildpride] stopped [2020-02-10 12:16:35,623][INFO ][node ] [Wildpride] closing ... [2020-02-10 12:16:35,642][INFO ][node ] [Wildpride] closed

标签: elasticsearchelasticsearch-2.4

解决方案


TL;DR:elasticsearch 中没有自动切换,您需要在 elasticsearch 集群前面安装某种负载均衡器。

对于 HA 设置,您至少需要 3 个符合条件的主节点。在集群前面必须有一个负载均衡器(也是 HA)来在集群中分发请求。或者客户端需要以某种方式了解集群,并在故障情况下故障转移到剩余的任何节点。

如果您使用 2 个主节点,则集群可以进入“脑裂”状态。如果您的网络以某种方式变得支离破碎并且节点变得彼此不可见,他们都会认为这是最后一个工作并继续独立地服务读/写请求。这样一来,它们就会彼此疏远,几乎不可能修复它——至少,当碎片消失时,修复会有很多麻烦。对于 3 个节点,在分片场景中,只有至少有 2 个节点彼此可见,集群才会继续为请求提供服务。


推荐阅读