基于NFS搭建ES快照仓库
原文:elasticsearch 使用快照进行备份 - 技术经验 - W3xue
第一步:安装rpcbind、nfs-utils
nfs-utils:既包含客户端,又包含服务器
Way1:在线安装
yum install rpcbind nfs-utils -y
Way2:离线安装
浏览器搜索(亲测egde可用) {软件包名} download pkgs
安装rpcbind:libtrirpc -> rpcbind
安装nfs-utils:libevent -> libref_array -> libbasicobjects -> libcollection -> libpath_utils -> libini_config ->
libverto-libevent -> gssproxy -> keyutils -> libnfsidmap -> quota-nls -> tcp_wrappers -> quota -> nfs-utils
a、搜索
b、选择对应的版本
c、下拉找到Download二进制包连接,复制到网站即可开始下载
d、安装软件
rpm -i 软件包.rpm
第二步:共享目录
a、创建共享目录
mkdir /udisk/elasticsnapshot
chmod 0777 /udisk/elasticsnapshot -R
b、修改NFS服务配置文件,/etc/exports
/udisk/elasticsnapshot 10.9.121.211/32(rw,sync,all_squash) 10.9.134.110/32(rw,sync,all_squash) 10.9.90.103/32(rw,sync,all_squash) 10.19.36.230/32(rw,sync,all_squash) 10.19.63.103/32(rw,sync,all_squash)
# /udisk/elasticsnapshot 为共享的目录, 10.9.121.211/32 为可以挂载此共享目录的IP,
# 参数说明:
# rw ro 该目录分享的权限是可擦写 (read-write) 或只读 (read-only),但最终能不能读写,还是与文件系统的 rwx 及身份有关。
# sync async sync 代表数据会同步写入到内存与硬盘中,async 则代表数据会先暂存于内存当中,而非直接写入硬盘!
# no_root_squash root_squash 客户端使用 NFS 文件系统的账号若为 root 时,系统该如何判断这个账号的身份?预设的情况下,客户端 root 的身份会由 root_squash 的设定压缩成 nfsnobody, 如此对服务器的系统会较有保障。但如果你想要开放客户端使用 root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行!
# all_squash 不论登入 NFS 的使用者身份为何, 他的身份都会被压缩成为匿名用户,通常也就是 nobody(nfsnobody) 啦!
# anonuid anongid anon 意指 anonymous (匿名者) 前面关于 *_squash 提到的匿名用户的 UID 设定值,通常为 nobody(nfsnobody),但是你可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于你的 /etc/passwd 当中! anonuid 指的是 UID 而 anongid 则是群组的 GID 啰。
c、配置生效
exportfs -r
d、启动服务
systemctl start rpcbind
systemctl start nfs
第三步:ES结点挂载共享目录
a、与上面同样的方式安装nfs-utils
b、挂载目录
mkdir /mnt/es
mount -t nfs 10.10.10.10:/udisk/elasticsnapshot /mnt/es -o proto=tcp -o nolock
为了提高NFS的稳定性,使用TCP协议挂载,NFS默认用UDP协议
第四步:ES配置快照仓库
a、在es配置文件elasticsearch.yml中末尾添加一下配置
path.repo: '/mnt/es'
b、重启ES
W1:通过systemctl命令(适用于以包管理工具安装的,或是进行了相关配置的)
systemctl stop elasticsearch
systemctl start elasticsearch
W2:通过Kill ES进程的方式
jps(或者ps -ef 得到进程Pid)
kill -9 {pid}
cd es目录
bin/elasticsearch -d (d是后台启动)
c、创建快照仓库
使用es图形客户端或是其他工具,如egde的Elasticvue插件、postman、kibana
PUT /_snapshot/my_backup ---注释:my_backup,是仓库名,任意取
{
"type": "fs",
"settings": {
"location": "/mnt/es",
"compress": true, # 是否压缩
"max_snapshot_bytes_per_sec": "50mb", --- 快照每秒保存的容量,默认40mb
"max_restore_bytes_per_sec": "50mb" --- 快照每秒恢复的容量,默认40mb
}
}
第五步:快照备份
PUT /_snapshot/my_backup/back-2018-10-26 ---注释:my_backup是仓库名。back-2018-10-26是快照名称,任意取。
{
"indices": "*", # * 表示所有index, 可以具体写哪些"logstash-iis-2017-01-07,logstash-httperr-2017-01-07",
"ignore_unavailable": true, ---注释:是否忽略不能成功的索引快照备份
"include_global_state": false --- 注释:是否包含全局状态。false不包含,只包含索引数据和元数据
}
PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true
{
...
}
同步等待快照备份完毕,适用于其他异步耗时的API
get _snapshot/my_backup/back-2018-10-26
查看快照信息,包含索引信息即一些相关信息
速率:4.19GB->2min17s
备份完毕后,仓库里会有如下文件。
附:快照迁移
-
elasticsearch一个快照存储库可以有多个快照仓库,一个快照仓库可以有多个快照
-
elasticsearch不提供将一个快照加入另一个仓库的方法,如想加入另一个仓库就需要先将快照恢复再快照至另一个仓库
-
elasticsearch删除快照仓库只会删除这些相关信息,而不会自动删除文件系统上的快照仓库文件,需要手动删除
-
elasticsearch的快照存储库的所有文件组成了一个快照,而不是单单snap-xxx.dat文件
其他
1、查看快照的信息
GET http://127.0.0.1:9200/_snapshot/my_backup/_all 查看所有快照信息
GET http://127.0.0.1:9200/_snapshot/my_backup/snapshot_3/_status 查看具体快照详细信息
2、快照恢复
post /_snapshot/my_backup/logstash-2017-01-07/_restore
POST http://127.0.0.1:9200/_snapshot/my_backup/snapshot_1/_restore
{
"indices": "index_1",
"rename_pattern": "index_(.+)",
"rename_replacement": "restored_index_$1"
}
3、查看恢复状态和取消恢复
GET http://127.0.0.1:9200/_recovery/restored_index_3
GET http://127.0.0.1:9200/_recovery/
取消恢复(不管已经恢复完,或者正在恢复),直接删除索引即可。