本节主要介绍负责es中功能的各个方面的模块。
每个模块都有静态设置和动态设置,静态设置需要是全局的,需要在集群中的每个节点上设置。
动态设置项可以动态更新。
本节模块主要有:
cluster-level routing and shard allocation 用于控制将分片分配给节点的位置,时间和设置
discovery 节点如何互相发现以形成集群
gateway 在恢复开始之前,需要加入集群的节点数
http 用于控制http rest接口的设置
indices 全局索引相关设置
network 控制默认网络设置
node client java节点客户端加入集群,但不保存数据或充当主节点
painless es内置的脚本语言,旨在尽可能安全
plugins 用于扩展es功能
scripting 自定义脚本
snapshot/restore 使用快照进行备份恢复
thread pools es中使用的线程池的信息
transport 配置传输网络层,由es内部使用,以在节点之间进行通信
tribe nodes 部落节点加入一个或多个集群,并充当他们之间的联合客户端,废弃
cross cluster search ......
详细介绍
cluster-level routing and shard allocation
master的一个主要作用是决定哪个分片分配到哪些nodes,以及何时移除分片以达到平衡
cluster level shard allocation 分片分配是将分片分配给节点的过程,其可能发生在初始恢复,副本分配,重新平衡或添加删除节点期间
cluster.routing.allocation.enable 分片分配的配置,如可以分配任何分片,只能分配主分片,不允许分配分片..
cluster.routing.allocation.node_concurrent_incoming_recoveries 并发恢复分片的数量
cluster.routing.allocation.node_concurrent_outgoing_recoveries 并发传出分片的数量
cluster.routing.rebalance.enable 允许碎片重新平衡
disk-based shard allocation
在确定是将新分片分配给该节点还是主动重新定位分片之前,es会考虑节点的磁盘空间
cluster.routing.allocation.disk.threshold_enabled 默认为true,false表示禁用磁盘分配决策策略
cluster.routing.allocation.disk.watermark.low 控制磁盘使用的低水平线,默认85%,意味着es不会将分片分配给使用磁盘超过85%的节点。也可以设置绝对值大小,如500m
cluster.routing.allocation.disk.watermark.high 默认90%,超过的话会触发重分配分片
cluster.routing.allocation.disk.watermark.flood_stage 默认95%,索引进入只读模式
cluster.info.update.interval es检查集群中磁盘使用情况的时间间隔
shard allocation filtering
指定分片可以分配到哪写节点,不可以分配到哪些节点,匹配参数有 ip,name,host
discovery
发现模块负责发现集群中的节点,以及选择主节点。
es是基于对等的系统,如果操作被广播/委派,则节点直接相互通信。所有主要api(index,delete,search)都不和主节点通讯。
主节点的职责是维护全局集群状态,并在节点加入离开集群时重新分配分片。每次集群状态更新时,集群中的其它节点都会收到状态变化
zen discovery
es内置的发现模块和默认配置,提供单播实现,它分为几个子模块
ping
节点使用发现机制查找其它节点的过程。
单播(unicast)
单播发现需要提供一组hosts列表,由hosts参数配置
hosts.resolve_timeout 等待dns解析的最大时间,默认5S
master election
discovery.zen.ping_timeout 默认3S,尝试3次(预期结果:加入已有集群,或者开始选举)。如果依然没能加入集群,ping模块重启。一旦一个节点准备加入集群,它会向master发送一个超时时间为discovery.zen.join_timeout的请求(默认为ping超时的20倍)
discovery.zen.master_election.ignore_non_master_pings 忽略非配置为master节点的选票信息
discovery.zen.minimum_master_nodes 集群中至少需要存在的配置master节点的数量
fault detection
共有两个错误探测线程在工作,一个是由master运行,向其它节点发送ping请求来确认它们活着。另一组线程是每个节点向master发送ping请求来确定自己是否活着,活着master是否挂了。
ping_interval 默认1S,ping的频率
ping_timeout 默认30S,等待ping应答的超时时间
ping_retries 默认3次,失败重试次数
cluster state updates
主节点是集群中唯一可以更新集群状态的节点。主节点一次处理一个集群状态更新,应用所需的更改并将最新的信息发送给集群中其它节点。其它节点接收发布消息,发送应答,master需要收到超过discovery.zen.minimum_master_nodes的应答才能被提交。(超时时间为discovery.zen.commit_timeout,默认30S)
一旦收到足够的应答,集群状态更新才能得以提交,并发送给所有nodes。节点更新集群状态。在继续处理队列中的下一个更新之前,主节点等待所有节点响应,直到超时。超时时间: discovery.zen.publish_timeout,默认30S
no master block
要使集群完全正常运行,它必须具有活动主节点。
discovery.zen.no_master_block 设置当没有master时,什么样的操作将被拒绝(不应用于节点级别的apis,如node info api)
all 拒绝所有的操作
write 拒绝写操作
node
每个es实例就是一个节点,连接节点的集合称为集群。
所有的节点都知道集群中的其它节点,可以将client端请求转发给其它节点,每个节点都有一个或多个作用。
master-eligible node(符合主节点的节点)
node.master设置为true的节点,使其有资格被选为集群主节点
data node
node.data为true的节点,数据节点保存数据并保存与数据相关的操作,如CRUD,搜素、聚合
ingest node(摄取节点)
node.ingest为true的节点。应用ingest pipeline来丰富文档,负载量大的时候需要使用单独的摄取节点。
tribe node(部落节点)
协调节点,可以连接到多个集群并在所有连接的集群中执行搜索和其它操作。
plugins
用于扩展功能
scripting
painless是默认的脚本语言,...待分析
snapshot/restore
备份恢复,以索引为基本单位
thread pools
节点包含多个线程池,以便改进节点内线程内存消耗的管理方式。主要线程池如下:
generic
适用于通用操作
index
用于索引、删除操作,固定大小,线程个数为cpu核数,队列大小为200
search
用于计数,搜索,建议操作。线程个数为cpu核数*3/2+1,队列大小为1000
get
用于get操作,线程个数为cpu核数,队列大小为1000
bulk
用于bulk操作,,线程个数为cpu核数,队列大小200
snapshot
备份恢复线程,最大五个线程,线程大小可变,可以理解为非核心线程
warmer
用于分段预热操作,空闲线程保活5min,最大线程数5
refresh
用于refresh操作,空闲线程保活5min,最大线程数10
listener
java client监听线程,最大10
线程类型:fixed、scaling。前者类似java的核心线程,后者类似核心线程加max线程
transport
传输模块用于集群内节点之间的通信。从一个节点到另一个节点的每个调用都使用传输模块(如节点间http get请求转发)
transport.tcp.port 绑定端口范围,默认是9300-9400
transport.host 用于指定绑定的host
...
同样的支持常规的tcp连接配置(地址复用,长连接,no_delay,大小)
tribe nodes
已经废弃...
cross cluster search
...... 待分析