2015-10-08 71 views
8

我們有兩個redis服務器的redis配置。我們還有3個哨兵監視這兩個實例,並在需要時啓動故障切換。如何在不啓動定點故障轉移的情況下執行redis FLUSHALL?

我們目前有一個過程,我們需要定期在redis服務器上執行FLUSHALL。這是一個阻塞操作,比我們爲哨兵分配超時所用的時間要長。換句話說,我們有我們的定點配置:

sentinel down-after-milliseconds OurMasterName 5000

,並在服務器上做了Redis的-CLI FLUSHALL採取> 5000毫秒,所以哨兵啓動故障轉移。

我們承認,做一個FLUSHALL不是很大,我們也知道,我們可以增加下後毫秒但對這個問題的目的,假設這些都不是選項。

的問題是:我們如何才能做一個FLUSHALL(或等效操作),而無需我們的哨兵啓動故障轉移由於FLUSHALL阻斷大於5000毫秒?有沒有人遇到並解決過這個問題?

+0

如果你在一些雲平臺,你可以只創建一個新的實例:要麼機映像準備或一些DEVOPS工具 –

+0

@LiviuCostea我想這可能是正確的選擇。如果你可以參考一些更詳細的描述,這將如何工作,我會很樂意接受你的答案。 – jakejgordon

+0

如果您正在使用AWS或Azure之類的API,而不是創建新的Redis羣集的API。啓動它,加載數據,一旦準備就緒,只需修改DNS,再次使用API​​調用 - 所有這些都可以由應用程序的某個部分處理。但在場所中,事情可能會變得更加複雜,因爲它需要一些自動化的人才/廚師/傀儡。 –

回答

1

你可以只創建新實例:如果你正在使用類似AWS或者Azure的比你創建新的Redis集羣API。啓動它,加載數據,一旦準備就緒,只需修改DNS,再次使用API​​調用 - 所有這些都可以由應用程序的某個部分處理。但在場所中,事情可能會變得更加複雜,因爲它需要一些自動化的人才/廚師/傀儡。

0

您目前需要的下一個最佳選擇是批量刪除密鑰以將工作量減少到一次。你可以使用scan來建立一個列表,假設你沒有,然後刪除任何批量大小適合你。

編輯:因爲你不感興趣的保存數據,關閉持久性,刪除RDB文件,那麼只需重新啓動實例。這樣,如果您提供新的主機,您不必像更新一樣更新標記。

出於好奇,如果你只是要衝洗所有的時間和不關心的數據,你會消滅它,爲什麼與定點麻煩?

+0

我認爲這裏的問題是它不能保證一致性。在這種情況下,我們可能會把超時時間增加到> 5000毫秒(我們實際上已經這樣做 - 並暫時解決了我們的問題 - 但並不是真正的可接受解決方案)。 – jakejgordon

相關問題