最適合新手的Redis Cluster搭建過程

好記性不如爛筆頭,記錄分片高可用Redis Cluster的搭建過程

Redis集羣演進過程

  1. Redis單節點
  2. 主從複製:
    複製主要實現了數據的多機備份,以及對於讀操作的負載均衡和簡單的故障恢復。
    故障恢復無法自動化;寫操作無法負載均衡;存儲能力受到單機的限制。
  3. 哨兵(Sentinel):
    在複製的基礎上,哨兵實現了自動化的故障恢復。
    缺陷是寫操作無法負載均衡;存儲能力受到單機的限制。
  4. Cluster集羣:
    通過分片集羣,Redis解決了寫操作無法負載均衡,以及存儲能力受到單機限制的問題,而且也具有故障遷移(主從切換)的功能,實現了較爲完善的高可用方案。

科普特性

請對照上面的架構圖

  • redis cluster不支持單機版本的16個默認數據庫,僅有0數據庫, select命令被禁用
  • key空間被劃分爲16384個哈希槽,每個master節點負責處理16384個哈希槽的子集;
    當集羣沒有發生重配,集羣是穩定的
  • 每個master都可能有1個或多個slave節點, 這些節點將在網絡分區或者發生故障時嘗試替代master節點, 同時這些slave節點也可用於支撐大規模的讀操作
  • 將key映射到哈希操作的算法是 hash_slot = CRC16(16)mod 16384

例外:key hash tags:
{user1000}.following和{user1000}.followers兩個鍵值將被放在一個哈希槽,因爲只有子字符串user1000將被用來計算哈希槽。

  • Cluster bus: 每個redis節點都有一個用於集羣節點間通信的tcp端口(在原客戶端訪問端口之上加上1000),
  • 節點使用gossip協議和配置更新機制,以避免在正常情況下在節點之間交換過多的消息,因此交換的消息數量不是指數級的
  • redis客戶端可以向集羣中每個節點發送查詢(包括從節點),節點將會分析查詢key,找到負責對應哈希槽的節點。

當前節點能處理最好,不能處理將返回 MOVED error、哈希槽、能處理的節點,客戶端將自行定向到特定新節點查詢。

  • 一般情況下slave節點會將客戶端請求重定向到負責對應哈希槽的master節點,但是爲了支撐大規模讀,可以給slave節點開啓 READONLY

搭建Redis Cluster

本文使用一個單物理機,搭建僞Redis Cluster(3主3從)

  1. 創建redis-cluster目錄,存放集羣
  2. 下載最新版redis-6.2.4, 將bin目錄下的可執行文件、redis.conf拷貝到同級目錄redis01
  3. 修改redis01 目錄下redis.conf配置:
    • port 7001
    • cluster-enabled yes // 之前被註釋
  4. 將redis01拷貝多個,形成redis02, redis02, redis04, redis05,redis06 ,
    修改對應redis.conf port爲7002 7003 7004 7005 7006

  1. 啓動6個redis節點,使用start.sh腳本( chmod +x start.sh)
    // 每個啓動命令後面的& 表示後臺啓動
cd redis01
./redis-server redis.conf &
cd ..
cd redis02
./redis-server redis.conf  &
cd ..
cd redis03
./redis-server redis.conf  &
cd ..
cd redis04
./redis-server redis.conf &
cd ..
cd redis05
./redis-server redis.conf &
cd ..
cd redis06
./redis-server redis.conf &
cd ..

  1. 準備組建redis cluster

redis 5+可以使用redis-cli 特定命令來組建集羣; redis3,4使用redis-trib.rb來協助組建。

使用redis-cli --cluster命令創建由6個節點組成的redis cluser,其中cluster-replicas 1將爲每個master節點創建slave節點(不帶上這個cluster-replicas,會創建了6個master節點組成的redis cluster).

redis-cli --cluster create 127.0.0.1:7001 \
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005   127.0.0.1:7006 \
--cluster-replicas 1

  1. 驗證集羣狀態
    使用 redis-cli -p 7001 -c登錄節點
    使用cluster nodes查看節點狀態

以上操作搭建了由3master 3Slave形成的高可用redis cluster,
節點角色由自動生成的nodes.conf文件維護

  1. 客戶端實操


如果覺得以上過程很繁瑣,Redis官方提供了另外的工具,在utils目錄下存在create-cluster腳本。

  1. create-cluster start
  2. create-cluster create
    就會創建3 mater 3 slave組成的redis cluster(首節點端口從30001 開始),這樣前置知識可能沒有按部就班更清晰。

總結

以上就是Redis Cluster科普級別的知識, 幫助大家快速全面瞭解Redis Cluster, 快速搭建Redis Cluster。
好記性不如爛筆頭,倒騰一次,記錄一次。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章