es重启临时关闭自动分片

ElasticSearch 集群的高可用和自平衡方案会在节点挂掉(重启)后自动在别的结点上复制该结点的分片,这将导致了大量的IO和网络开销。
如果离开的节点重新加入集群,elasticsearch为了对数据分片(shard)进行再平衡,会为重新加入的节点再次分配数据分片(Shard);当一台es因为压力过大而挂掉以后,其他的es服务会备份本应那台es保存的数据,造成更大压力,于是整个集群会发生雪崩。
生产环境的 ElasticSearch 服务如果负载过重,单台服务器不稳定;则集群稳定性就会因为自动平衡机制,再遭重创。生产环境下建议关闭自动平衡。

一、数据分片与自平衡配置

1.1、关闭自动分片,即使新建index也无法分配数据分片

生产中设置这个即可,集群节点重启后,未分配的分片会比较多,然后开启后会自动重新分配。(可以先设置一部分节点,然后开启,再设置一部分,再开启)

curl -XPUT http://192.168.1.213:9200/_cluster/settings -d '{
  "transient" : {
    "cluster.routing.allocation.enable" : "none"
  }
}'

官方说明:https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html

 cluster.routing.allocation.enable

(Dynamic) Enable or disable allocation for specific kinds of shards:

  • all - (default) Allows shard allocation for all kinds of shards.
  • primaries - Allows shard allocation only for primary shards.
  • new_primaries - Allows shard allocation only for primary shards for new indices.
  • none - No shard allocations of any kind are allowed for any indices.

This setting does not affect the recovery of local primary shards when restarting a node. A restarted node that has a copy of an unassigned primary shard will recover that primary immediately, assuming that its allocation id matches one of the active allocation ids in the cluster state.

1.2、关闭自动平衡,只在增减ES节点时不自动平衡数据分片

curl -XPUT http://192.168.1.213:9200/_cluster/settings?pretty -d '{
  "transient" : {
    "cluster.routing.rebalance.enable" : "none"
  }
}'

1.3、设置完以后查看设置是否添加成功

curl http://192.168.1.213:9200/_cluster/settings?pretty

1.4、适当调大节点分片并发数(慎重,容易蹦)

"cluster.routing.allocation.node_concurrent_recoveries":2
默认是2,可以适当大一些

cluster.routing.allocation.node_concurrent_recoveries

(Dynamic) A shortcut to set both cluster.routing.allocation.node_concurrent_incoming_recoveries and cluster.routing.allocation.node_concurrent_outgoing_recoveries. Defaults to 2.

1.5、打开自动分片,自动平衡(如果关闭的话) 

curl -XPUT http://192.168.1.213:9200/_cluster/settings -d '{
  "transient" : {
    "cluster.routing.allocation.enable" : "all",
    "cluster.routing.rebalance.enable" : "all"
  }
}'

二、延迟副本的重新分配

2.1、数据恢复延迟动态配置

PUT /_all/_settings
{
  "settings": {
    "index.unassigned.node_left.delayed_timeout": "5m"
  }
}

未分配节点重新分配过程,延迟到5分钟之后。

2.2、数据恢复操作延迟静态配置

下面是修改 elasticsearch.yml 文件

gateway.recover_after_nodes: 8
这将防止Elasticsearch立即开始数据恢复,直到集群中至少有八个(数据节点或主节点)节点存在。
gateway.expected_nodes: 10 
gateway.recover_after_time: 5m
集群开始数据恢复等到5分钟后或者10个节点加入,以先到者为准。

三、脑裂问题

对某一个实例进行重启后,很有可能会导致该实例无法找到master而将自己推举为master的情况出现,为防止这种情况,需要调整 elasticsearch.yml 中的内容:

discovery.zen.minimum_master_nodes: 2

这个配置就是告诉Elasticsearch除非有足够可用的master候选节点,否则就不选举master,只有有足够可用的master候选节点才进行选举。
该设置应该始终被配置为有主节点资格的点数/2 + 1,例如:

  1. 有10个符合规则的节点数,则配置为6.
  2. 有3个则配置为2.

四、关于设置的有效性

  1. persistent 重启后设置也会存在
  2. transient 整个集群重启后会消失的设置
