新春佳节普天同庆,适合探亲访友,旅游散心。
然而,对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