ElasticSearch模块Cluster


1.   shard allocation

集群碎片分配是指将索引碎片分配到其他节点的过程,如下情况:集群故障恢复、副本分配、索引动态均衡(节点增加或者减少后自动进行)都会执行索引碎片的重新分配。

如下对相关配置进行介绍:

cluster.routing.allocation.allow_rebalance

设置根据集群中机器的状态来重新分配分片,可以设置为可以设置为always, indices_primaries_active和indices_all_active,默认是设置成indices_all_active来减少集群初始启动时机器之间的交互。

cluster.routing.allocation.cluster_concurrent_rebalance 

设置在集群中最大允许同时进行分片分布的个数,默认为2,也就是说整个集群最多有两个分片在进行重新分布。

cluster.routing.allocation.node_initial_primaries_recoveries:

设置node级别上初始化数据恢复过程中并发的主分片数量,大多情况下是local gateway,这个过程会很快,因此可以在不增加负载的情况下处理更多的主分片。

cluster.routing.allocation.node_concurrent_recoveries 

设置在节点中最大允许同时进行分片分布的个数,默认为2

cluster.routing.allocation.enable:

指定哪些分片可以参与重新分配。选项有:all(default), primaries(主分片), new_primaries(新增加的主分片), none.

cluster.routing.allocation.disable_allocation 

使主要分片或副本的分布失效。要知道,如果主分片不存在(那个节点挂了)那么其副本仍然会被提升为主分片,这个设置只有在动态地使用集群更新设置api调用时才生效。

cluster.routing.allocation.disable_replica_allocation 

使副本分布失效。和上一个设置一样,只有动态地使用集群更新设置api调用时才生效。

cluster.routing.allocation.same_shard.host

是否启用对同一分片在同一个主机上出现多个分配实例的检测。默认false。这个选项只有在同一个node上启动多个es实例的情况下才有意义。

indices.recovery.concurrent_stream

当从一个点(peer)恢复分片时当前节点最多允许的文件读取流的个数,默认为5

2.   shard allocation awareness

自定义分片分布规则,可以通过设置分片的分布规则来人为地影响分片的分布,下面是个例子:

假设我们有几个机架。当我们启动一个节点,我们可以设置一个叫rack_id(其它名字也可以)的属性,例如下面设置:

node.rack_id:rack_one 

上面这个例子设置了一个属性叫rack_id,它的值为rack_one。现在,我们要设置rack_id作为分片分布规则的一个属性(在所有节点都要设置)。

cluster.routing.allocation.awareness.attributes:rack_id 

上面设置意味着rack_id会用来作为分片分布的依据。例如:我们启动两个node.rack_id设置rack_one的节点,然后建立一个5个分片,一个副本的索引。这个索引就会完全分布在这两个节点上。如果再启动另外两个节点,node.rack_id设置成rack_two,分片会重新分布,但是一个分片和它的副本不会分配到同样rack_id值的节点上。可以为分片分布规则设置多个属性,例如:

cluster.routing.allocation.awareness.attributes:rack_id,zone 

注意:当设置了分片分布属性时,如果集群中的节点没有设置其中任何一个属性,那么分片就不会分布到这个节点中。

3.   forced awareness

强制分布规则,更多的时候,我们不想更多的副本被分布到相同分布规则属性值的一群节点上,那么,我们可以强制分片规则为一个指定的值。

例如,我们有一个分片规则属性叫zone,并且我们知道有两个zone,zone1和zone2.下面是设置:

cluster.routing.allocation.awareness.force.zone.values:zone1,zone2 

cluster.routing.allocation.awareness.attributes:zone 

现在我们启动两个node.zone设置成zone1的节点,然后创建一个5个分片,一个副本的索引。索引建立完成后只有5个分片(没有副本),只有当我们启动node.zone设置成zone2的节点时,副本才会分配到那节点上。

4.   shard allocation filtering

分片分布过滤,允许通过include/exclude过滤器来控制分片的分布。这些过滤器可以设置在索引级别上或集群级别上。下面是个索引级别上的例子:

假如我们有四个节点,每个节点都有一个叫tag(可以是任何名字)的属性。每个节点都指定一个tag的值。如:节点一设置成node.tag: value1,节点二设置成node.tag: value2,如此类推。我们可以创建一个索引然后只把它分布到tag值为value1和value2的节点中,可以通过设置

index.routing.allocation.include.tag为value1,value2达到这样的效果,如:

curl-XPUT localhost:9200/test/_settings -d '{     

   "index.routing.allocation.include.tag" :"value1,value2"     

}' 

