Elasticsearch的冷备
Es集群冷备
elasticsearch冷备官方文档
安装NFS和RPC
- 将es集群的所有机器作为客户端,备份的机器作为服务端
sudo yum install nfs-utils rpcbind
- 开启自启服务
sudo chkconfig nfs on
sudo chkconfig rpcbind on
- 启动NFS和RPC服务
service nfs start
service rpcbind start
配置服务端
- 创建共享目录(共享目录自定义)
mkdir share_file
- 编辑
/etc/exports
配置共享路径及权限
sudo vim /etc/exports
/home/xxx/share_file *(insecure,rw)
注:(星号表示所有ping通的IP主机都可访问,secure NFS通过1024以下的安全TCP/IP端口发送,insecure NFS通过1024以上的端口发送。Ro 该主机对该共享目录有只读权限,Rw 该主机对该共享目录有读写权限)
- 重新挂载
sudo exportfs -r
- 重启NFS服务,好像不用重启也生效了,可以先看看是否挂载成功0
sudo service nfs restart
- 显示NFS服务器输出的目录列表(即共享目录列表)
showmount -e 【IP】
showmount -e localhost
客户端配置
- 创建挂载目录(可自定义,如果不手动创建也行,在挂载时会自动创建)
mkdir mount_file
- 查看服务端的共享目录
showmount -e 【服务端IP】
- NFS v3.0 挂载
mount -t nfs -o vers=3 【服务端IP】:【服务端共享目录】 【客户端共享目录】 -o proto=tcp -o nolock
- 查看挂载路径
df -h
- 测试
- 服务端(share_file路径下)
vi test_nfs
nfs successful!!!
- 客户端(mount_file路径下)
ls
cat test_nfs(显示与服务端内容一致,表示配置成功)
Elasticsearch配置
- 每个节点的elasticsearch.yml的配置
vi elasticsearch.yml
path.repo: /home/sandy/mount_file
- 创建仓库
PUT /_snapshot/【厂库名称】
{
"type":"fs",
"settings":{
"compress":true,
"location":"/home/sandy/mount_file,
"chunk_size": "5g", # 做快照的时候大文件可以被分解成几块的数
"max_restore_bytes_per_sec":"20mb", # 每个节点恢复数据的最高速度限制. 默认是 40mb/s
"max_snapshot_bytes_per_sec":"20mb", # 每个节点做快照的最高速度限制. 默认是 40mb/s
}
}
- 获取仓库信息
GET /_snapshot/【厂库名称】
GET /_snapshot/repo*,*【厂库名称中的字符】* 通配符获取
GET /_snapshot/_all 获取所有
- 删除仓库
DELETE /_snapshot/【厂库名称】
- 创建快照,备份多个索引索引,wait_for_completion参数标识此请求是否需要等待快照创建完成,默认立即返回,不等待快照创建结束(备份无需去索引副本,“indices”: “【备份的索引名称1, 2 ,3】”)
PUT /_snapshot/【厂库名称】/【快照名称】?wait_for_completion=true
{
"indices": "【备份的索引名称】",
"ignore_unavailable": true,
"include_global_state": false
}
- 监控快照进度
GET _snapshot/【厂库名称】/【快照名称】/_status
{
"snapshots": [
{
"snapshot": "report_standby",
"repository": "es_219_standby",
"uuid": "lPi5jLbdSBKB3RJ42LADoA",
"state": "STARTED", 注:一个正在运行的快照会显示 IN_PROGRESS 作为状态
"shards_stats": {
"initializing": 0,
"started": 5, 注:这个特定快照有5个分片在传输(另外25个已经完成)
"finalizing": 0,
"done": 25,
"failed": 0,
"total": 30
},
......
}
注:INITIALIZING–>分片在检查集群状态看看自己是否可以被快照。这个一般是非常快的,STARTED-->数据正在被传输到仓库,FINALIZING–>数据传输完成;分片现在在发送快照元数据,DONE–>快照完成,FAILED–>快照处理的时候碰到了错误,这个分片/索引/快照不可能完成了。检查你的日志获取更多信息。
- 指定恢复的索引并重命名
POST /_snapshot/【厂库名称】/【快照名称】/_restore
{
"indices": "【备份的索引名称】",
"rename_pattern": "【备份的索引名称】",
"rename_replacement": "【自定义恢复的索引名称】"
}
POST /_snapshot/【厂库名称】/【快照名称】/_restore
{
"indices": "index_1", 注:只恢复index_1索引,忽略快照中存在其余索引
"rename_pattern": "index_(.+)", 注:查找所提供的模式能匹配上的正在恢复的索引
"rename_replacement": "restored_index_$1", 注:重命名成替代的模式( restored_index_1)
"index_settings": {
"index.number_of_replicas": 0 注:设置恢复索引的副本数量为0
}
}
注: 和快照类似, restore
命令也会立刻返回,恢复进程会在后台进行。如果你更希望你的 HTTP 调用阻塞直到恢复完成,添加 wait_for_completion
标记
POST _snapshot/【厂库名称】/【快照名称】/_restore?wait_for_completion=true
- 监控索引恢复信息
GET 【自定义恢复的索引名称】/_recovery 注:单独调用恢复指定索引
GET /_recovery/ 注:集群里所有索引,可能包括跟你的恢复进程无关的其他分片移动
{
"restored_reports": {
"shards": [
{
"id": 3,
"type": "SNAPSHOT", 注:type表示恢复的本质;这个分片是在从一个快照恢复
"stage": "INDEX",
"primary": true,
"start_time_in_millis": 1564540373531,
"total_time_in_millis": 658566,
"source": { 注:source哈希描述了作为恢复来源的特定快照和仓库
"repository": "es_219_standby",
"snapshot": "report_standby",
"version": "5.5.1",
"index": "reports_20190220"
},
"target": {
"id": "vlp4d-CEQXSQhJ0eWdDpoQ",
"host": "192.168.1.74",
"transport_address": "192.168.1.74:9300",
"ip": "192.168.1.74",
"name": "node_74"
},
"index": {
"size": {
"total_in_bytes": 3376313133,
"reused_in_bytes": 0,
"recovered_in_bytes": 354191,
"percent": "0.0%" 注:percent恢复的状态。分片目前已经恢复了0%的文件
},
"files": {
"total": 116,
"reused": 0,
"recovered": 26,
"percent": "22.4%"
},
"total_time_in_millis": 658550,
"source_throttle_time_in_millis": 0,
"target_throttle_time_in_millis": 0
},
"translog": {
"recovered": 0,
"total": 0,
"percent": "100.0%",
"total_on_start": 0,
"total_time_in_millis": 0
},
"verify_index": {
"check_index_time_in_millis": 0,
"total_time_in_millis": 0
}
},
- 取消一个恢复
DELETE /【自定义恢复的索引名称】
注:要取消一个恢复,你需要删除正在恢复的索引。 因为恢复进程其实就是分片恢复,发送一个 删除索引API 修改集群状态,就可以停止恢复进程,如果 【自定义恢复的索引名称】
正在恢复中,这个删除命令会停止恢复,同时删除所有已经恢复到集群里的数据
- 删除快照
DELETE /_snapshot/【厂库名称】/【快照名称】
- 查看仓库下的快照信息
GET /_snapshot/【厂库名称】/_all