elasticsearch 之数据迁移 - Snapshot
一、Snapshort做数据迁移的优点
优点
- 1、速度快适合大数据量迁移(2500万数据建立快照需要2-3分钟产出4.5G文件)
二、配置
单节点配置
1、创建快照仓库
在elasticsearch机器上创建仓库目录:
mkdir /repository
# 赋权
chown -R elasticsearch:elasticsearch /repository
2、在elasticsearch.yml文件中加入下面配置:
path.repo: /repository
3、启动elasticsearch后在kibana中执行下面命令:
# my_local_repo 为自定义仓库名称
PUT _snapshot/my_local_repo
{
"type": "fs",
"settings": {
"location": "/repository"
}
}
集群部署配置
集群部署的elasticsearch可以结合nfs完成,nfs的部署请参考。
1、创建快照仓库
nfs服务器配置(可以在elasticsearch的master节点上进行)
vim /etc/exports
/repository-nfs 192.168.4.0/24(rw,sync,fsid=0)
#授予权限
chmod -R 666 repository-nfs
#重载数据
exportfs -rv
nfs客户端配置(elasticsearch的node节点)
mkdir /repository
mount -t nfs 192.168.4.32:/repository-nfs /repository
2、在各个节点中的elasticsearch.yml文件中加入下面配置:
path.repo: /repository
3、重启elasticsearch集群后在kibana中执行下面命令:
# my_local_repo 为自定义仓库名称
PUT _snapshot/my_local_repo
{
"type": "fs",
"settings": {
"location": "/repository"
}
}
三、创建快照
1、为索引创建快照
# snapshot_1 为快照名称
PUT _snapshot/my_local_repo/snapshot_1
{
"indices": "index_name", # 多个索引用逗号分隔
"ignore_unavailable": true,
"include_global_state": true
}
2、查看快照状态
GET _snapshot/my_local_repo/_all
>>>>>>
{
"snapshots" : [
{
"snapshot" : "snapshot_1",
"uuid" : "KvRKl6MwRD-cNVpM0PdXsQ",
"version_id" : 6050499,
"version" : "6.5.4",
"indices" : [
"law_index",
"case_index",
"belowins_drug_index",
"belowins_food_index",
"callback_medical_index",
"obj_index",
"ent_index",
"callback_drug_index"
],
"include_global_state" : true,
"state" : "IN_PROGRESS", # IN_PROGRESS 进行中,SUCCESS 完成
"start_time" : "2020-11-18T03:19:57.826Z",
"start_time_in_millis" : 1605669597826,
"end_time" : "1970-01-01T00:00:00.000Z",
"end_time_in_millis" : 0,
"duration_in_millis" : -1605669597826,
"failures" : [ ],
"shards" : {
"total" : 0,
"failed" : 0,
"successful" : 0
}
}
]
}
注意:上面创建快照命令不会等待快照初始化完成,而是立即返回,如果想要等待初始化完成后在返回需要加
wait_for_completion=true
但是如果等待时间较长会超时。
(不建议加此参数,可以通过查看快照状态,判断是否完成。)
3、删除快照
DELETE _snapshot/my_local_repo/snapshot_1
4、恢复快照
如果是做数据迁移的话,将仓库地址打包传到目标地址后做快照恢复即可。
POST _snapshot/my_local_repo/snapshot_1/_restore
{
"indices": "index_name", # 多值情况用逗号分隔
"ignore_unavailable": true,
"include_global_state": false
}
注意:要恢复快照的索引需要时关闭状态,或者先删除当前索引(谨慎操作,建议提前建立快照)
POST index_name/_close
或者DELETE index_name
常见问题
-
1、集群部署是es读写repository-nfs是的权限问题?
答:以为es部署不能使用root账号,所以给安装es创建的账号修改权限
usermod -u 500 es groupmod -g 500 es
注意:usermod时需要es用户没有进程在活动,就是说elasticsearch进程需要关闭