我的群集具有黄色运行状况,因为它只有一个节点,因此副本保持未分配状态,我想要添加一个节点,该怎么弄?
假设集群中有5个节点,我必须在运行时删除2个节点。 那么如何在不影响指数的情况下完成?
我有接近10 Gbp/hour的连续数据流,这些数据正在连续写入并索引化。 重新平衡会对此有所影响吗?
本文就从上面两个问题说起,将相关知识点串起来,内容较长,阅读时间5分钟+。
主节点的主要作用之一是确定将哪些分片分配给哪些节点,以及何时在节点之间移动分片以重新平衡集群。
分片分配是将分片分配给节点的过程。 这可能发生在集群初始恢复,副本分配,重新平衡或添加或删除节点期间。
all - (默认值)允许为所有类型的分片分配分片。
primaries - 仅允许分配主分片的分片。
new_primaries -仅允许为新索引的主分片分配分片。
none - 任何索引都不允许任何类型的分配分片。
重新启动节点时,此设置不会影响本地主分片的恢复。
假设重新启动的节点的分配ID与群集状态中的某个活动分配ID匹配,若该节点具有未分配的主分片的副本,则会立即恢复该主分片,
在确定是将新分片分配给该节点还是主动从该节点拷贝分片到其他节点之前,Elasticsearch会考虑节点上的可用磁盘空间。
磁盘的分片分配综合样例配置如下:
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}指的是任意节点属性:
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端口验证成功与否。
注意事项:
1、节点数目少的时候,一定要注意脑裂问题。
2、脑裂问题必要的时候需要更新: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基础、进阶、实战第一公众号!