Elasticsearch集群快照备份:
- 创建共享文件
- 修改配置文件后重启
- 创建仓库
- 创建快照
环境:
Elasticsearch版本;7.10.2
安装路径:/data/elasticsearch-7.10.2/
启动Elasticsearch服务的用户: es
-
一、配置并创建共享文件
- 在Elasticsearch集群的所有节点服务器上安装 nfs、rpcbind服务
查看nfs、rpcbind服务是否存在,执行:
rpm -qa | grep nfs rpm -qa | grep rpcbind |
如果存在就直接启动,不存在则下载安装。
通过yum安装nfs、rpcbind,执行
yum install nfs-utils rpcbind |
等待安装完成启动,执行:
systemctl start nfs systemctl start rpcbind |
设置nfs、rpcbind服务开机自启动执行:
systemctl enable nfs systemctl enable rpcbind |
- 创建共享文件并授权
选择一台服务器(192.168.10.100)创建共享文件目录并修改所有者及用户组,执行:
mkdir /data/backup #文件名称,路径自己定义 chown es.es /data/backup |
将共享文件授权,执行:vim /etc/exports
/data/backup *(rw,sync,no_root_squash,no_subtree_check) |
exports中更多配置信息如下:
ro 只读访问
rw 读写访问sync 所有数据在请求时写入共享
async nfs 在写入数据前可以响应请求
secure nfs 通过1024以下的安全TCP/IP端口发送
insecure nfs 通过1024以上的端口发送
wdelay 如果多个用户要写入nfs目录,则归组写入(默认)
no_wdelay 如果多个用户要写入nfs目录,则立即写入,当使用async时,无需此设置。
hide 在nfs共享目录中不共享其子目录
no_hide 共享nfs目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制nfs检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas root用户具有根目录的完全管理访问权限
anonuid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的GID
刷新配置使其立即生效,执行:exportfs -a
- 挂载至其他节点服务求的目录中
在其他节点的服务器中创建目录,执行:
mkdir /data/backup #这个目录用户可以自定义 |
查看在192.168.10.100可以挂载的共享目录,执行:
showmount -e 192.168.10.100 |
将192.168.10.100的共享目录挂载中本机新创建的 /data/backup目录,执行:
mount -t nfs 192.168.10.100:/data/backup /data/backup |
测试,在192.168.10.100的/data/backup目录中创建测试文件如:test.txt es_back.txt。然后再其他服务器的/backup(共享目录挂载在本机的目录)查看是否存在。存在即表示共享目录创建完成。
-
二、修改配置文件后创建仓库
- 修改配置文件并重启
需要在所有节点上的elasticsearch配置文件中添加:path.repo内容(仓库的存放位置)执行:
vim /data/elasticsearch7.10.2/config/elasticsearch.yml的最后一行
path.repo: /data/backup |
保存退出后,重启elasticsearch集群
- 创建仓库
等待所有节点重启完成之后,准备创建对应的仓库,在服务器中执行:
curl -XPUT -u 用户名 -H "Content-Type:application/json" http://192.168.10.100:9200/_snapshot/仓库名称 -d '{"type": "fs","settings": {"location": "仓库存放位置(目录不存在会自动创建)"}}' |
查看创建的仓库,执行:
curl -XGET -u 用户名 http://192.168.10.100:9200/_snapshot |
- 创建快照
对集群所有索引进行快照创建,执行:
curl -XPUT -u 用户名 -H “conent-Type:application/json” http://192.168.10.100:9200/_snapshot/仓库名称/快照名称?wait_for_completion=true -d ‘{“indices”: “*”}’ |
对指定集群进行快照创建,执行:
curl -XPUT -u 用户名 -H “conent-Type:application/json” http://192.168.10.100:9200/_snapshot/仓库名称/快照名称?wait_for_completion=true -d ‘{“indices”: “指定的索引名称”}’ |
查看快照执行状态,执行:
curl -XPUT -u 用户名 http://192.168.10.100:9200/_snapshot/仓库名称/快照名称/_status |
-
三、索引恢复
按照前面的步骤在另一个集群创建共享目录,已经相同名字的索引后,将192.168.10.100这个集群中的快照文件/data/backup/xxxx(仓库存放位置)中的文件拷贝至需要恢复数据的集群中。然后需要恢复数据的集群中执行:
curl -XPOST -u 用户名 http://192.168.10.100:9200/_snapshot/仓库名称/快照名称/_restore |