编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Elasticsearch v7.x 集群最佳实践(Best practices)和核心概念

wxchong 2024-09-10 22:44:52 开源技术 13 ℃ 0 评论

Elasticsearch 集群

在ES 集群中,节点分别为:master节点、data节点、client节点等几种角色,任何一个节点都可以同时具备以上所有角色,其中比较重要的角色为master和data 节点。

  • Master 主要管理集群信息、primary分片和replica分片信息、维护index信息。

node.master: true AND node.data: false AND node.ingest: false

  • Data 用来存储数据,维护倒排索引,提供数据检索等。

node.master: false AND node.data: true AND node.ingest: false

  • Client 节点只负责处理用户请求,实现请求转发,负载均衡等功能。

node.master: false AND node.data: false AND node.ingest: true

可以看到元信息都在Master上面,如果Master挂掉了,该Master含有的所有Index都无法访问,为了保证Master稳定,需要将Master和Node分离。而构建master集群可能会产生一种叫做脑裂的问题,为了防止脑裂,需要设置最小master的节点数为3,维护整个集群的状态。

还有一种节点形式:

node.master: true AND node.data: true AND node.ingest: true

这种组合表示这个节点既有成为主节点的资格,又可以存储数据,还可以作为client节点,这个时候如果某个节点被选举成为了真正的主节点,那么它还要存储数据,这样对于这个节点的压力就比较大了。

elasticsearch 默认是:每个节点都是这样的配置,在测试环境下这样做没问题。实际工作中建议不要这样设置,这样相当于 主节点和数据节点的角色混合到一块了。

ES 集群服务器配置:

master节点:普通服务器即可(CPU、内存消耗一般)。

data 节点:主要消耗磁盘,内存。

client | ingest 节点:普通服务器即可(如果要进行分组聚合操作的话,建议这个节点内存也分配多一点)。

如下是一个Elasticsearch cluster的示意图。

图中有3个master 节点,4 CPU/8G;3个数据节点,4 CPU、16G;1个Client节点,4 CPU/16G(如果有足够的资源,建议数据节点配置 64G RAM)。

另外,配置Elasticsearch 需要至少 2个 master节点组成一个集群,这样避免集群脑裂情况。

在这一配置中,我们可以丢失任一master 节点,和最多 2个数据节点(复制级别为2)。

Elasticearch 使用建议

  • 官方及实践后根据经验推荐的是,每个分片的大小不应超过 30GB。
  • 在应用中使用别名,而不是索引。这样,就可以在任何时候重建索引。
  • 确保每个节点的分片数量保持在低于每 1GB 堆内存对应集群的分片在 20-25 之间。 因此,具有 32GB 堆内存的节点最多可以有 600-750 个分片。

ElasticSearch核心概念

  • Near Realtime (NRT) 近实时:数据提交索引后,立马就可以搜索到。
  • Cluster集群:一个集群由一个唯一的名字标识,默认为“elasticsearch”。集群名称非常重要,具体相同集群名的节点才会组成一个集群。集群名称可以在配置文件中指定。集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。ElasticSearch的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看ElasticSearch集群,在逻辑上是个整体,你与任何一个节点的通信和与整个ElasticSearch集群通信是等价的。
  • Node 节点:存储集群的数据,参与集群的索引和搜索功能。像集群有名字,节点也有自己的名称,默认在启动时会以一个随机的UUID的前七个字符作为节点的名字,你可以为其指定任意的名字。通过集群名在网络中发现同伴组成集群。一个节点也可是集群。每一个运行实例称为一个节点,每一个运行实例既可以在同一机器上,也可以在不同的机器上。所谓运行实例,就是一个服务器进程,在测试环境中可以在一台服务器上运行多个服务器进程,在生产环境中建议每台服务器运行一个服务器进程。
  • Index 索引: 一个索引是一个文档的集合(等同于solr中的集合)。每个索引有唯一的名字,通过这个名字来操作它。一个集群中可以有任意多个索引。索引作动词时,指索引数据、或对数据进行索引。
  • Type 类型:指在一个索引中,可以索引不同类型的文档,如用户数据、博客数据。从6.0.0 版本起已废弃,一个索引中只存放一类数据。

