文档中涉及到的所有 DSL 命令,都可以通过 kibana 的 dev tools 执行
通过集群健康值的状态,可以反映出集群当前索引分片的情况。
0:绿色,表示集群所有主分片和副本分片都可用,集群处于最健康的状态。
1:黄色,表示所有的主分片均可用,但存在不可用副本分片。此时,搜索结果仍然是完整的,但集群的高可用性在一定程度上受到影响,一般会自动恢复。
2:红色,表示至少一个主分片以及它的全部副本分片均不可用。集群处于红色状态意味着已有部分数据不可用,搜索只能返回部分数据,而分配到丢失分片上的请求会返回异常。
监控体现
通过控制台的“在线节点数”,可以关注到节点的在线情况
日志体现
出现关键字:“node-left”;“master left”;“although publication of cluster state version completed ago”
查看监控指标,“最大 CPU 利用率”、“集群1分钟最大负载”等资源相关有突增,判断可能是业务行为引起;
查看监控指标,若“平均每秒写入次数”、“单周期查询cache命中次数”等读写量有突增,确认可能是业务上的读写请求突增导致;若请求量没有太大变化,查看“磁盘有IO操作的时间与总时间的百分比”、“最大查询延迟”是否有突增,确认可能是有跨时间大或者大聚合的查询请求导致。
1)确认集群是否有热点现象——“最大 CPU 利用率”与“平均 CPU 利用率”相差大,同时尽可能降低当前的读写;
2)若有热点现象——登录 cerebro,确认分片分布是否均匀,若分布不均,可临时将负载大节点上的分片搬迁到负载小的节点;
3)若无热点想象,且请求量持续处于高位——建议进行扩容,扩容的量可根据集群规格和容量配置评估进行测算;
4)若长时间(20min)以内,集群未能自动恢复,及时提单解决。
问题表现
监控体现
指标“健康状态”显示为红色
POST _cluster/reroute?retry_failed=true
ES 集群节点的磁盘利用率超过85%时会导致新的分片无法分配
监控体现
指标“硬盘存储利用率”中的最大值>85%
cerebro 体现
在 rest 执行
GET /_cluster/allocation/explain
"explanation"字段显示报错信息
the node is above the low watermark cluster setting [cluster.routing.allocation.disk.watermark.low=85%], using more disk space than the maximum allowed [85.0%], actual free: [6.210757516951154%]"
PUT _cluster/settings
{
"transient":{
"cluster.routing.allocation.disk.watermark.high":"95%",
"cluster.routing.allocation.disk.watermark.low":"90%"
}
}
删除数据后切记将水位线复原!
PUT _cluster/settings
{
"transient":{
"cluster.routing.allocation.disk.watermark.high":"null",
"cluster.routing.allocation.disk.watermark.low":"null"
}
}
关闭索引只读
PUT _all/_settings
{
"index.blocks.read_only_allow_delete": null
}
关闭集群只读
PUT _cluster/settings
{
"persistent": {
"cluster.blocks.read_only_allow_delete": null
}
}
监控体现
观察当前集群分片数,对比集群理论上可容纳分片数。默认情况下,单节点可容纳1000分片
日志体现
出现关键字“this action would add [1] total shards, but this cluster currently has [29998]/[3000] maximum shards open”
GET _cluster/settings?include_defaults&flat_settings
2)根据集群情况,调整最大分片数大小。注意,这里调整的是单个节点最大分片数,集群的最大总分片数需要用单节点最大分片数*节点数。调整的原则基本可参考2C对应1000分片(建议让用户自行调整)
PUT _cluster/settings
{
"persistent":{
"cluster":{
"max_shards_per_node":5000 #根据集群情况进行调整
}
},
"transient":{
"cluster":{
"max_shards_per_node":5000
}
}
}
集群状态为黄与为红的情况不同,当为黄时仅表示有副本分片不可用,对集群使用不一定有直接影响,需要进一步定位分析。
监控体现
日志体现
无“error”、“warning”等日志
cerebro 体现
POST _cluster/reroute?retry_failed=true
监控体现
原因分析和解决方案
和以上集群“健康值为红”的解决方案一致
cerebro 体现
调整索引副本数,降低至小于数据节点数
PUT /indexname(索引名)/_settings
{
"number_of_replicas" : 2 #合理值,由用户决定
}
cerebro 体现
在 rest 执行
GET /_cluster/allocation/explain
"explanation"字段显示报错信息
{
"node_id": "***",
"node_name": "mastersha",
"transport_address": "***",
"node_decision": "throttled",
"deciders": [{
"decider": "throttling",
"decision": "THROTTLE",
"explanation": "reached the limit of incoming shard recoveries [2], cluster setting [cluster.routing.allocation.node_concurrent_incoming_recoveries=2] (can also be set via [cluster.routing.allocation.node_concurrent_recoveries])"
}]
}
{
"node_id": "***",
"node_name": "master",
"transport_address": ***,
"node_decision": "no",
"store": {
"matching_sync_id": true
},
"deciders": [{
"decider": "same_shard",
"decision": "NO",
"explanation": "the shard cannot be allocated to the same node on which a copy of the shard already exists [[index_execution][2], node[***], [P], s[STARTED], a[id=***]]"
},
{
"decider": "throttling",
"decision": "THROTTLE",
"explanation": "reached the limit of outgoing shard recoveries [2] on the node [***] which holds the primary, cluster setting [cluster.routing.allocation.node_concurrent_outgoing_recoveries=2] (can also be set via [cluster.routing.allocation.node_concurrent_recoveries])"
}
]
}
判断当前集群负载情况,若不高的话可适当调高并发速度,若过高的话建议用户耐心等待恢复。注意:调整的值需要根据集群规格判断,尽量不要调高
PUT _cluster/settings
{
"transient":{
"cluster.routing.allocation.node_concurrent_recoveries":10, "cluster.routing.allocation.node_concurrent_incoming_recoveries":10,
"cluster.routing.allocation.node_initial_primaries_recoveries":10, "cluster.routing.allocation.node_concurrent_outgoing_recoveries":10,
"cluster.routing.allocation.cluster_concurrent_rebalance":10,
"indices.recovery.max_bytes_per_sec":"100mb"
}, // 临时
}
Q:当集群变红时,是否会影响业务使用?
A:是。集群为红色说明有主分片不可用,影响数据到此分片的读写。
Q:集群健康值为红的时候可以重启恢复么?
A:不建议重启。可能会导致重启流程卡住或者分片损坏。
Q:如何避免集群状态变红(red)?
A:对于数据容灾性要求高的场景,建议添加副本分片。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。