Elasticsearch 主要用于海量数据的存储和检索,若将所有数据都放在 SSD 硬盘上,成本会非常高。可通过冷热分离来解决这个问题,冷热集群可以在一个集群内包含冷、热两种属性的节点,从而兼顾性能和容量之间的矛盾:
腾讯云 ES 提供了快速配置构建冷热集群的能力,用户可以在腾讯云官网根据业务需要指定冷热节点规格,快速建立一个冷热分离架构的 ES 集群。
在集群管理页面,单击右上角的【更多操作】,在下拉菜单中选择【调整配置】,选择【冷热模式】,根据需要设置冷热节点的规格和相关配置,将现有集群变配为冷热集群。
验证节点冷热属性,命令如下:
GET _cat/nodeattrs?v&h=node,attr,value&s=attr:desc
node attr value
node1 temperature hot
node2 temperature hot
node3 temperature warm
node4 temperature hot
node5 temperature warm
...
业务方可以根据实际情况决定索引的冷热属性。
PUT hot_data_index/_settings
{
"index.routing.allocation.require.temperature": "hot"
}
PUT warm_data_index/_settings
{
"index.routing.allocation.require.temperature": "warm"
}
PUT hot_warm_test_index
{
"settings": {
"number_of_replicas": 1,
"number_of_shards": 3
}
}
GET _cat/shards/hot_warm_test_index?v&h=index,shard,prirep,node&s=node
index shard prirep node
hot_data_index 1 p node1
hot_data_index 0 r node1
hot_data_index 2 r node2
hot_data_index 2 p node3
hot_data_index 1 r node4
hot_data_index 0 p node5
PUT hot_warm_test_index/_settings
{
"index.routing.allocation.require.temperature": "hot"
}
查看分片分配,分片均分配在热节点上。GET _cat/shards/hot_warm_test_index?v&h=index,shard,prirep,node&s=node
index shard prirep node
hot_data_index 1 p node1
hot_data_index 0 r node1
hot_data_index 0 p node2
hot_data_index 2 r node2
hot_data_index 2 p node4
hot_data_index 1 r node4
PUT hot_warm_test_index/_settings
{
"index.routing.allocation.require.temperature": "warm"
}
查看分片分配,分片均分配到冷节点上。GET _cat/shards/hot_warm_test_index?v&h=index,shard,prirep,node&s=node
index shard prirep node
hot_data_index 1 p node3
hot_data_index 0 r node3
hot_data_index 2 r node3
hot_data_index 0 p node5
hot_data_index 2 p node5
hot_data_index 1 r node5
腾讯云目前已提供6.8.2版本的集群,该版本 Elasticsearch(>=6.6) 提供了索引生命周期管理功能。索引生命周期管理可以通过 API 或者 kibana 界面配置,详情可参考 index-lifecycle-management。下文将通过 kibana 界面来演示,如何使用索引生命周期管理,结合冷热分离架构,实现索引数据的动态管理。
kibana 中的索引生命周期管理位置如下图(版本6.8.2):
单击【Create policy】进入配置界面。索引的生命周期为Hot phase
、Warm phase
、Cold phase
、Delete phase
四个阶段。
Hot phase
被 rollover 后便会进入Warm phase
,进入该阶段的索引会被设置为 read-only。用户可为此索引设置要使用的 attribute,例如对于冷热分离策略,这里可选择temperature: warm
属性。另外还可以对索引进行 forceMerge、shrink 等操作,这两个操作具体可以参考 shrink API 和 force merge 官方文档。temperature: cold
。同时还支持对索引的 freeze 操作,详情参考 freeze API 官方文档。
本页内容是否解决了您的问题?