同福

Elasticsearch6.8.15集群添加主机节点和删除主机节点和恢复主机节点的方法【20220906】

介绍

介绍

既然选择ES集群自然是要达到更好的高可用性能,ES集群比较常见的操作就是扩容和缩容(即:添加节点和删除节点),那么ES集群如何实现在不停服务的情况下添加节点和删除节点的呢?

今天福哥就带着大家学习如何给ES集群添加主机节点、删除主机节点,一起来吧~

添加节点

当前节点

可以看到目前集群tfes-cluster有三个节点。

home/topic/2022/0906/14/9aff82ca5d5c804b44cd2f30a1695ec0.png

当前分片

当前有10个分片,5个主分片,5个副本分片。它们分散在01~03三个主机节点里面。

home/topic/2022/0906/15/ab31441fe476a1ff849a534a64e4a2c1.png

home/topic/2022/0906/15/1b1a4eb5081f7b2b3f6c76682311d9c2.png

docker-compose-es-cluster.yml

这里福哥要给集群tfes-cluster添加一个新主机节点tfes05,而集群tfes-cluster目前是由tfes01、tfes02和tfes03三个主机节点组成的,要将tfes05添加到集群tfes-cluster里面需要更改docker-compose-es-cluster.yml。

福哥在docker-compose-es-cluster.yml里面添加了一个tfes05服务,配置hosts包括了tfes01、tfes02、tfes03和tfes05自身。

  tfes05:
    image: registry.tongfu.net:5000/elasticsearch:6.8.15
    container_name: tfes05
    environment:
      - node.name=tfes05
      - cluster.name=tfes-cluster
      - discovery.zen.ping.unicast.hosts=tfes01,tfes02,tfes03,tfes05
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /data/docker.data/tfes05/data:/usr/share/elasticsearch/data

目录

福哥一下子建立了tfes05目录用来做映射数据卷。

home/topic/2022/0906/15/6c2d4c9252edc8eea05a2baf7b4aaf64.png

启动

现在福哥单独启动了tfes05这个服务。

docker-compose -f docker-compose-es-cluster.yml up -d tfes05

home/topic/2022/0906/15/f6434d406c3b014c3c6f7a06302d617f.png

查看节点状态,tfes05被加进来了。

docker exec tfes01 curl -sS http://localhost:9200/_cat/nodes?v

home/topic/2022/0906/15/e7fa8460154aaaada24858752fcd4f6b.png

查看健康状态是green没有问题。

docker exec tfes01 curl -sS http://localhost:9200/_cluster/health?pretty=true

home/topic/2022/0906/15/640d4b9e50b6a14d9756dfb016ad5962.png

查看分片信息,tfes05上的主分片和副本分片都没有文档。

home/topic/2022/0906/15/9b62e1b0df97466578e26dddd6696ad3.png

测试

插入数据

福哥往test索引里面插入三条数据。

curl -X POST -H 'Content-Type: application/json' -d '{"id":4,"name":"PHP"}' 'http://localhost:9200/test/test'
curl -X POST -H 'Content-Type: application/json' -d '{"id":5,"name":"Python"}' 'http://localhost:9200/test/test'
curl -X POST -H 'Content-Type: application/json' -d '{"id":6,"name":"Java"}' 'http://localhost:9200/test/test'

查看分片信息

现在我们来看看分片信息,可以看到tfes05上面有文档了。

home/topic/2022/0906/15/a5096bf4b6cbeae8160253b5f3facbb7.png

总结

福哥只是在tfes05服务上面指定discovery.zen.ping.unicast.hosts添加了tfes05,而tfes01~03上面还没有添加tfes05,但是tfes05依然成功加入了tfes-cluster集群。

这个设计确实很方便啊!

福哥又添加了一个tfes06节点,集群依然顺利的找到新节点并且将新节点加入了进来。

home/topic/2022/0906/15/94c4f89de935c8b045fbc9d77e89f90e.png

删除节点

删除节点

福哥把前面添加的tfes03节点停止了,模拟节点被撤下的效果。

docker stop tfes03

状态

查看集群节点状态,没有了tfes03节点。

home/topic/2022/0906/15/94e5f48ade1eae3fb5cbf8612d8ea2f2.png

查看集群健康状态,变成了4个节点了。

home/topic/2022/0906/15/d0016d4e8548e647418ed6b98fced056.png

查看分片信息,少了tfes03节点,依然是6个文档。

home/topic/2022/0906/15/48823d82bdae7fed07c29350b208531d.png

查看人tfes01节点的日志,由于tfes01连接不到tfes03节点,触发了删除节点的事件。

home/topic/2022/0906/15/f5ea4123ddb05f42ab1a07fa4a7b9de5.png

总结

看来即使某个节点被意外关闭了服务还是可以正常运行的,这个就是集群的价值所在了。

恢复节点

恢复节点

福哥现在把tfes03再启动起来。

docker start tfes03

状态

查看集群节点状态,tfes03又回来了。

home/topic/2022/0906/15/bec5d577d92d6ab9aa6fe0f14c4ae923.png

查看集群健康状态是green没有问题。

home/topic/2022/0906/15/875dbc0d9df280db2c815c6ac56e9442.png

查看分片信息,主分片和副本分片有分片在tfes03节点上。

home/topic/2022/0906/15/e78ef83b1c848c6fac5bbcf407ae15f3.png

总结

今天福哥带着大家学习了给ES集群添加主机节点和删除主机节点的方法,根据我们的实验结果证明,无论是添加还是删除,ES集群的高可用都还是很可靠的。