elasticsearch - 访问 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
解决方案
TL;DR:elasticsearch 中没有自动切换,您需要在 elasticsearch 集群前面安装某种负载均衡器。
对于 HA 设置,您至少需要 3 个符合条件的主节点。在集群前面必须有一个负载均衡器(也是 HA)来在集群中分发请求。或者客户端需要以某种方式了解集群,并在故障情况下故障转移到剩余的任何节点。
如果您使用 2 个主节点,则集群可以进入“脑裂”状态。如果您的网络以某种方式变得支离破碎并且节点变得彼此不可见,他们都会认为这是最后一个工作并继续独立地服务读/写请求。这样一来,它们就会彼此疏远,几乎不可能修复它——至少,当碎片消失时,修复会有很多麻烦。对于 3 个节点,在分片场景中,只有至少有 2 个节点彼此可见,集群才会继续为请求提供服务。
推荐阅读
- python - 类的 AttributeError
- c# - 如何在其他游戏对象 Unity3D 的向前方向上移动游戏对象
- c# - 为 Visual Studio 社区设置默认模板语言(添加新项目对话框)
- unity3d - Unity快速方式网格对撞机到管道
- javascript - 正则表达式 || 如何获取“通配符”,特别是 replace() 函数
- javascript - 打字稿装饰器参数
- php - Codeigniter 从 Session 读取值或从 URL 参数读取值哪个更快?
- android - 所选项目上的 Android 微调器不起作用?
- c# - '列表
' 不包含 'Last' 的定义 - c - 为什么在特定行使用 getchar?