如何正确的关闭Elasticsearch集群

本文详细介绍了如何正确地关闭和启动ElasticSearch集群,避免数据丢失和不必要的数据迁移。首先,需禁止分片自动分布,执行同步刷新,然后逐个关闭节点。启动时,先启动各节点,等待加入集群并恢复,最后启用分片自动分布。

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

如何正确的关闭ElasticSearch集群

背景

接触Elasticsearch也快半年时间了,一直也没弄明白如何的关闭ES和ES集群。经常在测试和生产环境遇到这样的问题“重启ES后数据怎么没了?”,“启动ES后,怎么一直有大量的数据在迁移?”

问题原因

其本质原因有两点:

  • ES中的数据不是实时写入磁盘的。数据进入ES后先进入data buffer和log buffer,然后进入数据段,最后再特定时机下才刷入磁盘。即在内存中有很多数据是没写入磁盘的。
  • ES的自动分片机制。当集群发现经过一分钟后(index.unassigned.node_left.delayed_timeout参数设置)还连接不上某个节点,就会把集群内的数据重新进行分布,即使后来节点重新连接上,原来的数据因为重新分布也无效了。

ES内存数据模型

如何正确的关闭ES或者ES集群

  • 第一步,禁止分片自动分布
PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
  }
}
  • 第二步,执行同步刷新
POST _flush/synced
  • 第三步,各节点逐个关闭
# 通过服务关闭
# sudo systemctl stop elasticsearch.service
# 杀进程关闭
kill $(cat pid.txt)

如何启动ES集群

  • 第一步,执行完操作后逐个启动节点
cd $ES_HOME/bin
./elasticsearch -d -p $ES_HOME/pid.txt
  • 第二步,等待所有节点加入集群
    查看集群状态是否为"green"
GET _cat/health

GET _cat/nodes
  • 第三步,启用分片自动分布
PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": null
  }
}
  • 第四步,等待集群可用
    通过集群的状态和恢复进程监控集群是否可用
GET _cat/health

GET _cat/recovery
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值