天天看點

redis-cluster及其主從複制---理順整體思路

     redis cluster是redis的叢集,由于容量的限制,通過叢集的方式可以優化,redis叢集預配置設定有16384額槽,将不同的槽配置設定到不同的節點(機器)上,當需要加入一個key時,可以通過hash算法進行計算,算出具體的槽位,再确定該槽在哪個機器上,即可将插入的key存到機器上,通過hash的方式也達到了負載均衡;

      注意:叢集中的每個節點的資料都是不一樣的,诶個節點隻存部分的槽;

      為了保證高可用性,通過主從複制(哨兵模式)的方式進行備份,或者說是保證叢集的可用性,當某個機器挂掉的時候有對應的從機替代該主機,繼續運作叢集,且不會丢失資料;該方式也實作了讀寫分離,使其更加高效;

      在主從模式下仍然需要持久化的政策,也是通過rdb和aof的同時啟用的方式進行持久化,防止斷電等情況造成的資料丢失;

以下是對上述思路的具體解析:https://www.cnblogs.com/yingchen/p/6763524.html

redis cluster節點配置設定

   現在我們是三個主節點分别是:A, B, C 三個節點,它們可以是一台機器上的三個端口,也可以是三台不同的伺服器。那麼,采用哈希槽 (hash slot)的方式來配置設定16384個slot 的話,它們三個節點分别承擔的slot 區間是:

      節點A覆寫0-5460;

      節點B覆寫5461-10922;

      節點C覆寫10923-16383.

     擷取資料:

      如果存入一個值,按照redis cluster哈希槽的算法: CRC16('key')384 = 6782。 那麼就會把這個key 的存儲配置設定到 B 上了。同樣,當我連接配接(A,B,C)任何一個節點想擷取'key'這個key時,也會這樣的算法,然後内部跳轉到B節點上擷取資料 ;

     新增一個主節點:

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

    節點A覆寫1365-5460

    節點B覆寫6827-10922

    節點C覆寫12288-16383

    節點D覆寫0-1364,5461-6826,10923-12287

     同樣删除一個節點也是類似,移動完成後就可以删除這個節點了。

Redis Cluster主從模式

          redis cluster 為了保證資料的高可用性,加入了主從模式,一個主節點對應一個或多個從節點,主節點提供資料存取,從節點則是從主節點拉取資料備份,當這個主節點挂掉後,就會有這個從節點選取一個來充當主節點,進而保證叢集不會挂掉。

      上面那個例子裡, 叢集有ABC三個主節點, 如果這3個節點都沒有加入從節點,如果B挂掉了,我們就無法通路整個叢集了。A和C的slot也無法通路。

     是以我們在叢集建立的時候,一定要為每個主節點都添加了從節點, 比如像這樣, 叢集包含主節點A、B、C, 以及從節點A1、B1、C1, 那麼即使B挂掉系統也可以繼續正确工作。

     B1節點替代了B節點,是以Redis叢集将會選擇B1節點作為新的主節點,叢集将會繼續正确地提供服務。 當B重新開啟後,它就會變成B1的從節點。

    不過需要注意,如果節點B和B1同時挂了,Redis叢集就無法繼續正确地提供服務了。

繼續閱讀