Elasticsearch通过分片和副本机制来保障服务可用性。
节点类型
MasterNode
每个节点默认都是Master Eligible节点,可通过配置node.master=false来禁止参加选主。MasterNode作用如下
1.负责维护集群状态并同步给其他所有节点,包含所有节点信息、所有索引及其配置、分片的路由信息
2.创建或者删除索引
3.决定分片如何分配到不同的DataNode
为了保障master节点可用性,建议分离DataNode和MasterNode,单独配置3个以上的MasterNode构成小集群,低配即可,另外注意配置仲裁数大于MasterNode总数一半以上,防止出现脑裂问题。
DataNode
DataNode主要用于存储索引数据,对文档进行增删改查、搜索聚合排序等操作。对CPU、IO、内存要求都比较高。
每个节点默认都是DataNode,可通过配置node.data=false来禁止存储数据。
Coordinating节点/Client节点
每个节点默认都是Client节点,用于接受客户端请求,路由请求到不同DataNode和MasterNode,本质上是一个智能负载均衡器,可以根据集群状态来路由请求到不同的节点。
该节点仅负责转发请求,机器一般配置即可。但如果处理聚合排序操作,需要在client节点做二次处理,建议多配点内存。
Ingest节点
5.x之后新加入IngestNode,用于请求参数的预处理,作用类似logstash的filter。
Machine Learning节点
主要是采用机器学习中的无监督算法,实现时序数列的异常发现。由于X-PACK中商用收费软件,目前网上关于X-PACK Machine Learning的介绍非常少
部落节点
部落节点可以跨越多个集群,它可以接收每个集群的状态,然后合并成一个全局集群的状态,它可以读写所有节点上的数据
分片(Shard)
分片分为主分片Primary Shard和副本分片Replica Shard。
- 主分片将一个索引数据分散在不同的节点上,实现存储的水平扩展,注意索引创建时执行主分片数,数据路由根据主分片数计算,后期修改会造成索引重建。
主分片数设置过小会造成单个datanode存储不了过多数据,设置过大会造成单个datanode分片过多影响性能。建议单个分片大小设置为50G以内,再计算出合适的分片数。
- 副本分片提高数据可用性和读取性能,主分片和副本分片不在同一个节点上,一旦主分片丢失,副本分片将提升成主分片。副本分片可以随时调整。
副本分片数过小会影响可用性,过大会影响写入性能。
集群健康状态
Green:健康状态,所有主分片和副本分片都可用
Yellow:亚健康,所有主分片可用,部分或者全部副本分片不可用
Red:不健康状态,部分主分片不可用
故障转移
es最好部署3个以上的节点,并且配置仲裁数大于一半节点,防止master选举的脑裂问题。
1.当一个节点掉线,如果该节点是master节点,则通过比较node ID,选择较小ID的节点为master。
2.然后由master节点决定分片如何重新分配。同理,新加入节点也是由master决定如何分配分片。