ElasticSearch节点重启

注: 部分概念介绍来源于网络

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

1、数据分片与自平衡
(1)关闭自动分片,即使新建index也无法分配数据分片
PUT /_cluster/settings {
  "transient" : {
    "cluster.routing.allocation.enable" : "none"
  }
}
(2)关闭自动平衡,只在增减ES节点时不自动平衡数据分片
PUT /_cluster/settings?pretty {
  "transient" : {
    "cluster.routing.rebalance.enable" : "none"
  }
}
(3)禁止集群写入,启动时候,禁写
PUT /_cluster/settings
{
  "persistent": {
    "cluster.blocks.read_only": true
  },
  "transient": {
    "cluster.blocks.read_only": true
  }
(4)设置完以后查看设置是否添加成功:
GET /_cluster/settings?pretty

2、shutdown你要升级的节点
POST /_cluster/nodes/_local/_shutdown

3、先打开写入,再打开自动均衡
PUT /_cluster/settings
{
  "persistent": {
    "cluster.blocks.read_only": false
  }
}
PUT /_cluster/settings
{
  "transient": {
    "cluster.blocks.read_only": false
  }
}

4、重新启用自动分片
PUT /_cluster/settings {
  "transient" : {
    "cluster.routing.allocation.enable" : "all"
  }
}

5、延迟副本的重新分配,未分配节点重新分配延迟到5分钟之后
PUT /_all/_settings
{
  "settings": {
    "index.unassigned.node_left.delayed_timeout": "5m"
  }
}

6、打开集群自动均衡
PUT /_cluster/settings
{
  "persistent": {
    "cluster.routing.rebalance.enable": "ALL"
  },
  "transient": {
    "cluster.routing.rebalance.enable": "ALL"
  }
}

7、下面是修改 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,例如:
有10个符合规则的节点数,则配置为6.
有3个则配置为2.

三、关于设置的有效性
persistent 重启后设置也会存在
transient 整个集群重启后会消失的设置
PUT /_cluster/settings
{
    "persistent" : {
        "discovery.zen.minimum_master_nodes" : 2
    }
}
一般设置下面两个就可以了
# 通过配置大多数节点(节点总数/ 2 + 1)来防止脑裂
discovery.zen.minimum_master_nodes: 2

# 在一个完整的集群重新启动到N个节点开始之前,阻止初始恢复
gateway.recover_after_nodes: 3

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在一台Linux上搭建三个 Elasticsearch 节点,你可以按照以下步骤进行操作: 1. 下载 Elasticsearch:首先,你需要下载 Elasticsearch 的安装包。你可以从 Elasticsearch 官方网站上下载适合你操作系统的版本。 2. 安装 Elasticsearch:解压下载的安装包,并将其安装到你选择的目录中。 3. 配置节点:对于每个节点,你需要在 Elasticsearch 配置文件中进行配置。打开 elasticsearch.yml 文件并进行编辑。找到 `network.host` 和 `http.port` 选项,并为每个节点分配不同的 IP 地址和端口号。 例如,对于第一个节点: ``` network.host: 192.168.0.1 http.port: 9200 ``` 对于第二个节点: ``` network.host: 192.168.0.2 http.port: 9201 ``` 对于第三个节点: ``` network.host: 192.168.0.3 http.port: 9202 ``` 4. 节点:对于每个节点,使用命令行进入 Elasticsearch 安装目录,并执行以下命令节点。确保更改以下命令中的路径和文件名以匹配你的设置。 对于第一个节点: ``` ./bin/elasticsearch -Epath.data=data1 -Epath.logs=log1 ``` 对于第二个节点: ``` ./bin/elasticsearch -Epath.data=data2 -Epath.logs=log2 ``` 对于第三个节点: ``` ./bin/elasticsearch -Epath.data=data3 -Epath.logs=log3 ``` 5. 验证节点:使用 curl 或任何其他 HTTP 客户端工具,向每个节点发送请求以验证它们是否正在运行。例如,对于第一个节点,你可以运行以下命令: ``` curl -XGET http://192.168.0.1:9200 ``` 如果你能够成功获取 Elasticsearch 的版本信息,那么节点已经成功动。 6. 配置集群:要将这三个节点组成一个集群,你需要在每个节点的配置文件中添加以下设置: 对于第一个节点: ``` cluster.name: my-cluster node.name: node-1 ``` 对于第二个节点: ``` cluster.name: my-cluster node.name: node-2 ``` 对于第三个节点: ``` cluster.name: my-cluster node.name: node-3 ``` 7. 节点:在每个节点上进行配置更改后,节点以使更改生效。 以上步骤将帮助你在一台 Linux 上搭建三个 Elasticsearch 节点,并将它们组成一个集群。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值