回答這個問題,要先說說關於redis叢集:
Redis 叢集是一個分散式(distributed)、容錯(fault-tolerant)的 Redis 實現, 叢集可以使用的功能是普通單機 Redis 所能使用的功能的一個子集(subset)。
Redis 叢集中不存在中心(central)節點或者代理(proxy)節點, 叢集的其中一個主要設計目標是達到線性可擴充套件性(linear scalability)
叢集的容錯功能是透過使用主節點(master)和從節點(slave)兩種角色(role)的節點(node)來實現的,主節點和從節點使用完全相同的伺服器實現, 它們的功能(functionally)也完全一樣, 但從節點通常僅用於替換失效的主節點。
個主節點可以有任意多個從節點, 這些從節點用於在主節點發生網路斷線或者節點失效時, 對主節點進行替換。
redi叢集中的節點需要做一下工作:
持有鍵值對資料
記錄叢集狀態,將鍵對映到對應的節點
檢測發現其他節點,識別異常節點,在從節點中選舉主節點
節點之間使用 Gossip 協議 來進行以下工作:
傳播(propagate)關於叢集的資訊,以此來發現新的節點
向其他節點發送 PING 資料包,以此來檢查目標節點是否正常運作(相當於命令列的ping命令)
在特定事件發生時,傳送叢集資訊
每個節點在叢集中都有一個獨一無二的ID ,該ID是一個十六進位制表示的160位隨機數,在節點第一次啟動時由 /dev/urandom 生成。
節點 ID 用於標識叢集中的每個節點。 一個節點可以改變它的IP和埠號, 而不改變節點 ID 。 叢集可以自動識別出 IP/埠號的變化, 並將這一資訊透過 Gossip 協議廣播給其他節點知道。
到這裡其實已經解答了這個問題,但是,主從節點切換不併不是簡單的用從節點替換原來的主節點。那麼問題來了,redis在什麼情況下才會導致主從切換,為什麼會發生主從切換,新的主節點有什麼如何產生的,主從節點之間的切換會導致什麼樣的問題等等,都需要我們去探討學習。
回答這個問題,要先說說關於redis叢集:
什麼是redis叢集?Redis 叢集是一個分散式(distributed)、容錯(fault-tolerant)的 Redis 實現, 叢集可以使用的功能是普通單機 Redis 所能使用的功能的一個子集(subset)。
Redis 叢集中不存在中心(central)節點或者代理(proxy)節點, 叢集的其中一個主要設計目標是達到線性可擴充套件性(linear scalability)
叢集的容錯功能是透過使用主節點(master)和從節點(slave)兩種角色(role)的節點(node)來實現的,主節點和從節點使用完全相同的伺服器實現, 它們的功能(functionally)也完全一樣, 但從節點通常僅用於替換失效的主節點。
個主節點可以有任意多個從節點, 這些從節點用於在主節點發生網路斷線或者節點失效時, 對主節點進行替換。
redis叢集節點是如何通訊的?redi叢集中的節點需要做一下工作:
持有鍵值對資料
記錄叢集狀態,將鍵對映到對應的節點
檢測發現其他節點,識別異常節點,在從節點中選舉主節點
節點之間使用 Gossip 協議 來進行以下工作:
傳播(propagate)關於叢集的資訊,以此來發現新的節點
向其他節點發送 PING 資料包,以此來檢查目標節點是否正常運作(相當於命令列的ping命令)
在特定事件發生時,傳送叢集資訊
叢集節點的屬性每個節點在叢集中都有一個獨一無二的ID ,該ID是一個十六進位制表示的160位隨機數,在節點第一次啟動時由 /dev/urandom 生成。
節點 ID 用於標識叢集中的每個節點。 一個節點可以改變它的IP和埠號, 而不改變節點 ID 。 叢集可以自動識別出 IP/埠號的變化, 並將這一資訊透過 Gossip 協議廣播給其他節點知道。
到這裡其實已經解答了這個問題,但是,主從節點切換不併不是簡單的用從節點替換原來的主節點。那麼問題來了,redis在什麼情況下才會導致主從切換,為什麼會發生主從切換,新的主節點有什麼如何產生的,主從節點之間的切換會導致什麼樣的問題等等,都需要我們去探討學習。