Elasticsearch Index模块

Index配置 

https://www.elastic.co/guide/en/elasticsearch/reference/7.15/index-modules.html#index-modules-settings

static

static的配置只能在 closed index 时才能修改。

index.number_of_shards 默认1,最大1024,该参数即时close了index也不能修改。

dynamic

dynamic的配置可以通过RESTAPI update-index-settings 动态修改。

 

Index Shard Allocation索引分片分配

https://www.elastic.co/guide/en/elasticsearch/reference/7.15/index-modules-allocation.html

 

Index级别分片分配过滤器  

node节点的配置中,可以配置attribute打标签,例如 node.attr.size: medium

Index的设置可以使用对应的attribute条件进行分配,例如

PUT test/_settings 分配给size是big或medium的节点
{
  "index.routing.allocation.include.size": "big,medium"
}

PUT test/_settings 分配给size是big且rack是rack1的节点
{
  "index.routing.allocation.include.size": "big",
  "index.routing.allocation.include.rack": "rack1"
}

条件匹配规则

index.routing.allocation.include.{attribute} 至少符合1个,逗号分割

index.routing.allocation.require.{attribute} 全部符合,逗号分割

index.routing.allocation.exclude.{attribute} 全部都不能符合,逗号分割

 

已内置的attr有:

_name

Match nodes by node name

_host_ip

Match nodes by host IP address (IP associated with hostname)

_publish_ip

Match nodes by publish IP address

_ip

Match either _host_ip or _publish_ip

_host

Match nodes by hostname

_id

Match nodes by node id

 

条件匹配可以使用通配符

PUT test/_settings
{
  "index.routing.allocation.include._ip": "192.168.2.*"
}

 

节点离开后的延迟分片分配

当节点出于任何原因离开集群时,master节点的反应是:

将replica shard升级为primary shard(如果有replica shard)。

分配replica shard以替换丢失的replica shard(假设有足够的节点)。

在其余节点上均匀地重新平衡碎片。

 

如果节点只是短暂的离开(网络原因),节点加入后将触发分片再均衡,若频繁发生这种清空将给集群带来较大负担,因此有节点离开后延迟分配。

若没有延迟分配机制,则场景会是这样:

节点5失去网络连接。

对于节点5上的每个主节点,主节点将副本碎片升级到主节点。

主节点将新副本分配给群集中的其他节点。

每个新副本都会在网络上生成主碎片的完整副本。

将更多的碎片移动到不同的节点以重新平衡集群。

节点5在几分钟后返回。

主节点通过将碎片分配给节点5来重新平衡集群。

 

可以通过 index.unassigned.node_left.delayed_timeout 动态配置延迟大小,默认1m

PUT _all/_settings  可以在指定离开的index上或_all设置
{
  "settings": {
    "index.unassigned.node_left.delayed_timeout": "5m"
  }
}

在延迟分配机制下,就会是这样:

节点5失去网络连接。

对于节点5上的每个主节点,主节点将副本碎片升级到主节点。

主机会记录一条消息,说明未分配碎片的分配已延迟,以及延迟了多长时间。

群集保持黄色,因为存在未分配的副本碎片。

节点5在几分钟后,即超时到期之前返回。

丢失的副本被重新分配给节点5(同步刷新的碎片几乎立即恢复)。

NOTE:此设置不会影响将副本升级到主副本,也不会影响以前未分配的副本的分配。特别是,延迟分配在集群完全重启后不会生效。此外,在主故障切换情况下,经过的延迟时间被遗忘(即重置为完全初始延迟)。

 

运维技巧 删除节点场景:即某节点永远不会回来,并且希望Elasticsearch立即分配丢失的碎片,只需将超时更新为零

PUT _all/_settings
{
  "settings": {
    "index.unassigned.node_left.delayed_timeout": "0"
  }
}

 

索引恢复优先级

优先级按照

可选的index.priority设置

索引创建日期

索引名称

这意味着,默认情况下,较新的索引将在较旧的索引之前恢复。

可以使用  index.priority 设置优先级,数字越大越高。

PUT index_4
{
  "settings": {
    "index.priority": 5
  }
}
PUT index_4/_settings
{
  "index.priority": 1
}

 

每个节点总分片数

集群需要尽可能的在各个节点上均衡的分配分片,支持以下配置

index.routing.allocation.total_shards_per_node Index维度,单个节点上最多分片数(主分片和副本分片),默认*。

cluster.routing.allocation.total_shards_per_node 全局维度,单个节点上最多分片数(主分片和副本分片),默认*。

 

 

Index Blocks 索引限制

https://www.elastic.co/guide/en/elasticsearch/reference/7.15/index-modules-blocks.html

可以阻止写、读或元数据操作。

支持配置:

index.blocks.read_only true则index和index metadata只读

index.blocks.read_only_allow_delete 只读但允许删除操作

index.blocks.read true则禁止读

index.blocks.write true则禁止写,但不影响metadata。例如,可以用写块关闭索引,但不能用只读块关闭索引。

index.blocks.metadata true则禁止读写

 

索引的Mapper见 mapping 章节

 

上一篇:IDEA设置默认Maven,IDEA导入项目不展示结构,idea设置启动时不自动进入项目,设置背景色


下一篇:Django2实战示例 第十三章 上线