Elasticsearch集群管理之添加、删除节点
1、问题抛出
1.1 新增节点问题
我的群集具有黄色运行状况,因为它只有一个节点,因此副本保持未分配状态,我想要添加一个节点,该怎么弄?
1.2 删除节点问题
假设集群中有5个节点,我必须在运行时删除2个节点。 那么如何在不影响指数的情况下完成?
我有接近10 Gb/hour的连续数据流,这些数据正在连续写入并索引化。 重新平衡会对此有所影响吗?
本文就从上面两个问题说起,将相关知识点串起来,内容较长,阅读时间5分钟+。
2、知识点
2.1 Master节点的职责
主节点的主要作用之一是确定将哪些分片分配给哪些节点,以及何时在节点之间移动分片以重新平衡集群。
2.2 分片分配发生的时机
分片分配是将分片分配给节点的过程。 这可能发生在集群初始恢复,副本分配,重新平衡或添加或删除节点期间。
2.3 控制分配/重新平衡分片操作的常见设置
2.3.1  分配分片设置
cluster.routing.allocation.enable
目的:启用或禁用特定种类的分片的分配。
all - (默认值)允许为所有类型的分片分配分片。
primaries - 仅允许分配主分片的分片。
new_primaries -仅允许为新索引的主分片分配分片。
none - 任何索引都不允许任何类型的分配分片。
重新启动节点时,此设置不会影响本地主分片的恢复。
假设重新启动的节点的分配ID与群集状态中的某个活动分配ID匹配,若该节点具有未分配的主分片的副本,则会立即恢复该主分片,
2.3.2 平衡分片设置
cluster.routing.rebalance.enable
目的:为特定类型的分片启用或禁用重新平衡。
允许控制群集范围内允许的并发分片重新平衡数。默认为2.请注意,此设置仅控制由于群集中的不平衡而导致的并发分片重定位数。此设置不会因分配过滤或强制感知而限制分片重定位。
2.3.3 权重因子设置
cluster.routing.allocation.balance.shard
目的:定义节点(float)上分配的分片总数的权重因子。默认为0.45f。提高这一点会增加均衡群集中所有节点的分片数量的趋势。
cluster.routing.allocation.balance.index
目的:定义在特定节点(float)上分配的每个索引的分片数量的权重因子。默认为0.55f。提高这一点会增加在集群中所有节点上均衡每个索引的分片数的趋势。
cluster.routing.allocation.balance.threshold
目的:应执行的操作的最小优化值(非负浮点数)。默认为1.0f。提高此选项将导致群集在优化分片平衡方面不那么积极。
2.4 基于磁盘的分片分配
在确定是将新分片分配给该节点还是主动从该节点拷贝分片到其他节点之前,Elasticsearch会考虑节点上的可用磁盘空间。
2.5 磁盘的三个默认警戒水位线
cluster.routing.allocation.disk.watermark.low
低警戒水位线——默认为磁盘容量的85%。
Elasticsearch不会将分片分配给使用磁盘超过85%的节点。它也可以设置为绝对字节值(如500mb),以防止Elasticsearch在小于指定的可用空间量时分配分片。此设置不会影响新创建的索引的主分片,或者特别是之前任何从未分配过的分片。
cluster.routing.allocation.disk.watermark.high
高警戒水位线——默认为磁盘容量的90%。
Elasticsearch将尝试从磁盘使用率超过90%的节点重新分配分片。它也可以设置为绝对字节值,以便在节点小于指定的可用空间量时将其从节点重新分配。此设置会影响所有分片的分配,无论先前是否分配。
cluster.routing.allocation.disk.watermark.flood_stage
洪水警戒水位线——默认为磁盘容量的95%。
Elasticsearch对每个索引强制执行只读索引块(index.blocks.read_only_allow_delete)。这是防止节点耗尽磁盘空间的最后手段。一旦有足够的可用磁盘空间允许索引操作继续,就必须手动释放索引块。
cluster.info.update.interval
Elasticsearch应该多久检查一次群集中每个节点的磁盘使用情况。 默认为30秒。
磁盘的分片分配综合样例配置如下:
PUT _cluster/settings
{
  "transient": {
    "cluster.routing.allocation.disk.watermark.low": "100gb",
    "cluster.routing.allocation.disk.watermark.high": "50gb",
    "cluster.routing.allocation.disk.watermark.flood_stage": "10gb",
    "cluster.info.update.interval": "1m"
  }
}
2.6 索引/节点层面的分片分配
可用的动态集群设置如下,其中{attribute}指的是任意节点属性:
cluster.routing.allocation.include.{attribute}——至少包含
cluster.routing.allocation.require.{attribute}——全部包含
cluster.routing.allocation.exclude.{attribute}——非、排除操作
3、添加节点
添加注意事项:
ES必须版本号一致,举例:Elasticsearch V6.4.1。
和新配置过Elasticsearch节点一致,以下仅介绍最快的方法。
步骤1:拷贝原有节点的ES相关文件到新机器。
步骤2:修改核心配置文件jvm.options和elasticsearch.yml。
    注意1:jvm注意结合实际机器的内存进行合理化配置。取值:Min(32GB,机器内存一半)。
    注意2:根据分配的角色(Master/data/client)配置。
    注意3:集群名称必须和预先的机器一致。
    注意4:避免脑裂,合理化如下配置
