个人群集具备黄色运行情况,由于它只有一个节点,所以副本保持未分配状态,我想要添加一个节点,该怎么弄?html
假设集群中有5个节点,我必须在运行时删除2个节点。 那么如何在不影响指数的状况下完成?
我有接近10 Gbp/hour的连续数据流,这些数据正在连续写入并索引化。 从新平衡会对此有所影响吗?node
本文就从上面两个问题提及,将相关知识点串起来,内容较长,阅读时间5分钟+。web
主节点的主要做用之一是肯定将哪些分片分配给哪些节点,以及什么时候在节点之间移动分片以从新平衡集群。安全
分片分配是将分片分配给节点的过程。 这可能发生在集群初始恢复,副本分配,从新平衡或添加或删除节点期间。并发
all - (默认值)容许为全部类型的分片分配分片。
primaries - 仅容许分配主分片的分片。
new_primaries -仅容许为新索引的主分片分配分片。
none - 任何索引都不容许任何类型的分配分片。curl
从新启动节点时,此设置不会影响本地主分片的恢复。
假设从新启动的节点的分配ID与群集状态中的某个活动分配ID匹配,若该节点具备未分配的主分片的副本,则会当即恢复该主分片,jvm
在肯定是将新分片分配给该节点仍是主动从该节点拷贝分片到其余节点以前,Elasticsearch会考虑节点上的可用磁盘空间。elasticsearch
磁盘的分片分配综合样例配置以下:ide
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" } }
可用的动态集群设置以下,其中{attribute}指的是任意节点属性:svg
cluster.routing.allocation.include.{attribute}——至少包含 cluster.routing.allocation.require.{attribute}——所有包含 cluster.routing.allocation.exclude.{attribute}——非、排除操做
添加注意事项:
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端口验证成功与否。
注意事项:
一、节点数目少的时候,必定要注意脑裂问题。
二、脑裂问题必要的时候须要更新:elasticsearch.yml 中的 minimum_master_nodes。
#关闭集群分片自动分配 PUT _cluster/settings { "persistent": { "cluster.routing.allocation.enable": "none" } }
#打开集群分片自动分配 POST /_flush/synced
#打开集群分片自动分配 PUT _cluster/settings { "persistent": { "cluster.routing.allocation.enable": "all" } }
以上7步骤系参考Wood大叔总结。
您能够经过告知群集将其从分配中排除来停用节点。
PUT _cluster/settings { "transient" : { "cluster.routing.allocation.exclude._ip" : "10.0.0.1" } }
这将致使Elasticsearch将该节点上的分片分配给其他节点,而不会将群集状态更改成黄色或红色(即便您的副本数设置为0)。
从新分配全部分片后,您能够关闭节点并执行您须要执行的任何操做。 完成后,,Elasticsearch将再剩余节点上再次从新平衡分片。
curl -XGET ‘http://ES_SERVER:9200/_cluster/health?pretty’
若是没有节点relocating,则排除节点已经被安全剔除,能够考虑关闭节点。
查看节点上是否还有文档存在。
curl -XGET ‘http://ES_SERVER:9200/_nodes/NODE_NAME/stats/indices?pretty’
上述三步,能保证节点稳妥删除。
知识的融会贯通惟有多看、多思、多总结、多实践。
参考:
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html
https://elasticsearch.cn/article/38
https://elasticsearch.cn/question/5376
打造Elasticsearch基础、进阶、实战第一公众号!