阅读 91

ElasticSearch7入门(七)搭建ElasticSearch集群

背景

前面我们使用单节点时,在Kibana看到ElasticSearch的状态是yellow,引用第一篇文章的说明:

2020-06-30-ES-No-Cluster.png

注意这里标出当前的statusyellow,ElasticSearch集群健康状态最佳时为green。现在是因为我们仅启动了一个节点,鉴于ElasticSearch本身极为强大的横向扩展能力,实际生产环境中都是以集群的方式提供服务,方便各节点间数据的同步以实现弹性可扩展,ES要求单节点的集群状态达不到green,最佳只是yellow。当然,如果状态为red,那就要引起注意了,集群数据有问题了。。

了解了ElasticSearch的基本操作,接下来试试ElasticSearch的集群搭建:

  • ES集群扩容极其便捷;

  • 可以避免单点故障;

  • 实现负载均衡,应对高并发场景;

配置

采用3个节点,单机模拟集群环境,不同的节点端口不同,伪集群。将之前的单节点再复制两份,组成3个服务,各自的elasticsearch.yml配置如下:

  • 节点0配置(主节点)

# cors http.cors.enabled: true http.cors.allow-origin: "*" # cluster cluster.name: heartsuit node.name: master node.master: true network.host: 127.0.0.1 复制代码

  • 节点1配置

# cors http.cors.enabled: true http.cors.allow-origin: "*" # cluster cluster.name: heartsuit node.name: slave01 network.host: 127.0.0.1 http.port: 9210 discovery.zen.ping.unicast.hosts: ["127.0.0.1","127.0.0.1:9210","127.0.0.1:9220"] 复制代码

  • 节点2配置

# cors http.cors.enabled: true http.cors.allow-origin: "*" # cluster cluster.name: heartsuit node.name: slave02 network.host: 127.0.0.1 http.port: 9220 discovery.zen.ping.unicast.hosts: ["127.0.0.1","127.0.0.1:9210","127.0.0.1:9220"] 复制代码

Notes:

  1. 关于报错:由于之前的单节点在运行后,已经有了data,若直接启动上述3个节点,报错:with the same id but is a different node instance,解决方法是,将复制出的两个节点下的data目录删除,重新启动即可,master节点的data将会自动同步过来。

  2. 关于配置:集群环境下,配置需要注意:

  • 所有的节点的cluster.name均相同,表示属于一个集群;

  • 所有的节点的node.name不可相同,用以标识不同的节点;

  • 由于使用单机模拟,端口不同(http.port),实际生产环境可部署至不同的机器,采用相同的端口;

  • 其中discovery.zen.ping.unicast.hosts用于指定集群的seed nodes ip集合,可指定端口,默认transport.profiles.default.port或者transport.port,仔细观察两个slave节点,可以看到有如下输出,即:ES会自动调整transport.port

    • slave01: published_address {127.0.0.1:9301},bound_addresses {127.0.0.1:9301}

    • slave01: published_address {127.0.0.1:9302},bound_addresses {127.0.0.1:9302}

测试

  • 使用API查看集群信息

  1. 查看集群节点状况:http://localhost:9210/_cat/nodes 其中带*的表示主节点

127.0.0.1 28 75 20    dilm - slave01 127.0.0.1 35 75 20    dilm * master 127.0.0.1 22 75 20    dilm - slave02 复制代码

  1. 查看集群健康状况: http://localhost:9200/_cluster/health

{   "cluster_name": "heartsuit",   "status": "green",   "timed_out": false,   "number_of_nodes": 3,   "number_of_data_nodes": 3,   "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 } 复制代码

重点关注statusred: 数据不完整 yellow: 数据完整,但是没有完整的副本 green: 一切正常,有完整的主版本和副本

  • 使用Head插件查看ES集群信息

2020-06-30-ES-Cluster-Head.png

Note: Head插件的使用可参考blog.csdn.net/u013810234/…

  • 使用Kibana查看ES集群信息

2020-06-30-ES-Cluster-Kibana.png


作者:Heartsuit
链接:https://juejin.cn/post/7028453597801087007


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