天天看點

「Redis實戰」Windows下搭建Redis叢集就是這麼簡單!

作者:猿學堂

Redis叢集配置

Redis主從複制(一主兩仆)

  1. 複制2份conf配置檔案
  2. 在複制的配置檔案中分别修改端口号為6380、6381(注意:該端口号可以随意修改,隻要不使用已被占用的端口号即可),并分别命名為redis.windows6380.conf、redis.windows6381.conf
  3. 進入Redis目錄,啟動主Redis,指令如下
redis-server.exe redis.windows.conf           
  1. 分别啟動從Redis,指令如下
redis-server.exe redis.windows6380.conf
 
 redis-server.exe redis.windows6381.conf           
  1. 分别啟動3個Redis用戶端
redis-cli.exe -p 6379
 redis-cli.exe -p 6380
 redis-cli.exe -p 6381           
  1. 在主Redis中儲存資料,并在從Redis中檢視

主從複制原理

  1. slave伺服器連接配接到master伺服器,便開始進行資料同步,發送psync指令。
  2. master伺服器收到psync指令之後,開始執行bgsave指令生成RDB快照檔案并使用緩存區記錄此後執行的所有寫指令。
  3. master伺服器bgsave執行完之後,就會向所有Slava伺服器發送快照檔案,并在發送期間繼續在緩沖區内記錄被執行的寫指令。
  4. slave伺服器收到RDB快照檔案後,會将接收到的資料寫入磁盤,然後清空所有舊資料,在從本地磁盤載入收到的快照到記憶體中,同時基于舊的資料版本對外提供服務。
  5. master伺服器發送完RDB快照檔案之後,便開始向slave伺服器發送緩沖區中的寫指令。
  6. slave伺服器完成對快照的載入,開始接受指令請求,并執行來自主伺服器緩沖區的寫指令;
  7. 如果slave node開啟了AOF,那麼會立即執行BGREWRITEAOF,重寫AOF。

Redis哨兵模式

同樣複制一份配置檔案,并修改端口号為9527,檔案命名格式同上(檔案格式不固定,能區分即可),同時在配置檔案中加入如下配置:

sentinel monitor mymaster 127.0.0.1 6379 1
 sentinel down-after-milliseconds mymaster 60000
 sentinel failover-timeout mymaster 180000
 sentinel parallel-syncs mymaster 1           

第一行配置訓示 Sentinel 去監視一個名為 mymaster 的主伺服器, 這個主伺服器的 IP 位址為 127.0.0.1 , 端口号為 6379 , 而将這個主伺服器判斷為失效至少需要 1 個 Sentinel 同意 (隻要同意 Sentinel 的數量不達标,自動故障遷移就不會執行)

不過要注意, 無論你設定要多少個 Sentinel 同意才能判斷一個伺服器失效, 一個 Sentinel 都需要獲得系統中多數(majority) Sentinel 的支援, 才能發起一次自動故障遷移

換句話說, 在隻有少數(minority) Sentinel 程序正常運作的情況下, Sentinel 是不能執行自動故障遷移的。

其他選項格式如下:

sentinel <選項的名字> <主伺服器的名字> <選項的值>           
  • down-after-milliseconds:選項指定了 Sentinel 認為伺服器已經斷線所需的毫秒數。如果伺服器在給定的毫秒數之内, 沒有傳回 Sentinel PING發送的指令的回複, 或者傳回一個錯誤, 那麼 Sentinel 将這個伺服器标記為主觀下線,不過隻有一個 Sentinel 将伺服器标記為主觀下線并不一定會引起伺服器的自動故障遷移: 隻有在足夠數量的 Sentinel 都将一個伺服器标記為主觀下線之後, 伺服器才會被标記為客觀下線(objectively down, 簡稱 ODOWN ), 這時自動故障遷移才會執行。
  • parallel-syncs:選項指定了在執行故障轉移時, 最多可以有多少個從伺服器同時對新的主伺服器進行同步, 這個數字越小, 完成故障轉移所需的時間就越長。

常用配置清單

// 指定哨兵監控的 master 節點配置
 // mymaster redis 節點名稱,1 表示判斷 redis 節點失效至少需要 1 個 Sentinel 節點同意
 sentinel monitor mymaster 192.168.137.40 6379 1;
 // redis 節點存在密碼時驗證密碼
 sentinel auth-pass mymaster 123456;
 // 哨兵監控的節點多久不能正常傳回消息後置為主觀下線狀态
 sentinel down-after-milliseconds mymaster 5000;
 // 故障轉移(主備切換)最大時長,超過該時長未完成轉移則認為本次轉移失敗
 sentinel failover-timeout mymaster 18000;
 // 當發生故障轉移時,最多同時有多少個 slave 節點同時從新 master 節點同步資料
 // 值越小故障轉移時間越長,值越大同時有更少的 slave 節點可以執行 get 操作
 sentinel parallel-syncs <master-name> <numslaves>;
 // 配置當出現某種狀态後出發腳本,例如異常通知管理者等等。腳本傳回1将重複執行,大于1将不再執行
 // 當 sentinel 監控節點有任何警告級别的事件發生時調用該腳本,常用來發郵件
 sentinel notification-script <master-name> <script-path>;
 // 當 sentinel 監控節點發生故障轉移時調用該腳本,用來通信新的主備機器
 sentinel client-reconfig-script <master-name> <script-path>;           

主觀下線和客觀下線

  • 主觀下線(Subjectively Down, 簡稱 SDOWN)指的是單個 Sentinel 執行個體對伺服器做出的下線判斷。
  • 客觀下線(Objectively Down, 簡稱 ODOWN)指的是多個 Sentinel 執行個體在對同一個伺服器做出 SDOWN 判斷, 并且通過 SENTINEL is-master-down-by-addr 指令互相交流之後, 得出的伺服器下線判斷。 (一個 Sentinel 可以通過向另一個 Sentinel 發送 SENTINEL is-master-down-by-addr 指令來詢問對方是否認為給定的伺服器已下線。)

啟動哨兵

redis-server.exe redis.windows9527.conf --sentinel           

繼續閱讀