Elasticsearch:升级 Elasticsearch 最安全的方法

这篇具有很好参考价值的文章主要介绍了Elasticsearch:升级 Elasticsearch 最安全的方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

关于升级自己的 Elasticsearch 集群有很多种办法。很多涉及到滚动升级或需要重启集群。这是一个比较复杂的过程。一般来说,有两种可能发生的情况:

  • 滚动升级(无停机时间)
  • 整个集群重新启动(一些停机时间)

cannot allocate replica shard to a node with version [7.6.2] since this is o,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,运维

 如果是一个大版本的最后一个小版本(比如 6.8)升级到紧邻的下一个大版本的第一个小版本(比如 7.0),那么我们时间上是可以通过滚动来升级的,否则,我们需要重新启动整个集群:

cannot allocate replica shard to a node with version [7.6.2] since this is o,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,运维

一般来说,我们可以借助 Upgrade Assitant 来帮我们进行升级。

cannot allocate replica shard to a node with version [7.6.2] since this is o,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,运维

滚动升级涉及到如下的一些步骤:

  1. 备份你的集群
  2. 停止不必要的索引(如果可能)
  3. 禁用分片分配
  4. 停止并更新一个节点
  5. 启动节点
  6. 重新启用分片分配并等待
  7. 重复步骤 3(直到所有节点都更新)

这在通常的情况下是非常有效的,也是官方建议的步骤。我们可以通过如下的方法来禁止分片分配:

PUT _cluster/settings
{
  "transient": {
    "cluster.routing.allocation.enable": "primaries"
  }
}

POST _flush/synced

我们可以通过如下的方法来重新启动分片的分配:

PUT _cluster/settings
{
  "transient": {
    "cluster.routing.allocation.enable": "all"
  }
}

我们可以通过如下的方法来查询集群的健康状态:

GET _cat/health

在针对多个节点进行更新的时候,我们需要等到状态为 green 后,再继续下一个节点的更新。

针对整个集群重新启动,我们需要如下的步骤:

  1. 停止索引(例如禁用写入,或使 ES 无法访问)
  2. 禁用分片分配(记得要使用 “persistent” 避免在重新启动后,之前的设置丢失)
  3. 执行同步刷新
  4. 关闭并更新所有节点 (停机开始)
  5. 启动所有专用主节点 (停机接触)
  6. 启动其他节点
  7. 等待黄色
  8. 重新启用分片分配

在不停机的情况下升级 Elasticsearch 的推荐方法是滚动升级,我们仔细查看一下上面的滚动升级步骤,但它会导致每次数据节点重新启动时出现黄色集群状态,这意味着有风险。

我们可以采用更为安全的方法。 该计划只是将所有分片分配到另一个节点并升级空数据节点。 这样,集群就尽可能保持绿色。 开始吧!

cannot allocate replica shard to a node with version [7.6.2] since this is o,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,运维

 

cannot allocate replica shard to a node with version [7.6.2] since this is o,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,运维

 

下面来详述各个步骤:

步骤 —: 将分片分配给其他节点

由于集群级分片分配,你可以将分片从一个节点移动到另一个节点。 你可以使用节点名称和 IP 地址。

PUT _cluster/settings
{
  "transient": {
    "cluster.routing.allocation.exclude._name": "node-1"
  }
}

你可以通过 recovery API 调用来检查分片分配的过程。

GET _cat/recovery?v&h=index,shard,time,source_node,target_node,fp,bp&s=ty:desc,index,bp:desc&active_only

你可以通过 allocation API 调用检查每个节点有多少个分片。

GET /_cat/allocation?v&h=shards,node,disk.avail,disk.total,disk.percent,&s=node

注意:Elasticsearch 无法将副本分片分配给版本较高的节点。 例如,如果节点版本为 8 并保留索引的主分片,则索引副本分片无法分配给版本为 7 的节点。这意味着可能存在一些未分配的副本分片,集群会变为黄色,直到有 2 个副本分片为止。数据节点。

{
  "decider" : "node_version",
  "decision" : "NO",
  "explanation" : "cannot allocate replica shard to a node with version [7.10.1] since this is older than the primary version [7.17.7]"
}

cannot allocate replica shard to a node with version [7.6.2] since this is o,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,运维

步骤二:升级数据节点

当所有分片都分配给其他节点时,你可以安全地升级数据节点。 升级前必须删除所有插件,升级后需要重新安装所有插件。 使用 elasticsearch-plugin install 命令,Elasticsearch 会自动下载并安装该插件,如果你的实例没有互联网访问权限,你可以下载该插件并离线安装。

注意:如果你未将插件安装到数据或主节点,它将不会让你启动 elasticsearch 服务。 请小心协调器节点,你在开始时看不到与插件相关的任何错误,但在搜索和索引开始后,你将看到与该插件相关的错误。

