Redis哨兵模式(sentinel)部署


1 主機環境

我這里使用的操作系統是centos 6.5,安裝在vmware上,共三台。

主機名 IP 操作系統 用戶名 安裝目錄
node1 192.168.1.101 centos 6.5 wxyuan /redis
node2 192.168.1.102 centos 6.5 wxyuan /redis
node3 192.168.1.103 centos 6.5 wxyuan /redis

2 進程端口規划

node1 node2 node3
redis,6379 redis,6379 redis,6379
sentinel,26379 sentinel,26379 sentinel,26379

redis下載地址:http://download.redis.io/releases/,選擇需要的版本下載,我使用的版本是redis-3.2.1.tar.gz

3 安裝redis

3.1 檢查是否安裝了gcc

[wxyuan@node1 ~]$ rpm -qa|grep gcc
libgcc-4.4.7-4.el6.x86_64
gcc-4.4.7-4.el6.x86_64
gcc-c++-4.4.7-4.el6.x86_64

如果未安裝,可使用yum install gcc 命令安裝

3.2 編譯安裝redis

(1). 解壓redis安裝包tar -zxvf redis-3.2.1.tar.gz
(2). 編譯安裝redis

[wxyuan@node1 ~]$ cd redis-3.2.1
[wxyuan@node1 ~]$ make
[wxyuan@node1 ~]$ make install PREFIX=/redis # PREFIX指定安裝目錄

安裝完成后,在/redis目錄下會新增bin目錄,這里面是啟動redis服務的相關腳本。
創建/redis/conf、/redis/data、/redis/log目錄。

3.3 修改配置文件redis.conf

拷貝redis-3.2.1/redis.conf文件到/redis/conf目錄下,編輯/redis/conf/redis.conf文件
node1主機上修改內容如下

bind 192.168.1.101 127.0.0.1 #綁定多個IP,既可以遠程訪問,也可以本地客戶端訪問
port 6379 #指定端口
appendonly yes #開啟aof持久化
daemonize yes
pidfile "/redis/redis_6379.pid"
logfile "/redis/log/redis_6379.log"
dir "/redis/data"

node2主機上修改內容如下

bind 192.168.1.102 127.0.0.1 #綁定多個IP,既可以遠程訪問,也可以本地客戶端訪問
port 6379 #指定端口
appendonly yes #開啟aof持久化
daemonize yes
pidfile "/redis/redis_6379.pid"
logfile "/redis/log/redis_6379.log"
dir "/redis/data"
slaveof 192.168.1.101 6379

node3主機上修改內容如下

bind 192.168.1.103 127.0.0.1 #綁定多個IP,既可以遠程訪問,也可以本地客戶端訪問
port 6379 #指定端口
appendonly yes #開啟aof持久化
daemonize yes
pidfile "/redis/redis_6379.pid"
logfile "/redis/log/redis_6379.log"
dir "/redis/data"
slaveof 192.168.1.101 6379

3.4 增加配置文件sentinel.conf

在/redis/conf下增加配置文件sentinel.conf,文件內容為:
node1主機上內容如下

bind 192.168.1.101
port 26379
daemonize yes
logfile "/redis/log/sentinel.log"
dir "/redis/data"
sentinel monitor mymaster 192.168.1.101 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

node2主機上內容如下

bind 192.168.1.102
port 26379
daemonize yes
logfile "/redis/log/sentinel.log"
dir "/redis/data"
sentinel monitor mymaster 192.168.1.101 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

node3主機上內容如下

bind 192.168.1.103
port 26379
daemonize yes
logfile "/redis/log/sentinel.log"
dir "/redis/data"
sentinel monitor mymaster 192.168.1.101 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

部分參數說明:
(1) sentinel monitor <masterName> <ip> <port> <quorum>

-masterName 指定maser的名字
-ip 指定master的IP
-port 指定maseter的端口
-quorum quorum是Sentinel需要協商同意master是否可到達的數量。為了真正的標記slave為失敗,並最終是否需要啟動一個故障轉移進程。無論怎樣,quorum只用於檢測故障。為了實際執行故障轉移,Sentinel需要選舉leader並進行授權。這只發生在大多數Sentinel進程的選舉。
(2) down-after-milliseconds選項指定了 Sentinel 認為服務器已經斷線所需的毫秒數。
如果服務器在給定的毫秒數之內, 沒有返回 Sentinel 發送的 PING 命令的回復, 或者返回一個錯誤, 那么 Sentinel 將這個服務器標記為主觀下(subjectively down,簡稱 SDOWN )。
不過只有一個 Sentinel 將服務器標記為主觀下線並不一定會引起服務器的自動故障遷移: 只有在足夠數量的 Sentinel 都將一個服務器標記為主觀下線之后, 服務器才會被標記為客觀下線(objectively down, 簡稱 ODOWN ), 這時自動故障遷移才會執行。
(3) parallel-syncs選項指定了在執行故障轉移時, 最多可以有多少個從服務器同時對新的主服務器進行同步, 這個數字越小, 完成故障轉移所需的時間就越長。
關於sentinel的詳細配置說明請參考Sentinel配置詳解

4 啟動redis和sentinel

在三台主機上分別執行下述命令,啟動redis服務和sentinel服務

[wxyuan@node1 ~]$ cd /redis
[wxyuan@node1 redis$ ./bin/redis-server conf/redis.conf
[wxyuan@node1 redis$ ./bin/redis-sentinel conf/sentinel.conf

5 故障轉移測試

在node1使用redis-cli命令查看主從信息

[wxyuan@node1 redis]$ ./bin/redis-cli -p 6379 info replication
# Replication
role:master
connected_slaves:2

可以看到node1上的redis進程為master,現在kill掉node1上的redis進程,觀察故障轉移情況。
使用redis-cli命令查看主從信息

[wxyuan@node1 redis]$ ./bin/redis-cli -p 6379 -h 192.168.1.102 info replication
# Replication
role:master
connected_slaves:1
slave1:ip=192.168.1.103,port=6379,state=online,offset=13836,lag=1

[wxyuan@node1 redis]$ ./bin/redis-cli -p 6379 -h 192.168.1.103 info replication
# Replication
role:slave
master_host:192.168.1.102
master_port:6379

可以看到node2上的redis進程已經變成了master。重啟node1上的redis進程后,會發現該redis進程已經變成了slave。
另外,可以通過sentinel.log文件觀察故障轉移過程。
注意:此時打開sentinel文件,會發現內容已經被改變了;sentinel進程啟動后,會根據redis進程的運行情況修改sentinel.conf文件內容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM