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

Avi*_*ión 23 replication cluster-computing elasticsearch

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

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

我发现大量的网站有一些信息,但没有一个明确地告诉我如何向ES添加另一个节点.

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

提前致谢.

Nim*_*ack 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"
}
Run Code Online (Sandbox Code Playgroud)

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

  "number" : "5.2.1"
Run Code Online (Sandbox Code Playgroud)

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

2)NODES和REPLICA:

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

curl -XPUT 'localhost:9200/_cluster/settings?pretty' -H 'Content-Type: application/json' -d'
{
  "transient": {
    "discovery.zen.minimum_master_nodes": 3
  }
}
'
Run Code Online (Sandbox Code Playgroud)

更好的是更改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"]
Run Code Online (Sandbox Code Playgroud)

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

curl -XPUT 'localhost:9200/_settings?pretty' -H 'Content-Type: application/json' -d'
{
    "index" : {
        "number_of_replicas" : 2
    }
}'
Run Code Online (Sandbox Code Playgroud)

3)确认已启用节点

有一种方法可以踢节点:

curl -XPUT localhost:9200/_cluster/settings -d '{
  "transient" :{
      "cluster.routing.allocation.exclude._ip" : "NODE_TO_REMOVE_IP_ADDRESS_OR_HOSTNAME"
   }
}';echo
Run Code Online (Sandbox Code Playgroud)

因此,如果您这样做,现在又想要添加节点: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
Run Code Online (Sandbox Code Playgroud)

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

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

你能

curl http://your-elasticsearch-hostname:9200/
Run Code Online (Sandbox Code Playgroud)

要从CLUSTER中删除节点的提示:

1)删除API

curl -XPUT 'http://localhost:9200/_cluster/settings?pretty' -d '
{
  "transient" : {
    "cluster.routing.allocation.exclude._name" : "node3"
  }
}'
Run Code Online (Sandbox Code Playgroud)

2)检查您的配置文件

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

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

discovery.zen.ping.unicast.hosts:["IP_ADDRESS_OR_HOSTNAME1", "IP_ADDRESS_OR_HOSTNAME2"]
Run Code Online (Sandbox Code Playgroud)

*检查您的状态*

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

不要忘记

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

[watch] du /var/lib/elasticsearch/
Run Code Online (Sandbox Code Playgroud)

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

请随时更改/添加.


lag*_*k19 8

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"]
    
    Run Code Online (Sandbox Code Playgroud)
  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"]
    
    Run Code Online (Sandbox Code Playgroud)
  6. 运行service manager elastic-search-x64-node02并设置服务规则并启动服务

此时,您有2个单独的节点(它们将数据存储在同一文件夹中,但我太懒了,无法编辑第二个节点的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
}
Run Code Online (Sandbox Code Playgroud)


Or *_*ger 6

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

以下是将副本计数设置为0的方法:

curl -XPUT 'localhost:9200/my_index/_settings' -d '
{
    "index" : {
        "number_of_replicas" : 0
    }
}'
Run Code Online (Sandbox Code Playgroud)

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

cluster.name: my-cluster
node.name: node01
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["192.168.0.5"]
Run Code Online (Sandbox Code Playgroud)

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