Elasticsearch集群
- 一、介绍
- 二、分布式系统的优点
- 2.1 高可用
- 2.2 水平可扩展
- 三、集群角色
- 3.1 节点
- 3.1.1 Master Node(主节点)
- 3.1.2 Data Node(数据节点)
- 3.1.3 Ingest Node(预处理节点)
- 3.1.4 Coordinating Node(协调节点)
一、介绍
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎。找到与查询最匹配的 10 个文档并不困难。但如果面对的是十亿行日志,又该如何解读呢?下面介绍Elasticsearch分布式系统的相关设计(经过查阅官方文档,自己整理和归纳,真实可靠,值得大家收藏学习)
二、分布式系统的优点
2.1 高可用
服务高可用: 当master节点出现故障后会从集群中重新选出master节点
数据高可用: 数据会有副本存储到其他节点,不会丢失数据
2.2 水平可扩展
请求量提升 / 数据量的不断增长可以通过水平扩展集群的节点(增加集群的数据节点来分担压力)
三、集群角色
3.1 节点
Elasticsearch节点是一个 Elasticsearch 的实例(es是java写的,所以本质就是一个java进程)
任何时候启动一个 Elasticsearch 实例,都在启动一个node。连接节点的集合称为集群
3.1.1 Master Node(主节点)
节点启动后默认就是一个 Master eligible (有资格成为主节点的)节点。可以设置 node.master: false 禁止。当第一个节点启动的时候,它会将自己选举成master节点。
主要职责
主节点负责轻量级集群范围的操作,例如创建或删除索引、跟踪哪些节点是集群的一部分以及决定将哪些分片分配给哪些节点。拥有一个稳定的主节点对于集群健康很重要。专用主节点(节点只有一个角色master)让它们专注于管理集群,保证集群的稳定性。因为索引数据和搜索查询等操作会占用大量的cpu,内存,io资源(数据节点的职责)
通过下面配置创建一个主节点:
node.master: true
node.data: false
node.ingest:false
3.1.2 Data Node(数据节点)
- 数据节点保存包含已编入索引的文档的分片。
- 数据节点处理数据相关的操作,如 CRUD、搜索和聚合。这些操作是 I/O 密集型、内存密集型和 CPU 密集型的,会占用大量的cpu、内存和io。监控这些资源并在它们过载时添加更多数据节点很重要(也就是水平扩展)。
- 不参与选举,只会存储数据
- 专用数据节点的主要好处是主角色和数据角色的分离,保障集群的稳定性
通过下面配置创建一个数据节点:
node.master: false
node.data: true
node.ingest: false
3.1.3 Ingest Node(预处理节点)
- 在实际的 indexing(索引)发生之前使用 ingest node 来预处理 documents(文档)。
- 这种预处理发生在 intercepts bulk(拦取批量索引)和 index requests(索引请求)的 ingest node 上,应用 transformations(转换),然后将文档传回 index(索引)或者 bulk APIs。
- 可以在任何节点上启用 ingest,甚至使用专门的 ingest nodes。默认情况下在所有的节点上启用 ingest。在 elasticsearch.xml 文件中配置如下 :
node.master: false
node.data: false
node.ingest: true
3.1.4 Coordinating Node(协调节点)
- 将请求转发给保存数据的数据节点,每个数据节点执行请求后,将结果返回给协调节点,协调节点负责收集汇总,将每个节点的结果合并为单个全局结果。
- 每个节点默认都起到了Coordinating Node的职责。
通过下面配置创建一个数据节点:
node.master: false
node.data: false
node.ingest: false
其他节点类型不太常用,所以这里不过多介绍。