curl -XPUT 'localhost:9200/_cluster/settings' -d'
{
"transient": {
"discovery.zen.minimum_master_nodes": 3
}
}
    注意5:启动报错,根据出错做相关修改。
步骤3:访问9200端口验证成功与否。
4、删除节点
注意事项:
1、节点数目少的时候,一定要注意脑裂问题。
2、脑裂问题必要的时候需要更新:elasticsearch.yml 中的 minimum_master_nodes。
4.1 方案一——停启集群分片自动分配
步骤1:暂停数据写入程序
步骤2:关闭集群shard allocation
#关闭集群分片自动分配
PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
  }
}
步骤3:手动执行POST /_flush/synced
#打开集群分片自动分配
POST /_flush/synced
步骤4:重启结点
步骤5:重新开启集群shard allocation
#打开集群分片自动分配
PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "all"
  }
}
步骤6:等待recovery完成,集群health status变成green
步骤7:重新开启数据写入程序
以上7步骤系参考Wood大叔总结。
4.2 方案二——排除停用节点
步骤1 排除停用节点
您可以通过告知群集将其从分配中排除来停用节点。
PUT _cluster/settings
{
  "transient" : {
    "cluster.routing.allocation.exclude._ip" : "10.0.0.1"
  }
}
这将导致Elasticsearch将该节点上的分片分配给其余节点,而不会将群集状态更改为黄色或红色(即使您的副本数设置为0)。
重新分配所有分片后,您可以关闭节点并执行您需要执行的任何操作。 完成后,Elasticsearch将再剩余节点上再次重新平衡分片。
步骤2 检查集群健康状态
curl -XGET 'http://ES_SERVER:9200/_cluster/health?pretty'
如果没有节点relocating,则排除节点已经被安全剔除,可以考虑关闭节点。
步骤3 判定数据是否还存在
查看节点上是否还有文档存在。
curl -XGET 'http://ES_SERVER:9200/_nodes/NODE_NAME/stats/indices?pretty'
上述三步,能保证节点稳妥删除。
Elasticsearch集群管理之添加、删除节点的更多相关文章
- elasticsearch集群管理工具head插件(转)
		
elasticsearch-head是一个elasticsearch的集群管理工具,它是完全由html5编写的独立网页程序,你可以通过插件把它集成到es 插件安装方法1: 1.elasticsearc ...
 - Elasticsearch集群管理工具head插件安装
		
Elasticsearch-head是一个elasticsearch的集群管理工具,它是完全由html5编写的独立网页程序,你可以通过插件把它集成到es.或直接下载源码,在本地打开index.html ...
 - Elasticsearch集群 管理
		
第7章 深入Elasticsearch集群 启动一个Elasticsearch节点时,该节点会开始寻找具有相同集群名字并且可见的主节点.如 果找到主节点,该节点加入一个已经组成了的集群:如果没有找到, ...
 - Elasticsearch集群管理
		
ES通过设置[节点的名字]和[集群的名字],就能自动的组织相同集群名字的节点加入到集群中,并使很多的技术对用户透明化. 如果用户想要管理查看集群的状态,可以通过一些REST API来实现. 其他的ES ...
 - elasticsearch 集群管理(集群规划、集群搭建、集群管理)
		
