本文主要记录 es 中常见容易混淆的概念、配置和api等内容,后续会在此处续更相关内容!
1. freeze 和 close 区别
1.1 freeze介绍
POST /<index>/_freeze
POST /<index>/_unfreeze
冻结的索引几乎在集群上没有开销,它只在内存中保留元数据,并且处于只读状态,像文档索引(写入)或者段合并等写操作都无法执行。
frozen索引正常情况无法在Discover查询到,但是可以通过添加 ignore_throttled=false 设置来读取。
注意:冻结索引会先close该索引,然后再打开它;该操作会导致短时间内主分片为未分配状态,从而出现一个短暂的集群red过程(主分片分配后集群恢复),这种限制会在后续版本中移除掉。
POST /my-index-000001/_freeze
POST /my-index-000001/_unfreeze
GET syslog001-2020.07.12-000002/_search?q=message:*&ignore_throttled=false
是否可以设置索引属性,待确认
1.2 close介绍
POST /<index>/_close
POST /<index>/_open
close掉的索引被禁止读写,并且不能执行opened 索引所有能执行的任何操作。由于closed索引不需要维护内部读写的数据结构,它将占用更少的资源(相对frozen索引)。
2 persistent 和transient区别
_cluster/settings 中有2个属性,分别为 persistent 和transient:
persistent:持久化,即字段对应的属性都会持久化到文档中,节点重启后仍然会加载生效;
transient:短暂性,即字段对应的属性最暂时保存,当节点全部重启后该设置就不生效了;
es 中配置加载的优先级为:transient > persistent > elasticsearch.yml, 因此线上可以直接更新 transient 的属性,涉及集群重启后要保留属性需要更新到persistent;
以节点关机维护为例子:
es 节点机器关机维护时候,需要同步锁分片,此时优先使用transient,若使用persistent 而transient有默认值all,可能导致设置没有生效;
关机同步锁分片:
PUT _cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": "none"
}
}
关机后解除锁分片:
PUT _cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": "all"
}
}
cluster-update-settings
3 两个allocation
GET _cat/allocation?v 主要用于查看各个节点资源分配使用情况,可以用于磁盘资源监控;
GET _cluster/allocation/explain 主要用于分析集群中shard分配异常的原因,多用于集群异常诊断;
GET _cat/allocation?v
shards disk.indices disk.used disk.avail disk.total disk.percent host ip node
15 650.4mb 3.6gb 45.3gb 48.9gb 7 10.120.75.107 10.120.75.107 node-3
14 472.4mb 3gb 45.9gb 48.9gb 6 10.120.75.103 10.120.75.103 node-2
15 425.4mb 3.3gb 44.6gb 47.9gb 6 10.120.75.102 10.120.75.102 node-1
GET _cluster/allocation/explain
{
# explain 可以指定索引、是否为主分片等参数
}
说明
searching_a_frozen_index
indices-close