redis 集群讲解
群集節點屬性
每個節點在集群中都有唯一的名稱。節點名稱是一個160位隨機數的十六進制表示,是第一次啟動節點(通常使用/ dev / urandom)時獲得的。節點將其ID保存在節點配置文件中,并永久使用相同的ID,或者至少只要節點配置文件不被系統管理員刪除,或者通過CLUSTER RESET命令請求硬復位。
節點ID用于標識整個集群中的每個節點。給定節點有可能改變其IP地址,而不需要改變節點ID。集群還能夠檢測到IP /端口的變化,并使用群集總線上運行的八卦協議進行重新配置。
節點ID不是與每個節點相關的唯一信息,而是唯一始終全局一致的信息。每個節點也有以下一組相關的信息。一些信息是關于此特定節點的群集配置詳細信息,并最終在整個群集中保持一致。其他一些信息,比如最后一個節點被ping的時候,對每個節點都是本地的。
每個節點都維護有關在集群中知曉的其他節點的以下信息:節點ID,節點的IP和端口,一組標志,如果標記為節點的主節點slave,則上次是節點被ping通并且最后一次接收到pong時,節點的當前?配置歷元(在本說明書中稍后解釋),鏈路狀態以及最后的散列槽的集合被服務。
有關所有節點字段的詳細說明,請參閱CLUSTER NODES文檔。
的群集節點命令可在簇中被發送到任何節點,并提供該集群的狀態,并根據本地視圖所查詢的節點具有群集的每個節點的信息。
以下是在三個節點的小群集中發送到主節點的CLUSTER NODES命令的輸出示例。
$ redis-cli cluster nodes d1861060fe6a534d42d8a19aeb36600e18785e04 127.0.0.1:6379 myself - 0 1318428930 1 connected 0-1364 3886e65cc906bfd9b1f7e7bde468726a052d1dae 127.0.0.1:6380 master - 1318428930 1318428931 2 connected 1365-2729 d289c575dcbc4bdd2931585fd4339089e461a27d 127.0.0.1:6381 master - 1318428931 1318428931 3 connected 2730-4095在上面的列表中,不同的字段是按順序排列的:節點ID,地址:端口,標志,最后ping發送,最后一個pong接收,配置歷元,鏈路狀態,插槽。關于上述領域的細節將在我們討論Redis集群的特定部分時盡快討論。
群集總線
每個Redis群集節點都有一個額外的TCP端口,用于接收來自其他Redis群集節點的傳入連接。該端口與用于接收來自客戶端的傳入連接的常規TCP端口有固定的偏移量。要獲得Redis集群端口,應該將10000添加到正常的命令端口。例如,如果一個Redis節點正在偵聽端口6379上的客戶端連接,則集群總線端口16379也將被打開。
節點到節點之間的通信僅使用群集總線和群集總線協議:由不同類型和大小的幀組成的二進制協議。集群總線二進制協議沒有公開記錄,因為它不是為外部軟件設備與使用此協議的Redis集群節點進行通信。然而,你可以通過閱讀獲取有關群集的總線協議的詳細信息?cluster.h和cluster.c文件在Redis的集群源代碼。
集群拓撲
Redis集群是一個完整的網格,其中每個節點都使用TCP連接與每個其他節點連接。
在N個節點的集群中,每個節點都有N-1個傳出TCP連接,以及N-1個傳入連接。
這些TCP連接始終保持活動狀態,并不是按需創建的。當一個節點期望響應群集總線中的ping響應時,在等待足夠長的時間以將節點標記為不可達時,它將嘗試通過從頭重新連接來刷新與節點的連接。
當Redis Cluster節點形成一個完整的網格時,節點使用八卦協議和配置更新機制,以避免在正常情況下節點之間交換太多的消息,所以交換的消息數量不是指數級的。
節點握手
節點總是接受集群總線端口上的連接,甚至在收到ping時回復ping,即使ping不可信節點也是如此。但是,如果發送節點不被視為群集的一部分,所有其他數據包將被接收節點丟棄。
一個節點只能以兩種方式接受另一個節點作為集群的一部分:
-
如果一個節點出現一個MEET消息。遇見消息與PING消息完全相同,但強制接收者接受作為群集一部分的節點。只有當系統管理員通過以下命令請求時,節點才會將MEET消息發送到其他節點:
集群符合IP端口
-
如果已經被信任的節點將閑談這個其他節點,節點也將注冊另一個節點作為集群的一部分。所以,如果A知道B,B知道C,那么B最終會發送八卦消息給A,C發生這種情況時,A將C注冊為網絡的一部分,并嘗試與C連接。
這意味著只要我們加入任何連接圖中的節點,它們最終將自動形成完全連通的圖形。這意味著群集能夠自動發現其他節點,但前提是系統管理員強制建立信任關系。
這種機制使群集更健壯,但防止不同的Redis群集在更改IP地址或其他網絡相關事件后意外混合。
官方地址:https://redis.io/topics/cluster-spec
總結
以上是生活随笔為你收集整理的redis 集群讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity 3D光源-Direction
- 下一篇: Java Array数组 遍历 四种方式