PUT /_cluster/settings
{
    "persistent" : {
        "discovery.zen.minimum_master_nodes" : 2
    }
}

五、批量重启集群

ip是集群ip list地址

#停es服务
ssh ip -C 'ps -ef|grep  org.elasticsearch.bootstrap.Elasticsearch|grep -v grep|awk '{print \$2}'|xargs kill -9'
 
#启动es服务
ssh ip -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'

参考:

ElasticSearch 服务节点重启需要的相关操作 | IT工程师的生活足迹

 ES集群一个正确的重启流程(附串行重启es脚本)_可乐大数据的博客-优快云博客_es重启

03.shard_allocation_和_cluster的routing设置_夜月行者的博客-优快云博客

 ElasticSearch集群shard均衡策略 - 知乎

<think>好的,我现在需要详细解释Elasticsearch自动节点恢复机制。首先,我需要确认用户的问题是什么。用户之前询问了关于ES实现HTTPS加密和数据存储加密的问题,现在转而询问自动节点恢复的详解。这可能意味着用户正在构建或维护一个ES集群,关注高可用性和故障恢复方面的内容。 自动节点恢复是ES在分布式系统中的重要功能,确保集群在节点故障或网络分区后能够自动恢复数据一致性和可用性。我需要回忆ES的相关文档,尤其是关于集群恢复、分片分配、副本机制的部分。 首先,节点恢复可能涉及几个方面:主节点的选举、分片重新分配、副本同步、数据恢复流程等。ES自动恢复机制依赖于其分布式架构,每个索引被分成多个分片,每个分片有多个副本。当某个节点离开集群时,其他节点上的副本分片会被提升为主分片,确保数据可用性。 接下来,我需要考虑节点恢复的不同触发场景,比如节点宕机、网络中断、重启维护等。不同场景下恢复的过程可能有所不同,比如节点临时离线与永久故障的处理方式差异。 还要注意ES中的相关配置参数,比如`cluster.routing.allocation.enable`、`indices.recovery.max_bytes_per_sec`等,这些参数会影响恢复的行为和性能。同时,恢复过程中的资源使用(如网络带宽、磁盘IO)也是需要考虑的因素,避免恢复操作影响集群的正常服务。 另外,版本差异可能会影响恢复机制,比如不同ES版本在恢复策略上的改进。需要确保提供的信息适用于当前主流版本,如7.x或8.x。 用户可能需要了解恢复的步骤、相关配置、监控方法以及优化建议。因此,在回答中需要结构清晰,分点说明,包括触发条件、恢复流程、配置参数、监控命令和最佳实践等部分。 还需要验证是否有误解或遗漏的关键点。例如,主节点在恢复过程中的角色,gateway模块的作用,以及translog在数据恢复中的重要性。确保这些细节准确无误,避免给用户错误的信息。 最后,结合用户之前的问题,可能他们希望构建一个健壮、安全的ES集群,因此在介绍自动节点恢复时,可以适当提及与之前加密功能的结合,比如在恢复过程中数据传输的安全性,但可能用户更关注恢复机制本身,因此需要保持回答的针对性。 总结,回答的结构应包括概述、触发条件、核心流程、配置优化、监控与验证、注意事项等部分,使用代码块展示相关命令和配置,确保内容详实且易于理解。</think>以下是Elasticsearch自动节点恢复机制的详细解析: --- ### 一、核心恢复机制概述 Elasticsearch通过分片副本机制实现自动节点恢复,其核心原理可概括为: $$ R = P + \sum_{i=1}^{n}R_i $$ 其中: - $R$ = 总数据可靠性 - $P$ = 主分片 - $R_i$ = 第i个副本分片 当节点离线时,集群自动执行: ```mermaid graph TB A[节点离线检测] --> B{是否主节点?} B -->|是| C[触发新主节点选举] B -->|否| D[副本分片提升为主分片] C --> E[更新集群状态] D --> E E --> F[启动分片重分配] ``` --- ### 二、触发恢复的5种典型场景 1. **节点临时故障**(心跳超时) - 默认检测周期:`discovery.zen.fd.ping_interval=1s` - 判定离线阈值:`discovery.zen.fd.ping_timeout=30s` 2. **硬件维护重启** ```shell # 优雅关闭节点前执行 PUT _cluster/settings { "transient": { "cluster.routing.allocation.exclude._ip": "192.168.1.10" } } ``` 3. **磁盘故障** - 自动触发分片迁移的条件: ```yaml cluster.routing.allocation.disk.watermark.low: 85% cluster.routing.allocation.disk.watermark.high: 90% ``` 4. **网络分区** - 通过法定人数(quorum)防止脑裂: ```yaml discovery.zen.minimum_master_nodes: (master_eligible_nodes/2)+1 ``` 5. **版本升级** - 滚动重启自动保持分片可用性 --- ### 三、分片恢复全流程 #### 阶段1:初始化检测 ```java // 伪代码逻辑 if (nodeFailureDetected()) { ClusterStateUpdateTask task = new RecoveryTask(); masterService.submitStateUpdateTask("node-left", task); } ``` #### 阶段2:分片重新路由 | 分片类型 | 处理策略 | 耗时预估 | |---------|---------|---------| | 主分片 | 提升副本为NewPrimary | <100ms | | 副本分片 | 分配新副本 | 依赖数据量 | #### 阶段3:数据同步 使用Lucene提交点和translog进行增量恢复: ``` 恢复数据量 = 最近提交点 + translog中未提交操作 ``` #### 阶段4:恢复完成校验 ```shell # 查看分片恢复进度 GET _cat/recovery?v&active_only=true ``` --- ### 四、关键配置参数优化 ```yaml # 控制恢复速度 indices.recovery.max_bytes_per_sec: "200mb" # 防止网络拥塞 cluster.routing.allocation.node_concurrent_recoveries: 2 # 单节点并发恢复数 # 控制重试策略 indices.recovery.retry_delay_network: "5s" # 网络错误重试间隔 cluster.service.slow_task_logging_threshold: "30s" # 慢恢复日志记录 ``` --- ### 五、监控与验证命令 1. 实时监控恢复状态: ```shell GET _cluster/health?filter_path=indices.*.status,relocating_shards ``` 2. 查看分片分配详情: ```shell GET _cat/shards?v&h=index,shard,prirep,state,node,unassigned.reason ``` 3. 诊断未分配分片: ```shell GET _cluster/allocation/explain { "index": "logs-2023-08", "shard": 0, "primary": true } ``` --- ### 六、特殊场景处理策略 1. **部分数据丢失**: ```shell # 强制分配分片(慎用!) POST _cluster/reroute { "commands": [ { "allocate_stale_primary": { "index": "logs-2023-08", "shard": 0, "node": "node3", "accept_data_loss": true } } ] } ``` 2. **恢复限流**: ```shell PUT _cluster/settings { "transient": { "indices.recovery.max_bytes_per_sec": "50mb" } } ``` --- ### 七、最佳实践建议 1. **容量规划**: - 保留至少20%的磁盘空间用于恢复操作 - 每个节点分片数建议控制在:`≤ heap_size(GB) * 20` 2. **恢复加速技巧**: ```shell # 优先恢复关键索引 PUT _cluster/settings { "persistent": { "cluster.routing.allocation.priority": "high" } } ``` 3. **熔断保护**: ```yaml indices.breaker.total.limit: 70% # 总熔断阈值 network.breaker.inflight_requests.limit: 100% # 飞行请求熔断 ``` --- ### 八、版本差异说明 | 功能特性 | 6.x版本 | 7.x版本 | 8.x版本 | |---------|--------|--------|--------| | 分片分配策略 | 基础权重算法 | 基于磁盘的智能分配 | 机器学习优化分配 | | 并行恢复 | 单线程 | 多线程分段恢复 | 流水线并行恢复 | | 安全恢复 | 无校验 | 校验和验证 | 端到端加密恢复 | --- 通过以上机制,Elasticsearch可在多数故障场景下实现自动恢复,但需注意: - 生产环境建议至少配置1个副本(`index.number_of_replicas=1`) - 定期验证快照备份的有效性 - 监控`cluster.status`状态变化,及时介入异常情况
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值