Elasticsearch 清理流程

在某些情况下,由于 Elasticsearch 索引中的数据模型更改,需要清除现有的索引和模板,以便新版本的 OAP 可以正常运行。

下面的步骤描述了如何从 Elasticsearch 中清除此类数据并确保 OAP 组件将正确启动。

减少副本数

确保在继续之前按照步骤 1 和步骤 2 进行操作

1. 将控制平面命名空间中的 oap-deployment 部署的副本数减少为 0。

注意

这需要在 TSB 中登记的所有 CP 集群中执行。
kubectl -n ${CONTROL_NAMESPACE} scale deployment oap-deployment
--replicas=0

2. 将管理命名空间中的 oap 部署的副本数减少为 0。

kubectl -n ${MANAGEMENT_NAMESPACE} scale deployment oap --replicas=0

3. 执行以下命令以删除 Elasticsearch 中的模板和索引。

es_host=localhost
es_port=9200
es_user=<USER>
es_pass=<PASS>
for tmpl in $(curl -u "$es_user:$es_pass" -sS https://$es_host:$es_port/_cat/templates | \
  egrep "skywalking" | \
  awk '{print $1}'); do echo "$tmpl: "; curl -u "$es_user:$es_pass" -sS https://$es_host:$es_port/_index_template/$tmpl -XDELETE; echo "\n";
done
for idx in $(curl -u "$es_user:$es_pass" https://$es_host:$es_port/_cat/indices | \
  egrep "skywalking" | \
  awk '{print $3}'); do echo "$idx: "; curl -u "$es_user:$es_pass" https://$es_host:$es_port/$idx -XDELETE; echo "\n";
done

选择日期

如果你只想删除特定日期的索引,而不是删除所有内容,你只需将上面的命令添加到 grep 中,例如 ...curl -u "$es_user:$es_pass" https://$es_host:$es_port/_cat/indices | grep "20221006"| ... 以此示例,你将删除在 2022 年 10 月 6 日创建的所有索引。

Elasticsearch 选项

上面的命令假定纯 HTTP Elasticsearch 实例没有身份验证。除了适当设置 <es_host><es_port> 外,如果需要,你还需要通过向上面的 curl 命令提供 -u <es_user>:<es_pass> 来添加基本认证,或者如果需要,将模式设置为 https

4. 增加管理命名空间中的 oap 部署的副本数。

kubectl -n ${MANAGEMENT_NAMESPACE} scale deployment oap --replicas=1

密切关注管理平面命名空间中新的 OAP 容器的日志,如果没有错误并且容器正常运行,可以继续执行下一步。

OAP 可用性

确保管理平面中的 OAP 在继续执行此过程之前能够正确启动。该组件的管理平面 pod 会创建系统所需的索引模板和索引,因此在继续扩展控制平面组件之前,你需要确保 OAP 正常运行。

5. 增加控制平面命名空间中的 oap-deployment 部署的副本数。

这需要在 TSB 中登记的所有 CP 集群中执行。
kubectl -n ${CONTROL_NAMESPACE} scale deployment oap-deployment \
--replicas=1