在 Mapping 里面,将 dynamic 参数设置成 strict 可以拒绝索引包含未知字段的文档。 此条 Tips 由 medcl 贡献。

elasticsearch设置某个、某类节点的数据不参与rebalance?

Elasticsearch | 作者 zmc | 发布于4 天前 | 阅读数:317

有没有什么思路,可以在不改源码的情况下设置某类(boxtype)节点不参与rebalance?
比如很冷的数据,在删除索引时就有可能触发rebalance,这个行为意义不大,反而带来很多性能损耗。
比如利用分布式存储进行存算分离的场景,也会是不参与rebalance的收益更大。
已邀请:

Charele - Cisco4321

赞同来自: zmc

111.png

在allocation那边做也可以,不过那是后面分片的事了。
可以从前面节点这里入手。
那个modelNode就是代表一个节点,里面有节点名字。
判断一下,如果名字是es1,略过就可以了。
如果有兴趣,可以试下。

Charele - Cisco4321

赞同来自:

没明白你的意思,你是要rebalance发生时,啥效果?
我想了3个,
1 某个索引(上的分片)不参与rebalance
2 某个节点(上的分片)不参与rebalance
3 某个节点不接受rebalance过来的分片
 
哪一个?

Ombres

赞同来自:

仔细想了想,
前提是所有的索引都有index.routing.allocation.require 配置。比如热数据到热节点。
然后设置冷索引的配置index.routing.allocation.require 到某个固定的节点名字,这样的话该索引只分配到该节点。可能得去除副本,不然副本好像没法分配,感觉不太安全。

Charele - Cisco4321

赞同来自:

如果可以改源码,改哪里可以实现这个功能?

Charele - Cisco4321

赞同来自:

只是安自己想法做了一下,是可行的。
虽然没有经过测试,
但我感觉ES还是比较“简单”的(相对Lucene),所以应该不会有隐患。
 
比如我不想让节点es1参与rebalance
1 只有两个节点,可以看到es1是可以接受分配给它的分片的:
111.png

 
2 加入es2,按理来说,这些分片会在这3个节点间做rebalance
但现在不会了
222.png

 

要回复问题请先登录注册