2017-03-16 14 views
2

這是我所建模的example如何在此Kubernetes示例中選擇主Redis窗格?

在自述的「刪除我們的手動莢」部分:

  • Redis的哨兵本身,實現主設備已經從羣集中消失,並開始選過程選擇一個新的主人。他們執行這次選舉和選擇,並選擇一個現有的redis服務器副本作爲新的主服務器。
  • 如何選擇新的主人?從redis-controller.yamlredis複製控制器控制的所有3個Redis的服務器豆莢仍然有同樣的

    labels: 
        name: redis 
    

    這是我在我的服務目前使用進行選擇。 3個豆莢如何區分,以便從Kubernetes我知道哪一個是主人?

    回答

    1

    您的客戶端Redis庫實際上可以處理此問題。例如ioredis

    ioredis保證您連接的節點即使在故障轉移後也始終是主節點。

    所以,你實際上連接到redis-sentinel而不是redis-client

    2

    3個莢如何區分使得我從Kubernetes知道 哪一個是主人?

    Kubernetes不知道主節點。您可以手動連接到它,並使用找到莢:

    redis-cli info 
    

    你會得到大量的有關服務器的信息,但我們需要爲我們的宗旨角色:

    redis-cli info | grep ^role 
    Output: 
    role: Master 
    

    請注意:Replication controllers被替換用於無狀態服務的Deployments。有狀態的服務使用Statefulsets

    +0

    謝謝。爲了避免宕機,我是否需要以某種方式配置Sentinel(或者找到某種鉤子)來自動更新主窗格(可能除了當前的'name:redis'標籤外,還可以通過添加'role:master'標籤)和創建另一個服務,選擇'name:redis'和'role:master')?否則,我的應用程序無法發出寫請求,除非收到Redis服務器故障通知並手動進入主服務器。 – writofmandamus

    +0

    您不必這樣做,deploy/replicasets將自動啓動另一個pod故障(exited/node故障)上的基礎pod實例,爲了增強此功能,您可以使用liveliness和rediness探針來檢查microservice容器)的健康狀況,如果容器不健康,它會自動重新啓動。 –

    +0

    對不起,我不明白。現在我的複製控制器(即將成爲StatefulSet/Deployment)確實會自動啓動另一個實例(如教程中所述)。然而,問題是(回到我原來的問題)Kubernetes不知道哪一個(新的pod或現有的複製)是否是主人。您建議我手動進入每個容器並使用redis-cli檢查角色。所以,我的後續問題不是手動操作,這怎麼可以自動完成(例如,我的服務仍然可以精確地選擇一個主窗格)。 – writofmandamus