对应7.13官方文档路径: Data management
官方地址如下:
https://www.elastic.co/guide/en/elasticsearch/reference/7.13/data-management.html
数据管理
存储在 ES 中的数据大体分为两种类型:
- 文本内容:需要搜索的数据集合,例如产品列表
- 时间序列数据:连续产生的带有时间戳的数据流,例如日志信息
文本内容可能需要频繁的更新,但是文本内容的价值随时间的推移相对稳定。你想要的是快速取回它们而不管它们是多么古老的数据。
时间序列数据随时间推移逐渐累积,所以你需要设计策略来平衡数据价值和存储成本。随着时间推移,古老的数据变得不那么重要且很少需要查询它们,所以你可以将其转移到便宜的性能较低的存储介质上。对于最古老的数据,你仍可访问它们,只是需要更长的时间来完成查询。
为了管理数据,ES提供以下方式:
- 将节点根据性能划分多个层级 - tiers
- 使用索引生命周期管理 - ILM 根据性能需求和保留策略在数据层之间自动转移索引。
- 利用存储在远程存储库中的可搜索快照 - searchable snapshots为旧索引提供支持,同时降低运营成本并保持搜索性能。
- 对存储在性能较差的硬件上的数据 执行异步搜索 - asynchronous searches。
1. 数据层级 Data tiers
数据层级是具备相同硬件配置的数据节点的集合:
- 文本内容层:负责处理例如产品列表信息的索引和查询。
- Hot层:负责处理时间序列数据例如日志或者指标信息的索引并保存最新,最频繁使用的数据。
- Warm层:负责保存访问频率较低且很少需要更新的时间序列数据。
- Cold层:负责保存不常访问且通常不更新的时间序列数据。
- Frozen层:节点保存很少访问且从不更新的时间序列数据,保存在可搜索的快照中。
当你将文档直接索引到特定索引时,它们会无限期保留在文本内容层节点上。
当你将文档索引到数据流时,它们最初驻留在Hot层节点上。你可以配置索引生命周期管理策略(ILM),根据你的性能、弹性和数据保留需求,在Hot层、Warm层和Cold层自动转移时间序列数据。
数据节点的角色配置在elasticsearch.yml文件中。例如,集群中高性能节点可以同时设置为Hot层和文本内容层:
node.roles: ["data_hot", "data_content"]
1.1 文本内容层 Content tier
存储在文本层的数据通常是产品目录或文章档案等项目的集合。与时间序列数据不同,文本内容的价值随着时间的推移保持相对恒定,因此随着时间的推移将其移动到具有不同性能特征的层是没有意义的。文本内容数据通常具有较长的数据保留要求,您希望能够快速检索项目,而不管它们有多老。
文本内容层节点通常针对查询性能进行优化——它们优先考虑处理能力而不是 IO 吞吐量,因此它们可以处理复杂的搜索和聚合并快速返回结果。虽然它们也负责索引,但内容数据的摄取速度通常不如时间序列数据(如日志和指标)高。从弹性的角度来看,这一层中的索引应配置为使用一个或多个副本。
文本内容层是必需的。系统索引和其他不属于数据流的索引会自动分配给内容层。
1.2 Hot层
Hot层是时间序列数据的es入口点,保存你最近、最常搜索的时间序列数据。Hot层中的节点需要快速读取和写入,需要更多的硬件资源和更快的存储(SSD)。为了弹性,Hot层中的索引应配置一个或多个副本。
新建索引作为数据流一部分会自动分配到Hot层。
1.3 Warm层
一旦查询的频率低于Hot层中最近索引的数据,时间序列数据就可以移动到Warm层。Warm层通常保存最近几周的数据。仍然允许更新,但可能很少。暖层中的节点通常不需要像热层中的节点一样快。为了弹性,应将暖层中的索引配置一个或多个副本。
1.4 Cold层
一旦数据不再更新,它可以从Warm层移动到Cold层,在这里不经常查询。Cold层仍然是响应式查询层,但数据通常不会更新。随着数据过渡到Cold层,它可以被压缩和缩小。对于弹性,Cold层可以使用可搜索快照的完全挂载索引,省去了副本的需要。
1.5 Frozen层
一旦数据不再被查询,或者很少被查询,它可能会从Cold层移动到Frozen层,在这里度过余生。
Frozen层使用可搜索快照的部分挂载来存储和加载来自快照存储库的数据。这降低了本地存储和运营成本,同时仍可搜索Frozen的数据。因为 Elasticsearch 有时必须从快照存储库中获取Frozen的数据,所以在Frozen层上的搜索通常比在Cold层上慢。
建议使用专用的Frozen层节点。
1.6 索引分配数据层
index.routing.allocation.include._tier_preference
es默认将你创建的index分配到文本内容层,通过将上述参数设置为data_content;
es默认将你创建的data stream索引分配到Hot层,通过将上述参数设置为data_hot。
你可以通过在创建索引请求或与新索引匹配的索引模板中指定分片分配过滤设置来覆盖自动基于层的分配。(即通过node.attr将节点分组,通过index.routing.allocation将索引分配到不同节点组)
你还可以明确设置index.routing.allocation.include._tier_preference为null退出默认的基于层的分配,这样es在分配期间会忽略数据层角色。
1.7 层间自动迁移数据
ILM 使用migrate自动迁移托管索引到不同层级。默认情况下,此操作会在每个阶段自动注入。您可以明确指定迁移操作来覆盖默认migrate行为,或使用allocate操作手动指定分配规则。
2. 索引管理
Kibana 的索引管理功能可以简单,方便的管理集群的索引、数据流和
索引模板。进行良好的索引管理可以确保你的数据以最具成本效益的方式正确的存储。
2.1 你将学到什么
- 查看编辑索引 settings
- 查看索引 mappings 和统计信息
- 进行索引层面操作,例如 refresh 和 freeze
- 查看和管理数据流
- 创建索引模板用以自动配置新的数据流和索引
2.2 需要的权限
如果你使用了 ES 的 Security 功能,你需要具备一下权限:
- 集群的
monitor
权限用以访问 Kibana 的索引管理模块 -
view_index_metadata
和manage
索引权限用以查看索引或者数据流的数据 -
manage_index_templates
用以管理索引模板
2.3 查看和编辑索引
此模块位于 Kibana 的 Stack Management » Index Management
如上图所示:索引管理页面包含索引列表以及每个索引的统计信息,在索引名后会标记出索引的状态,如 frozen,rollup 等。
点击索引名称会打开具体索引的管理界面,在这里可以查看索引的详细统计信息、Settings 和 Mappings,也可以进行索引 Settings 修改,如下图所示:
2.4 进行索引级别的操作
在图1中选中索引或者进入图2可以看到Manage功能按键,用以执行索引相关操作,操作和 ES REST 操作基本一致,如下:
- 关闭索引
- Force merge 索引
- Refresh 索引
- Flush 索引
- Freeze 索引
- Delete 索引
- 设置 ILM
…
2.5 管理数据流
Data Streams 页面展示了你的数据流并允许你检查或删除他们。
要查看有关数据流的更多信息,例如其生成状况或其当前索引生命周期策略,请点击数据流的名称,如下图所示:
可以在 Indices 页面查看有关数据流后的真是索引信息,如下图所示:
2.6 管理索引模板
索引模板页面展示了你的模板并允许你检查,编辑,复制或删除他们,对模板的更改不会影响现存的索引,页面如下图所示:
你可以通过 Create template 功能创建模板,以下教程为创建模板并通过它配置两个新索引:
Step 1. 设置 name 和索引匹配模式
- 打开 Create template 功能模块,如下图所示:
- 在Name位置输入模板名字。
- 在Index pattern位置设置要匹配的索引匹配模式,my-index-* 表示模板将应用于以 my-index- 开头的索引。
- 其他配置保持默认,点击Next。
Step 2. 设置 Settings,Mappings 和别名
- 按需添加预置组件模板
组件模板是预配置的一组 Settings、Mappings 和别名,您可以在多个索引模板中重复使用。名称后的标记表示组件模板是否包含映射 ( M )、索引设置 ( S )、别名 ( A ) 或三者的组合。
组件模板是可选的。对于本教程,不要添加任何组件模板,直接Next。 - 设置索引 Settings (选填)。对于本教程,此部分留空。
- 设置索引 Mappings:包含一个 Object 类型字段 geo 并为其设置一个 Geo-point 类型子字段 coordinates。
你也可以通过 Load JSON 功能将已有 JSON 信息导入为 Mappings。
上述字段 JSON 信息如下:
{
"properties": {
"geo": {
"properties": {
"coordinates": {
"type": "geo_point"
}
}
}
}
}
- 你也可以在 Dynamic templates 和 Advanced options 中创建其他 Mapping 配置,对于本教程,不要创建任何其他映射。
- 定义一个索引别名为 my-index,如下图所示:
- Review 页面进行配置检查,检查无误后点击 Create template。
Step 3. 创建索引
你现在可以使用上面配置的模板创建新索引。
- 加载一下文档来创建两个新索引。
POST /my-index-000001/_doc
{
"@timestamp": "2019-05-18T15:57:27.541Z",
"ip": "225.44.217.191",
"extension": "jpg",
"response": "200",
"geo": {
"coordinates": {
"lat": 38.53146222,
"lon": -121.7864906
}
},
"url": "https://media-for-the-masses.theacademyofperformingartsandscience.org/uploads/charles-fullerton.jpg"
}
POST /my-index-000002/_doc
{
"@timestamp": "2019-05-20T03:44:20.844Z",
"ip": "198.247.165.49",
"extension": "php",
"response": "200",
"geo": {
"coordinates": {
"lat": 37.13189556,
"lon": -76.4929875
}
},
"memory": 241720,
"url": "https://theacademyofperformingartsandscience.org/people/type:astronauts/name:laurel-b-clark/profile"
}
- 通过 get index API 查看新索引的配置,为之前模板设置的配置。
GET /my-index-000001,my-index-000002