以下以elasticsearch7为例讲解一下关于备份的问题
首先看一段官网给出的:
翻译成中文大概意思是:备份集群的唯一可靠且受支持的方法是拍摄快照。
-
关于备份可以分为备份数据,备份集群配置,备份安全配置
-
关于还原可以分为还原数据,还原安全配置
以下我们主要针对备份数据做一个示例
备份数据
-
大致分为以下几步(如果您的集群启用了安全功能,则在备份数据时必须授权快照API调用)
-
修改elasticsearch.yml添加快照存储位置配置
path.repo: ["/data"]
-
注册快照存储库
快照可以存储在本地或远程存储库中。远程存储库可以驻留在 Amazon S3、HDFS、Microsoft Azure、Google Cloud Storage 和存储库插件支持的其他平台上。
curl -H 'Content-Type:application/json' -XPUT -d '{"type": "fs","settings":{"location":"/data/backups/risen_backup"}}' http://192.168.5.135:13500/_snapshot/risen_backup
-
创建快照
curl -H 'Content-Type:application/json' -XPUT http://192.168.5.135:13500/_snapshot/risen_backup/snapshot_1?wait_for_completion=true # wait_for_completion 为 true 是指该 api 在备份执行完毕后再返回结果,否则默认是异步执行的,我们这里为了立刻看到效果,所以设置了该参数,线上执行时不用设置该参数,让其在后台异步执行即可。
{ "snapshot":{ "snapshot":"snapshot_1", "uuid":"Fr7MsRT-TpKpEQ26tP10Wg", "version_id":7120099, "version":"7.12.0", "indices":[ ".kibana-event-log-7.12.0-000001", "risen_app_log_9beb25232bc8433f8cca5f747574396d", ".tasks", ".apm-agent-configuration", "test", ".kibana_task_manager_7.12.0_001", ".kibana_7.12.0_001", ".security-7", "risen_app_log_test", ".ds-ilm-history-5-2021.07.02-000001", ".apm-custom-link" ], "data_streams":[ "ilm-history-5" ], "include_global_state":true, "state":"SUCCESS", "start_time":"2021-07-15T09:17:27.607Z", "start_time_in_millis":1626340647607, "end_time":"2021-07-15T09:17:27.807Z", "end_time_in_millis":1626340647807, "duration_in_millis":200, "failures":[ ], "shards":{ "total":15, "failed":0, "successful":15 }, "feature_states":[ { "feature_name":"security", "indices":[ ".security-7" ] }, { "feature_name":"kibana", "indices":[ ".kibana_task_manager_7.12.0_001", ".kibana_7.12.0_001", ".apm-agent-configuration", ".apm-custom-link" ] }, { "feature_name":"tasks", "indices":[ ".tasks" ] } ] } }
-
删除快照
curl -H 'Content-Type:application/json' -XDELETE http://192.168.5.135:13500/_snapshot/risen_backup/snapshot_1?pretty
通过上面的步骤创建好备份快照后,但是随着数据新增,如何实现增量数据备份呢?继续执行创建快照的名但是需要更换快照名称
curl -H 'Content-Type:application/json' -XPUT http://192.168.5.135:13500/_snapshot/risen_backup/snapshot_2?wait_for_completion=true
当执行完毕后,你会发现 /data/backups/my_backup 体积变大了。这说明新数据备份进来了。要说明的一点是,当你在同一个 repository 中做多次 snapshot 时,elasticsearch会检查要备份的数据 segment 文件是否有变化,如果没有变化则不处理,否则只会把发生变化的 segment file 备份下来。这其实就实现了增量备份。
-
还原数据
curl -H 'Content-Type:application/json' -XPOST -d '{"indices":"risen_app_log_test","rename_replacement":"risen_app_log_test_from_backup"}' http://192.168.5.135:13500/_snapshot/risen_backup/snapshot_1/_restore?wait_for_completion=true
- 查看risen_app_log_test的数据
curl -XGET http://192.168.5.135:13500/risen_app_log_test/_search?pretty