redis sentinel

最通俗的解釋:sentinel 一般翻譯成哨兵,就是放哨的,這裏它就是用來監控主從節點的健康狀況。客戶端鏈接redis主從的時候,先鏈接 sentinel,sentinel會告訴客戶端主redis的地址是多少,而後客戶端鏈接上redis並進行後續的操做。當主節點掛掉的時候,客戶端就得不到鏈接了於是報錯了,客戶端從新想sentinel詢問主master的地址,而後客戶端獲得了[新選舉出來的主redis],而後又能夠愉快的操做了。redis

瞭解哨兵的基本條件算法

  1. 一個健壯的部署至少須要三個哨兵實例,而且使用奇數個Sentinel.
  2. 三個哨兵實例應該放置在不一樣計算機或虛擬機中。例如不一樣的物理機或不一樣可用區域的虛擬機。
  3. 全部節點彼此互聯,redis啓動兩個端口,一個爲服務客戶端,另外一個服務內部通信,內部通信端口比服務端口大10000. 好比:6379與16379
# redis如何作分片的

Redis集羣預分好16384個桶,當須要在 Redis 集羣中放置一個 key-value 時,根據 CRC16(key) mod 16384的值,決定將一個key放到哪一個桶中。服務器

如今咱們是三個主節點分別是:A, B, C 三個節點,它們能夠是一臺機器上的三個端口,也能夠是三臺不一樣的服務器。那麼,採用哈希槽 (hash slot)的方式來分配16384個slot 的話,它們三個節點分別承擔的slot 區間是:ide

節點A覆蓋0-5460;
節點B覆蓋5461-10922;
節點C覆蓋10923-16383

獲取數據:翻譯

若是存入一個值,按照redis cluster哈希槽的算法: CRC16('key')%16384 = 6782。 那麼就會把這個key 的存儲分配到 B 上了。一樣,當我鏈接(A,B,C)任何一個節點想獲取'key'這個key時,也會這樣的算法,而後內部跳轉到B節點上獲取數據

新增一個主節點:code

新增一個節點D,redis cluster的這種作法是從各個節點的前面各拿取一部分slot到D上,我會在接下來的實踐中實驗。大體就會變成這樣:部署

節點A覆蓋1365-5460
節點B覆蓋6827-10922
節點C覆蓋12288-16383
節點D覆蓋0-1364,5461-6826,10923-12287

一樣刪除一個節點也是相似,移動完成後就能夠刪除這個節點了。虛擬機

相關文章
相關標籤/搜索