2017-08-01 85 views
1

是否可以部署一個自我修復和縮放類似Redis的鍵值存儲,我可以在Kubernetes(或Swarm或任何其他自動化雲環境)中運行?Redis自我修復集羣或替代雲,Kubernetes或Swarm?

的挑戰,我發現的Redis:

  1. 您需要手動創建一個集羣redis-trib
  2. 新的節點需要被添加到集羣中明確
  3. 節點需要顯式刪除
  4. 節點不在對等的分片中複製數據,而是使用主從模式

以上意味着以下情況都將失敗。我有一個簡單的3主機和3從機羣集。 「師父A」出現故障,導致Kubernetes在< 1秒啓動一個新的「大師A」:

  • 新的「主A」沒有集羣的知識,不會加入
  • 「奴隸A」,其中有數據副本,現在從新的「主A」同步,並丟失所有數據,從而破壞了從副本的目的。在全新的啓動中,「主A」可能在「主B」初始化之前啓動(假設我甚至可以自動化羣集初始化),在「主B」準備就緒之前,因此「主B」從未真正加入羣集

問題:

  1. 有沒有辦法在一個不可預測的,非持久性存儲,而任何人機交互自動化的Redis集羣init和同步?
  2. 如果不是,是否有一個替代方案是一個乾淨的,內存中的鍵值存儲(持久性對我而言不那麼重要),那就是自我修復並且可以對等地工作?

領事館/ etcd/zookeeper所有的工作都是100%的對等和自我治療(這很好),但是他們的表現(據說)遠低於Redis內存中的KV。它們不是構建的,例如用於查找每個Web API請求的會話。這部分是由於非分片(100%複製),部分是由於磁盤寫入。卡夫卡的模型(儘管消息隊列,而不是KV存儲)也可以很好地工作(但依賴於zk):分區和副本,但基本上是自我修復的。我與一位經紀人交談,它告訴我我的主題(「碎片」)的生活地點,我明白了。

是否有任何方法可以使用Redis獲得完全自主權,以便我可以在kube/swarm/cloud中進行部署,或者提供與自主模型類似性能的替代方案?

回答

2

您可以使用與Redis Sentinel配合使用的Kubernetes Redis示例。在主人失敗的情況下,哨兵促使新主人成爲奴隸。複製控制器啓動一個新的從站Pod。你的應用程序連接到哨兵,並從該服務,你會得到新的主人的IP。

Redis的哨兵https://redis.io/topics/sentinel

Kubernetes例https://github.com/kubernetes/examples/tree/master/staging/storage/redis

+0

我碰到這個才恍然大悟,但讓它去有幾個原因。首先,我沒有意識到,哨兵不僅處理集羣創建/加入/替換。所以在使用哨兵時我不需要任何'redis-trib'?其次,主人 - 奴隸會發生什麼?在庫克取代主人時,哨兵會不會嘗試將奴隸推銷給主人,從而造成衝突,並可能抹去數據?這個例子不使用奴隸,它甚至可以與sentinel + kube一起工作嗎?最後,我會假定statefulset在部署(或RC)上? – deitch

+0

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/16906021) – the4kman

+0

首先你要創建一個主莢。這是唯一一個以主人身份開始的人。 redis控制器將所有redis窗格作爲從站啓動。你可以在開始文件中看到。如果沒有提供任何選項,則redis作爲從屬設備啓動。在所有這些Pod運行之後,您可以刪除主Pod,隨機的從屬Pod將提升爲新的主設備。從控制器重新創建的吊艙將作爲新的從機啓動。 你不需要redis-trib。但是你的應用程序需要用sentinel來處理請求。 – KuLi