节点
节点简介
- 节点是一个
Elasticsearch的实例- 本质上就是一个JAVA进程
- 一台机器上
Elasticsearch可以运行多个进程,但是生产环境一般建议一台机器上只运行一个Elasticsearch实例 - 每一个节点都有名字,通过配置文件配置,或者启动时候
node.name=node1指定 - 每一个节点在启动之后,会分配一个
UUID,保存在data目录下
节点名称(node.name)
默认情况下,Elasticsearch将使用随机生成的UUID的前七个字符作为节点ID。
请注意,节点ID是持久的,并且在节点重新启动时不会更改,因此默认节点名称也不会更改。
值得配置一个更有意义的名称,它还具有在重新启动节点后保持不变的优点:
node.name: prod-data-2
node.name也可以设置为服务器的HOSTNAME,如下所示:网络主机
node.name: ${HOSTNAME}
配置节点类型
开发环境中一个节点可以承担多种角色 生产环境中,应该设置单一的角色的节点(dedicated node)
| 节点类型 | 配置参数 | 默认值 |
|---|---|---|
| master eligible | node.master | true |
| data | node.data | true |
| ingest | node.ingest | true |
| coordinating only | 无 | 每个节点默认都是 coordinating节点,设置其他类型全部为 false |
| machine learing | node.ml | true(需enable x-pack) |
基本类型节点
Master Node && Master-eligible Node
可以修改集群状态(cluster state)的节点称为 master节点,
一个集群只能有一个
cluster state存储在每个节点上, master维护最新版本并同步给其他节点
master节点是通过集群中所有节点选举产生的,可以被选举的节点称为 master-eligible节点,相关配置如下:
node.master:true // 该节点设置为可选举的 master节点, 默认值为true
Coordinating Node
处理请求的节点即为 coordinating节点,
该节点为所有节点的默认角色,不能取消
路由请求到正确的节点处理,比如创建索引的请求到 master节点
Data Node
存储数据的节点即为data节点,默认节点都是data类型,相关配置如下:
node.data: true
Ingest Node
Ingest Node 的目的在于在文档被索引前,预处理文档。
Ingest Node会拦截 bulk、index 请求,会执行相关操作,然后把操作结果返回给 index、bulk请求
每个节点,默认都是 Ingest Node,可通过设置node.ingest: false关闭该功能
Example
启动一个节点 运行如下命令可以启动一个es节点实例
./bin/elasticsearch -E node.name = My_Node
在开发机器中运行多个Elasticsearch 实例(多个节点)
bin/elasticsearch -E node.name=node1 -E cluster.name=geektime -E path.data=node1_data -E http.port=9200
bin/elasticsearch -E node.name=node2 -E cluster.name=geektime- E path.data=node2_data-d
bin/elasticsearch -E node.name=node3 -E cluster.name=geektime -E path.data=node3_data-d
删除进程
ps grep elasticsearch
kill pid
新增节点 运行如下命令可以启动一个es节点实例
bin/elasticsearch -E cluster.name=my_ cluster -E node.name=node2
查看节点
GET _cat/nodes
GET _cat/nodes?v
GET _cat/nodes?v&h=ip,port
分片
分片简介
如何将数据分布于所有节点上?
- 引入分片(
Shard)解决问题- 分片是es支持PB级数据的基石
- 分片存储了部分数据,可以分布于任意节点上
- 分片数在索引创建时指定且后续不允许再更改,默认为5个
- 分片有主分片和副本分片之分,以实现数据的高可用
- 副本分片的数据由主分片同步,可以有多个,从而提高读取的吞吐量
主分片简介(shared)
主分片,用以解决数据水平扩展的问题通过主分片,可以将数据分布到集群内的所有节点之上
- 一个分片是
Lucene一个运行的的实例 - 主分片数在索引创建时指定,后续不允许修改,除非
Reindex - 主分片数的设定很重要,需要提前规划好
- 过小会导致后续无法通过增加节点实现水平扩容
- 过大会导致一个节点上分布过多分片,造成资源浪费,同时会影响查询性能 主分片数目需要和节点数目相同吗?
- 不需要
- 过小会导致后续无法通过增加节点实现水平扩容。
- 过大会导致一个节点上分布过多分片,造成资源浪费,同时会影响查询性能
查看主分片
GET _cat/shards?v
GET _cat/shards?h=index,shard,prirep,state,unassigned.reason
副本简介(Replication)
副本,用以解决数据高可用的问题。分片是主分片的拷贝
- 副本分片数,可以动态题调整
- 增加副本数,还可以在一定程度上提高服务的可用性(读取的吞吐) 服务可用性 此时集群还是可以对外提供服务 2个节点的情况下,允许其中1个节点停止服务 数据可用性: 即使一个节点挂了以后,整个数据还是完整的 引入副本(Replication)解决, 每个节点有完整的数据 每个节点上都有完备的数据
主分片和对应的副本分片一定分配在不同的节点上,因为只有这样才能保证,当某个节点挂了以后,数据不会丢失
副本分片数目需要设置的和主分片数目相同吗?
- 不需要。
节点与分片
下面这个是我看到的有关索引,节点,主分片和副本分片以及集群状态最好的解释了。