跳到主要内容
版本:v6.x

如何初始化Elasticsearch

当本机 Elasticsearch 出现无法修复的异常,或者需要彻底清空索引并重新初始化时,可以使用 CDNFly Go V6 专用重建脚本。

操作前必读

该操作会永久删除指定数据目录下的全部 Elasticsearch 索引,包括网站访问日志、节点监控数据、WAF 攻击日志和其他存储在 Elasticsearch 中的业务数据,无法恢复。

适用范围

该脚本仅适用于同时满足以下条件的主控:

  • 已安装 CDNFly Go V6,且 /opt/cdnfly-go/conf/config.yaml 完整可用。
  • Elasticsearch 安装在主控本机,配置地址为 127.0.0.1localhost::1
  • 使用安装器默认的 Elasticsearch 用户 elastic 和端口 9200

旧版 Python V5 主控、使用外部 Elasticsearch 的主控,或者只需要无损补充 mapping/pipeline 的场景,不要执行此脚本。

执行前检查

使用 root 登录主控,确认当前 Elasticsearch 数据目录:

grep -E '^[[:space:]]*path\.data:' /etc/elasticsearch/elasticsearch.yml

Go V6 全新安装的默认数据目录是 /home/es。执行命令时必须填写实际要使用的数据目录;脚本会严格校验路径,但不会保留原索引。

下载并执行

cd /tmp
curl -fL https://dl2.lotcdn.com/cdnfly/int_es_v6.sh -o int_es_v6.sh || \
curl -fL https://us.lotcdn.com/cdnfly/int_es_v6.sh -o int_es_v6.sh
curl -fL https://dl2.lotcdn.com/cdnfly/int_es_v6.sh.sha256 -o int_es_v6.sh.sha256 || \
curl -fL https://us.lotcdn.com/cdnfly/int_es_v6.sh.sha256 -o int_es_v6.sh.sha256
sha256sum -c int_es_v6.sh.sha256
chmod +x int_es_v6.sh
./int_es_v6.sh /home/es

请将最后一行的 /home/es 替换成前面确认的数据目录。sha256sum 必须返回 int_es_v6.sh: OK 后再执行脚本。

脚本会自动完成以下操作,无需手工重启服务:

  1. 校验 Go V6 主控、MySQL、Elasticsearch、本机地址和数据目录。
  2. 在删除数据前读取并保留网站访问日志和节点监控数据的保留天数。
  3. 暂停主控服务并临时隔离外部对 9200 端口的访问。
  4. 删除数据目录下的 nodes,重新设置 Elasticsearch 密码。
  5. 重建 Go V6 所需的 ILM、模板、pipeline、mapping 和业务索引。
  6. 初始化成功后解除临时隔离,并恢复原本处于运行状态的主控服务。

执行后检查

systemctl is-active elasticsearch master-api master-task

三个服务都应显示 active。节点监控数据会在节点下一次上报后重新产生,已清除的历史数据不会回填。

如果初始化失败,脚本会停止 Elasticsearch、保持主控服务停止并保留带 cdnfly-go-int-es-v6 标记的临时防火墙规则。请保留完整输出进行排查,并按脚本输出的命令处理防火墙规则;不要在 Elasticsearch schema 未初始化完成时提前恢复节点写入。