春节宜运维:记Elasticsearch的数据搬迁

时间:02/12/2024 21:23:59   作者:ChenReal    阅读:34

新春佳节普天同庆,适合探亲访友,旅游散心。

然而,对IT工程师来说,春节还非常适宜加班搞服务器的运维。因为春节假期系统所承载的业务量直线下降,没有太多的干扰,不用顾忌停机半个小时是否影响用户使用,可以多次去试错。简直完美!

春节假期,我花了3天的时间,将公司4台生产服务器从操作系统应用软件再到系统数据,完成了乾坤大挪移式的大升级。结果一切顺利,爽得不要不要的。其中,Elasticsearch的数据从A服务器搬迁到B服务器,这个操作是我此前未尝试过的,值得记录下来,以备下回查阅。

网上所介绍的做Elasticsearch数据迁移有几种,因为我们放在ES上的数据并不多,我选择了最简单的一种——elasticsearch-dump工具做数据的导入导出。

安装elasticsearch-dump

  • 1.下载node.js包
wget https://nodejs.org/dist/v16.20.2/node-v16.20.2-linux-x64.tar.gz

注意:我试过用node.js v18来安装elasticsearch-dump,结果安装失败了,后来降级到v16才成功。

  • 2.解压node.js包
tar -xf node-v16.20.2-linux-x64.tar.gz
  • 3.创建npm命令链接
ln -s ~/node-v16.20.2-linux-x64/bin/node /usr/bin/node
ln -s ~/node-v16.20.2-linux-x64/bin/npm /usr/bin/npm
  • 4.检查是否链接成功
node -v
npm -v
  • 5.安装elasticdump
npm config set registry https://registry.npmmirror.com/
npm install elasticdump -g

6、创建elasticdump命令链接

ln -s ~/node-v16.20.2-linux-x64/lib/node_modules/elasticdump/bin/elasticdump /usr/bin/elasticdump

数据备份&还原

  • 服务器A:192.168.1.100
  • 服务器B:192.168.1.120
  • 导出方向:服务器A => 服务器B

我把elasticdump安装到 192.168.1.100上了。

  • 1、查询A服务器的索引数据
curl http://192.168.1.100:9200/_cat/indices?v

列出ES服务的所有索引,其中wms_stock_shot便是我需要进行迁移的那个。

status index uuid docs.count store.size`
open wms_stock_shot qvuFgth8RG2gTgHJTGETkw 4897505 1.5g
  • 2、导出索引的Mapping定义
elasticdump \
  --input=http://192.168.1.100:9200/wms_stock_shot \
  --output=/var/esdata/wms_stock_shot_map.json \
  --type=mapping
  • 3、备份索引数据(JSON格式)
elasticdump \
  --input=http://192.168.1.100:9200/wms_stock_shot \
  --output=/var/esdata/wms_stock_shot.json \
 --type=data \
 --limit=10000 \
 --concurrency=15 \
 --scrollTime=10m
  • 4、在服务器B上创建索引
# 如果索引在服务器B上已存在,先删除
curl -X DELETE "http://192.168.1.120:9200/wms_stock_shot"
# 创建空索引
curl -X PUT "http://192.168.1.120:9200/wms_stock_shot"
# 设置索引Mapping定义,POST的数据从文件`/var/esdata/wms_stock_shot_map.json`中获取
curl -H "Content-Type:application/json" -X PUT -d'{"properties":{"batch":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"billNum":{"type":"double"},"boxKeepNum":{"type":"double"},"id":{"type":"long"},"wareName":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"weight":{"type":"double"}}}' "http://192.168.1.120:9200/wms_stock_shot/_mapping"
  • 5、将数据备份导入服务器B
elasticdump \
  --output=http://192.168.1.120:9200/wms_stock_shot \
  --input=/var/esdata/wms_stock_shot.json \
 --type=data \
 --limit=10000 \
 --concurrency=15

大约500W行的数据,整个过程下来,不到半小时全部完成。

参考:

https://github.com/elasticsearch-dump/elasticsearch-dump

 

评论
0/200