一、仓库类型
# Elasticsearch支的持仓库类型
Respository 配置类型
Shared file system "type": "fs"
Read-only URL "type": "url"
S3 "type": "s3"
HDFS "type": "hdfs"
Azure "type": "azure"
Google Cloud Storage "type": "gcs"
二、执行快照的角色
它并没有权限创建存储库,恢复快照,或索引中进行搜索
snapshot_user
三、备份原理
#原理:
es的备份是增量备份,后一次的备份只会保存自前一次备份依赖变更的记录。备份操作不阻碍数据修改 操作,但是备份内容仅仅包括在snapshot process 启动时刻的记录。备份过程中变更的数据记录不在 备份内容中。集群中任何时刻,仅能进行一个snapshot operation。当有snapshot operation进行中 时,再提交备份会报错。备份过程中不会进行分片的reallocation操作。如果因为备份内容较多,导致备份时间过长时,可通过删除备份的方式取消备份操作,操作过程中产生的备份文件会自动清理掉。删除 备份会删除备份文件,但是若此删除的备份有被其他备份依赖的文件,则依赖的文件会保留。
1. 恢复完成后,当前集群与快照同名的索引、模板会被覆盖。在集群中存在,但快照中不存在的索
引,别名,模板不会被删除
2. 执行快照期间,块照的分片不能移动到另一个节点
四、依赖ceph的s3协议进行备份操作步骤
1.集群所有es节点安装s3存储库
# 1.离线下载es对应的版本包,如es版本为7.11.2则s3下载包也为repository-s3-7.11.2.zip
https://artifacts.elastic.co/downloads/elasticsearch-plugins/repository-s3/repository-s3-7.11.2.zip
# 2.离线安装
sudo bin/elasticsearch-plugin install file:///root/s3/repository-s3-7.11.2.zip
## 注:这里install后的参数路径一定要加file://不然会报错
2.s3备份服务端创建对应bucket
s3cmd mb s3://elasticsearch
3.所有es节点配置s3 client
vim /etc/elasticsearch/elasticsearch.yml
s3.client.minio.endpoint: "http://172.16.160.xx:xxxx"
#注:这里地址和端口就写服务端s3对外的地址端口,可以先telnet测试下确认通之后再进行配置
##也可以不添加配置,根据集群情况而定,因为添加配置必须重启或reload才能生效
4.在每个es节点添加keystore配置
# 1.添加公钥
echo minio | /usr/share/elasticsearch/bin/elasticsearch-keystore add
s3.client.minio.access_key -xf
# 2.添加私钥
echo minioadmin | /usr/share/elasticsearch/bin/elasticsearch-keystore add
s3.client.minio.secret_key -xf
# 注:这里公私钥需要从s3服务端获取
## 服务端:ceph获取命令如下:
radosgw-admin user info --uid xxuser|grep -E 'access_key|secret_key'
## 如用minio的话直接在配置中获取公私钥及可
5.重启所有es节点
systemctl restart elasticsearch
## 注:这里重启节点主要是为了配置文件生效,keystore生效也可以不用重启,使用以下命令及可生效:
# 刷新keystore
POST _nodes/reload_secure_settings
6.配置Repository仓库
## 因为第3步配置后必须重启集群,如不选择做第3步添加es配置也可在如下命令中添加参数进行配置
PUT /_snapshot/ceph
{
"type" : "s3",
"settings" : {
"bucket" : "elasticsearch",
"client" : "ceph"
"endpoint": "http://192.168.31.102:9000"
}
}
## 注:这里bucket对应的就是s3服务端创建的bucket,endpoint就是s3服务端的地址+端口。如已做第3步,可以不加此行配置。
7.确认仓库是否创建成功
POST /_snapshot/仓库名/_verify
## 或返回如下则成功:
{
"nodes" : {
"f92SHdVRRQebVnG3dJfjcQ" : {
"name" : "node-1"
},
"kHZBO_h_Tf2SusEUfsrLoQ" : {
"name" : "node-2"
},
"yk2fjP-gQyWCYNBV9GMnIQ" : {
"name" : "node-3"
}
}
}
8.创建快照
wait_for_completion=true 等等初始化完成再返回
快照过程以非阻塞方式执行。可以继续针对正在创建快照的索引执行所有索引和搜索操作。但是
快照进程启动后添加到索引的记录将不会出现在快照中。
# 1.若选择将所有索引备份可执行:
PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true
##默认是将所有的poen 和started索引备份
# 2.若选择将指定索引备份可执行:
PUT /_snapshot/my_backup/snapshot_2
{
"indices": "index_1,index_2",
"ignore_unavailable": true, # 默认false,索引不存在报错
"include_global_state": false, # 排除集群状态
"metadata": {
"taken_by": "kimchy",
"taken_because": "backup before upgrading"
}
}
## 注:这里indices里可以写多个索引用逗号分隔
#### 注意:PUT /_snapshot/my_backup/snapshot_2这里‘snapshot_2’是唯一的,如果下次再执行不同索引的备份,必须用新的snashort name否则会报错。
9.查看正在运行的快照和状态
#1.查看正在运行的快照
GET /_snapshot/ceph/_current
#2.查看快照任务进度:
GET _snapshot/ceph/snapshot_2/_status
#3.查看快照属性:
GET _snapshot/ceph/snapshot_2
10.快照恢复
1. 默认情况下,将恢复快照中的所有索引,并且不会还原群集状态
2. 可以同时恢复多个索引
3. 索引只有在关闭且分片数一样或者索引不存在的情况下才能被恢复,恢复之后自动打开
# 1.恢复snashort name名为snapshot_1所有的索引
POST /_snapshot/my_backup/snapshot_1/_restore
# 2.指定索引名称恢复
POST /_snapshot/my_backup/snapshot_1/_restore
{
"indices": "index_1,index_2",
"ignore_unavailable": true, #
"include_global_state": true,
"include_aliases": false, # 防⽌别名与关联索引⼀起恢复
"rename_pattern": "index_(.+)",
"rename_replacement": "restored_index_$1" # $1表示rename_pattern中第⼀个
括号内容,$2以此类推
}
#查看恢复状态
GET /_cat/recovery/<target_index>
## 注:这里snashort name必须和备份时的snashort name一一对应