Elasticsearch运维操作指南

作者:石文
时间:2018-07-12


动态配置集群参数

ES集群在运行一段时间后,受数据写入量波动的影响,集群的一些默认配置可能并不是最优的需要我们动态的调整。ES提供了一些可以通过API动态调整的参数。这些可以动态更新的参数在官方文档中往往有“dynamically”加以说明。通过API调整这些配置项有“persistent”和“transitent”两种生效的时间参数,前者指在集群中永久生效,后者在集群重启后将不再生效。下面列举了常用的几个动态配置参数的使用方法。

查看集群动态设置信息

作用:

查看集群的设置,这些设置是除了集群默认设置外的其他配置的设置(默认配置在此API中不会显示)。

集群影响:API请求

操作方式:集群API

具体操作:

示例:

#查看集群的动态设置:
curl -XGET http://<domain>:<port>/_cluster/settings?pretty

排除集群中某些节点

作用:

将集群中的某个节点中的所有分片迁移到其他节点。注意:配置这个设置的值后,集群将开始分片迁移,迁移的并发数将不受“恢复并发数”和“重平衡并发数”的控制。

集群影响:

集群将出现长时间的分片迁移,加重其他节点IO负担。

操作方式:集群API

具体操作:

示例:

#通过IP,排除集群中的某个节点:节点IP:10.100.0.11
curl -XPUT http://<domain>:<port>/_cluster/settings?pretty -d '{"transient":{"cluster.routing.allocation.exclude._ip":"10.100.0.11"}}'
#通过IP,排除集群中的多个节点:节点IP:10.10.0.11,10.100.0.12
curl -XPUT http://<domain>:<port>/_cluster/settings?pretty -d '{"transient":{"cluster.routing.allocation.exclude._ip":"10.100.0.11,10.100.0.12"}}'
#取消节点排除的限制
curl -XPUT http://<domain>:<port>/_cluster/settings?pretty -d '{"transient":{"cluster.routing.allocation.exclude._ip": null}}'

调整集群磁盘使用限制的上下限

作用:

“cluster.routing.allocation.disk.watermark.low”:此项设置是通过监控数据节点磁盘使用的水位来控制新索引分片是否可以分配到某节点。注意:这个设置将不影响新建索引的主分片的分配,即如果集群发现有些节点磁盘使用量到达了watermark.low的值,但是这个节点上总分片少于均值,那么新建索引的主分片将继续分配到此节点。索引这项设置将不会影响集群功能,只要集群磁盘有空间。

“cluster.routing.allocation.disk.watermark.high”:此项设置是通过监控数据节点磁盘使用的水位来控制是否将某些节点的分片迁移出此节点。当某个节点的磁盘使用超过这个阈值,集群将会随机(优先主分片,不再有索引更新的分片)选择分片迁移到其他节点。注意:当节点的磁盘容量达到这个阈值时,节点存在”磁盘被写满”的巨大风险。

集群影响:

“cluster.routing.allocation.disk.watermark.low”这个设置会影响到集群的分片分配(某些节点将无法分配新的分片),会影响副本分片的分配(当集群所有节点都达到这个阈值时)使集群状态变为yellow。

操作方式:集群API

具体操作:

“cluster.routing.allocation.disk.watermark.high”默认值为90%

“cluster.routing.allocation.disk.watermark.low”默认值为85%

以上两个值都支持如下2种值的设置:80%(百分数),500gb(具体的值,单位支持mb,gb,tb)。注意:“80%”指的是磁盘使用量达到85%后不再分配分片或迁移分片;“500gb”指的是磁盘还空余500gb时不再分配分片或迁移分片。

示例:

#调整数据节点的低水位值为600gb
curl -XPUT http://<domain>:<port>/_cluster/settings?pretty -d '{"transient":{"cluster.routing.allocation.disk.watermark.low":"600gb"}}'
#调整数据节点的高水位值为300gb
curl -XPUT http://<domain>:<port>/_cluster/settings?pretty -d '{"transient":{"cluster.routing.allocation.disk.watermark.high":"300gb"}}'
#取消用户设置,集群恢复这一项的默认配置
curl -XPUT http://<domain>:<port>/_cluster/settings?pretty -d '{"transient":{"cluster.routing.allocation.disk.watermark.low": null}}'
curl -XPUT http://<domain>:<port>/_cluster/settings?pretty -d '{"transient":{"cluster.routing.allocation.disk.watermark.low": null}}'

调整集群平衡策略

作用:控制集群重平衡的并发数

集群影响:集群会按照自身平衡的算法将不平衡的分片迁移到合适的节点

操作方式:集群API

具体操作:

