作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

中间件,我给它的定义就是为了实现某系业务功能依赖的软件,包括如下部分:
Web服务器
代理服务器
ZooKeeper
Kafka
RabbitMQ
Hadoop HDFS
Elasticsearch ES (本章节)
我们在前面介绍索引时候,直接向不存在的索引写入数据,会自动创建索引,这个创建的索引可能并不能满足需求,而且分片又无法调整。比如我们有的索引需要3分片2副本,有的索引需要5分片1副本。这个时候我们就可以通过定义不同的模板(Templates)来满足我们的需求。
Elasticsearch 模板(Template)是一种用于预先定义索引设置、映射(Mapping)和别名等配置的机制,能帮助用户在创建新索引时自动应用一致的规则,避免重复配置,同时确保索引结构的标准化。
适用版本:Elasticsearch 7.x 及更早版本(8.x 中仍可使用,但推荐使用组件模板)。
组成:由 index_patterns(匹配索引名称的模式)、settings(索引设置)、mappings(字段映射)、aliases(别名)等组成。
curl -X PUT "localhost:9200/_index_template/logs_template" -H 'Content-Type: application/json' -d'
{
"index_patterns": ["logs-*"],
"priority": 200, #
"template": {
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2,
"index.lifecycle.name": "logs_policy" # 关联ILM策略
},
"mappings": {
"properties": {
"@timestamp": { "type": "date" },
"message": { "type": "text" },
"host": { "type": "keyword" }
}
},
"aliases": {
"all_logs": {} # 为匹配索引添加别名
}
},
"_meta": {
"description": "Template for log indices"
}
}
'logs_template:模板的名字。
index_patterns:匹配所有以 logs- 开头的索引。
priority:优先级,数值越大优先级越高。
number_of_shards:命中以后的分区数量。
number_of_replicas:命中以后的副本数量。
index.lifecycle.name:生命周期策略(ILM)。
mappings:定义一些全局Mapping(手动创建索引时显式指定的 mappings > 模板中定义的 mappings > Elasticsearch 自动推断的动态映射)。
aliases:别名,搜索的时候可以代替所有模板创建的索引。
一句话总结就是所有以logs-*的索引默认是3分片,2副本,而不会是默认的1分片1副本。
在一般的情况下下ES的很多索引都会按照时间进行轮转,而我们创建不同的模板,就可以满足相同类型的索引都以固定分片和副本来创建。
2.组件模板(Component Templates)
适用版本:Elasticsearch 7.8+ 及更高版本(8.x 推荐使用)。
特点:可复用的配置片段,需通过索引模板引用组合使用,避免重复定义。
定义一个组件模板(通用分片设置)。
{
"component_template": {
"name": "shard-settings",
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
}
}
}定义一个索引模板,引用组件模板。
{
"index_template": {
"name": "logs-template",
"index_patterns": ["logs-*"],
"composed_of": ["shard-settings"], // 引用组件模板
"mappings": {
"properties": { "timestamp": { "type": "date" } }
}
}
}