Redis集羣部署 Redis集羣部署

Redis集羣部署

Redis集羣有多種部署模式,包括主從模式、哨兵模式、集羣模式


主從模式

  主從模式可以是一主一從或者一主多從,主從模式並不是分佈式分片存儲,而是每一臺設備都擁有全部的數據;
  實際的運行中都是直接連接到主機上工作,備機通常只是做個數據備份而已。

主從模式配置

主機

masterauth pass

  主機只需要設置一個密碼,從機需要此密碼用來連接主機

從機

# 主節點的地址
slaveof 127.0.0.1 6379
# 主節點的密碼
masterauth master-password
# 設置從機僅可讀
slave-read-only yes

主從模式的特點

  • 主從模式下主機可讀可寫,從機只可讀;即使設置從機允許可寫,從機的數據在主從同步也會後被覆蓋
  • 主從模式下在啓動時從機是全量同步,此後僅是增量同步
  • 主機應當要做持久化備份,因爲如果主機掛掉後沒有持久化數據,在主從同步後從機的數據也會消失
  • 當主機掛掉後備機並不會自動升級爲主機,也就是說主機掛掉了多機就掛掉了

哨兵模式

  哨兵模式下的Redis節點部署實際上和主從模式一致,只是多了哨兵節點,哨兵節點也可以看作是某種意義上的Redis節點;
  哨兵節點的作用就是監控主節點的健康,哨兵模式和主從模式唯一的區別就是:主節點掛掉後會自動將從機升級爲主機工作

哨兵模式配置

哨兵模式下主從節點的配置、部署不變,配置上只是要加上哨兵節點的配置而已

配置

#配置端口
port 6379
#以守護進程模式啓動
daemonize yes
#pid的存放文件
pidfile /var/run/sentinel.pid
#日誌文件名
logfile "sentinel.log"
#存放備份文件以及日誌等文件的目錄
dir "/opt/sentinel/data"

# 監聽主節點,mymaster是主節點的名字(自己取的),哨兵是可以監聽多個主節點的
# 2表示至少需要兩個或兩個以上的哨兵認爲主機掛掉後纔是掛掉
sentinel monitor mymaster 192.168.11.128 6379 2
# Redis服務器的密碼
sentinel auth-pass mymaster 123456

#30秒ping不通主節點的信息,主觀認爲master宕機
sentinel down-after-milliseconds mymaster 30000
#故障轉移後重新主從複製,1表示串行,>1並行
sentinel parallel-syncs mymaster 1
#故障轉移開始,三分鐘內沒有完成,則認爲轉移失敗
sentinel failover-timeout mymaster 180000

啓動哨兵

redis-sentinel sentinel.conf
  • 哨兵節點是獨立於Redis節點的進程,可以部署在任意機器上,只要網絡可通即可
  • 哨兵與哨兵之間通過Redis的訂閱、推送機制來通信,哨兵的配置文件中並不需要關注其他哨兵
  • 哨兵每秒會通過PING命令來判斷節點的存活,在主節點掛掉後哨兵會進行投票,票數大於sentinel monitor的配置機進行切換
  • 哨兵個數應該儘可能爲奇數個,票數配置爲(n/2+1)
  • 哨兵模式下主、從節點的配置文件會被自動更改

哨兵模式的工作

  哨兵模式下的主從節點的工作狀態並沒有改變,只是主從可能會自動切換;所以應該正常工作流程應該是先連接到哨兵節點查詢主從節點地址,再直接連到節點上開始執行命令。

  哨兵節點實際上就是Redis的一個服務器實例,使用redis-cli直連就可以

SENTINEL masters
# 查詢所有監控的主節點
SENTINEL slaves mymaster
# 查詢mymaster這個主節點的從機
SENTINEL get-master-addr-by-name mymaster
# 查詢mymaster的地址

  在查詢到地址之後的處理就和Redis主從模式完全一致

集羣模式

集羣模式是真正的分佈式部署,Redis採用一致性HASH將數據分片存儲到各個Redis節點中;

哨兵模式的特點

  • 哨兵模式是真正的分佈式部署,能夠利用多機的內存、性能
  • Redis的集羣部署必須要3個主節點、3個從節點;3個主節點是集羣部署的要求,每個節點必須要有從節點是因爲每個節點存儲一部分數據,如果一個掛掉了那個整個集羣的數據就不全
  • 工作時連接到任意一個節點即可進行讀取寫入

哨兵模式的配置

集羣配置

#配置端口
port 6379
#以守護進程模式啓動
daemonize yes
#pid的存放文件
pidfile /var/run/redis.pid
#日誌文件名
logfile "redis.log"
#存放備份文件以及日誌等文件的目錄
dir "/opt/redis/data"

cluster-enabled yes                     #開啓集羣
cluster-config-file nodes-6379.conf     #集羣配置信息文件,由Redis自行更新,不用手動配置。
cluster-node-timeout 15000              #節點互連超時時間,毫秒爲單位


cluster-slave-validity-factor 10        #在進行故障轉移的時候全部slave都會請求申請爲master,但是有些slave可能與master斷開連接一段時間了導致數據過於陳舊,不應該被提升爲master。該參數就是用來判斷slave節點與master斷線的時間是否過長。判斷方法是:比較slave斷開連接的時間和(node-timeout * slave-validity-factor)+ repl-ping-slave-period如果節點超時時間爲三十秒, 並且slave-validity-factor爲10,假設默認的repl-ping-slave-period是10秒,即如果超過310秒slave將不會嘗試進行故障轉移

cluster-migration-barrier 1             #master的slave數量大於該值,slave才能遷移到其他孤立master上,如這個參數被設爲2,那麼只有當一個主節點擁有2個可工作的從節點時,它的一個從節點纔會嘗試遷移。

cluster-require-full-coverage yes       #集羣所有節點狀態爲ok才提供服務。建議設置爲no,可以在slot沒有全部分配的時提供服務

  所有的節點全部按此配置即可

啓動服務

redis-server redis.conf

  啓動Redis節點,主備的關係由集羣控制,這裏只需要啓動節點即可

redis-cli -a 123456 --cluster create 127.0.0.1:7001 ... 127.0.0.1:7006 --cluster-replicas 1
# -a 指定密碼
# create 後指定6個節點的地址
# --cluster-replicas 指定主節點要有幾個從節點

  創建一個6個節點的集羣,每個主節點都要有一個從節點

redis-cli -c -h 127.0.0.1 -p 7001 -a 123456                  # -c,使用集羣方式登錄

  連接到集羣當中去

CLUSTER NODES                   # 查看節點信息
CLUSTER MEET 127.0.0.1 7007     # 動態添加節點

CLUSTER FORGET 1a1c7f02fce87530bd5abdfc98df1cffce4f1767
# 從集羣中刪除節點,FORGET後帶的ID可以從CLUSTER NODES的結果中看到



\color{red}{2021年4月28日23點28分,這裏只做了簡單的說明,後續補充一些圖片和說明,有時間再分析一下實現機制}

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