一.集群规划 搭建一个集群我们需要考虑如下几个问题: 1. 我们需要多大规模的集群? 2. 集群中的节点角色如何分配? 3. 如何避免脑裂问题? 4. 索引应该设置多少个分片? 5. 分片应该设置几个 ...
 - redis集群扩容(添加新节点)
		
一.创建节点(接上文) 1.在H1服务器/root/soft目录下创建7002目录 2.将7001目录的配置文件redis.conf拷贝到7002,并修改配置文件的端口 3.进入 redis-5.0. ...
 - Elasticsearch集群问题,导致主master节点发现不了node节点
		
个人博客:https://blog.sharedata.info/ 最新需要配置es集群采用5个分片和1个副片,正好是11台机器,而只保留一份备份所以只需要5*2=10台机器方案:1.1台作为mast ...
 - 大快搜索DKhadoop集群管理平台添加节点的步骤说明
		
Hadoop作为搭建大数据处理平台的重要“基石”,关于它的分析和讲解的文章已经有很多了.Hadoop本身是一分布式的系统,因此在安装的时候,需要多每一个节点进行组建的安装.并且由于是开源软件,其安装过 ...
 - 大规模Elasticsearch集群管理心得
		
转载:http://elasticsearch.cn/article/110 ElasticSearch目前在互联网公司主要用于两种应用场景,其一是用于构建业务的搜索功能模块且多是垂直领域的搜索,数据 ...
 
随机推荐
- thymeleaf实现前后端数据交换
			
1.前端传数据后端接收: 用户在登录界面输入用户名和密码传给后端controller,由后端判断是否正确! 在html界面中要传递的数据name命名,通过表单的提交按钮会传递给响应的controlle ...
 - 记一次 .NET 某电厂Web系统 内存泄漏分析
			
一:背景 1. 讲故事 前段时间有位朋友找到我,说他的程序内存占用比较大,寻求如何解决,截图就不发了,分析下来我感觉除了程序本身的问题之外,.NET5 在内存管理方面做的也不够好,所以有必要给大家分享 ...
 - [System.OutOfMemoryException]	{函数求值已禁用,因为出现内存不足异常。
			
[System.OutOfMemoryException] {函数求值已禁用,因为出现内存不足异常. StringBuilder 赋值的时候超过内存的大小,要即时去清空文本的值. 也可能是DataSe ...
 - 4-8 CS后台项目练习-2
			
8. 类别管理--添加类别--持久层 8.1. 配置 续前日,无新增 8.2. 规划需要执行的SQL语句 续前日,无新增 8.3. 接口与抽象方法 此前需要执行的SQL语句大致是: select id ...
 - 2022-7-21 第七组 pan小堂 继承与super与this
			
1.继承 1.1继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系. 1.2继承的格式 class 子类 ...
 - md 中超链接的解析问题:解析`this.$set()`,`$`前要加空格或转义符 `\`
			
在用 Editor.md 写文档时,插入超链接,发现一个奇怪的现象: 要想正确显示超链接,必须在 $ 前加空格或转义符 \
 - 关于静态 RMQ 问题
			
目录 1. 普通做法 2. Four Russian 算法 3. 随机数据的一种做法 4. 有关转 LCA 的做法 1.1. RMQ 转 LCA 再转 ±1RMQ(RMQ 标准算法) 1.2. 一个优 ...
 - Go语言Tips
			
时间日期格式化 time.Now().Format("2006-01-02") 原生DefaultServeMux支持restful路由 ref: https://towardsd ...
 - python常量与变量的本质
			
python语法常量与变量的本质 python语法之注释 1.python语法注释有哪几种? (1.)单行注释 # 井号键单行注释 使用方法:首先在另起一行按('#')井号键进行注释,如果需要代码后面 ...
 - 「CCO 2017」专业网络
			
Kevin 正在一个社区中开发他的专业网络.不幸的是,他是个外地人,还不认识社区中的任何人.但是他可以与 N 个人建立朋友关系 . 然而,社区里没几个人想与一个外地人交朋友.Kevin 想交朋友的 N ...