Elasticsearch快照数据存储到BOS
更新时间:2024-08-27
工具概述
Elasticsearch是一个分布式搜索和数据分析引擎,能够高效地存储、检索、分析、处理庞大的数据集。它支持将快照数据备份到S3等对象存储系统上,本文将详细阐述如何利用ES的S3 Repository插件将快照安全地备份至BOS远程存储。
配置教程
-
下载Elasticsearch安装包,解压并启动ES。
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.15.0-linux-x86_64.tar.gz tar zxvf elasticsearch-8.15.0-linux-x86_64.tar.gz cd elasticsearch-8.15.0 bin/elasticsearch
-
最新版本的Elasticsearch已经集成了S3 Repository插件,可以直接使用,启动ES时会看到log显示已加载s3 plugin,如下所示:
…… [2024-08-26T17:36:49,356][INFO ][o.e.p.PluginsService ] [instance-oaxggkck] loaded module [repository-s3] [2024-08-26T17:36:49,365][INFO ][o.e.p.PluginsService ] [instance-oaxggkck] loaded module [repository-azure] [2024-08-26T17:36:49,365][INFO ][o.e.p.PluginsService ] [instance-oaxggkck] loaded module [repository-gcs] ……
部分老版本ES可以自行安装该插件,请参考官网教程
-
将BOS使用的Access Key ID和Secret Access Key配置到ES,执行如下命令:
bin/elasticsearch-keystore add s3.client.default.access_key bin/elasticsearch-keystore add s3.client.default.secret_key
备份步骤
-
首先需要创建一个具有创建快照仓库权限的角色用户,例如superuser,执行如下命令:
bin/elasticsearch-users useradd my_super_user -p my_pwd -r superuser
-
创建一个名为test的快照仓库,执行如下命令后如果成功会打印
{"acknowledged":true}
:curl -u my_super_user:my_pwd -k -XPUT 'https://localhost:9200/_snapshot/test' -H 'Content-Type: application/json' -d '{ "type": "s3", "settings": { "bucket": "bos-bkt", "endpoint": "s3.bj.bcebos.com"} }'
访问ES默认需使用https协议;-k参数忽略SSL证书验证(在开发环境中可以使用,在生产环境中不推荐);BOS endpoint参考官网
-
使用如下命令来确认仓库创建是否成功:
curl -u my_super_user:my_pwd -k -XGET 'https://localhost:9200/_snapshot/test?pretty' { "test" : { "type" : "s3", "settings" : { "bucket" : "bos-bkt", "endpoint" : "s3.bj.bcebos.com" } } }
-
创建test_index索引,执行如下命令:
curl -u my_super_user:my_pwd -k -XPUT "https://localhost:9200/test_index" -H 'Content-Type: application/json' -d' { "settings": { "number_of_shards": 1, "number_of_replicas": 0 } } '
-
查看目前ES集群的索引信息,执行如下命令:
curl -u my_super_user:my_pwd -k -XGET 'https://localhost:9200/_cat/indices?v' # 输出结果: health status index uuid pri rep docs.count docs.deleted store.size pri.store.size dataset.size green open test_index kwVZOtQ-RoWvuNxpgeIZ2w 1 0 0 0 227b 227b 227b
-
备份test_index索引到BOS,执行如下命令:
curl -u my_super_user:my_pwd -k -XPUT 'https://localhost:9200/_snapshot/test/test_index' -H 'Content-Type: application/json' -d '{ "indices": "test_index" }'
- 然后我们可以从BOS控制台看到备份的结果:
-
接着就可以利用备份到BOS的快照来恢复索引,先close索引,再从已经备份到BOS的快照restore,执行如下命令:
curl -u my_super_user:my_pwd -k -XPOST 'https://localhost:9200/test_index/_close' # 输出:{"acknowledged":true,"shards_acknowledged":true,"indices":{"test_index":{"closed":true}}} curl -u my_super_user:my_pwd -k -XPOST 'https://localhost:9200/_snapshot/test/test_index/_restore?pretty' # 输出:{"accepted" : true}
- 再次查看目前ES集群的索引信息,会发现和备份时的状态一致:
curl -u my_super_user:my_pwd -k -XGET 'https://localhost:9200/_cat/indices?v'