es指定分片以及分片副本数

控制Elasticsearch分片和副本的分配

ES集群中索引可能由多个分片构成,并且每个分片可以拥有多个副本。通过将一个单独的索引分为多个分片,我们可以处理不能在一个单一的服务器上面运行的大型索引,简单的说就是索引的大小过大,导致效率问题。不能运行的原因可能是内存也可能是存储。由于每个分片可以有多个副本,通过将副本分配到多个服务器,可以提高查询的负载能力。     为了进行分片和副本的操作,ES需要确定将这些分片和副本放到集群节点的哪个位置,就是需要确定把每个分片和副本分配到哪台服务器/节点上。 一、显式控制分配

生产情景:比如生产环境有三个索引分别为 man、woman、katoey希望达到的效果: man索引放置在一些集群节点上 woman索引又单独放置到集群的另外一些集群节点上 katoey索引希望放置在所有放置man索引和woman索引的集群节点上 这么做是因为katoey索引比其他两个索引小很多,因此我们可以将它和其他两个索引一起分配。但是基于ES默认算法的处理方法,我们不能确定分片和副本的存放位置,但是ES允许我们对其做相应的控制!

1、指定节点的参数


如上图所示,我们将ES集群划分为两个"空间"。当然你也可以叫做区域,随便命名。我们将左边的三台ES节点服务器放置到zone_one的空间上面,将右边的三台ES节点服务器放到zone_two的空间上。 **配置**** **为了做到我们需要的效果,我们需要将如下属性配置到左边三台ES集群节点服务器的elasticsearch.yml配置文件中node.zone: zone_one

将如下属性配置到右边的三台ES集群节点服务器elasticsearch.yml配置文件中node.zone: zone_two

**索引创建**** **当所有节点配置文件属性配置完成后,我们就可以根据空间名称,我们就可以创建索引放到指定的空间。 首先我们运行如下命令,来创建man索引:# curl -XPOST "http://ElasticSearchnode:9200/man'

curl -XPUT "http://ElasticSearchnode:9200/man/_settings' -d '{ "index.routing.allocation.include.zone" : "zone_one" }'

第一条命令是创建man索引;第二条命令是发送到_settings **REST**端点,用来指定这个索引的其他配置信息。我们将index.routing.allocation.include.zone属性设置为zone_one值,就是我们所希望的把man索引放置到node.zone属性值为zone_one的ES集群节点服务器上。     同样对woman索引我们做类似操作:# curl -XPOST "http://ElasticSearchnode:9200/woman'

curl -XPUT "http://ElasticSearchnode:9200/woman/_settings' -d '{ "index.routing.allocation.include.zone" : "zone_two" }'

不同的是,这次指定woman索引放置在node.zone属性值为zone_two的ES集群节点服务器上     最后我们需要将katoey索引放置到上面所有的ES集群节点上面,配置设置命令如下:

curl -XPOST "http://ElasticSearchnode:9200/katoey"

curl -XPUT "http://ElasticSearchnode:9200/katoey/_settings" -d '{ "index.routing.allocation.include.zone" : "zone_one,zone_two" }'

**2、分配时排除节点**** **跟我们上面操作为索引指定放置节点位置一样,我们也可以在索引分配的时候排除某些节点。参照之前的例子,我们新建一个people索引,但是不希望people索引放置到zone_one的ES集群节点服务器上,我们可以运行如下命令操作:# curl -XPOST "http://ElasticSearchcode:9200/people"

curl -XPUT "http://ElasticSearchcode:9200/people/_settings" -d '{ "index.routing.allocation.exclude.zone" : "zone_one" }'

** 请注意,**在这里我们使用的是index.routing.allocation.exclude.zone属性而不是index.routing.allocation.include.zone属性。 **使用IP地址进行分配配置**** **除了在节点的配置中添加一些特殊的属性参数外,我们还可以使用IP地址来指定你将分片和副本分配或者不分配到哪些节点上面。为了做到这点,我们应该使用_ip属性,把zone换成_ip就好了。例如我们希望lucky索引分配到IP地址为10.0.1.110和10.0.1.119的节点上,我们可以运行如下命令设置:# curl -XPOST "http://ElasticSearchnode:9200/lucky"

