我有一個4G的redis數據庫,現在已經存在,我想要把它分散到兩台機器,一台機器2G,該怎麼做?
看了一下redis cluster,都是講單點失敗,主從複製,這個不是我的需求。
sf的redis服務器是多大的內存?
闭关修行中......
不太確定你在用什麼客戶端,不同的客戶端有 distributed 的最基本實現,但是這些都是客戶端實現,在增加刪除節點時需要你自己重新算 hash 遷移資料。 Redis 3 會有服務端的支持,就會簡單很多了。
基本上目前的客戶端實作都是基於@TechAd 說的consistent hashing,例如ruby 用戶端就有Redis::Distributed 可以用,你的需求把4G 資料分到兩台機器也很簡單,已經有https:/ /github.com/yankov/redis-migra... 可以直接用,看下實現,其實也很簡單。
希望對你有幫助。
推薦你搜搜一致性哈希的相關演算法,大體思路是,在客戶端做一個路由,對key做一個hash,然後mod 2, 分別將key-value存儲到0, 1兩台機器上去,讀取的時候也是這樣。可以參考memcache的,給你一個參考連結http://blogread.cn/it/article/5271
可以使用3L的做法,或者最直接的辦法就是在業務層把資料分開,寫在配置裡面就可以了,這樣以後在拆分的時候會很方便,邏輯也簡單,如果真的需要做分佈式,建議使用mongoDB
如果你不需要pepline的話推薦使用https://github.com/twitter/twemproxy Twitter退出的代理,自動hash,故障自動切換
問一下,twemproxy是不是不支援主備自動切換?
如果你是用redis cluster來做這個資料遷移的話,可以看看其官方的介紹: 假設您將預先存在的資料集拆分為 N 個主節點,如果沒有預先存在的分片,則 N=1,則需要執行下列步驟才能將資料集遷移到 Redis 叢集: 阻止你的客戶。目前無法自動即時遷移到 Redis 叢集。您也許能夠在您的應用程式/環境的上下文中編排即時遷移。 使用 BGREWRITEAOF 指令為所有 N 個 master 產生一個僅附加文件,並等待 AOF 檔案完全產生。 將 AOF 檔案從 aof-1 儲存到 aof-N 某處。此時,如果您願意,您可以停止舊實例(這很有用,因為在非虛擬化部署中您經常需要重複使用相同的電腦)。 建立一個由N個master和0個slave組成的Redis叢集。您稍後將添加奴隸。確保所有節點都使用僅附加檔案來實現持久性。 停止所有叢集節點,用您預先存在的僅附加檔案取代它們的僅附加文件,第一個節點為 aof-1,第二個節點為 aof-2,最多為 aof-N。 使用新的 AOF 檔案重新啟動 Redis 叢集節點。他們會抱怨有些鑰匙根據他們的配置不應該在那裡。 使用 redis-trib fix 指令來修復集群,以便根據每個節點是否權威的雜湊槽來遷移金鑰。 最後使用 redis-trib 檢查以確保您的叢集正常。 重新啟動修改為使用 Redis 叢集感知客戶端庫的客戶端。 w
不太確定你在用什麼客戶端,不同的客戶端有 distributed 的最基本實現,但是這些都是客戶端實現,在增加刪除節點時需要你自己重新算 hash 遷移資料。 Redis 3 會有服務端的支持,就會簡單很多了。
基本上目前的客戶端實作都是基於@TechAd 說的consistent hashing,例如ruby 用戶端就有Redis::Distributed 可以用,你的需求把4G 資料分到兩台機器也很簡單,已經有https:/ /github.com/yankov/redis-migra... 可以直接用,看下實現,其實也很簡單。
希望對你有幫助。
推薦你搜搜一致性哈希的相關演算法,大體思路是,在客戶端做一個路由,對key做一個hash,然後mod 2, 分別將key-value存儲到0, 1兩台機器上去,讀取的時候也是這樣。可以參考memcache的,給你一個參考連結http://blogread.cn/it/article/5271
可以使用3L的做法,或者最直接的辦法就是在業務層把資料分開,寫在配置裡面就可以了,這樣以後在拆分的時候會很方便,邏輯也簡單,如果真的需要做分佈式,建議使用mongoDB
如果你不需要pepline的話推薦使用https://github.com/twitter/twemproxy Twitter退出的代理,自動hash,故障自動切換
問一下,twemproxy是不是不支援主備自動切換?
如果你是用redis cluster來做這個資料遷移的話,可以看看其官方的介紹:
假設您將預先存在的資料集拆分為 N 個主節點,如果沒有預先存在的分片,則 N=1,則需要執行下列步驟才能將資料集遷移到 Redis 叢集:
阻止你的客戶。目前無法自動即時遷移到 Redis 叢集。您也許能夠在您的應用程式/環境的上下文中編排即時遷移。
使用 BGREWRITEAOF 指令為所有 N 個 master 產生一個僅附加文件,並等待 AOF 檔案完全產生。
將 AOF 檔案從 aof-1 儲存到 aof-N 某處。此時,如果您願意,您可以停止舊實例(這很有用,因為在非虛擬化部署中您經常需要重複使用相同的電腦)。
建立一個由N個master和0個slave組成的Redis叢集。您稍後將添加奴隸。確保所有節點都使用僅附加檔案來實現持久性。
停止所有叢集節點,用您預先存在的僅附加檔案取代它們的僅附加文件,第一個節點為 aof-1,第二個節點為 aof-2,最多為 aof-N。
使用新的 AOF 檔案重新啟動 Redis 叢集節點。他們會抱怨有些鑰匙根據他們的配置不應該在那裡。
使用 redis-trib fix 指令來修復集群,以便根據每個節點是否權威的雜湊槽來遷移金鑰。
最後使用 redis-trib 檢查以確保您的叢集正常。
重新啟動修改為使用 Redis 叢集感知客戶端庫的客戶端。 w