Elasticsearch7.1.1的集群部署

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch7.1.1的集群部署

Elasticsearch天生就支持分布式部署,通过集群部署可以提高系统的可用性。本文重点谈一谈Elasticsearch的集群节点相关问题,搞清楚这些是进行Elasticsearch集群部署和拓扑结构设计的前提。关于如何配置集群的配置文件不会在本文中提及。(本文写作背景是Elasticsearch 2.3)


节点类型


候选主节点(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


数据节点(Data node)

 数据节点负责数据的存储和相关具体操作,比如CRUD、搜索、聚合。所以,数据节点对机器配置要求比较高,首先需要有足够的磁盘空间来存储数据,其次数据操作对系统CPU、Memory和IO的性能消耗都很大。通常随着集群的扩大,需要增加更多的数据节点来提高可用性。

 前面提到默认情况下节点既可以做候选主节点也可以做数据节点,但是数据节点的负载较重,所以需要考虑将二者分离开,设置专用的数据节点,避免因数据节点负载重导致主节点不响应。

node.master = false
node.data = true

客户端节点(Client node)

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

node.master = false
node.data = false

协调节点(Coordinating node)

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

分片与集群状态

 分片(Shard),是Elasticsearch中的最小存储单元。一个索引(Index)中的数据通常会分散存储在多个分片中,而这些分片可能在同一台机器,也可能分散在多台机器中。这样做的优势是有利于水平扩展,解决单台机器磁盘空间和性能有限的问题,试想一下如果有几十TB的数据都存储同一台机器,那么存储空间和访问时的性能消耗都是问题。

 默认情况下,Elasticsearch会为每个索引分配5个分片,但是这并不代表你必须使用5个分片,同时也不说分片越多性能就越好。一切都取决对你的数据量的评估和权衡。虽然跨分片查询是并行的,但是请求分发、结果合并都是需要消耗性能和时间的,所以在数据量较小的情况下,将数据分散到多个分片中反而会降低效率。如果说一定要给一个数据的话,笔者现在的每个分片数据量大概在20GB左右。

 关于多分片与多索引的问题。一个索引可以有多个分片来完成存储,但是主分片的数量是在索引创建时就指定好的,且无法修改,所以尽量不要只为数据存储建立一个索引,否则后面数据膨胀时就无法调整了。笔者的建议是对于同一类型的数据,根据时间来分拆索引,比如一周建一个索引,具体取决于数据增长速度。

 上面说的是主分片(Primary Shard),为了提高服务可靠性和容灾能力,通常还会分配复制分片(Replica Shard)来增加数据冗余性。比如设置复制分片的数量为1时,就会对每个主分片做一个备份。

 通过API( http://localhost:9200/_cluster/health?pretty )可以查看集群的状态,通常集群的状态分为三种:


Red,表示有主分片没有分配,某些数据不可用。

Yellow,表示主分片都已分配,数据都可用,但是有复制分片没有分配。

Green,表示主分片和复制分片都已分配,一切正常。

部署拓扑

 最后,来看两个集群部署的拓扑图,这里我们不考虑单个节点的调优。拓扑图一是一个简单的集群部署,适用于数据量较小的场景。集群中有三个节点,三个都是候选主节点,因此我们可以设置最少可工作候选主节点个数为2。节点1和2同时作为数据节点,两个节点的数据相互备份。这样的部署结构在扩展过程中,通常是先根据需要逐步加入专用的数据节点,最后考虑将数据节点和候选主节点分离,也就发展为了拓扑图二的结构。在拓扑图二中,有三个专用的候选主节点,用来做集群状态维护,数据节点根据需要进行增加,注意只增加专用的数据节点即可。


拓扑图一


image.png


拓扑图二


image.png


以上来自网上,原文地址: http://blog.csdn.net/zwgdft/article/details/54585644


下来搭建通用性三节点集群


Elasticsearch7.1.1集群搭建


环境信息:

系统 elasticsearch
centos7.9 7.1.1

集群信息:


服务 ip地址
es1 192.168.1.200
es2 192.168.1.201
es3 192.168.1.202


三个节点都操作


官方下载网址:https://elasticsearch.cn/download/


下载文件


wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.1-linux-x86_64.tar.gz


创建es用户


useradd elastic


解压文件并重命名

cd /opt
tar -zxvf elasticsearch-7.1.1-linux-x86_64.tar.gz && mv  elasticsearch-7.1.1  elasticsearch


修改配置文件

1675237555752.jpg

vim /opt/elasticsearch/config/elasticsearch.yml
cluster.name: wmqeloges  #集群名字
node.name: log-es-node1  #节点标识,其他节点改成log-es-node2、node3...
node.master: true        #是否可以成为主节点
node.data: true          #是否可以成为数据节点
path.data: /opt/elasticsearch/data
path.logs: /opt/elasticsearch/logs
network.host: 192.168.1.200      #本机ip地址,其他节点同理
http.port: 9200
discovery.zen.minimum_master_nodes: 2   #最多有几个可参与主节点选举
discovery.zen.ping.unicast.hosts: ["192.168.1.200:9300","192.168.1.201:9300","192.168.1.202:9300"] #9300是es服务之间通信端口号
cluster.initial_master_nodes: ["log-es-node1", "log-es-node2", "log-es-node3"]
xpack.license.self_generated.type: basic
#访问权限配置
xpack.security.enabled: true  
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
#内存配置
indices.fielddata.cache.size: 20%
#bootstrap.memory_lock: true      #内存锁定


主节点操作

设置x-pack


cd elasticsearch
bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""


把生成的p12文件拷贝到其他节点,不能在其他节点生成。


scp /opt/elasticsearch/config/elastic-certificates.p12 root@192.168.1.201:/opt/elasticsearch/config/elastic-certificates.p12
scp /opt/elasticsearch/config/elastic-certificates.p12 root@192.168.1.202:/opt/elasticsearch/config/elastic-certificates.p12


三个节点都操作

启动服务


三个节点都操作


chown elastic:elastic /opt/elasticsearch -R
su - elastic
/opt/elasticsearch/bin/elasticsearch

启动时,可能会提示设置虚拟内存大小

vim /etc/sysctl.conf
# 增加如下:
vm.max_map_count=262144
# 修改完之后,执行如下命令生效
sysctl -p


启动完成后,/opt/elasticsearch/conf目录下会生成一个elasticsearch.keystore文件,此时服务启动成功后,会提示输入密码,但是是进不去的,下面开始设置密码


主节点操作


交互式生成证书


bin/elasticsearch-setup-passwords interactive


查看集群状态


浏览器访问/_cat/nodes接口:http://192.168.2.101:9200/_cat/nodes


优化


bootstrap.memory_lock: true


配置文件参数:

bootstrap.memory_lock: true

这个配置,锁定物理内存地址,防止elasticsearch内存被交换出去,也就是避免es使用swap交换分区,频繁的交换,会导致IOPS变高;


设置好后,启动es会报错:

[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked

这里需要额外设置下系统配置文件 需要切换到root用户:


1,修改/etc/security/limits.conf


最后添加:

* soft nofile 65536
* hard nofile 65536
* soft nproc 32000
* hard nproc 32000
* hard memlock unlimited
* soft memlock unlimited

2,修改/etc/systemd/system.conf

修改下面几项:

DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity

3,最后执行下:

/bin/systemctl daemon-reload


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
2月前
|
Java 网络安全 数据安全/隐私保护
高可用elasticsearch集群搭建
高可用elasticsearch集群搭建
|
4月前
|
存储 数据可视化 Java
ElasticSearch7集群安装
ElasticSearch7集群安装
43 0
|
7月前
|
监控 Java
ElasticSearch集群搭建
ElasticSearch集群搭建
245 0
|
9月前
|
前端开发 Java 数据安全/隐私保护
【2022】Elasticsearch-7.17.6集群部署
【2022】Elasticsearch-7.17.6集群部署
498 0
elasticsearch 6.8.1 集群搭建(三台)
elasticsearch 6.8.1 集群搭建(三台)
406 0
|
存储 Docker 索引
elasticsearch学习四:elasticsearch集群
elasticsearch学习四:elasticsearch集群
234 0
elasticsearch学习四:elasticsearch集群
|
Java
elasticsearch 部署
elasticsearch
91 0
|
监控 JavaScript Java
【ELK】(一)Elasticsearch (6.2.2) 分布式安装及集群部署
【ELK】(一)Elasticsearch (6.2.2) 分布式安装及集群部署
288 0
【ELK】(一)Elasticsearch (6.2.2) 分布式安装及集群部署
|
存储 JSON Java
Elasticsearch安装:单机版和集群版
Elasticsearch安装:单机版和集群版
220 0
|
存储 Linux 开发工具
Elasticsearch 7.16集群搭建指南
本文介绍Elasticsearch 7.16集群搭建指南
Elasticsearch 7.16集群搭建指南