【问题标题】:What's the easy way to create a cluster with 2 nodes on the same machine?在同一台机器上创建具有 2 个节点的集群的简单方法是什么?
【发布时间】:2018-09-08 17:07:22
【问题描述】:

我正在测试Elasticsearch,我正在尝试在一台机器上创建一个包含 2 个节点的简单集群(在 Fedora 上)

我正在启动名为 Node1 的第一个实例:

sudo bin/elasticsearch -Des.node.name=Node1 -Des.http.port=9200

还有另一个终端中名为 Node2 的第二个实例:

sudo bin/elasticsearch -Des.node.name=Node2 -Des.http.port=9201

两个命令的控制台输出如下:

log4j:WARN No appenders could be found for logger (node).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

GET http://127.0.0.1:9200 给我:

{
  "status" : 200,
  "name" : "Node1",
  "version" : {
    "number" : "1.1.1",
    "build_hash" : "f1585f096d3f3985e73456debdc1a0745f512bbc",
    "build_timestamp" : "2014-04-16T14:27:12Z",
    "build_snapshot" : false,
    "lucene_version" : "4.7"
  },
  "tagline" : "You Know, for Search"
}

然后 GET http://127.0.0.1:9201 给我

{
  "status" : 200,
  "name" : "Node2",
  "version" : {
    "number" : "1.1.1",
    "build_hash" : "f1585f096d3f3985e73456debdc1a0745f512bbc",
    "build_timestamp" : "2014-04-16T14:27:12Z",
    "build_snapshot" : false,
    "lucene_version" : "4.7"
  },
  "tagline" : "You Know, for Search"
}

这看起来不错,但现在如果我获得集群运行状况,我会在 9200 和 9201 上得到不同的结果:

获取http://127.0.0.1:9200/_cluster/health?pretty=true

{
  "cluster_name" : "elasticsearch",
  "status" : "yellow",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 6,
  "active_shards" : 6,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 6
}

获取http://127.0.0.1:9201/_cluster/health?pretty=true

{
  "cluster_name" : "elasticsearch",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0
}

为什么我在同一个集群上只有 1 个节点?为什么它是绿色的,也是黄色的?集群好像不工作了……

我怎样才能使它工作? Zen Discovery 日志在哪里?

相关问题:

【问题讨论】:

  • 你能在减去额外设置的情况下启动两个节点并让它们相互发现吗?
  • 没有任何设置的两次sudo bin/elasticsearch 给了我相同的结果..(使用自动生成的节点名称和端口)
  • 看起来两个节点无法正常通信,我会寻找防火墙或类似的。它们有效地形成了两个具有相同名称的不同集群。也许他们正在使用两种不同的设备?
  • 他们都在同一台机器上

标签: elasticsearch


【解决方案1】:

Elasticsearch 节点不能共享同一个数据目录。所以需要多加一个参数:-Des.data.path=/path/to/data

 sudo bin/elasticsearch -Des.node.name=Node1 -Des.http.port=9200 
   -Des.data.path=/path/to/data1

 sudo bin/elasticsearch -Des.node.name=Node2 -Des.http.port=9201 
   -Des.data.path=/path/to/data2

这应该适合你。另外请注意,在这种情况下,您不需要指定端口号,因为 Elasticsearch 会自动抓取下一个可用的空闲端口,默认情况下从 9200 开始。

【讨论】:

  • 这不是真的 :) 数据目录的结构使得您可以从同一位置启动多个节点而无需更改任何内容。数据目录将包含一个节点计数器,即您在{cluster_name}/nodes 下看到的数字,因此启动的第二个节点只会增加找到的最高计数器的节点 ID 并将其用作其数据目录名称。
【解决方案2】:

我遇到了同样的问题。我通过在配置文件 elasticsearch.yml 中将参数 network.host 设置为 127.0.0.1 来修复它。

【讨论】:

    【解决方案3】:

    正如其他人所说,您有两个独立的集群,每个集群都有一个节点。您使用的是哪种类型的发现,单播还是多播? http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-discovery-zen.html

    对于 ZenDiscovery 日志,使用额外参数启动您的 elasticsearch 实例以获取详细日志记录: -Dlogger.zen.discovery=TRACE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 2012-08-06
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      相关资源
      最近更新 更多