分布式特性
elasticsearch的集群支持存储的水平扩容,支持PB级数据,他的分布式特性允许部分节点停止服务的同时,整个集群的服务不受影响。默认的集群名字是 elasticsearch, 这个名字可以通过修改yml 配置文件或者是在命令行中通过-E cluster.name = elastic 进行设置。
节点
- 节点就是一个Elasticsearch的实例,其本质就是一个JAVA进程,一个机器上可以运行多个Elasticsearch进程,但是生产环境一般建议一台机器运行一个Elasticsearch 实例。
- 每一个节点都有名字,通过配置文件配置,或者启动的时候 -E node.name = nodeName 进行指定。
- 每一个节点在启动之后,会分配一个UID,保存在data目录下。
主节点
Master Node 处理创建、删除索引等的请求;决定分片被分配到哪个节点等;同时维护并且更新集群状态信息(Cluster State)包括:
- 所有节点信息
- 所有索引和对应的Mapping与Setting 信息
- 分片路由信息
虽然在每个节点上都保存了集群的状态信息,但是只有Master Node才能修改集群的状态信息,并负责同步给其他节点,防止Cluster State 信息的不一致。
MasterNode 非常重要,在部署上需要考虑解决单点问题,最佳的做法是设置多个MasterNode,每个节点只承担Master 的单一角色。
候选主节点
- 英文名Master Eligible Node, 一个集群,支持配置多个Master Eligible节点,这些节点在必要时(如Master节点出现故障,网络故障时)参与选主流程,成为Master Node。
- 每个节点启动后,默认就是一个Master eligible Node,可以设置node.master:false 禁止。
- 当集群内第一个Master eligible 节点启动的时候,它会将自己选举成Master Node.
数据节点
- 可以保存数据的节点,叫做DataNode,节点启动后,默认就是数据节点。可以设置node.data:false 禁止。
- Data Node 的职责:保存分片数据,在数据扩展上起到至关重要的作用(由Master Node 决定如何把分片分发到数据节点上)
- 增加节点可以解决数据水平扩展和数据单点的问题。
协调节点
处理请求的节点,叫Coordinating Node,所有的节点默认都是Coordinating Node,所有的请求会被收到请求的节点路由到正确的节点,例如创建索引的请求,需要路由到Master Node。
预处理节点
您可以在实际的 indexing(索引)发生之前使用 ingest node 来预处理 documents(文档)。这种预处理发生在 intercepts bulk(拦取批量索引)和 index requests(索引请求)的 ingest node 上,通过transformations然后将文档传回 index或者 bulk APIs。
可以在任何节点上启用 ingest,甚至使用专门的 ingest nodes。默认情况下在所有的节点上启用 ingest。为了在某个节点上禁用 ingest,在 elasticsearch.yml文件中配置 node.ingest: false
配置角色类型及配置原则
一个节点默认是一个Master Eligible、data、ingest node。
节点类型 | 配置参数 | 默认值 |
---|---|---|
master eligible | node.master | true |
data | node.data | true |
ingest | node.ingest | true |
coordinating only | 无 | 以上参数设置为false |
配置原则:
1、配置多台Data Node,实现数据存储的水平扩展。
2、设置多台Master Eligible Nodes,同时设置合理理的quorum 数,避免脑裂问题。
3、设置多台Coordinating Node,提升查询的可⽤用性和性能。
选主过程
1、当集群内Master eligible 节点启动的时候,它会将自己选举成Master Node.
2、互相Ping 对方,Node Id 低的会成为被选举的Master节点。
3、其他节点会加⼊入集群,但是不不承担Master 节点的⻆角⾊色。一旦发现被选中的主节点丢失,就会选举出新的Master 节点。