[2023-07-04T08:07:07,906][WARN ][o.e.t.TransportService   ] [es-prod-coor-1] Transport response handler not found of id [21252]
[2023-07-04T08:07:07,902][WARN ][o.e.t.InboundHandler     ] [es-prod-coor-1] Failed to deserialize response from [ip/ip:9300]
org.elasticsearch.transport.TransportSerializationException: Failed to deserialize response from handler [org.elasticsearch.transport.TransportService$ContextRestoreResponseHandler/org.elasticsearch.transport.TransportService$4/[indices:data/read/search[phase/query]]:org.elasticsearch.action.search.SearchTransportService$ConnectionCountingHandler@5ae8f1a6/org.elasticsearch.action.search.SearchExecutionStatsCollector/org.elasticsearch.action.search.AbstractSearchAsyncAction$1@f51f168]
Caused by: java.lang.IllegalArgumentException: Unknown NamedWriteable [org.elasticsearch.search.DocValueFormat][collate]
java.lang.IllegalStateException: Message not fully read (response) for requestId [4288], handler [org.elasticsearch.transport.TransportService$ContextRestoreResponseHandler/org.elasticsearch.transport.TransportService$4/[indices:data/read/search[phase/query]]:org.elasticsearch.action.search.SearchTransportService$ConnectionCountingHandler@7518541f/org.elasticsearch.action.search.SearchExecutionStatsCollector/org.elasticsearch.action.search.AbstractSearchAsyncAction$1@cd2eb6d], error [false]; resetting

cannot allocate replica shard to a node with version [7.6.2] since this is o,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,运维

 

步骤三:允许分片分配升级的数据节点

cannot allocate replica shard to a node with version [7.6.2] since this is o,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,运维

 

问与答

Q1:如何加快 Elasticsearch 升级过程?

A1:你可以增加 indices.recovery.max_bytes_per_sec。 你还可以增加节点并发恢复。 这是我使用的集群设置。

PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.cluster_concurrent_rebalance": "2",
    "cluster.routing.allocation.node_concurrent_incoming_recoveries": "3",
    "cluster.routing.allocation.node_concurrent_outgoing_recoveries": "10",
    "indices.recovery.max_bytes_per_sec": "250mb",
    "indices.recovery.max_concurrent_file_chunks": "5"
  }
}

Q2:升级过程中有很多不必要的分片重新平衡,我可以停止吗?

A2:是的,你可以在升级过程中禁用分片重新平衡。 将集群设置 cluster.routing.rebalance.enable 更新为 none。
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html#shards-rebalancing-settings

Q3:集群上有多个版本的 Elasticsearch 安全吗?

A3:按照设计,你可以在集群上保留多个版本的 Elasticsearch,在最佳实践中,建议仅保留不同版本,直到集群升级。

Q4:我可以从 elasticsearch-oss 升级到 elasticsearch 基本许可证吗?

A4:是的,你可以安全地从 Elasticsearch 开源软件升级到基础版。 例如,你可以将 elasticsearch-oss v7.10.2 升级到 elasticsearch basic 7.17.11。

Q5:我可以从 Elasticsearch 7.10.2 版本升级到 8.x 版本吗?

A5:可以,但不建议这样做。 首先升级最新版本的7.17.x,然后你可以看到弃用日志。 你还可以使用 Kibana 升级助手,这很有帮助。
https://www.elastic.co/guide/en/kibana/current/upgrade-assistant.html

Q6:我可以降级 Elasticsearch 吗?

A6: 不可以。一旦升级就无法降级。 我的意思是你可以降级,但无法启 动elasticsearch 服务 :)。 唯一可能的方法是创建一个全新的集群并从集群或快照/恢复中迁移数据。 因此,在升级之前请仔细考虑,检查所有弃用设置,确保你的应用程序与较新版本的 Elasticsearch 兼容。

Q7:版本升级之间有哪些重大变化?

A7:主要版本和次要版本之间有一些重大更改,你可以在此链接中找到所有内容。 小幅升级:例如,7.16.x 到 7.17.x。 小幅升级通常会引入新功能、改进和错误修复,同时保持与先前次要版本的兼容性。 主要升级:例如,7.17.x 到 8.8.x。 主要升级通常涉及重大更改,其中可能包括 API 的重大更改、数据迁移要求以及可能需要额外步骤才能升级的其他修改。 因此,请确保您的数据管道和应用程序与新版本兼容。 :)

  • https://www.elastic.co/support/matrix
  • https://www.elastic.co/guide/en/elasticsearch/reference/8.8/migration-8.0.html

Q8:小版本之间有什么重大变化吗?

A8:不完全是。 重大更改仅存在于可能影响您的集群的主要版本升级之间。文章来源地址https://www.toymoban.com/news/detail-784763.html

