一、使用linux本地目录做快照存储
1.编辑 elasticsearch.yml 文件,添加以下配置:
bash
path.repo: ["/path/to/your/backup/dir"]
2.创建一个文件系统类型的快照仓库
bash
PUT /_snapshot/my_local_repository
{
"type": "fs",
"settings": {
"location": "/path/to/your/backup/dir",
"compress": true
}
}
my_local_repository为仓库名称
3.创建快照
bash
PUT /_snapshot/my_local_repository/snapshot_1
{
"indices": "index_1,index_2",
"ignore_unavailable": true,
"include_global_state": false
}
PUT /_snapshot/my_local_repository/snapshot_1
{
"indices": "*",
"ignore_unavailable": true,
"include_global_state": false
}
snapshot_1为快照名称
4.恢复快照
bash
POST /_snapshot/my_local_repository/snapshot_1/_restore
{
"indices": "index_1"
}
二、使用minio本地目录做快照存储
1.安装 repository-s3 插件
bash
./elasticsearch-plugin install repository-s3
2.验证插件是否安装成功
bash
./elasticsearch-plugin list
3.在 elasticsearch.yml 中配置 S3 仓库: 添加以下内容来启用 S3 仓库:
bash
s3.client.default.endpoint: "http://192.168.43.185:9000"
s3.client.default.access_key: "minioadmin"
s3.client.default.secret_key: "minioadmin"
s3.client.default.protocol: "http"
4.将 access_key 和 secret_key 添加到 keystore
bash
./elasticsearch-keystore add s3.client.default.access_key
./elasticsearch-keystore add s3.client.default.secret_key
s3.client.default.access_key: 登录账户
s3.client.default.secret_key:登录密码
5.验证 keystore 配置
bash
./elasticsearch-keystore list
6.删除错误的 keystore 项
bash
./elasticsearch-keystore remove add
7.创建存储库
bash
PUT /_snapshot/es_snapshot_repository
{
"type": "s3",
"settings": {
"bucket": "es-snap-shot",
"endpoint": "http://192.168.43.185:9000",
"protocol": "http",
"region": "us-east-1",
"compress": true
}
}
es_snapshot_repository : 仓库名称
8.创建快照
bash
PUT /_snapshot/es_snapshot_repository /snapshot_1
{
"indices": "index_1,index_2", // 指定要备份的索引
"ignore_unavailable": true, // 忽略不可用的索引
"include_global_state": false // 是否包括集群全局状态
}
PUT /_snapshot/es_snapshot_repository /snapshot2
{
"indices": "*", // 指定要备份的索引
"ignore_unavailable": true, // 忽略不可用的索引
"include_global_state": false // 是否包括集群全局状态
}
ignore_unavailable 是一个可选参数,指定是否忽略那些在快照创建时不可用的索引。
include_global_state 指定是否包括集群的全局状态,如模板和集群设置。
- 查看快照状态
bash
GET /_snapshot/es_snapshot_repository /snapshot_1/_status
10.列出所有快照
如果想查看在 es_snapshot_repository 仓库中所有的快照,可以使用:
bash
GET /_snapshot/es_snapshot_repository /_all
11.恢复快照
bash
POST /_snapshot/es_snapshot_repository /snapshot_1/_restore
{
"indices": "index_1,index_2", // 指定要恢复的索引
"ignore_unavailable": true, // 忽略不可用的索引
"include_global_state": false // 是否恢复集群全局状态
}
- 删除快照
bash
DELETE /_snapshot/es_snapshot_repository /snapshot_1
- 删除快照仓库
bash
DELETE /_snapshot/es_snapshot_repository
minio快照仓库长这样:
要把minio 的 bucket的权限改为public
三、定时任务自动快照
1.配置 SLM 策略
bash
PUT _slm/policy/daily_snapshots
{
"schedule": "0 30 1 * * ?", // Cron 表达式,表示每天凌晨 1:30 进行快照
"name": "<daily-snap-{now/d}>",
"repository": "minio_backup",
"config": {
"indices": ["index_1", "index_2"], // 需要备份的索引
"ignore_unavailable": true,
"include_global_state": false
},
"retention": {
"expire_after": "30d", // 快照保留 30 天后自动删除
"min_count": 5, // 保留至少 5 个快照
"max_count": 50 // 最多保留 50 个快照
}
}
PUT _slm/policy/daily_snapshots
{
"schedule": "0 30 1 * * ?", // Cron 表达式,表示每天凌晨 1:30 进行快照
"name": "<daily-snap-{now/d}>",
"repository": "minio_backup",
"config": {
"indices": ["_all"], // 备份所有索引
"ignore_unavailable": true,
"include_global_state": false
},
"retention": {
"expire_after": "30d", // 快照保留 30 天后自动删除
"min_count": 5, // 保留至少 5 个快照
"max_count": 50 // 最多保留 50 个快照
}
}
daily_snapshots 为策略名称
2.查看 SLM 策略
bash
GET _slm/policy
3.手动触发 SLM 策略
如果需要立即测试或手动触发策略,可以使用以下命令:
bash
POST _slm/policy/daily_snapshots/_execute
daily_snapshots 为策略名称
4.删除特定的 SLM 策略
bash
DELETE _slm/policy/daily_snapshots
daily_snapshots 为策略名称
四、新搭建 elasticsearch 集群 如何使用 minio集群数据恢复
在新搭建的 Elasticsearch 集群中,使用以下命令注册 MinIO 作为快照存储库:
bash
PUT /_snapshot/es_snapshot_repository
{
"type": "s3",
"settings": {
"bucket": "es-snap-shot",
"endpoint": "http://192.168.43.185:9000",
"protocol": "http",
"region": "us-east-1",
"compress": true
}
}
其他步骤正常恢复即可