curl -XPUT "http://ElasticSearchnode:9200/lucky/_settings" -d '{ "index.routing.allocation.include._ip" "10.0.1.110,10.0.1.119" }'

二、集群范围内分配

** ** 除了索引层面指定分配或者排除分配之外(上面我们所做的都是这两种情况),我们还可以指定集群中所有索引的分配。例如,我们希望将所有的新索引分配到IP地址为10.0.1.112和10.0.1.114的节点上,我们可以运行如下命令设置:# curl -XPUT "http://ElasticSearchnode:9200/_cluster/settings" -d '{ "transient" : { "cluster.routing.allocation.include._ip" "10.0.1.112,10.0.1.114" } }'

集群级别的控制后续还会分享transient和persistent属性介绍 三、每个节点上分片和副本数量的控制

除了指定分片和副本的分配,我们还可以对一个索引指定每个节点上的最大分片数量。例如我们希望ops索引在每个节点上只有一个分片,我们可以运行如下命令:# curl -XPUT "http://ElasticSearchnode:9200/ops/_settings" -d '{ "index.routing.allocation.total_shards_per_node" : 1 }'

这个属性也可以直接配置到elasticsearch.ym配置文件中,或者使用上面命令在**活动索引**上更新。如果配置不当,导致主分片无法分配的话,集群就会处于red状态。 四、手动移动分片和副本

接下来我们介绍一下节点间手动移动分片和副本。可以使用ElasticSearch提供的_cluster/reroute **REST**端点进行控制,能够进行下面操作:*A、将一个分片从一个节点移动到另外一个节点B、取消对分片的分配C、强制对分片进行分配*

**移动分片**** **假设我们有两个节点:es_node_one和es_node_two,ElasticSearch在es_node_one节点上分配了ops索引的两个分片,我们现在希望将第二个分片移动到es_node_two节点上。可以如下操作实现:# curl -XPOST "http://ElasticSearchnode:9200/_cluster/reroute" -d '{ "commands" : [ { "move" : { "index" : "ops", "shard" : 1, "from_node" : "es_node_one", "to_node" : "es_node_two" } }] }'

我们通过move命令的index属性指定移动哪个索引,通过shard属性指定移动哪个分片,最终通过from_node属性指定我们从哪个节点上移动分片,通过to_node属性指定我们希望将分片移动到哪个节点。 **取消分配****    **如果希望取消一个正在进行的分配过程,我们通过运行cancel命令来指定我们希望取消分配的索引、节点以及分片,如下所示:# curl -XPOST "http://ElasticSearchnode:9200/_cluster/reroute" -d '{ "commands" : [ { "cancel" : { "index" : "ops", "shard" : 0, "node" : "es_node_one" } } ] }'

运行上面的命令将会取消es_node_one节上ops索引的第0个分片的分配 **分配分片****    **除了取消和移动分片和副本之外,我们还可以将一个未分配的分片分配到一个指定的节点上。假设ops索引上有一个编号为0的分片尚未分配,并且我们希望ElasticSearch将其分配到es_node_two上,可以运行如下命令操作:# curl -XPOST "http://ElasticSearchnode:9200/_cluster/reroute' -d '{ "commands" : [ { "allocate" : { "index" : "ops", "shard" : 0, "node" : "es_node_two" } } ] }'

**一次HTTP请求包含多个命令**** **我们可以在一次HTTP请求中包含多个命令,例如:# curl -XPOST "http://ElasticSearchnode:9200/_cluster/reroute" -d '{ "commands" : [ {"move" : {"index" : "ops", "shard" : 1, "from_node" : "es_node_one", "to_node" : "es_node_two"}}, {"cancel" : {"index" : "ops", "shard" : 0, "node" : "es_node_one"}} ] }'

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容