Elasticsearch 与对象存储集成
概述
Elasticsearch 可以通过快照的方式将指定的索引数据甚至整个集群的数据存储到某远端仓库,并能从该远端仓库中存储的快照恢复数据。将 Elasticsearch 通过 S3 Repository Plugin 与对象存储进行集成,以实现将对象存储作为远端仓库,用于存储快照数据。
操作步骤
创建 repository
参考如下配置,创建一个远端仓库 repository
。
PUT _snapshot/repository
{
"type": "s3",
"settings":
{
"endpoint": "s3.pek3a.stor.com",
"access_key": "<YourAccessKey>",
"secret_key": "<YourSecretKey>",
"bucket": "my_stor_bucket"
}
}
详细参数说明请参考官方文档,这里给出简要说明如下。
参数 | 说明 | ||
---|---|---|---|
repository |
远端仓库名称。 |
||
type |
协议类型,固定填写 |
||
settings |
所有支持 |
||
settings.endpoint |
填写对象存储的端点信息。
|
||
settings.access_key |
用于访问 |
||
settings.secret_key |
用于访问 |
||
settings.bucket |
|
集成 QingStor 对象存储的配置示例如下。
PUT _snapshot/repo-stor
{
"type": "s3",
"settings":
{
"endpoint": "s3.pek3a.qingstor.com",
"access_key": "<YourAccessKey>",
"secret_key": "<YourSecretKey>",
"bucket": "my_bucket"
}
}
删除 repository
通过如下命令查看、删除已有的 repository
。
# 获取名为 `repo-stor` 的 Repository 信息
curl $ES_IP:9200/_snapshot/repo-stor
# 获取名字以 `repo` 为前缀或名字中含有 `backup` 字符串的 Repository 信息
curl "$ES_IP:9200/_snapshot/repo*,*backup*"
# 获取所有 Repository 信息
curl $ES_IP:9200/_snapshot/_all
# 删除名为 `repo-stor` 的 Repository
curl -XDELETE $ES_IP:9200/_snapshot/repo-stor
创建快照
通过如下命令创建快照。创建的快照将会存放在前文配置中指定的对象存储的 Bucket 中。
# 创建名为 `backup-2019.05.13` 且包含集群所有索引数据的 Snapshot
curl -H "Content-Type: application/json" -XPUT "$ES_IP:9200/_snapshot/repo-stor/backup-2019.05.13?wait_for_completion=true"
# 创建名为 `backup-2019.05.13` 且包含集群指定索引数据,如 `index_1`、`index_2` 的 Snapshot
curl -H "Content-Type: application/json" -XPUT "$ES_IP:9200/_snapshot/repo-stor/backup-2019.05.13?wait_for_completion=true" -d'
{
"indices": "index_1,index_2",
"ignore_unavailable": true,
"include_global_state": false
}
'
说明 |
---|
命令行中的参数 |
删除快照
通过如下命令查看、删除快照。
# 查看名为 `repo-stor` 的 Repository 中名为 `backup-2019.05.13` 的快照信息
curl "$ES_IP:9200/_snapshot/repo-stor/backup-2019.05.13"
# 查看名为 `repo-stor` 的 Repository 中所有的快照信息
curl "$ES_IP:9200/_snapshot/repo-stor/_all"
# 删除名为 `repo-stor` 的 Repository 中名为 `backup-2019.05.13` 的快照
curl -XDELETE "$ES_IP:9200/_snapshot/repo-stor/backup-2019.05.13"
恢复快照
通过如下命令恢复存储在对象存储的快照至 Elasticsearch 集群。
# 根据名为 `repo-stor` 的 Repository 中的快照 `backup-2019.05.13` 恢复所有索引数据。
curl -H "Content-Type: application/json" -XPOST "$ES_IP:9200/_snapshot/repo-stor/backup-2019.05.13/_restore"
# 根据名为 `repo-stor` 的 Repository 中的快照 `backup-2019.05.13` 恢复 `index_1`、`index_2` 的索引数据。
curl -H "Content-Type: application/json" -XPOST "$ES_IP:9200/_snapshot/repo-stor/backup-2019.05.13/_restore" -d'
{
"indices": "index_1,index_2",
"ignore_unavailable": true,
"include_global_state": false,
"rename_pattern": "index_(.+)",
"rename_replacement": "restored_index_$1"
}
'
说明 |
---|
|
恢复快照至其他集群
快照由于并没有和具体的集群信息绑定,因此,可恢复到另一个不同的集群。用户可以通过这种方式,在不同集群之间导入导出数据。具体做法如下。
说明 |
---|
新集群的版本必须和老集群一致或者更新。 |
-
先在目标集群中创建与源集群同样的
repository
。说明 目标集群中创建
repository
的参数需与源集群中创建repository
的参数保持一致。可参考前文。 -
通过恢复快照的命令,修改 URL 地址为新集群的节点地址,即可将老集群的数据恢复到新集群上去。
说明 更详细的有关集群快照的生成和恢复的信息请参考 Elasticsearch 官方文档。