ELasticsearch 备份和还原

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/

不创建 存储库会得到下面错误

  1. 创建一个名为 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服务器端配置

  1. 在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

  1. 在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 的情况 简单的多

  1. 创建一个文件夹,用来共享
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
Send a Message