1.es的分片感知,将节点划分为不同的区域
分片感知
可以使用分片分配的感知,对副本分片分配的位置进行人为干预。分片分片的感知
允许把ES的节点划分为属于不同的区域,当分配一个副本分片时,不允许将它分配
到它的主分片所在的区域,这样可以避免同一区域宕机,导致集群不可用的风险。
(1)启动集群时,设置集群所在的区域属性 。
vim elasticsearch.yml
node.attr.zone=zone1
第二个节点:
node.attr.zone=zone2
设置分配感知的区域。
curl -X PUT localhost:9200/_cluster/settings -u elastic:elastic -H "Content-Type: application/json" -d '
{
"transient":{
"cluster.routing.allocation.awareness.attributes":"zone",
"cluster.routing.allocation.awareness.force.zone.values":"zone1,zone2"
}
}'
{
"acknowledged":true,
"persistent":{
},
"transient":{
"cluster":{
"routing":{
"allocation":{
"awareness":{
"attributes":"zone",
"force":{
"zone":{
"values":"zone1,zone2"
}
}
}
}
}
}
}
}
curl -XGET localhost:9200/_cat/shards/iot_005?v -u elastic:elastic -H "Content-Type: application/json" -d
curl -X PUT localhost:9200/iot_005 -u elastic:elastic -H "Content-Type: application/json" -d '
{
"settings":{
"number_of_shards":"3",
"number_of_replicas":"1"
}
}'
6.分片分配的过滤
当想从集群中删除一个节点,在关闭该节点前,想把它拥有的分片全部迁移到其他节点上。
这时候可以使用分片分配的过滤来完成。分片分配的过滤允许配置分片只能
或不能分配到某些节点上,这些配置对整个集群有效。
vim elasticsearch.yml
node.attr.state: abandon
配置一个自定义属性state,内容为 abandon; 为了不让任何分片分配到该节点上,需要设置:
PUT _cluster/settings
{
"transient":{"cluster.routing.allocation.exclude.state":"abandon"}
}
这样,携带属性:node.attr.state: abandon 的节点将不会分配任何分片。
常用的节点自带的属性有:
_name: 节点的名称。
_ip: 节点的IP;
_host: 节点主机名
_id: 节点的ID;
exclude 可以用于分配分片时过滤掉某些节点,include 和 require 可以用于配置分配
分片时需要包含的节点。
PUT _cluster/settings
{
"transient":{
"cluster.routing.allocation.exclude.state":"abandon",
"cluster.routing.allocation.include._name":"node-1,node-2",
"cluster.routing.allocation.require.state":"good,fine"
}
}
在集群中分配分片时,要过滤掉state属性为 abandon的节点,允许将分片分配到节点
名为 node-1,或 node-2 的节点,而且节点的state 属性必须同时包含good 和 fine
1099

被折叠的 条评论
为什么被折叠?



