ES集群数据备份与迁移

2024-05-06 06:12
文章标签 es 集群 迁移 数据备份

本文主要是介绍ES集群数据备份与迁移,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、文章涉及概念讲解
  • 二、操作步骤
    • 1.创建 snapshot repository
      • 操作主机hadoop1
      • 分别操作从机hadoop2和hadoop3
    • 2. 查看仓库信息
    • 3. 备份索引,生成快照
    • 4. 数据迁移
  • 总结


前言

言简意赅,本篇文章解决的问题是:当一个es集群中有数据,需要将数据迁移到另外一个es集群,或者是需要将es中的数据备份。(理论上单机es也可以实现功能,且可能不会有文章涉及的报错信息)


一、文章涉及概念讲解

1. snapshot:使用 Elasticsearch 提供的 snapshot 功能,将数据快照保存到本地或者远程存储库中。
2. snapshot repository:,指定要备份的数据在哪里存储。
3. restore:使用 Elasticsearch 提供的 restore 功能,将备份的数据恢复到新的Elasticsearch集群中。

二、操作步骤

前置条件: es集群能够正常启动;kibana也能够正常运行,能够在5601端口访问kibana提供的客户端。

1.创建 snapshot repository

# 创建仓库
PUT /_snapshot/my_backup
{"type": "fs","settings": {"compress" : "true","location": "/opt/soft/kibana-7.3.1/backup"}
}

需要注意的是,这里的location需要配置在es的配置文件中,也就是elasticsearch.yml中。(对于es集群的架构,则每个es服务上,都要添加此配置)
在这里插入图片描述
配置仓库地址:数组的形式,可以配置多个地址。
在这里插入图片描述
配置成功后,需要重新启动es集群。


此时,重新执行创建仓库的代码,可能仍然会报错:(单机es可能不会报错)
repository_verification_exception:is not shared between this node and the master node or that permissions on the store don’t allow reading files written by the master node

