elasticsearch集群
elasticsearch是高可用且可扩展的,可以通过增加节点来增加可靠性,一个节点就是一个elasticsearch实例,一个集群由一个或多个节点组成,具有相同的cluster.name
,当加入新节点或删除一个节点时,集群会感知到并平衡数据。集群中一个节点会被选举为主节点master,来管理集群的一些变更,主节点不参与文档的变更和搜索
节点
主节点(master):维护集群信息,如果不作为数据节点的话,不会参与到搜索和索引流程的处理,只会去处理集群内节点的变更、索引的变更等,整个集群中只会有一个master节点
1 | true : |
数据节点(data):存储索引数据,同时对外提供索引服务,对CPU、内存、IO等资源要求比较高
1 | false : |
客户端节点(client):既不会成为主节点,也不会成为数据节点,作用是在搜索索引的时候,作为协调节点,对搜索进行负载均衡。如来了一个搜索请求,该节点会将该请求路由到各个数据节点,进行搜索,最终将搜索结果合并,一般在总节点数小于100时,不需要客户端节点
1 | false : |
分片
主分片:一个主分片就是一个完全独立的Lucene索引,一个节点可以拥有多个主分片,针对es请求创建索引时,该请求会将一个完整的数据切分为几个分片,分别交给相应的切片机器去处理。分片的作用是为了扩展,可以进行横向扩展和纵向扩展,默认5个,设定之后不可更改
副本分片:一个主分片可以设置0-n个副本分片,设定之后还可以调整,作用是进行数据冗余和提供搜索
集群监控
elasticsearch提供了一套集群监控的api,以_cluster开头
查看集群状态
1 | GET _cluster/state |
可以只查询集群状态中的某个信息,如只查看metadata
1 | GET _cluster/state/metadata |
观察集群的健康情况
1 | GET _cluster/health |
还可针对某个索引来进行健康检查
1 | GET _cluster/health/索引名 |
还可以使用_cat命令来查看
1 | GET _cat/helth?v |
集群统计
返回两个基本信息,一个是索引信息,包含有分片数量、存储大小、内存使用等;另一个是集群节点信息,包含有节点数量、角色、操作系统信息、jvm版本、内存使用率、cpu和插件安装信息等
1 | GET _cluster/stats |
节点监控
节点监控使用_nodes开头
节点信息
集群节点信息接口用于搜索一个或多个集群节点信息
1 | GET _nodes |
还可以使用_cat来查看
1 | GET _cat/nodes?v |
节点统计
对一个、多个或全部的集群节点进行统计
1 | GET _nodes/stats |
集群分片迁移
elasticsearch集群路由可以通过_cluster/reroute
来对集群中的分片进行操作,例如可以在集群中把一个分片从一个一个节点迁移到另一个节点,将未分配的分片可以分配到一个特定节点上
1 | POST /_cluster/reroute |
有三种操作
- move 把分片从一节点移动到另一个节点,可以指定索引名和分片号
- cancel 取消分配一个分片,node参数可以指定在哪个节点取消正在分配的分片,可以使用allow_primary参数来取消分配主分片
- allocate_replica 分配一个未分配的分片到指定节点
集群节点配置
配置更新
配置更新有两种状态,一种是持久的persistent,一种是临时的transient
1 | PUT /_cluster/settings |
获取配置
1 | GET /_cluster/settings?include_defaults=true |
include_defaults=true表示包含默认配置
常用配置
主节点选举,以discovery.zen为前缀
discovery.zen.ping_timeout
默认3s,主节点选举,选举过程中,候选主节点ping master主节点的超时时间对选举时间进行调整,如果网络缓慢会造成集群重新选举,可适当调整该值discovery.zen.join_timeout
当一个节点请求加入主节点,会发送请求信息到主节点,请求的超时时间配置,是ping_timeout的20倍,默认60000ms- discovery.zen.minimum_master_nodes 防止脑裂(一个es集群因网络原因或master节点负载过大,响应速度过慢,导致ping主节点超过超时时间,而引起的部分候选主节点进行重新选举,导致产生大于1个master节点,每一个master节点相当于一个独立的es集群),只有大于该值,才会进行master节点的选举,该参数必须大于等于集群中master候选节点的quorum数量,
quorum=master候选主节点数/2 + 1
- discovery.zen.no_master_block 当集群中没有活动的master节点后,该设置指定了哪些操作需要被阻塞,可选all和write,默认为write
- discovery.zen.ping.unicast.hosts 单播路由服务器,单播时,需要一些服务器列表进行集群状态的传播
故障检测,以discovery.zen.fd为前缀
discovery.zen.fd.ping_interval
ping检查的频率,默认1sdiscovery.zen.fd.ping_retries
ping的失败或超时重试次数,默认3次discovery.zen.fd.ping_timeout
ping的超时时间,在运行中,master检测所有节点,以及节点检测master是否通畅的超时时间,会触发master节点的选举机制,默认30s
分片分配设置,以cluster.routing.allocation
开头
cluster.routing.allocation.enable
禁用或启用哪种类型分片,可选项有- all 允许所有的分片被重新分配,默认
- primaries 只允许主节点分片被重新分配
- new_primaries 只允许新的主节点索引的分片被重新分配
- none 不对任何分片进行重新分配
cluster.routing.allocation.node_concurrent_recoveries
允许在一个节点上同时并发多少个分片分配,默认2cluster.routing.allocation.node_initial_primaries_recoveries
当副本分片加入到集群时,在一个节点上并发发生分片分配的数量,默认4cluster.routing.allocation.same_shard.host
在一个主机上的当有多少个相同的集群名称的分片分配时,是否进行检查主机名和主机ip地址,默认false,仅适用于在同一台机器上启动多个节点时配置
分片平衡设置,
cluster.routing.rebalance.enable
启用或禁用特定种类的分片重新分配,可选项有- all 允许所有的分片进行分片平衡,默认
- primaries 只允许主节点分片进行分片平衡
- replicas 只允许从分片进行平衡
- none 不对任何分片进行平衡
cluster.routing.allocation.allow_rebalance
当分片再平衡时允许的操作,可选项有- always 总是允许再平衡
- indices_primaries_active 只有主节点索引允许再平衡
- indeices_all_active 所有分片允许再平衡,默认
cluster.routing.allocation.cluster_concurrent_rebalance
重新平衡时允许多少个并发的分片同时操作,默认2
启发式分片平衡,以cluster.routing.allocation.balance为前缀
cluster.routing.allocation.balance.index
在特定节点上,每个索引分配的分片数量,默认0.55cluster.routing.allocation.balance.threshold
操作的最小最优化的值,默认为1cluster.routing.allocation.balance.shard
在节点上分配每个分片的权重,默认是0.45
基于磁盘的配置,以cluster.routing.allocation.disk为前缀
cluster.routing.allocation.disk.include_relocations
计算节点的磁盘使用情况的时间间隔,默认truecluster.routing.allocation.disk.watermark.low
允许分配时的磁盘空间最小值,可以是比例或者绝对值,如85%或1G,当磁盘占用超过设定值之后,系统将不会对此节点进行分配操作cluster.routing.allocation.disk.watermark.high
允许分配时的磁盘空间最大值,当超过这个值之后,系统会把分片迁移到别的节点,默认90%cluster.routing.allocation.disk.watermark.flood_stage
elasticsearch变为只读模式,默认为85%cluster.routing.allocation.disk.threshold_enabled
是否启用磁盘分配决策,默认true
完整配置示例
1 | # 集群名称 |
可以使用bigdesk来进行elasticsearch的集群监控,地址为https://github.com/hlstudio/bigdesk.git