【问题标题】:Configuring Elasticsearch 7 cluster配置 Elasticsearch 7 集群
【发布时间】:2019-10-11 14:20:03
【问题描述】:

我有三台服务器,并且都安装了 elasticsearch。

在 elasticsearch.yml 我有以下配置:

第一台服务器:172.31.1.1

# /etc/elasticsearch/elasticsearch.yml
cluster.name: es-cluster
node.name: es-1
network.host: 172.31.1.1
http.port: 9200
network.host:
discovery.seed_hosts: ["172.31.1.1", "172.31.1.2", "172.31.1.3"]
cluster.initial_master_nodes:["es-1", "es-2", "es-3"]

gateway.recover_after_nodes: 2
gateway.expected_nodes: 3
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
# some more default values

第二台服务器:172.31.1.2

node.name: es-2
network.host: 172.31.1.2
# everything else same as first server

第二台服务器:172.31.1.3

node.name: es-3
network.host: 172.31.1.3
# everything else same as first server

现在当我运行时: curl http://es-1:9200/_cluster/stats

我注意到集群大小为 1。如果我在不同的服务器上运行相同的 curl 命令,集群大小再次为 1 并且 cluster_name 相同,但 cluster_uuid 不同...

似乎节点无法相互连接...


我使用的是 Ubuntu 服务器,对于节点名,我编辑了 /etc/hostname 并将主机名更改为 es-1 并在 elasticsearch.yml 中使用了相同的名称...但似乎集群节点无法相互通信...


更新 1

curl http://es-1:9200/_cat/health
prod-es-cluster red 1 1 0 0 0 0 0 0 - NaN%

curl http://es-1/:9200/_cat/nodes
172.31.1.1 8 38 1 0.03 0.03 0.00 mdi * ip-172-31-1-1

我刚查了一下日志,很奇怪……

sudo cat /var/log/elasticsearch/elasticsearch.log
[INFO ][o.e.n.Node               ] [es-1] stopping ...
[INFO ][o.e.x.w.WatcherService   ] [es-1] stopping watch service, reason [shutdown initiated]
[INFO ][o.e.x.m.p.l.CppLogMessageHandler] [es-1] [controller/19159] [Main.cc@148] Ml controller exiting
[INFO ][o.e.x.m.p.NativeController] [es-1] Native controller process has stopped - no new native processes can be started
[INFO ][o.e.n.Node               ] [es-1] stopped
[INFO ][o.e.n.Node               ] [es-1] closing ...
[INFO ][o.e.n.Node               ] [es-1] closed

所有内容都写入日志文件...重新启动 Elasticsearch 后,日志文件中没有添加任何新内容...感觉好像我读取了错误的日志文件或者我将配置放入了错误的 .yml文件

更新 2

这是我启动服务的方式:

sudo /bin/systemctl enable elasticsearch.service

更新 3

正如@hamidbayat 所指出的,我认为存在权限问题。只有超级用户有权访问 /var/lib/elasticsearch

如果我尝试以我的 ubuntu 用户身份运行弹性搜索,我会收到此错误:

ubuntu@my-ip:~$ /usr/share/elasticsearch/bin/elasticsearch
/usr/share/elasticsearch/bin/elasticsearch-env: line 73: 
/etc/default/elasticsearch: Permission denied

如果我尝试以 root 身份运行它,我会收到此错误:

ubuntu@myip:~$ sudo /usr/share/elasticsearch/bin/elasticsearch
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
[data][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [es-1] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:163) ~[elasticsearch-7.1.0.jar:7.1.0]
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) ~[elasticsearch-7.1.0.jar:7.1.0]
        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-7.1.0.jar:7.1.0]
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-7.1.0.jar:7.1.0]
        at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-7.1.0.jar:7.1.0]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:115) ~[elasticsearch-7.1.0.jar:7.1.0]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) ~[elasticsearch-7.1.0.jar:7.1.0]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
        at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:102) ~[elasticsearch-7.1.0.jar:7.1.0]
        at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:169) ~[elasticsearch-7.1.0.jar:7.1.0]
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:325) ~[elasticsearch-7.1.0.jar:7.1.0]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) ~[elasticsearch-7.1.0.jar:7.1.0]
        ... 6 more

【问题讨论】:

  • 请查看并分享弹性日志。
  • _cat/health 和 _cat/nodes 的结果是什么?
  • 请将 node.data: true 和 node.master: true 添加到 .yml
  • 如何启动elasticsearch?与暴发户?系统化?还是只是一个脚本?请分享脚本。
  • @hamidbayat:node.master 和 node.data 不是默认设置为 true 吗?我需要明确地将它们设置为 true 吗?

标签: elasticsearch


【解决方案1】:

这就是我解决问题的方法:

  1. 我正在阅读elasticsearch.log,并认为我在日志文件中没有得到任何内容,但我意识到日志正在写入cluster-name.log(在我的情况下为es-cluster.log

  2. 我在elasticsearch.yml 中注释掉了http.port: 9200 我相信elasticsearch 默认使用9300。

  3. 我从discovery.seed_hosts: 中删除了节点自己的 IP,因此只有其他节点添加到此列表中,例如对于我拥有的第一台服务器:

    discovery.seed_hosts: ["172.31.1.2", "172.31.1.3"]

  4. 我意识到每个节点都形成了自己的集群,这就是他们没有加入同一个集群的原因。所以我不得不合并集群。由于集群中没有数据,我可以选择删除数据路径。所以我让节点 1 运行并停止节点 2 和 3 上的弹性搜索。然后删除节点 2 和 3 上的数据路径(在我的情况下,数据路径是 /var/lib/elasticsearch/)。然后启动节点 2 和 3 并加入集群。

【讨论】:

    【解决方案2】:

    您需要配置引导检查,在 6.x 中它会引发警告

    对于 7.x 版本的引导配置是必须的

    bootstrap.system_call_filter: false 添加这个尝试开始

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      相关资源
      最近更新 更多