Elasticsearch数据迁移及优化方案

背景介绍:

     目前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存储空间,而且不用考虑扩容问题。

目前设置的优化步骤如下:

优化1:结构优化 

{"index.routing.allocation.require.box_type":"warm"}

建立hot-warm体系结构。

迁移方案

Elasticsearch数据迁移及优化方案_第1张图片

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、每月设置历史数据关闭

 

优化2:对历史节点进行压缩

在elasticsearch.yml配置文件中的 index.codec: best_compression 

历史节点的数据,做压缩,可以减少

优化3:执行Force Merge重新生成段文件

执行

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、 所有历史数据迁移到历史节点:

Elasticsearch数据迁移及优化方案_第2张图片

2、所有本月数据在线上节点:

Elasticsearch数据迁移及优化方案_第3张图片

 

 

 

 

 

 

 

 

你可能感兴趣的:(ELK)