前言

ES集群千万不要一次性重启全部节点,会导致所有分片被置为unassigned_shards,重启后需要大量时间重新分配切片。这期间集群会处于red状态,不能写入任何新数据。这在生产环境中会导致灾难性的后果。

综上,ES集群重启要采用轮流重启的方式。重启一个节点,等该节点重新加入并且集群状态变为green后,再重启下一个节点。而且建议最后重启master节点

识别主节点的方法

GET /_cat/nodes
10.19.249.42 58 99 53 20.68 22.30 21.33 dilmrt - vplc06_es04
10.19.249.43 59 99 76 46.54 42.10 39.28 dilmrt - vplc07_es02
10.19.249.44 60 97 78 33.16 37.82 37.91 dilmrt - vplc08_es06
10.19.249.43 64 99 77 46.54 42.10 39.28 dilmrt - vplc07_es05
10.19.249.42 32 99 46 20.68 22.30 21.33 dilmrt - vplc06_es07
10.19.249.42 63 99 45 20.68 22.30 21.33 dilmrt - vplc06_es01
10.19.249.44 52 97 78 33.16 37.82 37.91 dilmrt - vplc08_es03
10.19.249.44 38 97 75 33.16 37.82 37.91 dilmrt - vplc08_es09
10.19.249.43 62 99 77 46.54 42.10 39.28 dilmrt * vplc07_es08

前面有*标注的就是主节点。

重启步骤

  1. 停止数据写入

  2. 临时关闭分片复制功能

    根据ES的自平衡机制,当一个节点宕机时,集群会复制该节点上的分片到其他节点进行重新平衡,这会造成大量的网络与磁盘IO,所以我们暂时将其关闭。

    控制台:

    PUT /_cluster/settings
    {
      "transient": {
        "cluster.routing.rebalance.enable": "none"
      }
    }
    

    curl:

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

    执行命令后返回:

    {
        "acknowledged": true,
        "persistent": {},
        "transient": {
            "cluster": {
                "routing": {
                    "allocation": {
                        "enable": "none"
                    }
                }
            }
        }
    }
    
  3. 重启集群

    依次重启集群中的各个节点(建议主节点最后重启)。

    每次重启完一个节点后观察是否正常加入集群,正常加入集群后再执行下一个。

  4. 开启分片复制机制

    当集群全部重启后恢复开启分片复制机制:

    控制台:

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

    curl:

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

加速重启后的分片恢复速度

增大这个设置项的值:cluster.routing.allocation.node_initial_primaries_recoveries
含义:一个节点上,同时处于初始化过程的主分片数量。默认为4

curl -XPUT "xxxx:9200/_cluster/settings" -H "Content-type: application/json" -d '
{
	"transient":
	{
		"cluster.routing.allocation.node_initial_primaries_recoveries":32
	}
}'

广告时间

既然自己维护ES这么复杂,不如试试腾讯云 Elasticsearch Service

腾讯云 Elasticsearch Service(ES)是基于开源引擎打造的云端全托管 ELK 服务,集成 X-Pack 特性、独有高性能自研内核、QQ 分词、集群巡检、一键升级等优势能力,引入极致性价比的腾讯自研星星海服务器。助您轻松管理和运维集群,高效构建日志分析、运维监控、信息检索、数据分析等业务。

【腾讯云】ElasticSearch新用户特惠,快速实现日志分析、应用搜索,首购低至4折

ES产品_560 300

↑↑↑现在新用户免费试用30天,快点击上方连接开启试用吧。↑↑↑