利用snapshot迁移es数据
本篇详细讲述如何利用snapshot将es从单节点的测试环境,迁移到生产环境的es集群中(如果是单节点之间的迁移,可以省去nfs配置过程),示例环境如下:
源es单节点:192.168.3.171
目标es集群:192.168.4.41、192.168.4.42、192.168.4.43
备份快照
- 第1步,源es节点:创建目录并修改配置
mkdir -p /data/elasticsearch_9200/snapshot
vi /data/elasticsearch_9200/config/elasticsearch.yml
#.添加 path.repo: ["/data/elasticsearch_9200/snapshot"]
- 第2步,源es节点:重启es进程
ps -ef | grep elasticsearch | grep -v grep | awk '{print $2}' | xargs kill -9 2> /dev/null
sudo -u esuser /data/elasticsearch_9200/bin/elasticsearch -d
- 第3步,源es节点:创建仓库
#.删除仓库 curl -XDELETE http://127.0.0.1:9200/_snapshot/my_backup
curl -XPUT http://127.0.0.1:9200/_snapshot/my_backup -H 'Content-Type: application/json' -d '{"type": "fs", "settings": {"location": "/data/elasticsearch_9200/snapshot", "compress": true}}'
# 如何查看仓库?
- 第4步,源es节点:查看索引以便针对单个索引做备份迁移
curl http://127.0.0.1:9200/_cat/indices?v
- 第5步,针对特定索引,创建快照(目录会慢慢变大...)
curl -H "Content-Type: application/json" -XPUT http://127.0.0.1:9200/_snapshot/my_backup/sam_index_3.4_snapshot -d '{"indices":"sam_index_3.4","include_global_state":true}'
- 第6步,源es节点:确认快照进度,待所有索引都返回success则表示结束
curl -XGET 'http://127.0.0.1:9200/_snapshot/my_backup/_all?pretty=true'
配置nfs同步
- 第1步,目标集群所有节点(比如192.168.4.41-43):创建目录
mkdir -p /data/elasticsearch_9200/snapshot
- 第2步,目标集群主节点(比如192.168.4.41):安装并配置nfs,仅允许
192.168.4.*
这个网段访问
yum install -y nfs-utils rpcbind
echo "/data/elasticsearch_9200/snapshot 192.168.4.0/24(rw,sync,insecure,no_subtree_check,no_root_squash)" >> /etc/exports
exportfs -r
systemctl enable rpcbind.service
systemctl enable nfs-server.service
service rpcbind start
service nfs start
- 第3步,目标集群其他节点(比如192.168.4.42-43):配置nfs挂载
yum install -y nfs-utils
mount 192.168.4.41:/data/elasticsearch_9200/snapshot /data/elasticsearch_9200/snapshot
df -Tha
恢复
- 第1步,目标集群所有节点:创建目录并修改配置
mkdir -p /data/elasticsearch_9200/snapshot
vi /data/elasticsearch_9200/config/elasticsearch.yml
#.添加 path.repo: ["/data/elasticsearch_9200/snapshot"]
- 第2步,目标集群所有节点:重启es进程
ps -ef | grep elasticsearch | grep -v grep | awk '{print $2}' | xargs kill -9 2> /dev/null
sudo -u esuser /data/elasticsearch_9200/bin/elasticsearch -d
- 第3步,目标集群主节点(比如192.168.4.41):创建仓库
curl -XPUT http://127.0.0.1:9200/_snapshot/my_backup -H 'Content-Type: application/json' -d '{"type": "fs", "settings": {"location": "/data/elasticsearch_9200/snapshot", "compress": true}}'
- 第4步,目标集群主节点(比如192.168.4.41):将旧es的快照目录同步到节点1的目录下
原始目录:192.168.3.171:/data/elasticsearch_9200/snapshot
目标目录:192.168.4.41:/data/elasticsearch_9200/snapshot
- 第5步,查看快照进度,待所有索引都返回success则表示结束
curl -XGET 'http://127.0.0.1:9200/_snapshot/my_backup/_all?pretty=true'
- 第6步,根据快照名称恢复es索引
curl -H "Content-Type: application/json" -XPOST http://127.0.0.1:9200/_snapshot/my_backup/sam_index_3.4_snapshot/_restore?wait_for_completion=true
- 第7步,确认查看索引大小
curl http://127.0.0.1:9200/_cat/indices?v