安全并正确地重启Elasticsearch集群

2023-10-27

前言

elasticsearch本身具有高可用性,可以做到停机不停服务,在重启elasticsearch后可能存在数据丢失,或者是“启动ES后,怎么一直有大量的数据在迁移?”

问题原因其本质

原因有两点:

  1. ES中的数据不是实时写入磁盘的。
    数据进入ES后先进入data buffer segmenttransientLog这两个buffer,(此处又涉及到数据防丢失的机制)然后进入操作系统文件系统缓存的数据段,最后再特定时机(两个条件,一个是segment到达容量,一个是到达refresh时间间隔)下才刷入磁盘。即在内存中有很多数据是没写入磁盘的。
  2. ES的分片自动分配迁移机制。
    当集群发现经过一分钟后(index.unassigned.node_left.delayed_timeout参数设置)还连接不上某个节点,就会把集群内的数据重新进行分布,即使后来节点重新连接上,原来的数据因为重新分布也无效了。

提前准备

  1. 检查废弃日志查看你使用的所有废弃功能,并更新相关的代码
  2. 检阅Elasticsearch的迭代变更,并对代码和新版本的配置有必要更改的地方进行更改
  3. 如果你有使用插件,确保每一个插件能够兼容新版本的Elasticsearch
  4. 在升级生产环境的Elasticsearch集群之前,需要在一个独立的环境测试一下升级更新
  5. 通过快照snapshot的形式进行备份

准备重启集群

设置集群重新分配的类型,使用cluster.routing.allocation.enable设置选项。

启用或禁用分片重新分配的类型:

  • all - (默认) 允许所有类型分片重新分配.
  • primaries - 只允许主分片重新分配.
  • new_primaries - 只允许新索引的主分片重新分配.
  • none - 所有索引的任何类型分片不被允许重新分配.
  1. 关闭分片分配
PUT _cluster/settings{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
    }
}
  1. 停止索引并执行同步刷新
POST _flush/synced
  1. 暂时停止机器学习和数据仓库相关任务
curl -X POST "localhost:9200/_ml/set_upgrade_mode?enabled=true&pretty"

# 或者是
POST /_ml/set_upgrade_mode?enabled=true&pretty
  1. 关闭所有节点
  • 如果是通过systemd运行的Elastiseach
sudo systemctl stop elasticsearch.service
  • 如果是用SysV的init运行Elasticsearch
sudo -i service elasticsearch stop
  • 如果是通过守护进程(daemon)运行elasticsearch
kill $(cat pid)
  1. 执行完更改动作后开始重启elasticsearch
cd  $ES_HOME/bin ./elasticsearch -d -p $ES_HOME/pid.txt
  1. ,启用分片自动分布
PUT _cluster/settings { 
    "persistent": {
        "cluster.routing.allocation.enable": null }
}

