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 保存到配置文件,只要這個配置文件不被刪除,節點就會一直沿用這個ID(和我們使用的身份證類似,一旦生成,不在變化,除非刪除,刪除即意味著死亡)。
節點 ID 用于標識集群中的每個節點。 一個節點可以改變它的IP和端口號, 而不改變節點 ID 。 集群可以自動識別出 IP/端口號的變化, 并將這一信息通過 Gossip 協議廣播給其他節點知道。
到這里其實已經解答了這個問題,但是,主從節點切換不并不是簡單的用從節點替換原來的主節點。那么問題來了,redis在什么情況下才會導致主從切換,為什么會發生主從切換,新的主節點有什么如何產生的,主從節點之間的切換會導致什么樣的問題等等,都需要我們去探討學習。
后面我會有專門的文章來解析redis的使用,敬請關注,謝謝!!本文有什么問題,歡迎指正,謝謝支持!!!