Elasticsearch里的索引概念是名词而不是动词,在elasticsearch里它支持多个索引。 一个索引就是一个拥有相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,你能够创建任意多个索引。

  • Document 文档:被索引的一条数据,索引的基本信息单元,以JSON格式来表示。一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档、某一个产品的一个文档、某个订单的一个文档。文档以JSON格式来表示,而JSON是一个到处存在的互联网数据交互格式。在一个index/type里面,你可以存储任意多的文档。注意,一个文档物理上存在于一个索引之中,但文档必须被索引/赋予一个索引的type。

Document 是一个JSON Object,相关的schema信息通过mapping来定义。mapping不仅仅包括数据类型的定义,还有很多其他元信息的设置,它们共同决定了数据如何被存储和索引。

Elasticsearch官方从6.0开始淡化doc_type的概念,推荐一个index只拥有一个doc_type,并计划在8.x完全废弃doc_type。

Shard 分片:在创建一个索引时可以指定分成多少个分片来存储。每个分片本身也是一个功能完善且独立的“索引”,可以被放置在集群的任意节点上(分片数创建索引时指定,创建后不可改了,副本数可以随时改。)。索引分片,ElasticSearch可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上,构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。分片的好处:

  • 允许我们水平切分/扩展容量
  • 可在多个分片上进行分布式的、并行的操作,提高系统的性能和吞吐量。

Replication 备份: 一个分片可以有多个备份(副本)。备份的好处:

  • 高可用扩展搜索的并发能力、吞吐量。
  • 搜索可以在所有的副本上并行运行。

Shard从角色上划分为primary shard和replica shard两种,数据会首先写入primary shard,然后同步到replica shard中。

primary shard:主分片,每个文档都存储在一个分片中,当你存储一个文档的时候,系统会首先存储在主分片中,然后会复制到不同的副本中。默认情况下,一个索引有5个主分片。你可以在事先制定分片的数量,当分片一旦建立,分片的数量则不能修改。

replica shard:副本分片,每一个分片有零个或多个副本。副本主要是主分片的复制,其中有两个目的:

  • 增加高可用性:当主分片失败的时候,可以从副本分片中选择一个作为主分片。
  • 提高性能:当查询的时候可以到主分片或者副本分片中进行查询。默认情况下,一个主分配有一个副本,但副本的数量可以在后面动态的配置增加。副本必须部署在不同的节点上,不能部署在和主分片相同的节点上。

一个shard包含一组segment,segment是最小的数据单元,Elasticsearch每隔一段时间产生一个新的segment,里面包含了新写入的数据。segment是immutable的,即不可改变。

通常情况下,我们都会拿Elasticsearch的这些概念跟关系型数据库对比来更好的理解。

比如index等价于database,doc_type等价于table,mapping等价于db schema。

index.number_of_shards: 5 (默认值为5) 设置默认索引分片个数。

index.number_of_replicas: 1(默认值为1) 设置索引的副本个数。

如果服务器够多,可以将分片提高,尽量将数据平均分布到集群中,增加副本数量可以有效的提高搜索性能。

需要注意: "number_of_shards" 是索引创建后一次生成的,后续不可更改设置 。分片副本数"number_of_replicas",可以通过update-index-settings API实时修改设置。

参考链接:

Elasticsearch 最佳运维实践总结

https://www.cnblogs.com/kevingrace/p/10682264.html

搭建Elasticsearch环境,搭建kibana 环境

https://blog.csdn.net/weixin_39800144/article/details/81162002

详述 Elasticsearch 集群的搭建步骤及方法

https://guobinhit.blog.csdn.net/article/details/78487581

Elasticsearch最佳实践之核心概念与原理

https://blog.csdn.net/zwgdft/article/details/83619905

Elasticsearch Reference [7.3] ? Modules ? Node

https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#modules-node

ElasticStack系列之九 & master、data 和 client 节点

https://www.cnblogs.com/liang1101/p/7284205.html

ElasticSearch cluster rebuild

https://www.cybera.ca/news-and-events/tech-radar/elasticsearch-cluster-rebuild/

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表