到了这里,关于Elasticsearch:升级 Elasticsearch 最安全的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • -bash: fork: Cannot allocate memory处理

    /proc/sys/kernel/pid_max是一个系统内核参数,用于设置系统可以分配的最大进程ID(PID)数。每个新创建的进程都会被分配一个唯一的PID,该值决定了系统能够支持的最大进程数量。 /etc/security/limits.d/90-nproc.conf是一个配置文件,用于设定每个用户或用户组在系统中可同时运行的最

    2024年02月13日
    浏览(43)
  • Centos报错:[Errno 12] Cannot allocate memory

    执行一个脚本刚开始正常,后面就报[Errno 12] Cannot allocate memory 如果内存不足,可能需要增加交换内存。或者可能根本没有启用交换。可以通过以下方式检查您的交换: 如果它为空,则表示您没有启用任何交换。添加 1GB 交换: 我们还需要添加到 fstab 以使交换永久化: 添加以下

    2024年02月15日
    浏览(35)
  • Docker 启动容器报错:cannot allocate memory: unknown

    使用命令启动容器: docker-compose up -d nginx 报错。 参考:Docker 之 cannot allocate memory 从错误的提示分析,推测是:cgroup、mkdir XXX : cannot allocate momory 将进行搜索,确实查到了很多相似(几乎一样)的现象,以及解决思路。 发生这个问题的大概原因: docker 默认使用

    2024年02月09日
    浏览(45)
  • elasticsearch的shard优化

    shard简介 Elasticsearch 中的数据会整理为索引。每个索引又由一个或多个分片组成。每个分片都是一个 Lucene 索引实例,您可以将其视作一个独立的搜索引擎,它能够对 Elasticsearch 集群中的数据子集进行索引并处理相关查询。 分片是 Elasticsearch 在集群内分发数据的单位。 Elasti

    2024年02月08日
    浏览(46)
  • kibana无法连接Elasticsearch all shards failed

    报错如下:Unable to connect to Elasticsearch. Error: [search_phase_execution_exception] all shards failed 解决办法: 运行(运行完这一部,一般就会解决问题) 如果有密码 ,根据提示输入密码 运行(删除所有索引) 谨慎运行此步骤 方法来源参考如下: https://discuss.elastic.co/t/kibana-task-manager-1-issues/

    2024年02月12日
    浏览(39)
  • 【elasticsearch】 es状态查看节点分片信息:/_cat/shards

    在kibana查询: 查询结果: index:索引名称 shard:分片数 prirep:分片类型,p=pri=primary为主分片,r=rep=replicas为复制分片 state:分片状态,STARTED为正常分片,INITIALIZING为异常分片 docs:记录数 store:存储大小 ip:es节点ip node:es节点名称

    2024年02月11日
    浏览(48)
  • elasticsearch8.5.2 报错(SearchPhaseExecutionException: all shards failed)

    一、问题 logstash突然无法对elasticsearch服务进行读写操作了,提示elasticsearch的地址有问题,检测elasticsearch发现端口存在。查看日志发现有报错。 二、问题原因 有一些索引的数据损坏了 三、解决 官网文档:https://www.elastic.co/guide/cn/elasticsearch/guide/cn/_cluster_health.html 1、查看索引

    2024年02月15日
    浏览(61)
  • org.elasticsearch.action.search.SearchPhaseExecutionException: all shards failed

    ES节点两个,使用filebeat采集日志后输出到logstash,进一步输出到ES。但是输出到ES后,节点的健康状态就由绿色变为了红色,且ES-head界面的数据浏览中点击索引后ES后台就报错,显示无法分片: 找了很长时间原因,最后在执行DSL指令 curl -XGET \\\"http://192.168.137.132:9200/_cluster/alloc

    2024年02月11日
    浏览(48)
  • 校园安全升级,这个方法赶紧直接收藏!

    在当今社会,学校安全管理成为备受关注的焦点之一。随着科技的不断进步,门禁监控系统作为一种创新的安全解决方案,在学校管理中扮演着越来越关键的角色。 传统的出入管理方式已经无法满足学校日益复杂的安全需求,而智能化的门禁监控系统为学校提供了高效、准确

    2024年02月03日
    浏览(33)
  • Elasticsearch exception [type=search_phase_execution_exception, reason=all shards failed]

    Elasticsearch exception [type=search_phase_execution_exception, reason=all shards failed] 今天在做项目遇到这个问题,Es那边出现了问题,谷粒商城去Es中查数据的时候,根据品牌id去查询数据报错。   {\\\"error\\\":{\\\"root_cause\\\":[{ \\\"type\\\":\\\"query_shard_exception\\\",\\\"reason\\\":\\\"failed to create query: {n  \\\"bool\\\" : {n    \\\"fil

    2024年02月02日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包