背景
用户需求:近期数据查询速度快,较远历史数据运行查询速度慢?
- 对于开发人员而言即数据的冷热分离,实现此功能有2个前提条件:
- 硬件:处理速度不同的硬件,最起码有读写速度不同的硬盘,如SSD、机械硬盘HDD。
- 软件配置:可以配置 不同的数据存储在不同的硬盘,如近期数据存储在SSD,较远历史数据存储在HDD。对于linux系统而言,存储于不同的硬盘就是存储在不同的路径。
elasticsearch的冷热分离配置主要依赖于分片分布规则设置。
es配置之分片分布规则设置
自定义分片分布规则
- cluster.routing.allocation.awareness.attributes
根据某个属性作为分片分布规则。
#设置节点属性rack_id及属性值rack_one
node.rack_id: rack_one
#设置rack_id属性作为分片分布规则
cluster.routing.allocation.awareness.attributes: rack_id
- 可以为分片分布规则设置多个属性,例如:
cluster.routing.allocation.awareness.attributes: rack_id,zone
注意:当设置了分片分布属性时,如果集群中的节点没有设置其中任何一个属性,那么分片就不会分布到这个节点中。
强制分布规则
副本被分布到相同分布规则属性值的一群节点上,那么,我们可以强制分片规则为一个指定的值。
cluster.routing.allocation.awareness.force.zone.values: zone1,zone2
cluster.routing.allocation.awareness.attributes: zone
启动两个node.zone设置成zone1的节点,然后创建一个5个分片,一个副本的索引。索引建立完成后只有5个分片(没有副本),只有当我们启动node.zone设置成zone2的节点时,副本才会分配到那节点上。
上面配置的意思就是设置属性zone作为分布规则,并且属性zone的值为zone1/zone2,由于副本与主分片不分配在一类节点中,则副本分片