Redis叢集配置
Redis主從複制(一主兩仆)
- 複制2份conf配置檔案
- 在複制的配置檔案中分别修改端口号為6380、6381(注意:該端口号可以随意修改,隻要不使用已被占用的端口号即可),并分别命名為redis.windows6380.conf、redis.windows6381.conf
- 進入Redis目錄,啟動主Redis,指令如下
redis-server.exe redis.windows.conf
- 分别啟動從Redis,指令如下
redis-server.exe redis.windows6380.conf
redis-server.exe redis.windows6381.conf
- 分别啟動3個Redis用戶端
redis-cli.exe -p 6379
redis-cli.exe -p 6380
redis-cli.exe -p 6381
- 在主Redis中儲存資料,并在從Redis中檢視
主從複制原理
- slave伺服器連接配接到master伺服器,便開始進行資料同步,發送psync指令。
- master伺服器收到psync指令之後,開始執行bgsave指令生成RDB快照檔案并使用緩存區記錄此後執行的所有寫指令。
- master伺服器bgsave執行完之後,就會向所有Slava伺服器發送快照檔案,并在發送期間繼續在緩沖區内記錄被執行的寫指令。
- slave伺服器收到RDB快照檔案後,會将接收到的資料寫入磁盤,然後清空所有舊資料,在從本地磁盤載入收到的快照到記憶體中,同時基于舊的資料版本對外提供服務。
- master伺服器發送完RDB快照檔案之後,便開始向slave伺服器發送緩沖區中的寫指令。
- slave伺服器完成對快照的載入,開始接受指令請求,并執行來自主伺服器緩沖區的寫指令;
- 如果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