【ES】修改ES索引中serverID脚本
本脚本用于V4升级版本或更换server之后,需要修改索引中serverID的情况。(比如新环境已经运行,老数据需要更改索引中serverID,或修改server本身ID不能满足恢复老数据的情况下使用。)
只用于索引内容中的serverID修改,请根据实际情况调整。
适用于ES7.16.1。
在变量Months=中指定需要修改的索引范围,执行后在当前目录下生成日志文件ESserverIDch.log
脚本内容如下:
#!/bin/bash
#Version:V1.0
# 本脚本用于es数据迁移后,修改serverID
logfile=./ESserverIDch.log
# ESaddr: ES服务地址、ESuser: ES用户、ESpwd:ES密码
ESaddr=192.168.1.53
ESuser=elastic
ESpwd=Tsec20240315
# 请手动调整OLDid与NEWid,
# OLDid:原ID,4.5环境中的server服务器ID、NEWid:新id,4.9环境中的server服务器ID
# 多个对应关系写多个
declare -A Serverid
Serverid[OLDid]=NEWid
# 例如:Serverid[33330bc4-117c-4eb8-be00-8d5d69523dd2]=73970bc4-117c-4eb8-be00-8d5d69523dd3
IDChange(){
Months=(“2024-5” “2024-4” “2024-3” “2024-2” “2024-1” “2023-12” “2023-11” “2023-10” “2023-9” “2023-8” “2023-7” “2023-6” “2023-5”)
for Month in “${Months[@]}”;do
echo “—$(date +%Y/%m/%d\ %T) 开始修改${Month}索引—“|tee -a $logfile
curl -l -s -k -H “Content-type: application/json” -XPOST ${ESuser}:${ESpwd}@${ESaddr}:9200/meta-session-${Month}-*/_update_by_query -d ‘{“script”:{“source”:”ctx._source.serverid=\”‘$2’\”;”,”lang”:”painless”},”query”:{“term”:{“serverid”:”‘$1′”}}}’ | tee -a $logfile
done
}
for oldid in “${!Serverid[@]}”; do
echo “—–开始修改${oldid}为${Serverid[$oldid]}—–” | tee -a $logfile
IDChange ${oldid} ${Serverid[$oldid]}
done