创建NFS共享

服务器A(172.17.0.15)共享指定目录给服务器B(172.17.0.16)

在服务器A上

sudo yum install -y nfs-utils
mkdir -p /nfs_share/es_backups
chown -R elasticsearch:elasticsearch /nfs_share/es_backups
chmod 755 /nfs_share/es_backups
# 配置文件
echo "/nfs_share/es_backups  172.17.0.0/16(rw,sync,no_root_squash)" >> /etc/exports
systemctl enable rpcbind
systemctl enable nfs-server
systemctl start rpcbind
systemctl start nfs-server
exportfs -arv

在服务器B

yum install -y nfs-utils
mkdir -p /data/es_backups
mount -t nfs 172.17.0.15:/nfs_share/es_backups /data/es_backups
# 验证是否成功
df -hT

这样,在其他服务器可以看到A服务器/nfs_share/es_backups的内容

备份ES快照

需要备份A服务器的内容,在B服务器恢复
服务器A、B的ES版本为6.7.0

配置NFS共享

(见上述配置NFS共享的步骤)

修改配置

修改A服务器的配置文件(集群的几台ES都需要修改)

vim /etc/elasticsearch/elasticsearch.yml
# 修改快照存放路径。例如ES集群有3台,这3台服务器要配置在同一个共享存储(非同一路径),通过上述NFS的方式共享文件目录
path.repo: ["/data/es_backups"] # 替换为NFS快照目录

重启ES服务

systemctl restart elasticsearch

备份快照

注册快照仓库

可在Kibana的Dev Tools工具中执行

PUT _snapshot/my_es_backup_repo
{
  "type": "fs",
  "settings": {
    "location": "/data/es_backups"
  }
}

验证是否注册成功

GET _snapshot/my_es_backup_repo

创建快照

PUT _snapshot/my_es_backup_repo/snapshot_full_$(date +%Y%m%d%H%M%S)?wait_for_completion=true
{
  "indices": "*",
  "ignore_unavailable": true,
  "include_global_state": true
}
  • snapshotfull$(date +%Y%m%d%H%M%S) 会生成一个带时间戳的快照名称。
  • wait_for_completion=true 会让请求阻塞直到快照完成。
  • indices: "*" 表示备份所有索引。
  • include_global_state: true 包含集群的全局状态(如模板、持久化设置等)。

恢复快照

安装插件

参考服务器A的插件列表,安装相同的插件
安装插件命令

 /usr/share/elasticsearch/bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-sql/releases/download/6.7.0.0/elasticsearch-sql-6.7.0.0.zip

配置ES

将服务器A的配置文件拷贝过来稍加修改(集群名称、IP地址、端口等)
注意:也需要先安装NFS,共享目录给ES集群其他机器

vim /etc/elasticsearch/elasticsearch.yml
## 集群ES修改挂载的目录为NFS共享目录
path.repo: /data/es_backups

传输快照文件

将服务器A备份的快照文件存放在/data/es_backups目录(该目录已共享给其他节点的ES服务器挂载,确保其他节点的服务器配置的path.repo: /data/es_backups都能访问到相同的快照数据)

修改权限

chown -R elasticsearch:elasticsearch /mnt/es_backups
chmod 755 /mnt/es_backups

重启ES

systemctl restart elasticsearch

注册快照仓库

PUT _snapshot/my_es_backup_repo
{
  "type": "fs",
  "settings": {
    "location": "/mnt/es_backups"
  }
}

删除所有索引

防止索引冲突导致报错

curl -X DELETE "http://172.17.0.15:9200/_all?pretty"

恢复快照

curl -X POST "http://172.17.0.15:9200/_snapshot/my_backup_repo/snapshot_business_data_20250722_final/_restore?pretty" -H 'Content-Type: application/json' -d'
{
   "indices": "*",
   "partial": false,
   "include_global_state": true,
   "index_settings": {
     "index.number_of_replicas": 0
   }
}
'

注意,上面的快照名称snapshot_business_data_20250722_final可通过以下命令查看

curl -X GET "http://172.17.0.15:9200/_cat/snapshots/my_backup_repo?v&pretty"

查看集群状态

curl -X GET "http://172.17.0.10:9200/_cat/nodes?v"

查看索引

curl -X GET "http://172.17.0.15:9200/_cat/indices?v&pretty"
版权所有,转载注明来源