由於需求和資源的限制,將熱數據存在tmpfs上(有資源的話可以用SSD),冷數據存在普通磁盤上。
首先說一下一下tmpfs 虛擬內存文件系統:
特點:它的存儲空間在VM(virtual memory)。
VM是由linux內核里面的vm子系統管理的,由RM(Real Memory)和swap組成,RM的大小就是物理內存的大小,而Swap的大小是由自己決定的。
Swap是通過硬盤虛擬出來的內存空間,因此它的讀寫速度相對RM(Real Memory)要慢許多,當一個進程申請一定數量的內存時,如內核的vm子系統發現沒有足夠的RM時,就會把RM里面的一些不常用的數據交換到Swap里面,如果需要重新使用這些數據再把它們從Swap交換到RM里面。如果有足夠大的物理內存,可以不划分Swap分區。
Swap是通過硬盤虛擬出來的內存空間,因此它的讀寫速度相對RM(Real Memory)要慢許多,當一個進程申請一定數量的內存時,如內核的vm子系統發現沒有足夠的RM時,就會把RM里面的一些不常用的數據交換到Swap里面,如果需要重新使用這些數據再把它們從Swap交換到RM里面。如果有足夠大的物理內存,可以不划分Swap分區。
tmpfs默認的大小是RM的一半,假如你的物理內存是1024M,那么tmpfs默認的大小就是512M。一般情況下,是配置的小於物理內存大小的。
tmpfs配置的大小並不會真正的占用這塊內存,如果/dev/shm/下沒有任何文件,它占用的內存實際上就是0字節;如果它最大為1G,里頭放有100M文件,那剩余的900M仍然可為其它應用程序所使用,但它所占用的100M內存,是不會被系統回收重新划分的。
當刪除tmpfs中文件,tmpfs 文件系統驅動程序會動態地減小文件系統並釋放 VM 資源。
mount tmpfs /mnt/tmpfs -t tmpfs
默認情況下,tmpfs會mount到/dev/shm目錄。使用tmpfs,就是說你可以使用這個目錄,這個目錄就是tmpfs,如你寫臨時文件到此目錄,這些文件實際上是在VM中。
為防止tmpfs使用了全部VM,有時候要限制其大小。比如要創建一個最大為32 MB的tmpfs文件系統:
mount tmpfs /dev/shm -t tmpfs -o size=32m
mount -t tmpfs none /tmp:所有
/tmp
目錄下的寫入其實都寫在內存中
。但tmpfs文件系統不知道臨時文件系統的可用內存數量改如何限制。所以要為/tmp目錄設置指定數量內存:mount -t tmpfs -o size=1g none /tmp(將分配給/tmp目錄1G內存空間,這樣可以避免/tmp寫入超過1G的內容)
由於沒有掛載之前/tmp目錄下的文件也許正在被使用,因此掛載之后系統也許有的程序不能正常工作。可以寫入/etc/fstab,這樣重啟后也有效。
可以通過df -h來查看文件空間使用情況
內存文件系統可以在服務器重啟后自動掛載
tmpfs上的數據斷電會丟失
方案一:
熱數據一個索引(在內存文件中,斷電會丟失),所以熱數據需要備份一個索引(數據在磁盤中,斷電不會丟失)
說明:
說明:
數據量:25,200,002條,熱數據中source不寫rt_feature字段,共24.5G,熱數據備份中source寫rt_feature字段,共91G
1、分片數及搜索效率
1、分片數及搜索效率

2、數據備份與恢復
如果熱數據(hot_history_fss_data_test)丟失,可以從熱數據備份中(warm_history_fss_data_test)用reindex的方式進行恢復。
15個分片時,數據恢復耗時12分鍾
20個分片時,數據恢復耗時11分鍾(如果從磁盤reindex到磁盤(有特征),需要耗時70分鍾)
如果熱數據(hot_history_fss_data_test)丟失,可以從熱數據備份中(warm_history_fss_data_test)用reindex的方式進行恢復。
15個分片時,數據恢復耗時12分鍾
20個分片時,數據恢復耗時11分鍾(如果從磁盤reindex到磁盤(有特征),需要耗時70分鍾)
3、數據的刪除
因為只有一個索引,所以數據的刪除只能先過濾過期的數據,然后將這些數據刪除,刪除語句如下:
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"}}}}}}'
因為只有一個索引,所以數據的刪除只能先過濾過期的數據,然后將這些數據刪除,刪除語句如下:
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"}}}}}}'

4、並發性

方案二:熱數據采用滾動建索引的方式,每400萬數據創建一個新的索引,每個索引5個分片
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
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
1、搜索效率

2、數據的備份與恢復
熱數據的備份和熱數據一樣,也是滾動創建索引,數據恢復時,每一個索引都進行reindex,由於兩份數據時同時寫的,一個在內存中一個在磁盤中,寫入的速度不一樣,創建新索引的時間也不一樣,可能兩份數據會有一些誤差,但對實際使用應該沒有很大的影響。
熱數據的備份和熱數據一樣,也是滾動創建索引,數據恢復時,每一個索引都進行reindex,由於兩份數據時同時寫的,一個在內存中一個在磁盤中,寫入的速度不一樣,創建新索引的時間也不一樣,可能兩份數據會有一些誤差,但對實際使用應該沒有很大的影響。
3、數據的刪除
由於是滾動創建了多個索引,所以數據刪除時可以直接刪除整個索引,用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
由於是滾動創建了多個索引,所以數據刪除時可以直接刪除整個索引,用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
4、並發性