示例:

#由于出现长时间的分片迁移,调整集群配置使集群保持现在的分片分配规模
curl -XPUT http://<domain>:<port>/_cluster/settings?pretty -d '{"transient":{"cluster.routing.allocation.balance.threshold": "3.5f"}}'
#取消上面的设置,集群使用默认的平衡策略阈值
curl -XPUT http://<domain>:<port>/_cluster/settings?pretty -d '{"transient":{"cluster.routing.allocation.balance.threshold": null}}'

重定向某些节点中的分片

作用:手动迁移某节点的分片到其他节点。

集群影响:集群分片不平衡,有可能触发集群“重平衡”操作。

操作方式:集群API

具体操作:

示例:

#将10.100.0.11上的索引test_index的分配2重定向到10.100.0.12上
curl -XPOST 'http://<domain>:<port>/_cluster/reroute?pretty' -d '{"commands": [{"move": {"index": "test_index", "shard": 2, "from_node": "10.100.0.11", "to_node": "10.100.0.12"}}]}'
#对10.100.0.11上多个索引的分片重定向到其他机器上

关闭集群索引

作用:关闭集群的索引,使索引无法被更新,无法被查询

集群影响:索引无法读写

操作方式:集群API

具体操作:

示例:

#关闭集群某个索引
curl -XPOST http://<domain>:<port>/test_index/_close?pretty
#关闭集群所有索引
curl -XPOST http://<domain>:<port>/*/_close?pretty
#打开集群所有索引
curl -XPOST http://<domain>:<port>/*/_open?pretty

调整集群恢复并发数

作用:允许在节点上发生多少并发传出分片恢复

集群影响:加快或减慢集群恢复时间

操作方式:集群API

具体操作:

示例:

#调整集群恢复并发数为0
curl -XPUT http://<domain>:<port>/_cluster/settings?pretty -d'{"transient":{"cluster.routing.allocation.node_concurrent_recoveries": 0}}'
#取消设置,集群恢复并发数为默认
curl -XPUT http://<domain>:<port>/_cluster/settings?pretty -d'{"transient":{"cluster.routing.allocation.node_concurrent_recoveries": null}}'

调整集群重平衡并发数

作用:调整集群重平衡的并发数量

集群影响:集群会根据自身算法将索引分片不均的分片迁移到合适的节点上

操作方式:集群API

具体操作:

默认值为“2”,“0”将禁止集群重平衡

示例:

#调整集群重平衡并发数为4
curl -XPUT http://<domain>:<port>/_cluster/settings?pretty -d'{"transient":{"cluster.routing.allocation.cluster_concurrent_rebalance": 4}}'

参数需要动态调整的场景

集群扩容

ES拥有良好的横向可扩展性,当集群数据写入压力不大时,简单的为集群扩容不会出现任何风险。但是当集群的写入压力较大时(例如:20000条message/秒/节点)时在默认集群配置下的扩容是会出现问题的,原因在于当新节点加入集群后集群会启动重平衡,重平衡期间一旦会有新的索引需要分配分片,新扩容节点也是优先选择的目标(因为此节点分片数低于均值)。此种情况下新扩容节点的数据负载会数倍于其他数据节点,GC overhead 会频繁进行,造成数据写入缓慢和节点假脱离集群的风险。

避免以上问题的风险,在扩容时有如下几个注意事项:

  • 扩容时禁用集群重平衡;
curl -XPUT http://<domain>:<port>/_cluster/settings?pretty -d'{"transient":{"cluster.routing.allocation.cluster_concurrent_rebalance": 0}}'
  • 一次扩容数个机器,不要仅扩容单个实例;
    在集群写入压力不大时适时的开启集群平衡,并合理调整重平衡并发数的值。
curl -XPUT http://<domain>:<port>/_cluster/settings?pretty -d'{"transient":{"cluster.routing.allocation.cluster_concurrent_rebalance": 3}}'
  • 当集群写入压力较大时停止集群重平衡
    集群单节点磁盘故障

集群中一个数据节点磁盘故障后,集群会将丢失的分片恢复到合适的其他节点上,若集群的写入压力较大,数据存储较多。集群恢复也会提高节点的IO负载,出现和集群扩容同样的风险问题。此时可以调整集群的恢复并发数来控制恢复的并发数量已减低风险。

curl -XPUT http://<domain>:<port>/_cluster/settings?pretty -d'{"transient":{"cluster.routing.allocation.node_concurrent_recoveries": 1}}'
发布了67 篇原创文章 · 获赞 0 · 访问量 1801

猜你喜欢

转载自blog.csdn.net/zhinengyunwei/article/details/104037767