2016-12-07 52 views
0

在EC2中,如果停止並啓動或重新引導,則臨時磁盤上的數據將被刪除。將提交日誌存儲在臨時磁盤中?

問題是,將提交日誌放在臨時磁盤上是一個好主意嗎?

如果實例重新啓動並丟失commitlog會發生什麼情況? 我已將複製因子設置爲2,使用NetworkTopologyStrategy即可識別可用區域。

請指點

+1

*「......或重新啓動......」 * **是不正確**。臨時磁盤內容在重新啓動後仍然存在,但不會停止/啓動。 [*「實例存儲中的數據僅在與其關聯的實例的生命週期中保持不變。如果某個實例重新啓動(有意或無意),實例存儲中的數據仍然存在。」*](http://docs.aws.amazon。 com/AWSEC2/latest/UserGuide/InstanceStorage.html#instance-store-lifetime) –

+0

但是,在重新啓動之前,實例是不是停止了? – simo

+0

否。重啓EC2實例就像按下control-alt-delete。無論您是從EC2控制檯或API(包括SDK)還是「sudo reboot」重新啓動,該實例都會保留在同一物理主機上,並保持其臨時磁盤完好無損。停止實例會將其從AWS的物理主機上移除,並在重新啓動時將其部署到新的物理主機,並使用其EBS卷和網絡接口自動移動到另一個物理主機,但使用新的空臨時磁盤。請參閱http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html#lifecycle-differences –

回答

1

的commitlog是C *耐用寫架構的基本組成部分。對Cassandra Write Path的簡要介紹顯示,每個寫入都會轉到memtable和commitlog。後者是C *在崩潰中倖存的方式。如果將提交日誌放在系統崩潰時消失的臨時磁盤上,則會破壞持久性寫入,並且會丟失節點上的數據。 RF將幫助您確保節點中的數據將被恢復,但會使您暴露於第二臺機器的崩潰。

當然,這是一件事我會避免,EC2虛擬機被重新啓動,往往...

+0

感謝您的建議,所以我將使用EBS – simo

+0

您是否認爲存儲性能提交日誌需要數據存儲需要的高性能? – simo

+0

@simo如果您使用小型寫入,我建議將commitlog放在高性能IOPS智能設備上。否則,一個普通的HDD。 – xmas79