ES数据冷热隔离
由于需求和资源的限制,将热数据存在tmpfs上(有资源的话可以用SSD),冷数据存在普通磁盘上。
首先说一下一下tmpfs 虚拟内存文件系统:
Swap是通过硬盘虚拟出来的内存空间,因此它的读写速度相对RM(Real Memory)要慢许多,当一个进程申请一定数量的内存时,如内核的vm子系统发现没有足够的RM时,就会把RM里面的一些不常用的数据交换到Swap里面,如果需要重新使用这些数据再把它们从Swap交换到RM里面。如果有足够大的物理内存,可以不划分Swap分区。
用一个简单的mount命令就可以创建tmpfs文件系统:
mount -t tmpfs none /tmp:所有
/tmp
目录下的写入其实都写在内存中
。但tmpfs文件系统不知道临时文件系统的可用内存数量改如何限制。所以要为/tmp目录设置指定数量内存:mount -t tmpfs -o size=1g none /tmp(将分配给/tmp目录1G内存空间,这样可以避免/tmp写入超过1G的内容)说明:
1、分片数及搜索效率
如果热数据(hot_history_fss_data_test)丢失,可以从热数据备份中(warm_history_fss_data_test)用reindex的方式进行恢复。
15个分片时,数据恢复耗时12分钟
20个分片时,数据恢复耗时11分钟(如果从磁盘reindex到磁盘(有特征),需要耗时70分钟)
因为只有一个索引,所以数据的删除只能先过滤过期的数据,然后将这些数据删除,删除语句如下:
curl -XPOST “http://10.45.157.111:9200/warm_history_fss_data_test2/history_data/_delete_by_query”?pretty -d'{“query”:{“bool”:{“filter”:{“range”:{“enter_time”:{“gt”:”2016-07-01 00:00:00″,”lt”:”2016-07-01 00:00:00||+1M”,”format”:”yyyy-MM-dd HH:mm:ss”,”time_zone”:”+08:00″}}}}}}’
25,200,002条数据滚动建索引的情况如下:
hot_history_fss_data_test-00001:4,039,000 (3.96G)
hot_history_fss_data_test-00002:4,089,000(4.01G)
hot_history_fss_data_test-00003:4,024,000(3.95)
hot_history_fss_data_test-00004:4,045,000 (3.97G)
hot_history_fss_data_test-00005:4,047,000(3.97G)
hot_history_fss_data_test-00006:4,050,000(3.97G)
hot_history_fss_data_test-00007:906,002(921M)
上述索引有一个共同的索引别名:history_search_v1_2
热数据的备份和热数据一样,也是滚动创建索引,数据恢复时,每一个索引都进行reindex,由于两份数据时同时写的,一个在内存中一个在磁盘中,写入的速度不一样,创建新索引的时间也不一样,可能两份数据会有一些误差,但对实际使用应该没有很大的影响。
由于是滚动创建了多个索引,所以数据删除时可以直接删除整个索引,用ES提供的curator可以完成滚动创建和删除的功能
curator –config /home/czl/tmpfs/curator/curator.yml /home/czl/tmpfs/curator/rollover_action_file.yml>>/home/czl/tmpfs/curator/create-Index.log 2>&1