elasticsearch集群配置简介及demo

tech2026-08-03  1

elasticsearch集群配置简介及demo

一、为何要搭建 Elasticsearch 集群1.高可用性2.健康状态3.存储空间 二、节点类型1. 候选主节点(Master-eligible node)2. 数据节点(Data node)3. 客户端节点(Client node)4. 协调节点(Coordinating node) 三、elasticsearch配置demo1.节点node1配置2.节点node2配置3.结果如下图所示

一、为何要搭建 Elasticsearch 集群

在搭建集群之前,我们首先先问一句,为什么我们需要搭建集群?它有什么优势呢?

1.高可用性

     Elasticsearch 作为一个搜索引擎,我们对它的基本要求就是存储海量数据并且可以在非常短的时间内查询到我们想要的信息。所以第一步我们需要保证的就是 Elasticsearch 的高可用性,什么是高可用性呢?它通常是指,通过设计减少系统不能提供服务的时间。假设系统一直能够提供服务,我们说系统的可用性是 100%。如果系统在某个时刻宕掉了,比如某个网站在某个时间挂掉了,那么就可以它临时是不可用的。所以,为了保证 Elasticsearch 的高可用性,我们就应该尽量减少 Elasticsearch 的不可用时间。      一般来说,Elasticsearch 会尽量把一个索引的不同分片存储在不同的主机上,分片的副本也尽可能存在不同的主机上,这样可以提高容错率,从而提高高可用性。

2.健康状态

Red,表示有主分片没有分配,某些数据不可用。Yellow,表示主分片都已分配,数据都可用,但是有复制分片没有分配。Green,表示主分片和复制分片都已分配,一切正常。

3.存储空间

另外,既然是群集,那么存储空间肯定也是联合起来的,假如一台主机的存储空间是固定的,那么集群它相对于单个主机也有更多的存储空间,可存储的数据量也更大。

所以综上所述,我们需要一个集群!

二、节点类型

1. 候选主节点(Master-eligible node)

一个节点启动后,就会使用Zen Discovery机制去寻找集群中的其他节点,并与之建立连接。集群中会从候选主节点中选举出一个主节点,主节点负责创建索引、删除索引、分配分片、追踪集群中的节点状态等工作。Elasticsearch中的主节点的工作量相对较轻,用户的请求可以发往任何一个节点,由该节点负责分发和返回结果,而不需要经过主节点转发。   正常情况下,集群中的所有节点,应该对主节点的选择是一致的,即一个集群中只有一个选举出来的主节点。然而,在某些情况下,比如网络通信出现问题、主节点因为负载过大停止响应等等,就会导致重新选举主节点,此时可能会出现集群中有多个主节点的现象,即节点对集群状态的认知不一致,称之为脑裂现象。为了尽量避免此种情况的出现,可以通过discovery.zen.minimum_master_nodes来设置最少可工作的候选主节点个数,建议设置为(候选主节点数 / 2) + 1, 比如,当有三个候选主节点时,该配置项的值为(3/2)+1=2,也就是保证集群中有半数以上的候选主节点。   候选主节点的设置方法是设置node.mater为true,默认情况下,node.mater和node.data的值都为true,即该节点既可以做候选主节点也可以做数据节点。由于数据节点承载了数据的操作,负载通常都很高,所以随着集群的扩大,建议将二者分离,设置专用的候选主节点。当我们设置node.data为false,就将节点设置为专用的候选主节点了。

node.master = true node.data = false

2. 数据节点(Data node)

数据节点负责数据的存储和相关具体操作,比如CRUD、搜索、聚合。所以,数据节点对机器配置要求比较高,首先需要有足够的磁盘空间来存储数据,其次数据操作对系统CPU、Memory和IO的性能消耗都很大。通常随着集群的扩大,需要增加更多的数据节点来提高可用性。   前面提到默认情况下节点既可以做候选主节点也可以做数据节点,但是数据节点的负载较重,所以需要考虑将二者分离开,设置专用的数据节点,避免因数据节点负载重导致主节点不响应。

node.master = false node.data = true

3. 客户端节点(Client node)

按照官方的介绍,客户端节点就是既不做候选主节点也不做数据节点的节点,只负责请求的分发、汇总等等,也就是下面要说到的协调节点的角色。这样的工作,其实任何一个节点都可以完成,单独增加这样的节点更多是为了负载均衡。

node.master = false node.data = false

4. 协调节点(Coordinating node)

协调节点,是一种角色,而不是真实的Elasticsearch的节点,你没有办法通过配置项来配置哪个节点为协调节点。集群中的任何节点,都可以充当协调节点的角色。当一个节点A收到用户的查询请求后,会把查询子句分发到其它的节点,然后合并各个节点返回的查询结果,最后返回一个完整的数据集给用户。在这个过程中,节点A扮演的就是协调节点的角色。毫无疑问,协调节点会对CPU、Memory要求比较高。

三、elasticsearch配置demo

同一台电脑上搭建elasticsearch集群验证

1.节点node1配置

cluster.name: my-application node.name: node-1 node.master: true node.data: true path.data: E:\junxue\ELK_demo03\zdata05_1 path.logs: E:\junxue\ELK_demo03\zlogs05_1 network.host: 127.0.0.1 http.port: 9201 transport.tcp.port: 9301 discovery.zen.minimum_master_nodes: 2 discovery.zen.ping.unicast.hosts: ["127.0.0.1:9301", "127.0.0.1:9302"] cluster.initial_master_nodes: ["node-1", "node-2"] http.cors.enabled: true http.cors.allow-origin: "*"

2.节点node2配置

cluster.name: my-application node.name: node-2 node.master: true node.data: true path.data: E:\junxue\ELK_demo02\zdata05_2 path.logs: E:\junxue\ELK_demo02\zlogs05_2 network.host: 127.0.0.1 http.port: 9202 transport.tcp.port: 9302 discovery.zen.minimum_master_nodes: 2 discovery.zen.ping.unicast.hosts: ["127.0.0.1:9301", "127.0.0.1:9302"] cluster.initial_master_nodes: ["node-1", "node-2"] http.cors.enabled: true http.cors.allow-origin: "*"

3.结果如下图所示

参考: 【1】谈一谈Elasticsearch的集群部署https://blog.csdn.net/zwgdft/article/details/54585644 【2】手把手教你搭建一个Elasticsearch集群https://www.cnblogs.com/tianyiliang/p/10291305.html 【3】ElasticSearch集群配置https://www.cnblogs.com/zhi-leaf/p/6180289.html 【4】Elasticsearch 集群和索引健康状态及常见错误说明https://www.cnblogs.com/kevingrace/p/10671063.html 【5】Elasticsearch 常用配置参数总结:https://www.cnblogs.com/zhiqiangzhang/p/11425473.html 【6】ELK搭建过程中出现的问题与解决方法汇总:https://www.cnblogs.com/hellxz/p/11057234.html

最新回复(0)