最通俗的解釋:sentinel 一般翻譯成哨兵,就是放哨的,這裏它就是用來監控主從節點的健康狀況。客戶端鏈接redis主從的時候,先鏈接 sentinel,sentinel會告訴客戶端主redis的地址是多少,而後客戶端鏈接上redis並進行後續的操做。當主節點掛掉的時候,客戶端就得不到鏈接了於是報錯了,客戶端從新想sentinel詢問主master的地址,而後客戶端獲得了[新選舉出來的主redis],而後又能夠愉快的操做了。redis
瞭解哨兵的基本條件算法
# 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
一樣刪除一個節點也是相似,移動完成後就能夠刪除這個節點了。虛擬機