ELasticsearch 提供了一个内置系统来快速备份和还原数据。
ELasticsearch 快照 Snapshot 允许在远程存储库中创建单个索引(或别名)或 整个集群的快照
创建快照库
在开始执行快照之前,必须先创建一个 存储库 Repository,这是将要存储备份或快照的地方
vi /usr/share/elasticsearch/config/elasticsearch.yml
cluster.name: "docker-cluster"
network.host: 0.0.0.0
path.repo: /backup/
sudo mkdir /backup/
不创建 存储库会得到下面错误
- 创建一个名为 my_repository 的存储库
PUT /_snapshot/my_repository
{
"type": "fs",
"settings": {
"location": "/backup/my_repository",
"compress": true
}
}
2. 检索、删除 存储库信息
GET /_snapshot/my_repository
DELETE /_snapshot/my_repository
创建快照
PUT /_snapshot/my_repository/snap_1?wait_for_completion=true
{
"indices": "*",
"ignore_unavailable": true,
"include_global_state": true
}
GET /_snapshot/my_repository/snap_1
DELETE /_snapshot/my_repository/snap_1
GET /_snapshot/my_repository/_all
还原快照
关闭索引
POST /*/_close
这里关闭了全部索引之后 kibana也用不了了,所以改成了 curl 命令
(base) lizhe@ubuntu:~$ curl -X POST http://127.0.0.1:9200/*/_close
{"acknowledged":true,"shards_acknowledged":false,"indices":{}}
(base) lizhe@ubuntu:~$
(base) lizhe@ubuntu:~$
(base) lizhe@ubuntu:~$ curl -X POST http://127.0.0.1:9200/_snapshot/my_repository/snap_1/_restore
{"accepted":true}
(base) lizhe@ubuntu:~$
(base) lizhe@ubuntu:~$
(base) lizhe@ubuntu:~$ curl -X POST http://127.0.0.1:9200/*/_open
{"acknowledged":true,"shards_acknowledged":true}(base) lizhe@ubuntu:~$
(base) lizhe@ubuntu:~$
(base) lizhe@ubuntu:~$
集群备份
管理存储库(存储数据的位置)是 ELasticsearch 备份管理中最关键的部分。
由于其原生分布式架构,因此快照 和 还原 以集群样式进行设计
因此,如果你有多节点集群,则必须具有共享存储库存储
否则会得到以下错误
NFS服务器端配置
- 在Linux上安装 NFS服务器
sudo apt update
sudo apt install nfs-kernel-server
2. 创建一个共享用的目录
sudo mkdir /mnt/shared-directory
3. 将此目录的访问权限授予 nobody 用户 和 nogroup 组。
nobody 和 nogroup 是用于共享 读写权限 的特殊用户和组
sudo chown -R nobody:nogroup /mnt/shared-directory
4. 配置 NFS 导出,可以在其中指定此目录将与哪些计算机共享
编辑 /etc/exports 文件
sudo vi /etc/exports
添加以下内容
/mnt/shared-directory *(rw,sync,no_subtree_check,no_root_squash)
5. 刷新并且使修改生效
sudo exportfs -a
6. 启动 NFS服务
sudo service nfs-kernel-server start
NFS客户端配置
Ubuntu
- 在ELasticsearch节点上安装 NFS 客户端
sudo apt update
sudo apt install nfs-common
2. 在客户端上创建目录,挂载远程共享目录
sudo mkdir /mnt/nfs
sudo mount 192.168.1.30:/mnt/shared-directory /mnt/nfs
3. 将安装目录添加到节点的 /etc/fstab文件
sudo vim /etc/fstab
4. 添加以下内容
192.168.1.30:/mnt/shared-directory /mnt/nfs/ nfs auto,noatime,nolock,bg,nfsvers=4,sec=krb5p,intr,tcp,actimeo=18 00 0 0
5. 更新 config/elasticsearch.yml 文件中的 path.repo
path.repo: /mnt/nfs/
6. 重启ELasticsearch节点
使用docker 的情况 简单的多
- 创建一个文件夹,用来共享
mkdir -p /home/lizhe/essnap
然后把它 mount 给所有容器,这些容器就共享这个文件夹了
节点1
docker run -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d -p 9200:9200 -p 9300:9300 -v /home/lizhe/cluster/node1/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/lizhe/cluster/node1/plugins:/usr/share/elasticsearch/plugins -v /home/lizhe/cluster/node1/data:/usr/share/elasticsearch/data -v /home/lizhe/cluster/node1/log:/usr/share/elasticsearch/log -v /home/lizhe/essnap:/mnt/nfs --name es-1 elasticsearch:7.7.1
节点2
docker run -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d -p 9201:9201 -p 9301:9301 -v /home/lizhe/cluster/node2/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/lizhe/cluster/node2/plugins:/usr/share/elasticsearch/plugins -v /home/lizhe/cluster/node2/data:/usr/share/elasticsearch/data -v /home/lizhe/cluster/node2/log:/usr/share/elasticsearch/log -v /home/lizhe/essnap:/mnt/nfs --name es-node-2 elasticsearch:7.7.1
节点3
docker run -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d -p 9202:9202 -p 9302:9302 -v /home/lizhe/cluster/node3/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/lizhe/cluster/node3/plugins:/usr/share/elasticsearch/plugins -v /home/lizhe/cluster/node3/data:/usr/share/elasticsearch/data -v /home/lizhe/cluster/node3/log:/usr/share/elasticsearch/log -v /home/lizhe/essnap:/mnt/nfs --name es-3 elasticsearch:7.7.1