ES集群存储扩容及在线调整配置

环境信息

ELK日志系统,运行在 K8S 集群中 ,存储使用StorageClass 动态存储卷

故障现象

  1. Kibana 页面无法查询最新日志,但可以查看历史日志记录

故障排查参考

本文中 ELK 部署在集群default命名空间,如果部署在自定义命名空间,执行命令请替换default名称

  • 查看logstash组件日志, 登录集群master节点,执行命令:kubectl logs logstash-0 -n default可见不断打印如下信息:
[2021-11-16T09:55:31,753][INFO ][logstash.outputs.elasticsearch] retrying failed action with response code: 403 ({"type"=>"cluster_block_exception", "reason"=>"index [uk8s-vidxqjoo-kube-system-2021.11.16] blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"})
[2021-11-16T09:55:31,753][INFO ][logstash.outputs.elasticsearch] Retrying individual bulk actions that failed or were rejected by the previous bulk request. {:count=>1}
  • 查看ES组件存储卷使用率,登录集群master节点,执行命令:
    本文ES实例是es-master-0 es-master-1 es-master-2 这三个POD,请根据实际情况修改
for pod in es-master-0 es-master-1 es-master-2
do
  kubectl exec -t -i $pod -- sh -c 'df -h| grep /usr/share/elasticsearch/data' -n default
done

可以看到空间磁盘使用率高达96%

/dev/vdb         20G   19G  933M  96% /usr/share/elasticsearch/data
/dev/vdb         20G   19G  939M  96% /usr/share/elasticsearch/data
/dev/vdc         20G   19G  933M  96% /usr/share/elasticsearch/data
  • 通过ES API 查询索引状态,登录集群master节点,执行命令:
    本文中 es-svc,请根据实际情况修改对应service名字
ES_CLUSTER_IP=`kubectl get svc es-svc | awk 'NR>1 {print $3}'`
curl http://${ES_CLUSTER_IP}:9200/_all/_settings?pretty

可以看到返回信息中包含"read_only_allow_delete": "true" 从这里可以定位故障原因,虽然磁盘没有写满,但是触发了ES的保护机制:

  • ES cluster.routing.allocation.disk.watermark.low,控制磁盘使用的低水位线(watermark) 默认值85%,超过后,es不会再为该节点分配分片;
  • ES cluster.routing.allocation.disk.watermark.high,控制高水位线,默认值90%,超过后,将尝试将分片重定位到其他节点;
  • ES cluster.routing.allocation.disk.watermark.flood_stage 控制洪泛水位线。默认值95%,超过后,ES集群将强制将所有索引都标记为只读,导致新增日志无法采集,无法查询最新日志,如需恢复,只能手动将 index.blocks.read_only_allow_delete 改成false.

参考处理方式

1. ES PVC扩容

日志ELK默认部署在集群default命名空间,如果部署在自定义命名空间,执行命令请替换default名称

  • 登录集群master节点, 查看ES pod使用的pvc 执行命令:kubectl get pvc -n default
    执行 kubectl edit pvc pvc名字 -n default,将 spec.resource.requests.storage 的值调大,保存后退出,大概在一分钟左右,PV、PVC 以及容器内的文件系统就完成了在线扩容

扩容后参考检查步骤

  • 确认 pv/pvc状态 kubectl get pv | grep multi-master && kubectl get pvc
  • 解除ES索引只读模式
#!/bin/sh
ES_CLUSTER_IP=`kubectl get svc multi-master | awk 'NR>1 {print $3}'`
curl -H "Content-Type: application/json" -XPUT http://${ES_CLUSTER_IP}:9200/_all/_settings -d '{ "index.blocks.read_only_allow_delete": false }'
  • 确认 ES集群状态
#!/bin/sh
ES_CLUSTER_IP=`kubectl get svc multi-master | awk 'NR>1 {print $3}'`
curl http://${ES_CLUSTER_IP}:9200/_cat/allocation?pretty
curl http://${ES_CLUSTER_IP}:9200/_cat/health
curl http://${ES_CLUSTER_IP}:9200/_all/_settings | jq

2. 调整ES配置

如果目前 ES PVC 容量非常大,按照ES默认配置 90% 存储依然剩余大量空余空间,可以调大ES参数阈值, 解除索引只读模式 , 将ES集群恢复至正常状态

#!/bin/sh
ES_CLUSTER_IP=`kubectl get svc multi-master | awk 'NR>1 {print $3}'`

curl -H "Content-Type: application/json" -XPUT http://${ES_CLUSTER_IP}:9200/_cluster/settings -d '{
  "persistent": {
    "cluster.routing.allocation.disk.watermark.low": "90%",
    "cluster.routing.allocation.disk.watermark.high": "95%",
    "cluster.routing.allocation.disk.watermark.flood_stage": "97%",
    "cluster.info.update.interval": "1m"
  }
}'
curl -H "Content-Type: application/json" -XPUT http://${ES_CLUSTER_IP}:9200/_all/_settings -d '{
  "index.blocks.read_only_allow_delete": false
}'

ES相关参数说明:

  • cluster.routing.allocation.disk.watermark.low,控制磁盘使用的低水位线(watermark),它默认为85%,这意味着 Elasticsearch 不会将分片分配存储空间使用率超过85%的节点。它还可以设置为绝对字节值(如500MB),以防止 Elasticsearch 在可用空间少于指定数量时分配分片。此设置对新创建索引的主分片没有影响,特别是对以前从未分配过的任何分片。
  • cluster.routing.allocation.disk.watermark.high,控制高水位线,它默认为90%,这意味着 Elasticsearch 将尝试将分片从存储使用率高于90%的节点重新定位。它还可以设置为绝对字节值(类似于低水位线),以便在分片的可用空间小于指定数量时将其重新定位到远离节点的位置。此设置影响所有分片的分配,无论以前是否分配。
  • cluster.routing.allocation.disk.watermark.flood_stage,控制洪泛水位线。它默认为95%,一旦有一个ES节点存储空间超过了洪泛阶段 Elasticsearch 将对索引块强制执行只读设置 index.blocks.read_only_allow_delete: true 这是防止节点耗尽存储空间的最后手段。一旦有足够的空间允许索引操作继续,则必须手动调整 index.blocks.read_only_allow_delete: false 取消索引只读属性。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容