备份
阿里云的ElasticSearch
如果使用的是阿里云的 ES 产品,则参考下面的步骤:
- 开通对象存储服务OSS,并新建一个Bucket。
- 创建标准存储类型的Bucket(不支持归档存储类型),且Bucket的地域与Elasticsearch实例的地域保持一致。
- 创建一个RAM用户,拥有上面Bucket的读写权限。
- 在ES控制台登录Kibana,执行下面的命令,创建一个名为my_backup的快照仓库。
PUT _snapshot/my_backup/
{
"type": "oss",
"settings": {
"endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",
"access_key_id": "xxxx",
"secret_access_key": "xxxxxx",
"bucket": "xxxxxx",
"compress": true,
"chunk_size": "500mb",
"base_path": "snapshot/"
}
}
- 执行下面的命令,确认上述仓库创建成功。
获取所有仓库的信息
GET _snapshot
获取指定仓库的信息
GET _snapshot/my_backup
- 执行下面的命令,为全部的索引创建快照。
PUT _snapshot/my_backup/snapshot_1
以上命令会为所有打开的索引创建名称为 snapshot_1的快照,并保存到 my_backup仓库中。该命令会立刻返回,并在后台执行备份任务。如果您希望任务执行完成后再返回,可通过添加 wait_for_completion实现。该参数会阻塞调用直到备份完成,如果是大型快照,需要很长时间才能返回。
PUT _snapshot/my_backup/snapshot_1?wait_for_completion=true
- 一个仓库可以包含多个快照,每个快照中可以包含所有、部分或单个索引的备份数据。
- 第一次创建快照时,系统会备份所有的数据,后续所有的快照仅备份已存快照和新快照之间的增量数据。随着快照的不断进行,备份也在增量的添加和删除。这意味着后续备份会相当快速,因为它们只传输很小的数据量。
- 执行下面的命令,查看创建的快照,确认快照状态为SUCCESS。
GET _snapshot/my_backup/_all
系统返回类似下面的结果。
{
"snapshots": [
{
"snapshot": "snapshot_1",
"uuid": "vIdSCkthTeGa0nSj4D****",
"version_id": 5050399,
"version": "5.5.3",
"indices": [
".kibana"
],
"state": "SUCCESS",
"start_time": "2018-06-28T01:22:39.609Z",
"start_time_in_millis": 1530148959609,
"end_time": "2018-06-28T01:22:39.923Z",
"end_time_in_millis": 1530148959923,
"duration_in_millis": 314,
"failures": [],
"shards": {
"total": 1,
"failed": 0,
"successful": 1
}
},
{
"snapshot": "snapshot_3",
"uuid": "XKO_Uwz_Qu6mZrU3Am****",
"version_id": 5050399,
"version": "5.5.3",
"indices": [
".kibana"
],
"state": "SUCCESS",
"start_time": "2018-06-28T01:25:00.764Z",
"start_time_in_millis": 1530149100764,
"end_time": "2018-06-28T01:25:01.482Z",
"end_time_in_millis": 1530149101482,
"duration_in_millis": 718,
"failures": [],
"shards": {
"total": 1,
"failed": 0,
"successful": 1
}
}
]
}
如果需要,可以执行下面的命令,删除快照。
# 删除所有快照
DELETE _snapshot/my_backup/_all
# 删除指定快照
DELETE _snapshot/my_backup/snapshot_3
- 进入OSS,可以看到快照文件已经被创建。
自建ElasticSearch
- 在配置文件
config/elasticsearch.yml中添加一行数据,设置ES备份的快照数据存储路径,设置好后,需要重启ES。重启ES的方法只有kill掉进程,然后重新运行es。
path.repo: ["/tmp/backups/my_backup"]
- 备份数据之前,要创建一个仓库来保存数据。
curl -H "Content-Type:application/json" -XPUT '127.0.0.1:9200/_snapshot/my_backup' -d '
{
"type": "fs",
"settings": {
"location": "/tmp/backups/my_backup"
}
}'
- 执行下面的命令,生成快照。
curl -H "Content-Type:application/json" -XPUT '127.0.0.1:9200/_snapshot/my_backup/snapshot_1'
执行下面的命令,查看快照信息。
curl -H "Content-Type:application/json" -XGET '127.0.0.1:9200/_snapshot/my_backup/snapshot_1?pretty=true'
恢复
阿里云的ElasticSearch
- 登录Kibana,确认OSS Bucket中存在快照文件,也可以参考上面备份快照中的命令,确认快照存在。
- 执行下面的命令,通过快照恢复数据。
# 将指定快照中备份的所有索引恢复到Elasticsearch集群中。
POST _snapshot/my_backup/snapshot_1/_restore
# 假设snapshot_1中包含5个索引,那么这5个索引都会被恢复到集群中。
# _restore API会立刻返回,恢复进程会在后台进行。如果您希望调用阻塞直到恢复完成,可以添加wait_for_completion参数。
POST _snapshot/my_backup/snapshot_1/_restore?wait_for_completion=true
也可以使用下面的命令,恢复所有不包括.开头的系统索引。
POST _snapshot/my_backup/snapshot_1/_restore
{"indices":"*,-.monitoring*,-.security*,-.kibana*","ignore_unavailable":"true"}
自建ElasticSearch
在Linux命令行中执行下面的命令,通过快照恢复数据。
curl -H "Content-Type:application/json" -XPOST '127.0.0.1:9200/_snapshot/my_backup/snapshot_1/_restore'
更多信息
当你需要从阿里云ES导出数据到自建ES时,可参考下面的流程:
- 在阿里云ES中创建快照。
- 从OSS中下载快照文件到本地。
- 从本地将快照文件上传到自建ES所在服务器。
- 自建ES创建快照到指定目录。
- 备份该目录,将步骤3中的快照文件移动到自建ES的快照目录。
- 在自建ES中通过恢复命令,恢复快照。
- 反之,从自建ES导入数据到阿里云ES,是同理的。