更新集群

  • 使用 Debian 或者 RPM 包进行更新:
    使用rpm或者dpkg全装新包,所有文件安装将会被安装到操作系统上合适的位置,并且elasticsearch的配置文件将会被保留,不会被覆盖。
  • 使用 zip 或者是tar 压缩包进行更新:
    1. 解压压缩包到一个新的或指定的目录,如果你没有使用外部指定的 config
    2. 如果不需要使用外部config目录和 jvm.options,可以复制旧版本的配置文件目录到新安装的配置文件目录。
      如果需要指定外部config目录和 jvm.options则需要配置环境变量ES_PATH_CONF Elasticsearch启动时将会在环境脚本elasticsearch-env 中进行调用,如下图:
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sFw12iXf-1599405415427)(en-resource://database/1698:1)]@w=450
    3. elasticsearch.yml中配置指定path.data ,即指定外部data目录路径,如果不使用外部指定data目录,可以把外部data目录复制到新安装的目录中。

    如果使用了监控功能,当你更新elasticsearch集群并要复用监控数据时,监控时通过辨认经过持久化的节点UUID(独一无二的)进行区分的,这个UUID值存储在data目录里

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安全并正确地重启Elasticsearch集群 的相关文章

随机推荐

  • 安装 webstorm 断点调试工具 jetbrains ide support

    先下载离线插件包 http www cnplugins com devtool jetbrains ide support download html 并解压 然后进入google设置 选择开发者模式 加载扩展程序 最后如图
  • Qt 使用布局管理器,控件大小未能自适应变化

    问题 使用布局管理器管理子部件 使用了QVHlayout管理器 发现控件大小固定 即使通过拖动窗口也不能改变控件的大小 布局管理器不是自动控制部件的大小吗 为什么没有生效 如图所示 解决办法 对子部件添加延申策略 setSizePolicy
  • 图解通信原理与案例分析-26: 5G NR是如何支持海量机器类通信mMTC的?移动通信对物联网的支持

    前言 移动通信最初是解决人与人之间的语音通信 后来发展成了人与人之间的文本通信 到了4G LTE 已经很好的解决了人与人之间的视频通信 到了5G 人与人之间的高速率的数据通信在LTE的基础之上得到了进一步优化和加强 称之为eMBB eMBB
  • ffmpeg使用qsv解码碰到的问题

    ffmpeg使用qsv硬解码出来的视频帧格式是AV PIX FMT NV12格式的 ffmpeg使用qsv硬解码出来的视频帧格式是AV PIX FMT NV12格式的 在调用sws getContext函数时第三个参数必须强制传入AV PI
  • Ubuntu 22.04编译安装Redis 7

    Ubuntu 22 04编译安装Redis 7 一 下载 1 访问Redis官方网站 https redis io 点击顶部菜单栏右侧的 Download 进入下载页面 2 在下载页面的左侧可以看到Redis相关信息 右键单击 Downlo
  • 蓝桥杯-模拟

    星期一 611 import datetime start datetime date 1901 1 1 end datetime date 2000 12 31 delta datetime timedelta days 1 s 0 wh
  • java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long 错误分析

    从内容中已经知道是类转换报错 但是为什么会报错呢 int类型是可以转换为long类型的 对这种低精度是可以直接转为高精度的 但是报错也明确的提示了 java lang Integer cannot be cast to java lang
  • HTML <strong> 标签

    定义和用法 以下元素都是短语元素 虽然这些标签定义的文本大多会呈现出特殊的样式 但实际上 这些标签都拥有确切的语义 我们并不反对使用它们 但是如果您只是为了达到某种视觉效果而使用这些标签的话 我们建议您使用样式表 那么做会达到更加丰富的效果
  • 实现在最新版本的cesium中引用叠加shp文件的类的功能

    因为刚接触cesium不久 对js的编码规范什么的也不是很懂 所以这么简单的问题就搞了好几天 不过总算有所突破了 网上看到这个文章 http blog sina com cn s blog 15e866bbe0102xxd1 html 里面
  • springboot+springcloud相关面试题

    什么是springboot 用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置 properties或yml文件 创建独立的spring引用程序 main方法运行 嵌入的Tomcat 无需部署war文件 简化maven
  • 学习笔记(103):R语言入门基础-数据点类型(type参数)

    立即学习 https edu csdn net course play 24913 285847 utm source blogtoedu type参数 type p 在图形中数据显示为点 type l 在图形中数据显示为线 type b
  • sort排序用法

    Python sorted函数 我们需要对List Dict进行排序 Python提供了两个方法对给定的List L进行排序 方法1 用List的成员函数sort进行排序 在本地进行排序 不返回副本方法2 用built in函数sorted
  • 在矩池云使用Llama2-7B的具体方法

    今天给大家分享如何在矩池云服务器使用 Llama2 7b模型 硬件要求 矩池云已经配置好了 Llama 2 Web UI 环境 显存需要大于 8G 可以选择 A4000 P100 3090 以及更高配置的等显卡 租用机器 在矩池云主机市场
  • 图像对比度,亮度

    很多时候 一张图像被过度曝光 显得很白 或者光线不足显得很暗 这个时候可以通过调节图像的这两个基本属性 亮度与对比度 来获得整体效果的提升 从而获得质量更高的图片 1 算子operator 首先我们给出算子的概念 一般的图像处理算子都是一个
  • 电源学习总结(五)——开关电源基本原理

    前面讲了一些线性稳压的原理和设计的基本方法 事实上 除了一些功率较大或者对精度要求较高的电源设计 使用集成的线性稳压芯片很少出现 翻车 事故 一般只需关注输入输出范围即可 此外 需注意由于集成的开关电源芯片 尤其是贴片封装的 如SOT 22
  • 【CUDA】初步了解PageLocked host memory的mapped memory功能使用

    导言 大家都知道CUDA 中PageLocked memory 相比portable memory 有着多种优势 在有front side bus的系统中 pagelocked memory 所提供的host 与device之间的数据传送速
  • 硬盘突然提示没有初始化_分享一下固态硬盘不认盘的修复方法

    写在开头 固态硬盘比较害怕突然停电 如果里面有重要数据 请勿用此方法尝试修复 即便可以成功 里面的数据也已经被抹除 需要恢复数据的话 还是需要找专业的数据恢复公司来做 切勿自己折腾 进入正题 前段时间淘了一块威刚的SP550 120G SA
  • 常用脚本(九)Unity_Input

    1 输出鼠标位置 在Update方法中 Debug Log Input mouseposition 2 判断鼠标是否点击 返回 True 和 false 每帧都输出 在Update方法中 Debug Log Input anykey 3 I
  • run()方法和start()方法的区别

    run 方法和start 方法的区别 文章目录 run 方法和start 方法的区别 一 start 是什么 二 run 是什么 三 具体代码实例 四 start 和run 方法的区别 参考 一 start 是什么 用 start方法来启动
  • 安全并正确地重启Elasticsearch集群

    文章目录 前言 问题原因其本质 提前准备 准备重启集群 更新集群 前言 elasticsearch本身具有高可用性 可以做到停机不停服务 在重启elasticsearch后可能存在数据丢失 或者是 启动ES后 怎么一直有大量的数据在迁移 问