好的想法是十分钱一打,真正无价的是能够实现这些想法的人。

ES集群扩容的问题

Elasticsearch | 作者 LittleMagic | 发布于2018年03月28日 | 阅读数:9546

目前有3个节点的小集群, 数据量大约150G, 分布在3台机器上面, node.master和node.data都没有在配置文件中指定 (也就是说都是混合节点). 平时业务量不大, 峰值时期QPS最多100.
 
目前要对集群进行扩容, 新加入10个节点. 由于原有的3台机器也在运行其他业务, 负载已经很大, 因此考虑把这3台机器设成单独的master节点和coordinating节点, 让新的10个作为data角色. 但是目前所有的数据都在老节点上, 新节点加入后, 集群会如何将数据迁移到新节点上去? 会不会导致服务长时间不可用?
 
由于是临时接手别人的工作, 有很多事情不清楚, 谢谢大家了
已邀请:

lunatictwo

赞同来自: elastic_boy

exclude 是正解:
PUT _cluster/settings
{
"transient" : {
"cluster.routing.allocation.exclude._ip" : "10.0.0.1"
}
}
可以把要下线的机器exclude,然后数据会自动迁移到其他节点并且自动rebalance,集群不需要重启。迁移完以后就可以重新划分节点角色了。

gtexpanse

赞同来自:

原来三台,新增十台,你原来分片多少,一个分片只会存在一个node上哦
至于转移问题不用担心,正常使用即可,一般是两个分片并发reindex(es2.x下),不会影响使用,再者你只有150g的数据,根本不用担心

chinagrowing

赞同来自:

你还是需要先了解下集群扩容的原理,可以参考es 官方文档。https://www.elastic.co/guide/c ... .html
你目前的集群等价于有3个角色是master的节点,我猜测master选举最小的节点数量是2(可以查下elasticsearch.yml 中discovery.zen.minimum_master_nodes 参数)。如果是这样,我给出我的一个思路:
1. 增加10个datanode。 这个时候集群自动会做shard均衡。
2. 检查3个masternode是否存在shard,如果存在,并且shard也比较少的话,可以考虑手动将shard迁移到其他datanode上。参考:https://www.elastic.co/guide/e ... .html
3. 承上,如果shard比较多的话,可以考虑设置shard allocation filtering, 禁止shard分配在3个masternode上。这时集群会自动把节点迁移到其他datanode下。参考:https://www.elastic.co/guide/e ... ering
4. 如果上面的步骤完成,这个时候3个masternode已经没有shard。 这个时候就可以考虑修改es配置(node.master:true, node.data: false)。然后,分别重启3个node.(如果discovery.zen.minimum_master_nodes=2,这时重启一台不会有问题。重启好一台后再接着重启第二台,以此类推第三台)。
ps: 不知道你的集群配置,不过150g数据应该不会花太长时间。另外,如果自己没有把握,可以选几台机器做个测试,反正有10台机器嘛。在测试中观察集群的状态,积累经验。
good luck!

shjdwxy

赞同来自:

把老的三台机器exclude掉,数据就会迁移走了

要回复问题请先登录注册