网站首页 > 开源技术 正文
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/
猜你喜欢
- 2024-09-10 上了这么多年的班,你们知道doc和docx有什么区别?
- 2024-09-10 天天用Word DOC文件与DOCX文件“傻傻分不清”
- 2024-09-10 告别文件格式困扰!doc与docx大揭秘
- 2024-09-10 python读取当当首页的全部商品分类
- 2024-09-10 接私活利器丨X-SpringBoot轻量级的Java快速开发平台,源码分享
- 2024-09-10 X公司生产车间绩效考核制度.doc(生产企业车间绩效考核标准)
- 2024-09-10 《黑神话:悟空》现已解锁可玩,多家厂商推出联名款显卡
- 2024-09-10 阿里推出全新升级的DocOwl2文档理解LLM,性能飞跃提升
- 2024-09-10 XQuery编程 FLWOR + HTML(html编程技巧)
- 2024-09-10 XQuery 编程(编程xor)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)