2013-11-27 36 views
1

Curently我使用Redis的,有60G內存沒有任何奴隸,但我的數據的增長,我會需要更多的內存。劈裂一個Redis的RDB提交EC2機上

我想遷移到2×60G機和分裂兩者之間已經存在的數據。

是否有分裂的RDB文件的任何工具?我還沒有找到任何專門爲此設計的東西。

謝謝!

回答

1

如果你想分割你的數據,你需要有一種方法來從服務器B分片鑰匙所以一些按鍵將被寫入/從服務器A讀取和其他

有沒有辦法分裂一個RDB文件,但是你可以做些什麼來實現你想要的。

首先你能做的就是啓動一個Redis的情況下你的第二個服務器上,並說,這是當前服務器的奴隸,而是設置帕拉姆奴隸只讀假。這會使從服務器同步並讀取主服務器上的所有redis數據。到目前爲止,你只有一個擁有所有數據的奴隸,但現在我們會做一些有趣的事情。

然後,你需要一個分片的策略決定。一些redis客戶端爲你做這件事。例如,官方的Ruby客戶端知道如何處理,如果你配置它。您將需要配置您的客戶端,以便將密鑰分爲A和B(或者使用twemproxy替代,以便客戶端不會知道不同的服務器,twemproxy會處理它)

一旦客戶端配置完成,您需要將新客戶端部署到生產環境,並立即將從站配置爲不再是從屬服務器。您可以直接使用從服務器上的CONFIG命令來執行此操作(不要忘記使用CONFIG REWRITE來保持配置),或者可以更改從設備的配置文件並重新啓動,無論哪種方式對您更爲方便。由於從設備配置爲從設備只讀錯誤,因此即使在從設備模式下它也會接受寫入。這意味着,如果直接從redis-cli更改配置,則可以從slave更改爲分片redis,而無需重新啓動,我認爲這很酷。

要知道,一旦你進行分片,你必須要小心使用Lua腳本MULTI命令或時。如果您使用的是twemproxy,那麼您將無法使用這些命令,但是如果您在客戶端進行分片,則仍然可以使用MULTI或LUA。只要小心使用一個分片機制,其中所有相關密鑰將保留在同一臺服務器上。