如何将新节点添加到我的Elasticsearch集群

时间:2016-03-01 08:19:16

标签: elasticsearch

我的群集的健康状况为yellow,因为它只有一个节点,因此副本保持未分配状态,因为没有其他节点可用于包含它们。

所以我想创建/添加另一个节点,以便Elasticsearch可以开始为它分配副本。我只有一台计算机并且我正在运行ES作为服务

我发现大量网站上有一些信息,但没有一个显示明确我该如何向ES添加另一个节点。

有人可以解释一下我编辑哪些文件以及我要启动哪些命令才能在群集中创建另一个节点?我是否要运行两个ES实例?我怎么能这样做?

提前致谢。

5 个答案:

答案 0 :(得分:13)

要添加另一个节点的提示:

1)版本:

检查所有节点的状态是一个很好的建议: http://elastic-node1:9200/

请记住,在大多数情况下:版本需要相同,即使是次要

{
"name" : "node2",
"cluster_name" : "xxxxxxxxxxx",
"cluster_uuid" : "n-xxxxxxxxxxxxxxx",
"version" : {
  "number" : "5.2.2",
  "build_hash" : "xxxx",
  "build_date" : "20-02-24T17:26:45.835Z",
  "build_snapshot" : false,
  "lucene_version" : "6.4.1"
},
"tagline" : "You Know, for Search"
}

请记住,如果您在node1中看到不同的版本号,例如

  "number" : "5.2.1"

在这种情况下,您必须将节点更新为5.2.2版(与node1相同)。

2)NODES AND REPLICA:

节点的用例是什么?对于3个节点,我会这样做:

curl -XPUT 'localhost:9200/_cluster/settings?pretty' -H 'Content-Type: application/json' -d'
{
  "transient": {
    "discovery.zen.minimum_master_nodes": 3
  }
}
'

更好的是更改Elasticsearch配置文件中的设置:

/etc/elasticsearch/elasticsearch.yml 

# need to be changed on each node (has to be unique for each node):
node.name: node1

# need to be the same in all nodes:
cluster.name: my_cluster
discovery.zen.ping.unicast.hosts: ["IP_ADDRESS_OR_HOSTNAME1", "IP_ADDRESS_OR_HOSTNAME2", "IP_ADDRESS_OR_HOSTNAME3"]

如果你有3个节点,你想要两个副本和一个主节点吗?

curl -XPUT 'localhost:9200/_settings?pretty' -H 'Content-Type: application/json' -d'
{
    "index" : {
        "number_of_replicas" : 2
    }
}'

3)确认节点已启用

有一种方法可以踢节点:

curl -XPUT localhost:9200/_cluster/settings -d '{
  "transient" :{
      "cluster.routing.allocation.exclude._ip" : "NODE_TO_REMOVE_IP_ADDRESS_OR_HOSTNAME"
   }
}';echo

所以如果你这样做了,现在你想要添加节点: https://www.elastic.co/guide/en/elasticsearch/guide/current/_rolling_restarts.html

您可以按照以下要求执行此操作(请仔细阅读上面提到的链接):

curl -XPUT localhost:9200/_cluster/settings -d '{
  "transient" :{
        "cluster.routing.allocation.enable" : "all"
   }
}';echo

4)永远不要忘记,网络:

防火墙,网络......你能到达9200端口的新节点吗? 你能在网络浏览器上看到它吗?

你能

吗?
curl http://your-elasticsearch-hostname:9200/

要从群集中移除节点的提示:

1)使用API​​删除

curl -XPUT 'http://localhost:9200/_cluster/settings?pretty' -d '
{
  "transient" : {
    "cluster.routing.allocation.exclude._name" : "node3"
  }
}'

2)检查您的配置文件

检查配置文件:     /etc/elasticsearch/elasticsearch.yml

并只保留您要保留的节点:

discovery.zen.ping.unicast.hosts:["IP_ADDRESS_OR_HOSTNAME1", "IP_ADDRESS_OR_HOSTNAME2"]

*检查您的状态*

检查http://elk-pipeline:9200/_cat/shards 你的身份是什么?您可能会看到:INITIALIZING 这可能意味着数据被传输。因此,如果您的数据很大(而不是SSD),请等待。

请勿忘记

您可以输入以下内容查看您的数据当前是否正在移动:

