目前es体系未做冷热数据拆分,随着数据的增长,所需要的空间越来越多。以3月数据为例,3月2.0的数据占用量为1.94T,接近2T。
目前存储的剩余空间截止到4月4日的统计数字,大概有3T左右,也就是说还可以坚持1个多月的时间,因为当es存储占用接近90%时,将会出现尝试迁移数据的操作,但如果所有节点都超过90%,这种重试可能导致致命的后果,造成分片丢失。咱们在之前的测试环境中出现过类似问题。目前数据已按月进行拆分,所以具备数据按冷热数据拆分的条件。
此次迁移主要完成两个目的的操作:
1、 将es数据进行冷热节点分离,保证线上只保留两个月的数据。
2、 将2.0es所用的机器释放,以节省成本。
目前es在2.0正式环境的占用15T的空间,每台机器的存储为3T,做完此次更新后,每台机器保证600G的存储空间,可以节省1/5存储空间,而且不用考虑扩容问题。
目前设置的优化步骤如下:
{"index.routing.allocation.require.box_type":"warm"}
建立hot-warm体系结构。
迁移方案
1、 线上数据每台机器保留600G的空间,5台机器的空间大概为3T。
2、 Spark5-7为冷数据备份,每月5日设置定时任务将上月数据的index设置为warm。
3、 线上数据会根据节点设置,将warm数据迁移到warm节点。
4、 设置定时任务,将上上月的历史数据index关闭。
此过程每月重复,最终数据重复打入历史数据,并关闭。
具体设置过程如下:
1、修改节点配置设置warm节点:将spark5-7配置设置为warm节点,在elasticsearch.yml增加配置node.attr.box_type: warm
2、执行语句将本月数据变为hot,其他数据都为warm:
将所有index设置成warm,在head插件上执行
http://10.3.5.XX:9200/
_settings
{"index.routing.allocation.require.box_type":"warm"}
将当月的index设置成hot,在head插件上执行
http://10.3.5.XX:9200/*_201811
_settings
{"index.routing.allocation.require.box_type":"hot"}
3、 将阿里云的机器,一台关闭后释放资源重做系统,重做elasticsearch后,elasticsearch.yml增加配置node.attr.box_type: hot
4、 设置定时任务,每月月初发送
crontab -l
5、每月月初,将上月的数据设置为warm,在head插件上执行
http://10.3.5.XX:9200/上月索引名称
_settings
{"index.routing.allocation.require.box_type":"warm"}
6、每月设置历史数据关闭
在elasticsearch.yml配置文件中的 index.codec: best_compression
历史节点的数据,做压缩,可以减少
执行
POST
/indexname/_forcemerge
/indexname/_forcemerge?max_num_segments=1&only_expunge_deletes=true
设置max_num_segments参数,其主要参数解释如下:
max_num_segments | The number of segments to merge to. To fully merge the index, set it to 1. Defaults to simply checking if a merge needs to execute, and if so, executes it. |
only_expunge_deletes | Should the merge process only expunge segments with deletes in it. In Lucene, a document is not deleted from a segment, just marked as deleted. During a merge process of segments, a new segment is created that does not have those deletes. This flag allows to only merge segments that have deletes. Defaults to false. Note that this won’t override theindex.merge.policy.expunge_deletes_allowed threshold. |
flush | Should a flush be performed after the forced merge. Defaults to true. |
优化后效果图如下:
1、 所有历史数据迁移到历史节点:
2、所有本月数据在线上节点: