由于之前elasticsearch出现崩溃,导致索引被删除,只能恢复三天内的数据,因此需要创建快照进行备份,目标至少快速恢复一个月内的数据。
配置过程中原先的7.3版本的repository-s3插件默认使用path-style的方式访问oss,查看阿里云OSS帮助文档告知用户S3的插件默认使用path-style,而阿里云仅支持virtual hosted,具体如下:
由于旧版的插件原因,导致无法正常备份快照到阿里云的oss,从7.4版本开始AWS提供了一个参数,默认使用virtual hosted方式,故升级到7.7版本。
安装repository-s3
bin/elasticsearch-plugin install repository-s3
安装成功后提示repository-s3 installed,插件安装完成后需要重启elasticsearch,才能加载。
到阿里云后台生成AccessKey和SecretKey,执行如下命令,将key添加到elasticsearch.keystore
bin/elasticsearch-keystore add s3.client.default.access_key
bin/elasticsearch-keystore add s3.client.default.secret_key
若没有安装插件,执行添加key会报命令不存在,key添加完成后需要再次重启elasticsearch,才能生效。
(1)创建快照仓库
curl -XPUT 'http://10.10.10.1:9200/_snapshot/elk_backup' -H 'Content-Type: application/json' -d '{"type":"s3", "settings":{"bucket":"elkdata","endpoint":"oss-cn-hangzhou-internal.aliyuncs.com","compress":true,"disable_chunked_encoding":true,"base_path":"elkdata","max_snapshot_bytes_per_sec":"500mb","max_restore_bytes_per_sec":"500mb"}}'
参数说明:
type:指定快照仓库类型为S3,也就是oss
bucket:指定oss的bucket名称(阿里云上查看)
endpoint:指定oss访问域名(阿里云上查看)
compress:是否压缩(默认开启压缩,只压缩元数据文件,索引数据文件不压缩)
disable_chunked_encoding:是否禁用HTTP服务器响应的分块编码
base_path:指定bucket内的存放目录
max_snapshot_bytes_per_sec:在仓库单个节点上创建快照的最大速率(默认40mb)
max_restore_bytes_per_sec:在仓库单个节点上还原快照的最大速率(默认40mb)
(2)创建快照
curl -XPUT 'http://10.10.10.1:9200/_snapshot/elk_backup/elkdata?wait_for_completion=true' -H 'Content-Type: application/json' -d '{"indices":"test-20200529","ignore_unavailable":true,"include_global_state":false}'
参数说明:
wait_for_completion:是否等待快照完成后返回
indices:指定要创建快照的索引,如有多个索引使用英文逗号隔开(如index1,index2)
ignore_unavailable:忽略不存在的索引
include_global_state:防止集群全局状态被被存储为快照
(3)快照恢复
curl -XPOST 'http://10.10.10.1:9200/_snapshot/elk_backup/elkdata/_restore' -H 'Content-Type: application/json' -d '{"indices":"test-20200529"}'
(4)查看快照状态
查看仓库列表
curl -XGET 'http://10.10.10.1:9200/_snapshot/_all?pretty=true'
查看指定仓库下的所有快照状态
curl -XGET 'http://10.10.10.1:9200/_snapshot/elk_backup/_all?pretty=true'
查看指定仓库下指定快照状态
curl -XGET 'http://10.10.10.1:9200/_snapshot/elk_backup/elkdata/_all?pretty=true'
查看指定仓库下快照执行状态
curl -XGET 'http://10.10.10.1:9200/_snapshot/elk_backup/_status?pretty=true'