如何使用快照进行elasticsearch迁移,使用共享文件夹方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用快照进行elasticsearch迁移,使用共享文件夹方式相关的知识,希望对你有一定的参考价值。

概要:

Elasticsearch也提供了备份集群中索引数据的策略——snapshot API.它会备份整个集群的当前状态和数据,并保存到集群中各个节点共享的仓库中。这个备份的进程是增量备份的,在第一次备份的基础上进行的第二次备份只备份新变化的数据。

创建elasticsearch快照分为3步,

  1. 多节点的集群需要在每个节点的相同位置挂载同一个共享文件夹。每个节点都必须对能够访问共享文件夹且有rw权限。
  2. 为每个节点的elasticsearch.yml文件中添加path.repo。 path.repo: /mnt/es_backup 并重启节点。
  3. 创建集群的快照仓库。
  4. 创建快照
  5. 恢复index

创建共享文件夹。

使用nfs共享文件夹。

注意:
1、共享文件夹必须修改权限,chmod 777 ,

2、client用户访问id,在server中有,且对共享文件夹有rw权限。

在server端安装nfs, 修改/etc/exports文件。

/data/ES_snapshot 10.9.125.210/16(rw,sync,all_squash) 10.19.48.3/16(rw,sync,all_squash) 10.19.72.218/16(rw,sync,all_squash) 

3、在每个节点添加path.repo 并重启节点。

4、为集群创建快照仓库

curl -XPUT http://localhost:9200/_snapshot/my_backup -d ‘{"type": "fs", "settings": {"location": "/mnt/es", "compress": true}}‘

put /_snapshot/my_backup
{
  "type": "fs",
  "settings": {
    "location": "/mnt/ES_backup",
    "compress": true,
    "max_snapshot_bytes_per_sec": "50mb",
    "max_restore_bytes_per_sec": "50mb"
  }
}

4、为集群中index创建快照

PUT /_snapshot/my_backup/logstash-2017-01-07?pretty
{
  "indices": "logstash-iis-2017-01-07,logstash-httperr-2017-01-07",
  "ignore_unavailable": true,
  "include_global_state": false
}

上面的代码会将所有正在运行的索引,备份到my_backup仓库下一个叫snapshot_1的快照中。上面的api会立刻返回,然后备份工作在后台运行。如果你想api同步执行,可以加wait_for_completion标志:

PUT http://127.0.0.1:9200/_snapshot/my_backup/snapshot_1?wait_for_completion=true 

5、查看快照

get _snapshot/my_backup/logstash-2017-01-07

{
  "snapshots": [
    {
      "snapshot": "logstash-2017-01-07",
      "uuid": "0XM7X-HcR4u9Ou7-Gjzj5w",
      "version_id": 5000299,
      "version": "5.0.2",
      "indices": [
        "logstash-iis-2017-01-07",
        "logstash-httperr-2017-01-07"
      ],
      "state": "SUCCESS",
      "start_time": "2017-01-09T09:04:03.983Z",
      "start_time_in_millis": 1483952643983,
      "end_time": "2017-01-09T09:05:37.524Z",
      "end_time_in_millis": 1483952737524,
      "duration_in_millis": 93541,
      "failures": [],
      "shards": {
        "total": 10,
        "failed": 0,
        "successful": 10
      }
    }
  ]
}

如果要查看所有索引的信息,使用如下api:

GET http://127.0.0.1:9200/_snapshot/my_backup/_all 

另外还有个一api可以看到更加详细的信息:

GET http://127.0.0.1:9200/_snapshot/my_backup/snapshot_3/_status 

6、快照恢复

post /_snapshot/my_backup/logstash-2017-01-07/_restore

此api额外参数,

POST http://127.0.0.1:9200/_snapshot/my_backup/snapshot_1/_restore  
{  
    "indices": "index_1",   
    "rename_pattern": "index_(.+)",   
    "rename_replacement": "restored_index_$1"   
} 

参数indices 设置只恢复index_1索引,参数rename_pattern 和rename_replacement 用来正则匹配要恢复的索引,并且重命名。和备份一样,api会立刻返回值,然后在后台执行恢复,使用wait_for_completion 标记强制同步执行。

另外可以使用下面两个api查看状态:

GET http://127.0.0.1:9200/_recovery/restored_index_3  
GET http://127.0.0.1:9200/_recovery/

如果要取消恢复过程(不管是已经恢复完,还是正在恢复),直接删除索引即可:

DELETE http://127.0.0.1:9200/restored_index_3 

以上是关于如何使用快照进行elasticsearch迁移,使用共享文件夹方式的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch 数据迁移

如何验证失败的 ElasticSearch 恢复?

MYSQL千万级别数据量迁移Elasticsearch5.6.1实战

ELK数据备份,迁移及恢复

Openstack快照迁移实例

如何使用 debezium mysql 连接器 kafka 进行初始快照加载?