elasticsearch集群正确关闭、重启方式

本文详细介绍了在Elasticsearch集群中进行维护的最佳实践,包括如何正确关闭和重启节点,以减少不必要的I/O操作,避免数据丢失,并确保集群稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题原因:

在elasticsearch集群中,当集群发现某个节点关闭时,将延迟一分钟后(默认)再开始将该节点上的分片复制到集群中的其他节点,这可能涉及很多I / O。由于该节点不久将要重新启动,因此该I / O是不必要的。您可以通过在关闭节点之前禁用副本分配来避免。

正确关闭方式:

第一步:

禁止分片自动分布

curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
  "persistent": {
    "cluster.routing.allocation.enable": "primaries"
  }
}
'

第二部:

执行同步刷新

curl -X POST "localhost:9200/_flush/synced?pretty"

注意:

执行同步刷新时,请检查响应以确保没有失败。尽管请求本身仍返回200 OK状态,但在响应正文中列出了由于挂起索引操作而失败的同步刷新操作。如果失败,请重新发出请求。

第三部:

关闭所有节点

如果您使用以下命令运行Elasticsearch systemd:
sudo systemctl stop elasticsearch.service

如果您正在使用SysV运行Elasticsearch init:
sudo -i service elasticsearch stop

如果您将Elasticsearch作为守护程序运行:
kill $(cat pid.txt)

关闭结束后可以执行你任何的更改

正确重启方式:

第一步:

执行完操作后逐个启动节点

cd $ES_HOME
./bin/elasticsearch -d -p $ES_HOME/pid.txt

第二步:

等所有节点启动完成后,可以通过执行如下请求查看集群状态:

curl -X GET "localhost:9200/_cat/health?pretty"
curl -X GET "localhost:9200/_cat/nodes?pretty"

状态分别有:redyellowgreen

当节点加入集群时,它开始恢复本地存储的所有主分片。该_cat/healthAPI最初将报告statusred,表明并非所有的初级碎片已被分配。一旦节点恢复了其本地分片,集群status就会切换到 yellow,表示所有主分片都已恢复,但并非所有副本分片都已分配。这是可以预期的,因为您尚未重新启用分配。将副本的分配延迟到所有节点都yellow可用之后,主服务器便可以将副本分配给已经具有本地分片副本的节点。

第三步:

启用分片自动分布

当所有节点都已加入集群并恢复了其主要分片后,可通过恢复cluster.routing.allocation.enable为其默认值来重新启用分配:

curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
  "persistent": {
    "cluster.routing.allocation.enable": null
  }
}
'

重新启用分配后,集群便开始将副本分片分配给数据节点。此时,恢复索引和搜索是安全的,但是如果您可以等待直到成功分配了所有主分片和副本分片并且所有节点的状态为,集群就会恢复得更快green

您可以使用_cat/health和 _cat/recoveryAPI 监视进度

curl -X GET "localhost:9200/_cat/health?pretty"
curl -X GET "localhost:9200/_cat/recovery?pretty"

### Elasticsearch 集群状态不稳定的解决方案 当 Elasticsearch 集群的状态不稳定时,可能涉及多个方面的原因。以下是针对该问题的分析和解决方法: #### 1. **检查集群健康状态** 通过 REST API 查询集群的健康状态可以帮助快速定位问题所在。可以运行以下命令来获取集群的整体健康状况: ```bash GET /_cluster/health?pretty=true ``` 此命令返回的结果中包含了 `status` 字段,其值可能是 `green`, `yellow` 或者 `red`。如果状态为 `red` 或 `yellow`,说明存在潜在问题[^1]。 #### 2. **确认 Master 节点选举正常** Elasticsearch 使用 Zen Discovery 进行服务发现和主节点选举。如果当前节点未能成功加入到主节点,则可能导致集群状态不稳定。可以通过查看日志文件中的错误消息进一步排查原因。确保网络连通性和配置一致性是解决问题的关键之一[^3]。 #### 3. **调整分片分配策略** 如果某些分片未被正确分配给数据节点,也可能引起集群状态波动。执行如下命令强制重新分配分片可能会有所帮助: ```json POST /_cluster/reroute { "commands": [ { "allocate_stale_primary": { "index": "<your_index_name>", "shard": <shard_id>, "node": "<target_node>" } } ] } ``` 另外,在多副本环境中设置合理的副本数量也很重要。例如减少不必要的副本来降低资源消耗并提高稳定性: ```json PUT /<your_index>/_settings { "number_of_replicas": 0 } ``` 之后可以根据实际需求再逐步增加副本数。 #### 4. **优化热温架构设计** 对于大规模生产环境下的 Elasticsearch 集群来说,采用热温架构能够有效提升整体性能与可靠性。具体做法包括区分不同类型的工作负载至不同类型的物理设备上——比如让频繁更新的数据驻留在高性能 SSD 支持下的 hot nodes 上;而对于那些不再变化的历史存档类资料则迁移到成本更低但速度较慢 HDD 构成 warm nodes 中去处理[^4]。 #### 5. **重启服务恢复异常情况** 有时候简单的重启操作就可以修复一些临时性的故障。按照标准流程停止然后再启动整个 ElasticSearch 实例链路即可尝试恢复正常运作模式: ```bash systemctl stop elasticsearch sleep 5 #等待几秒钟确保完全关闭 systemctl start elasticsearch ``` 或者直接重载守护进程加载最新修改过的配置参数表项而无需终止程序本身运行过程: ```bash systemctl daemon-reload systemctl reload elasticsearch ``` 最后别忘了验证一下新的设定生效与否以及是否解决了之前遇到的问题[^2]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值