Spring 使用多个 Elasticsearch 集群启动非常慢
Spring Boot with multiple Elasticsearch Cluster starts up very slow
我有 Spring Boot App 配置了三个 Elasticsearch 集群 (ES v6.4.2)。 application.properties 文件如下所示(我为每个集群配置了三个主节点,但为简单起见在这里显示一个):
# Cluster 1
spring.data.elasticsearch.cluster-one.cluster-name=<cluster-1-name>
spring.data.elasticsearch.cluster-one.cluster-nodes=<ip-cluster-1-master-node>:9300
# Cluster 2
spring.data.elasticsearch.cluster-two.cluster-name=<cluster-2-name>
spring.data.elasticsearch.cluster-two.cluster-nodes=<ip-cluster-2-master-node>:9300
# Cluster 3
spring.data.elasticsearch.cluster-three.cluster-name=<cluster-3-name>
spring.data.elasticsearch.cluster-three.cluster-nodes=<ip-cluster-3-master-node>:9300
spring.data.elasticsearch.repositories.enabled=true
spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration,org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration
对于每个集群,我都有一个单独的配置 class,我在其中设置了 TransportClient 和 ElasticsearchTemplate。
现在,当我在本地计算机上使用所有三个集群 运行 在本地启动应用程序时,应用程序启动正常。但是当我使用三个独立的远程集群将应用程序部署到我的测试环境时,启动过程需要 20 分钟。它似乎在为第三个集群加载 Elasticsearch 插件时挂起。这是日志输出的摘录:
2019-09-10 00:55:57.607 INFO 27505 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 2897 ms
2019-09-10 00:55:57.971 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : no modules loaded
2019-09-10 00:55:57.972 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.index.reindex.ReindexPlugin]
2019-09-10 00:55:57.972 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.join.ParentJoinPlugin]
2019-09-10 00:55:57.972 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.percolator.PercolatorPlugin]
2019-09-10 00:55:57.972 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.script.mustache.MustachePlugin]
2019-09-10 00:55:57.973 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.transport.Netty4Plugin]
2019-09-10 00:55:59.785 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : no modules loaded
2019-09-10 00:55:59.785 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.index.reindex.ReindexPlugin]
2019-09-10 00:55:59.785 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.join.ParentJoinPlugin]
2019-09-10 00:55:59.785 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.percolator.PercolatorPlugin]
2019-09-10 00:55:59.785 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.script.mustache.MustachePlugin]
2019-09-10 00:55:59.786 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.transport.Netty4Plugin]
2019-09-10 01:18:30.484 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : no modules loaded
2019-09-10 01:18:30.485 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.index.reindex.ReindexPlugin]
2019-09-10 01:18:30.485 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.join.ParentJoinPlugin]
2019-09-10 01:18:30.485 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.percolator.PercolatorPlugin]
2019-09-10 01:18:30.485 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.script.mustache.MustachePlugin]
2019-09-10 01:18:30.485 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.transport.Netty4Plugin]
这里你看到加载插件的第二个和第三个块之间有超过 20 分钟的延迟。
从测试环境卷曲集群时,它们都可以访问并立即响应。
延误的原因是什么或我必须去哪里看?
是否可以或建议只为所有三个集群加载一次 Elasticsearch 插件?如果可以,我该如何实现?
编辑:
DEBUG 日志告诉我,主节点无法连接到数据节点:
org.elasticsearch.transport.ConnectTransportException: [data_node_6][<ip-of-data-node>:9300] connect_exception
[...]
2019-09-10 18:49:00.517 DEBUG 26219 --- [main] o.e.c.t.TransportClientNodesService : failed to connect to discovered node [{data_node_6}{LKdxInfLSyqrGgSOXvTwFw}{YIhin3kpSNupEY1jBlHFVg}{<ip-of-data-node>}{<ip-of-data-node>:9300}{ml.machine_memory=33422729216, ml.max_open_jobs=20, xpack.installed=true, ml.enabled=true}]
但是我的集群在线并且处于绿色状态,所有数据节点都存在。所有节点都配置为网状 VPN,端口 9200 和 9300 开放用于节点之间的通信。
ES 是否需要打开另一个端口进行通信?
出现问题是因为我启用了集群嗅探 (https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/transport-client.html),它会拾取集群中的所有数据节点并直接与它们通信,而不是通过主节点。
由于我的集群配置为 VPN,并且只能从后端(在 VPN 之外)访问主节点,因此在获取内部 VPN IP(不是public 个 IP)来自主节点,因此连接失败。
所以我禁用了集群嗅探,现在一切正常。
我有 Spring Boot App 配置了三个 Elasticsearch 集群 (ES v6.4.2)。 application.properties 文件如下所示(我为每个集群配置了三个主节点,但为简单起见在这里显示一个):
# Cluster 1
spring.data.elasticsearch.cluster-one.cluster-name=<cluster-1-name>
spring.data.elasticsearch.cluster-one.cluster-nodes=<ip-cluster-1-master-node>:9300
# Cluster 2
spring.data.elasticsearch.cluster-two.cluster-name=<cluster-2-name>
spring.data.elasticsearch.cluster-two.cluster-nodes=<ip-cluster-2-master-node>:9300
# Cluster 3
spring.data.elasticsearch.cluster-three.cluster-name=<cluster-3-name>
spring.data.elasticsearch.cluster-three.cluster-nodes=<ip-cluster-3-master-node>:9300
spring.data.elasticsearch.repositories.enabled=true
spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration,org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration
对于每个集群,我都有一个单独的配置 class,我在其中设置了 TransportClient 和 ElasticsearchTemplate。
现在,当我在本地计算机上使用所有三个集群 运行 在本地启动应用程序时,应用程序启动正常。但是当我使用三个独立的远程集群将应用程序部署到我的测试环境时,启动过程需要 20 分钟。它似乎在为第三个集群加载 Elasticsearch 插件时挂起。这是日志输出的摘录:
2019-09-10 00:55:57.607 INFO 27505 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 2897 ms
2019-09-10 00:55:57.971 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : no modules loaded
2019-09-10 00:55:57.972 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.index.reindex.ReindexPlugin]
2019-09-10 00:55:57.972 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.join.ParentJoinPlugin]
2019-09-10 00:55:57.972 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.percolator.PercolatorPlugin]
2019-09-10 00:55:57.972 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.script.mustache.MustachePlugin]
2019-09-10 00:55:57.973 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.transport.Netty4Plugin]
2019-09-10 00:55:59.785 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : no modules loaded
2019-09-10 00:55:59.785 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.index.reindex.ReindexPlugin]
2019-09-10 00:55:59.785 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.join.ParentJoinPlugin]
2019-09-10 00:55:59.785 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.percolator.PercolatorPlugin]
2019-09-10 00:55:59.785 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.script.mustache.MustachePlugin]
2019-09-10 00:55:59.786 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.transport.Netty4Plugin]
2019-09-10 01:18:30.484 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : no modules loaded
2019-09-10 01:18:30.485 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.index.reindex.ReindexPlugin]
2019-09-10 01:18:30.485 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.join.ParentJoinPlugin]
2019-09-10 01:18:30.485 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.percolator.PercolatorPlugin]
2019-09-10 01:18:30.485 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.script.mustache.MustachePlugin]
2019-09-10 01:18:30.485 INFO 27505 --- [ main] o.elasticsearch.plugins.PluginsService : loaded plugin [org.elasticsearch.transport.Netty4Plugin]
这里你看到加载插件的第二个和第三个块之间有超过 20 分钟的延迟。
从测试环境卷曲集群时,它们都可以访问并立即响应。
延误的原因是什么或我必须去哪里看?
是否可以或建议只为所有三个集群加载一次 Elasticsearch 插件?如果可以,我该如何实现?
编辑:
DEBUG 日志告诉我,主节点无法连接到数据节点:
org.elasticsearch.transport.ConnectTransportException: [data_node_6][<ip-of-data-node>:9300] connect_exception
[...]
2019-09-10 18:49:00.517 DEBUG 26219 --- [main] o.e.c.t.TransportClientNodesService : failed to connect to discovered node [{data_node_6}{LKdxInfLSyqrGgSOXvTwFw}{YIhin3kpSNupEY1jBlHFVg}{<ip-of-data-node>}{<ip-of-data-node>:9300}{ml.machine_memory=33422729216, ml.max_open_jobs=20, xpack.installed=true, ml.enabled=true}]
但是我的集群在线并且处于绿色状态,所有数据节点都存在。所有节点都配置为网状 VPN,端口 9200 和 9300 开放用于节点之间的通信。
ES 是否需要打开另一个端口进行通信?
出现问题是因为我启用了集群嗅探 (https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/transport-client.html),它会拾取集群中的所有数据节点并直接与它们通信,而不是通过主节点。
由于我的集群配置为 VPN,并且只能从后端(在 VPN 之外)访问主节点,因此在获取内部 VPN IP(不是public 个 IP)来自主节点,因此连接失败。
所以我禁用了集群嗅探,现在一切正常。