[watch] du /var/lib/elasticsearch/

这就是现在。我会不时尝试在这里添加更多信息。

请随时更改/添加。

答案 1 :(得分:7)

Windows Box上的完整步骤是:

  1. 将弹性解压缩到C:\ ELK \ elastic \ run命令bin\service install elastic-search-x64-node01,这将创建名为的服务 elastic-search-x64-node01
  2. 编辑elasticsearch.yml配置文件:

    cluster.name: Animals
    node.name: Snake
    node.master: true
    node.data: true
    path.data: C:\ELK\storage\data
    path.logs: C:\ELK\storage\logs
    http.port: 9200
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
    
  3. 运行service manager elastic-search-x64-node01并设置服务规则并启动服务

  4. 将弹性解压缩到C:\ ELK \ elastic2 \ run命令bin\service install elastic-search-x64-node02,这将创建名为的服务 elastic-search-x64-node02

  5. 编辑elasticsearch.yml配置文件:

    cluster.name: Animals
    node.name: Baboon
    node.master: false
    node.data: true
    path.data: C:\ELK\storage\data
    path.logs: C:\ELK\storage\logs
    http.port: 9201
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
    
  6. 运行service manager elastic-search-x64-node02并设置服务规则并启动服务

  7. 此时你有两个独立的节点(它们将数据存储在同一个文件夹中,但我太懒了,无法编辑第二个节点的path.data)作为2个单独的Windows服务,GET http://localhost:9200/_cluster/health显示如下内容:

    {
      "cluster_name": "Animals",
      "status": "green",
      "timed_out": false,
      "number_of_nodes": 2,
      "number_of_data_nodes": 2,
      "active_primary_shards": 4,
      "active_shards": 8,
      "relocating_shards": 0,
      "initializing_shards": 0,
      "unassigned_shards": 0,
      "delayed_unassigned_shards": 0,
      "number_of_pending_tasks": 0,
      "number_of_in_flight_fetch": 0,
      "task_max_waiting_in_queue_millis": 0,
      "active_shards_percent_as_number": 100
    }
    

答案 2 :(得分:6)

首先,您可以删除副本以返回绿色状态,即使您已创建索引并向其添加文档,也可以执行此操作。

以下是如何将副本计数设置为0:

curl -XPUT 'localhost:9200/my_index/_settings' -d '
{
    "index" : {
        "number_of_replicas" : 0
    }
}'

如果您只是想在集群中添加另一个节点,则需要编辑elasticsearch.yml,最好在两个节点上进行这些更改:

cluster.name: my-cluster
node.name: node01
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["192.168.0.5"]

将每个节点上的单播主机设置为引用另一个节点,在两个节点上将群集名称设置为相同,并为每个节点指定唯一名称,然后重新启动两个ES实例,并且群集应该处于联机状态。

答案 3 :(得分:1)

我不清楚你的问题在这里。你有两种可能性。

1)你有两个节点,你希望它们能够看到对方。这里有很多关于这方面的文档。如果是这种情况,我建议你进行测试以确保每个主机可以与另一个主机通话,即:ssh进入主机A并尝试卷曲主机B:9200,反之亦然。您还需要确保正确设置配置。

2)您想在本地计算机上设置“群集”。在这种情况下,您将需要两个单独的配置文件,并且您需要使用特定配置文件为您的第二个“节点”启动elasticsearch(以及修改第二个配置以使用不同的端口等)。您可以查看以下链接:http://www.concept47.com/austin_web_developer_blog/elasticsearch/how-to-run-multiple-elasticsearch-nodes-on-one-machine/

但是,是的,最终,您需要运行弹性搜索流程,无论它们是在同一台机器上,还是两台不同的机器由您决定

答案 4 :(得分:0)

如果您正在运行Elasticsearch n local,请转到另一个终端并再次运行[Black Widow] detected_master [N'Garai] 。这样你就会有两个实例。

您将在新运行的实例上看到以下消息:

master node)

已在运行实例([N'Garai] added {[Black Widow]

[N'Garai]

假设{[Black Widow]var req = { method: 'GET', url: 'http://www.hott-source.com/hangman/getMemory.php', data: { } } $http(req).then(function(response){ alert("WINNER"); $scope.knownWords = response.data; }, function(response){ alert(response.data); }); 是随机节点名称。