与此相反,通过设置index.routing.allocation.exclude.tag为value3,我们也可以创建一个索引让其分布在除了tag设置为value3的所有节点中,如:

curl-XPUT localhost:9200/test/_settings -d '{     

   "index.routing.allocation.exclude.tag" :"value3"     

}' 

index.routing.allocation.require.tag可以设置必须满足的一些规则才能分配,是must all的关系,而inclued 是 any的关系。

include,exclude,require可以支持简单的通配符,例如value*。

另外有一个特殊的属性_ip可以匹配节点的ip,_host可以匹配主机名称也可以匹配ip,_name可以匹配nodename,_id可以匹配node id。

显然,一个节点可能拥有多个属性值,所有属性的名字和值都在配置文件中配置。如,下面是多个节点的配置:

node.group1:group1_value1  

node.group2:group2_value4 

同样的方法,include和exclude也可以设置多个值,如:

curl-XPUT localhost:9200/test/_settings -d '{     

   "index.routing.allocation.include.group1" :"xxx"     

   "index.routing.allocation.include.group2" :"yyy",     

   "index.routing.allocation.exclude.group3" :"zzz",     

}' 

上面的设置可以通过索引更新的api实时更新到索引上,允许实时移动索引分片。

集群范围的过滤器也可以定义,可以通过集群更新api实时更新到集群上。这些设置可以用来做让一些节点退出集群的操作。下面是通过ip地址去掉一个节点的操作:

curl-XPUT localhost:9200/_cluster/settings -d '{     

    "transient" : {     

       "cluster.routing.allocation.exclude._ip" :"10.0.0.1"     

    }     

}'  

{"@timestamp":"2025-03-31T13:45:02.132Z", "log.level": "WARN", "message":"This node is a fully-formed single-node cluster with cluster UUID [2TJKMZR1TNKLU5kjkpihFA], but it is configured as if to discover other nodes and form a multi-node cluster via the [discovery.seed_hosts=[elasticsearch-master-headless]] setting. Fully-formed clusters do not attempt to discover other nodes, and nodes with different cluster UUIDs cannot belong to the same cluster. The cluster UUID persists across restarts and can only be changed by deleting the contents of the node's data path(s). Remove the discovery configuration to suppress this message.", "ecs.version": "1.2.0","service.name":"ES_ECS","event.dataset":"elasticsearch.server","process.thread.name":"elasticsearch[elasticsearch-master-0][scheduler][T#1]","log.logger":"org.elasticsearch.cluster.coordination.Coordinator","elasticsearch.cluster.uuid":"2TJKMZR1TNKLU5kjkpihFA","elasticsearch.node.id":"mtYdBdhQRLW1Fe7ebdHtrA","elasticsearch.node.name":"elasticsearch-master-0","elasticsearch.cluster.name":"elasticsearch"} {"@timestamp":"2025-03-31T13:45:03.995Z", "log.level": "WARN", "message":"received plaintext http traffic on an https channel, closing connection Netty4HttpChannel{localAddress=/127.0.0.1:9200, remoteAddress=/127.0.0.1:48954}", "ecs.version": "1.2.0","service.name":"ES_ECS","event.dataset":"elasticsearch.server","process.thread.name":"elasticsearch[elasticsearch-master-0][transport_worker][T#1]","log.logger":"org.elasticsearch.xpack.security.transport.netty4.SecurityNetty4HttpServerTransport","elasticsearch.cluster.uuid":"2TJKMZR1TNKLU5kjkpihFA","elasticsearch.node.id":"mtYdBdhQRLW1Fe7ebdHtrA","elasticsearch.node.name":"elasticsearch-master-0","elasticsearch.cluster.name":"elasticsearch"} {"@timestamp":"2025-03-31T13:45:11.239Z", "log.level": "WARN", "message":"received plaintext http traffic on an https channel, closing connection Netty4HttpChannel{localAddress=/127.0.0.1:9200, remoteAddress=/127.0.0.1:48958}", "ecs.version": "1.2.0","service.name":"ES_ECS","event.dataset":"elasticsearch.server","process.thread.name":"elasticsearch[elasticsearch-master-0][transport_worker][T#1]","log.logger":"org.elasticsearch.xpack.security.transport.netty4.SecurityNetty4HttpServerTransport","elasticsearch.cluster.uuid":"2TJKMZR1TNKLU5kjkpihFA","elasticsearch.node.id":"mtYdBdhQRLW1Fe7ebdHtrA","elasticsearch.node.name":"elasticsearch-master-0","elasticsearch.cluster.name":"elasticsearch"}
最新发布
04-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值