{“error”:{“root_cause”:[{“type”:“repository_verification_exception”,“reason”:"[my_backup] [[mu3vPb-eTBeom4ElNsSeoQ, ‘RemoteTransportException[[node-1][10.10.77.100:9300][internal:admin/repository/verify]]; nested: RepositoryVerificationException[[my_backup] a file written by master to the store [/home/es/elasticsearch-5.1.1/data/bak] cannot be accessed on the node [{node-1}{mu3vPb-eTBeom4ElNsSeoQ}{gCm1zrtWT12WzrjFiVDGrQ}{10.10.77.100}{10.10.77.100:9300}]. This might indicate that the store [/home/es/elasticsearch-5.1.1/data/bak] is not shared between this node and the master node or that permissions on the store don’t allow reading files written by the master node];],...

先介绍一下我目前的架构,es集群是一主二从,分别是hadoop1、hadoop2、hadoop3,其中hadoop1是主机,因此,kibana只部署在hadoop1的主机上。首先发请求创建仓库的文件夹是必须存在的,且三台主机上都需要存在这个目录。
也就是:
在这里插入图片描述
在这里插入图片描述
然后就重点来分析一下这个问题,由于es和kibana是不支持root用户启动服务的,因此往往我们会创建一个新用户,并赋予这个用户es和kibana目录下的操作权限,由这个用户来管理es和kibana服务(这里创建了名为“es”的普通用户)。由于创建仓库涉及三台机器上的backup目录文件修改,因此,我认为问题可能在于es无法免密登录其它两台从机,并没有权限修改其它两台机器上的backup目录。(当然root用户是可以实现免密登录的)

因此,解决方法可以从多个方面考虑,例如:1. 配置使用root用户启动es和kibana的服务… 2. 配置es用户免密登录,并赋予修改文件权限

以上的方法是否可行,暂无去亲自实践。本次解决问题的方法是:使用nfs服务器,实现三台机器的backup文件内容共享。

操作主机hadoop1

a. 安装 NFS 服务器所需的软件包

yum install -y nfs-utils

b. 编辑exports文件,添加从机挂载目录以及地址信息

vim /etc/exports

在这里插入图片描述
rw表示可读写;sync表示同步写

c. 启动nfs服务

#rpcbind做开机启动
systemctl enable rpcbind.service
#启动rpcbind服务
systemctl start rpcbind.service
systemctl enable nfs-server.service
systemctl start nfs-server.service

d. 确认NFS服务器启动成功

rpcinfo -p | grep nfs

在这里插入图片描述
e. 检查 NFS 服务器是否挂载我们想共享的目录

exportfs

在这里插入图片描述

分别操作从机hadoop2和hadoop3

a. 首先是安裝nfs,同上

yum install -y nfs-utils

b. 启动rpcbind服务 (客户端不需要启动nfs服务)

#rpcbind做开机启动
systemctl enable rpcbind.service
#启动rpcbind服务
systemctl start rpcbind.service

c. 从机上使用 mount 挂载服务器端的目录(首先得在从机上创建目录,如果不存在的话)

# 在hadoop2和hadoop3上分别执行(其中192.168.220.200为hadoop1的ip)
mount -t nfs 192.168.220.200:/opt/soft/kibana-7.3.1/backup /opt/soft/kibana-7.3.1/backup

d. 查看挂载情况

df -h

在这里插入图片描述
现在应该就可以重新执行创建仓库的代码了:
在这里插入图片描述

2. 查看仓库信息

GET /_snapshot?pretty

在这里插入图片描述

3. 备份索引,生成快照

# my_backup:仓库名称;snapshot_1:快照名称
PUT /_snapshot/my_backup/snapshot_1

在这里插入图片描述
查看备份数据

GET /_snapshot/my_backup/snapshot_1

在这里插入图片描述

生成快照后,备份文件夹里就可以查看到对应的信息了:
在这里插入图片描述
其中,index-0 存放了快照的基本信息,meta-xxx.dat 以及snap-xxx.dat 应该就是实际存放的数据。

4. 数据迁移

迁入地集群也需要配置elasticsearch.yml文件,增加path.repo的配置。目标ES集群中也需要创建repository。

将备份文件复制到新的Elasticsearch集群中的同一个位置。

在新的es集群创建一个相同的 snapshot repository,用于存储恢复的数据。

数据恢复

# 数据拷贝后,目标主机执行
# 恢复备份的数据到新的Elasticsearch集群中。
# indices 指定恢复索引的名称
POST /_snapshot/my_backup/snapshot_1/_restore
{"indices": [        "log","file","exception",".tasks",".kibana_task_manager"],"ignore_unavailable": true,"include_global_state": false,"rename_pattern": "index_(.+)","rename_replacement": "restored_index_$1"
}

以上就是将一个es集群的数据迁移到另一个es集群的步骤。注意,在进行数据迁移前,需要确保es的版本一致,否则可能会导致索引不兼容或者其他问题。


相关DSL

# 创建仓库
PUT /_snapshot/my_backup
{"type": "fs","settings": {"compress" : "true","location": "/opt/soft/kibana-7.3.1/backup"}
}# 查看仓库信息(ok)
GET /_snapshot?pretty# 备份索引,生成快照(ok)
PUT /_snapshot/my_backup/snapshot_2# 查看备份快照数据(ok)
GET /_snapshot/my_backup/snapshot_1# ---# 创建一个 snapshot,将索引数据备份到指定的存储库中。
PUT /_snapshot/my_backup/snapshot_3?wait_for_completion=true# 恢复所有索引
POST /_snapshot/my_backup/snapshot_1/_restore?wait_for_completion=true# 恢复备份的数据到新的Elasticsearch集群中。
# indices 指定恢复索引的名称
POST /_snapshot/my_backup/snapshot_/_restore
{"indices": [        "log","file","exception",".tasks",".kibana_task_manager"],"ignore_unavailable": true,"include_global_state": false,"rename_pattern": "index_(.+)","rename_replacement": "restored_index_$1"
}# ---
# 查看所有索引
GET _cat/indices?v&pretty# 删除所有索引
DELETE /_all
DELETE /.kibana
DELETE /file

总结

本篇文章仅供学习和参考,如有涉及侵权,请及时联系笔者!

参考文章:

  1. elasticsearch的数据迁移
  2. es单机数据迁移到另一个es单机

这篇关于ES集群数据备份与迁移的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/963596

相关文章

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

SpringBoot连接Redis集群教程

《SpringBoot连接Redis集群教程》:本文主要介绍SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 依赖2. 修改配置文件3. 创建RedisClusterConfig4. 测试总结1. 依赖 <de

Conda虚拟环境的复制和迁移的四种方法实现

《Conda虚拟环境的复制和迁移的四种方法实现》本文主要介绍了Conda虚拟环境的复制和迁移的四种方法实现,包括requirements.txt,environment.yml,conda-pack,... 目录在本机复制Conda虚拟环境相同操作系统之间复制环境方法一:requirements.txt方法

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

Redis高可用-主从复制、哨兵模式与集群模式详解

《Redis高可用-主从复制、哨兵模式与集群模式详解》:本文主要介绍Redis高可用-主从复制、哨兵模式与集群模式的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录Redis高可用-主从复制、哨兵模式与集群模式概要一、主从复制(Master-Slave Repli

Redis分片集群的实现

《Redis分片集群的实现》Redis分片集群是一种将Redis数据库分散到多个节点上的方式,以提供更高的性能和可伸缩性,本文主要介绍了Redis分片集群的实现,具有一定的参考价值,感兴趣的可以了解一... 目录1. Redis Cluster的核心概念哈希槽(Hash Slots)主从复制与故障转移2.

SpringBoot整合easy-es的详细过程

《SpringBoot整合easy-es的详细过程》本文介绍了EasyES,一个基于Elasticsearch的ORM框架,旨在简化开发流程并提高效率,EasyES支持SpringBoot框架,并提供... 目录一、easy-es简介二、实现基于Spring Boot框架的应用程序代码1.添加相关依赖2.添

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

SQL Server数据库迁移到MySQL的完整指南

《SQLServer数据库迁移到MySQL的完整指南》在企业应用开发中,数据库迁移是一个常见的需求,随着业务的发展,企业可能会从SQLServer转向MySQL,原因可能是成本、性能、跨平台兼容性等... 目录一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据二、迁移工具的选择2.1

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据