基本情况:
ES6.3.2版本,5台机器,将2台机器 在elasticsearch.ym 配置node.master=false,仅仅作为数据节点,另外3台既可以选举成master节点,上面也存储着数据。
集群目前有:60多个索引,300多个分片,一切运行良好。为了防止节点临时故障导致创建新的副本分片,将delayed-allocation设置成2小时,索引模板中settings 配置信息如下:
根据业务需求,其中某些索引只需要搜索最近3个月的数据,采用了索引模板按月生成索引。3个月之前的索引想迁移到一台冷节点上去。参考这篇官方文档hot-warm-architecture进行迁移。
我的问题是:由于新增冷节点到集群中(机械硬盘、配置较差),担心其他"正常"索引的分片会不会rebalance到冷节点上去了?因为我只想把 某些"历史"索引迁移到冷节点上,比如下面这个索引:location-201905。而06、07、08它们都是"热数据",不需要迁移。
看网上介绍说:
它提到了2个参数:cluster.routing.allocation.enable 和 cluster.routing.rebalance.enable
1,是不是把 cluster.routing.rebalance.enable设置成 none, 那么我往现有ES集群新增一台机器,已有的索引(不是新创建的索引)就不会发生 rebalance 导致的分片迁移了?
none参数的解释:No shard balancing of any kind are allowed for any indices.
2,cluster.routing.allocation.enable 参数设置成 none,是如何影响以后新建的新索引的分片分配?是不是新创建的索引都不会给它生成分片了?那在何种情况下,设置cluster.routing.allocation.enable=true呢?
PS,冷节点 和 热节点 放在同一个集群中,这种方式是合理的吧,而不是分成2个集群(一个集群专门存热数据,另一个集群存冷数据)因为,不太了解分成2个集群后,如何管理2个集群之间的数据同步问题。
ES6.3.2版本,5台机器,将2台机器 在elasticsearch.ym 配置node.master=false,仅仅作为数据节点,另外3台既可以选举成master节点,上面也存储着数据。
集群目前有:60多个索引,300多个分片,一切运行良好。为了防止节点临时故障导致创建新的副本分片,将delayed-allocation设置成2小时,索引模板中settings 配置信息如下:
"settings": {
"index": {
"number_of_shards": "3",
"number_of_replicas": "1",
"unassigned": {
"node_left": {
"delayed_timeout": "2h"
}
}
}
}
其他都是索引默认的配置了。根据业务需求,其中某些索引只需要搜索最近3个月的数据,采用了索引模板按月生成索引。3个月之前的索引想迁移到一台冷节点上去。参考这篇官方文档hot-warm-architecture进行迁移。
我的问题是:由于新增冷节点到集群中(机械硬盘、配置较差),担心其他"正常"索引的分片会不会rebalance到冷节点上去了?因为我只想把 某些"历史"索引迁移到冷节点上,比如下面这个索引:location-201905。而06、07、08它们都是"热数据",不需要迁移。
看网上介绍说:
cluster.routing.allocation.disable_allocation参数设置为true,禁止es进行自动索引分片分配
但是我在ES6.3.2版本的官方文档中一直没找到关于 disable_allocation 这个参数的介绍,而是找到这个链接:https://www.elastic.co/guide/e ... .html它提到了2个参数:cluster.routing.allocation.enable 和 cluster.routing.rebalance.enable
1,是不是把 cluster.routing.rebalance.enable设置成 none, 那么我往现有ES集群新增一台机器,已有的索引(不是新创建的索引)就不会发生 rebalance 导致的分片迁移了?
none参数的解释:No shard balancing of any kind are allowed for any indices.
2,cluster.routing.allocation.enable 参数设置成 none,是如何影响以后新建的新索引的分片分配?是不是新创建的索引都不会给它生成分片了?那在何种情况下,设置cluster.routing.allocation.enable=true呢?
PS,冷节点 和 热节点 放在同一个集群中,这种方式是合理的吧,而不是分成2个集群(一个集群专门存热数据,另一个集群存冷数据)因为,不太了解分成2个集群后,如何管理2个集群之间的数据同步问题。
3 个回复
bean
赞同来自: hapjin
问题:题主是要新增一台机器做冷节点,但索引一般都会有1副本,只有一个冷节点的话。”冷索引“要如何分配?主副分片是不能分配到同一个节点上的。
hapjin
赞同来自:
解决方法是 禁用ES的Rebalance功能?然后以后创建新的索引时,靠手工指定新索引的分片分配到哪些节点上去?
hapjin
赞同来自:
1,我是先设置了 cluster.routing.rebalance.enable为none,禁用分片迁移。 当时没注意到这个参数:cluster.routing.allocation.cluster_concurrent_rebalance。看了下解释:
通过指定 node.attr.type=cold 应该就是"使用 awareness 这个功能"。enabling-awareness
使用cluster.routing.rebalance.enable=none,应该过于 "严格了",假设有:2台cold节点,5台hot节点:
如果5台hot节点其中有一台宕机了,那么 "cluster.routing.rebalance.enable":"none"会不会 导致宕机了的那台节点上的分片不会自动rebalance到其他正常的四台hot节点上去,这个后面可验证一下。不然,就不知道这2个参数的实际区别是什么?
2,是的。我是参考hot-warm-architecture-in-elasticsearch-5-x打的tag。
3,这个应该可以用索引模板来解决吧。我当时想的是一部分机器elasticsearch.yml配置成node.attr.box_type: hot,将冷节点配置文件配置成:node.attr.box_type: warm。然后定义一个通用的索引模板,保证新创建的索引的分片都分配到 hot 节点上。比如这样:
关于你的问题,感谢提醒,是我描述得有问题。主要是想在集群中区分冷节点和热节点,合理的冷节点的个数应该是要大于1的。