删除es节点
迁移分片
填写对应的下线机器 ip
PUT _cluster/settings { "transient" : { "cluster.routing.allocation.exclude._ip" : “10.0.0.1,10.0.0.2" } }
完整命令
curl -k -u 'admin:admin!@#' -XPUT https://172.28.50.200:9200/_cluster/settings -d '{"transient":{"cluster.routing.allocation.exclude._ip":"172.29.50.131,172.29.50.129,172.29.50.132,172.29.50.127,172.29.50.134,172.29.50.133,172.29.50.128"}}
查看分片迁移进度: get _cat/allocation?v&s=disk.percent:desc
下线完成后重新设置一下路由为空
PUT _cluster/settings { "transient" : { "cluster.routing.allocation.exclude._ip" : "" } }
其中 ip 不填。
基于磁盘的碎片分配
Elasticsearch 在决定是向该节点分配新的分片还是主动从该节点重定位分片之前,先考虑节点上的可用磁盘空间。控制 rebalance
以下是可以在elasticsearch.yml 配置文件中配置的设置,或者可以使用群集更新设置 API 在活动群集上动态更新的设置:
cluster.routing.allocation.disk.threshold_enabled 默认为true。
设置为 false 可禁用磁盘分配决定器。
cluster.routing.allocation.disk.watermark.low
(分片入)
控制磁盘使用率的低水位线。它的默认值为85%,这意味着 Elasticsearch 不会将碎片分配给磁盘使用率超过85%
的节点。如果可用空间少于指定的数量,也可以将其设置为绝对字节值(如500mb),以防止Elasticsearch分配碎片。此设置对新创建的索引的主分片或以前从未分配过的任何分片均没有影响。
cluster.routing.allocation.disk.watermark.high
(分片出)
控制高水位线,它默认为90%,这意味着Elasticsearch将尝试将碎片从磁盘使用率超过90%的节点移开
。如果碎片少于指定的可用空间量,也可以将其设置为绝对字节值(类似于低水位标记)以将碎片重新放置到远离节点的位置。此设置影响所有分片的分配,无论先前是否分配。
cluster.routing.allocation.disk.watermark.flood_stage
控制磁盘最多使用多少。它的默认值为95%,这意味着Elasticsearch在每个节点上分配了一个或多个分片的每个索引上强制执行一个只读索引块(index.blocks.read_only_allow_delete),该节点上至少有一个磁盘超过了泛洪阶段。这是防止节点用完磁盘空间的最后手段。一旦有足够的磁盘空间可用来继续进行索引操作,则必须手动释放索引块。
您不能在这些设置中混合使用百分比值和字节值。全部设置为百分比值,或全部设置为字节值。这样一来,我们可以验证设置在内部是一致的(即,低磁盘阈值不大于高磁盘阈值,高磁盘阈值不大于泛洪阶段阈值)。
重置twitterindex上的只读索引块的示例:
PUT /twitter/_settings
{
"index.blocks.read_only_allow_delete":null
}
cluster.info.update.interval
Elasticsearch应该多久检查一次集群中每个节点的磁盘使用情况。默认值为30秒。 cluster.routing.allocation.disk.include_relocations
默认为 true,这意味着 Elasticsearch 在计算节点的磁盘使用情况时将考虑当前正在重定位到目标节点的硬盘。但是,考虑到重定位碎片的大小,这可能意味着在高端方面错误地估计了节点的磁盘使用情况,因为重定位可能已完成 90%,并且最近回收的磁盘使用情况将包括重定位碎片的总大小以及正在运行的重定位已使用的空间。
百分比值是指已使用的磁盘空间,而字节值是指可用磁盘空间。这可能会造成混淆,因为它颠倒了高和低的含义。例如,将低水印设置为 10gb,将高水印设置为 5gb 是有意义的,但反之则不行。
下面的示例将低水印更新为至少 100 GB 的可用空间,将高水印更新为至少 50 GB 的可用空间和将洪水级水印释放为 10 GB的可用空间,并每分钟更新有关群集的信息:
PUT _cluster/settings
{
"transient": {
"cluster.routing.allocation.disk.watermark.low": "80%",
"cluster.routing.allocation.disk.watermark.high": "95%",
"cluster.routing.allocation.disk.watermark.flood_stage": "95%",
"cluster.info.update.interval": "1m"
}
}
设置每个节点最多分片数目
将分配给单个节点的最大分片数(副本和主副本
)。默认为无限。
curl -XPUT 'http://172.29.50.131:9200/admin.nginx_access_all_log.20181212/_settings' -d '{
"index.routing.allocation.total_shards_per_node":1
}'
集群设置
curl -XPUT http://127.0.0.1:9200/_cluster/settings -d '{ "transient" : { " cluster.routing.allocation.total_shards_per_node" : 1 }}'
索引级分片分配过滤
索引分配过滤器设置
index.routing.allocation.include.{attribute}
将索引分配给
{attribute}
至少具有一个逗号分隔值之一的节点。index.routing.allocation.require.{attribute}
将索引分配给
{attribute}
具有所有逗号分隔值的节点。index.routing.allocation.exclude.{attribute}
分配索引到其一个节点
{attribute}
具有无逗号分隔值的。
索引分配设置支持以下内置属性:
_name | 通过节点名称匹配节点 |
---|---|
_host_ip | 通过主机IP地址(与主机名关联的IP)匹配节点 |
_publish_ip | 通过发布IP地址匹配节点 |
_ip | 匹配_host_ip 或_publish_ip |
_host | 通过主机名匹配节点 |
_id | 通过节点ID匹配节点 |
指定属性值时,可以使用通配符,例如:
curl -X PUT "localhost:9200/test/_settings?pretty" -H 'Content-Type: application/json' -d'
{
"index.routing.allocation.include._ip": "192.168.2.*"
}
'
集群级别分配分配过滤
集群配置的优先级比索引级高
curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
"transient" : {
"cluster.routing.allocation.exclude._ip" : "10.0.0.1"
}
}
'
修改配置后,分片会自动进行迁移。
查看索引具体迁移状态:
curl http://127.0.0.1:9200/_cat/recovery|grep index_name_20201212
重路由
一共有三种操作,分别为:移动(move),取消(cancel)和分配(allocate)。下面分别介绍这三种情况:
移动(move)
把分片从一节点移动到另一个节点。可以指定索引名和分片号。
取消(cancel)
取消分配一个分片。可以指定索引名和分片号。node参数可以指定在那个节点取消正在分配的分片。allow_primary参数支持取消分配主分片。
分配(allocate)
分配一个未分配的分片到指定节点。可以指定索引名和分片号。node参数指定分配到那个节点。allow_primary参数可以强制分配主分片,不过这样可能导致数据丢失。
//手动转移分片到指定的IP上
curl -XPOST 'http://172.29.50.131:9200/_cluster/reroute' -d '{
"commands":[{
"move":{
"index":"admin.nginx_access_all_log.20181212",
"shard":13,
"from_node":"es172.29.50.127_1",
"to_node":"es172.29.50.128_1"
}
}]
}'
← 5.ES数据冷热分离 7.常用命令→