ES集群数据备份与迁移

news2024/11/16 13:42:14

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

文章目录

  • 前言
  • 一、文章涉及概念讲解
  • 二、操作步骤
    • 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单机

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1643314.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k8s Dashboard 运维维护记录

k8s Dashboard 运维维护记录 k8s Dashboard 运维维护记录 Q1:需要使用firefox浏览器访问 提示了证书错误NET::ERR_CERT_INVALID,原因是由于物理机的浏览器证书不可用 需要注意的是,若提示“连接不安全”的警告时,点击“高级”…

2024新蓝海项目 零门槛高收益持续稳定 纯手机操控 单日盈利3000 新手当日入门

这个项目具有极高的稳定性!通过积累的里程积分,我们可以以较低的成本获取机票。然后,我们以远低于官方网站的价格出售这些机票,从而获得利润。随着我们经营的时间增长,我们积累的客户群体也会越来越大。 项目 地 址 …

游戏AI的智能化:机器学习在虚拟生命中的应用

文章目录 写在前面游戏AI的智能化:机器学习在虚拟生命中的应用游戏内容的自动化创作:机器学习的革新性应用玩家体验的个性化优化:机器学习的定制化力量未来展望:机器学习塑造游戏行业新纪元游戏AI的智能化发展自动化内容生成的革命…

什么是脏读?幻读?不可重复读?

脏读(Drity Read):某个事务 A 已更新一份数据,另一个事务 B 在此时读取了同一份数据,由于某些原因,事务 A 回滚,而事务B读取到事务 A 回滚前的数据。 例子:小明读取到小红提交的100数据.但是小红异常回滚了数据,100变…

【前端学习——正则】

https://www.bilibili.com/video/BV1da4y1p7iZ/?spm_id_from333.337.search-card.all.click&vd_source5cef5968d539682b683e7d01b00ad01b 学习网站 https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md

CCPC训练赛题解补题

B. Memory Problem - B - Codeforces(原题出处点击这里) 题意:根据题目中给出的求和公式,将输入的数据进行判断,输出”“或”-“或”0“;因为范围特别大,精度特别高,所以循环遍历的…

mac监听 linux服务器可视化(Grafana+Promethus+Node_exporter)

Grafana和promethus(普罗米修斯)的安装和使用 监控系统的Prometheus类似于一个注册中心,我们可以只需要配置一个Prometheus,而在其他服务器,只需要安装node_exporter,它们的数据流转就是通过exporter采集数据信息,然后告诉prometheus它的位置…

leetCode68. 文本左右对齐

基本思路&#xff1a; leetCode68. 文本左右对齐 代码 class Solution { public:vector<string> fullJustify(vector<string>& words, int maxWidth) {vector<string> res;for(int i 0; i < words.size(); i){ // 枚举有多少个单词int j i 1; //…

Springboot+vue基于协同过滤算法的电商系统

项目由maven管理依赖&#xff0c;mybatis&#xff08;plue&#xff09;与数据库交互&#xff0c;一共14张表&#xff0c;功能都经过测试无问题&#xff0c;需要可在最下方扫码联系我。&#xff08;有文档&#xff0c;调试&#xff0c;讲解可加购&#xff09; 商品推荐板块基于…

如何选购骨传导耳机?精选五大拔尖宝藏骨传导耳机,闭眼入也不踩雷!

尽管目前市面上的骨传导耳机热度非常高&#xff0c;一度成为当下最热门的耳机款式&#xff0c;但作为有着资深工作经验的数码测评师&#xff0c;我仍然要提醒大家&#xff1a;在选择骨传导耳机的时候&#xff0c;不要盲目选择网红品牌&#xff0c;因为市场上的许多骨传导耳机过…

【Python基础】进程

文章目录 [toc]程序与进程的区别与联系同步任务示例 并行任务示例进程调度的“随机性” 进程属性与方法process_object.start()方法process_object.join()方法process_object.daemon属性没有设置守护进程的情况设置守护进程的情况 process_object.current_process()方法 进程通…

MySql主从复制(多主多从)

多主多从 序言前期准备工作创建主机和从机的配置文件和数据存储目录配置master1配置文件配置master2配置文件配置slave1配置文件配置slave2配置文件docker-compose-mysql.yml启动文件启动master1启动master2两个主机分别创建用户两个主机分别刷新权限查看两个主机binlog状态mas…

UDP报头结构 和注意事项

UDP协议 UDP这个协议的学习 ,最只要学习的就是报文格式 UDP数据报 UDP报头 UDP载荷 UDP协议端口格式 报头由4个部分组成 : 源端口号 、目的端口号、UDP长度、UDP校验和 UDP长度描述了整个UDP数据报&#xff0c;占多少个字节 通过UDP长度 就可以知道&#xff0c;当前载荷一…

第3章 内存管理(2)

3.2虚拟内存管理 3.2.1 传统内存和虚拟内存对比 传统内存虚拟内存一次性:全部装入内存才能运行多次性:仅装入当前需要的数据驻留性:作业装入内存,运行时一直驻留内存对换性:暂时用不到的数据换出外存虚拟性:逻辑上扩充内存作业过大无法装入,作业过多也无法装入需要添加请求调…

3.10设计模式——Template Method 模版方法模式(行为型)

意图 定义一个操作中的算法骨架&#xff0c;而将一些步骤延迟到子类中&#xff0c;Template Method 使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。 结构 AbstractClass&#xff08;抽象类&#xff09;定义抽象的原语操作&#xff0c;具体的子类将重定…

贪吃蛇(下)游戏的实现

感谢大佬的光临各位&#xff0c;希望和大家一起进步&#xff0c;望得到你的三连&#xff0c;互三支持&#xff0c;一起进步 个人主页&#xff1a;LaNzikinh-CSDN博客 文章目录 前言一.蛇和食物的打印二.游戏的运行逻辑三.结束游戏 &#xff08;善后工作&#xff09;四.游戏的测…

MacBook Pro 原生安装 Ubuntu 24.04 ARM 版

趁着休假整理家里闲置的设备&#xff0c;看到了一台许久不用的 M2 芯片的 MacBook Pro&#xff0c;想着或许应该把它改造成 ARMv64 的 CI/CD 构建机&#xff0c;于是就有了这篇文章。 本篇文章适用于 M1、M2 全系列的设备&#xff0c;包括&#xff1a;MacBook Air、MacBook Pr…

JVM笔记2--垃圾收集算法

1、如何确认哪些对象“已死” 在上一篇文章中介绍到Java内存运行时的各个区域。其中程序计数器、虚拟机栈、本地方法栈3个区域随着线程而生&#xff0c;随线程而灭&#xff0c;栈中的栈帧随着方法的进入和退出而有条不紊的执行着入栈和出栈操作。每个栈帧中分配多少内存基本上…

OpenCV多张图片堆叠显示

OpenCV实现多张图片堆叠显示 程序思路效果代码 程序思路 读取两张或多张图片&#xff1b;获取图片尺寸&#xff1b;选择多张图片中较大的宽度和高度建立画布&#xff1b;合并图片到画布&#xff1b; 效果 代码 import cv2 import numpy as np# 读取两张图片 img1 cv2.imrea…

【软件开发规范篇】JAVA后端开发编程规范

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…