安裝redis
wget http://download.redis.io/releases/redis-3.2.1.tar.gz
tar -xzf redis-3.2.1.tar.gz
cd redis-3.2.1
make && make instalredis
在/usr/local/ 下新建一個目錄redis-sentinel,而後在此目錄下新建7501/ 7502/ 7503/ 7504/ 7505/ 7506/ 7507/七個目錄。
mkdir /usr/local/redis-sentinel
mkdir /usr/local/redis-sentinel/{7501,7502,7503,7504,7505,7506,7507}app
將redis安裝目錄下的reids.conf,拷貝到前4個目錄下,分別命名爲:redis-7501.conf redis-7502.conf redis-7503.conf redis-7504.conf(名字無所謂只是爲了區分)
cp /root/redis-3.2.1/redis.conf /usr/local/redis-sentinel/7501/redis-7501.conf
cp /root/redis-3.2.1/redis.conf /usr/local/redis-sentinel/7502/redis-7502.conf
cp /root/redis-3.2.1/redis.conf /usr/local/redis-sentinel/7503/redis-7503.conf
cp /root/redis-3.2.1/redis.conf /usr/local/redis-sentinel/7504/redis-7504.confide
修改配置文件內容(以redis-7501.conf爲例)
daemonize yes
pidfile /var/run/redis_7501.pid
port 7501
bind 10.10.172.191 #可選,默認就處理全部請求。
logfile "./redis-7501.log"
dir "/usr/local/redis-sentinel/7501"測試
#redis配置密碼的話,須要如下配置
masterauth "123456"
requirepass "123456"
appendonly yesui
將redis安裝目錄下的sentinel.conf拷貝到7505/ 7506/和7507/目錄下分別命名: sentinel-7505.conf sentinel-7506.conf sentinel-7507.conf
cp /root/redis-3.2.1/sentinel.conf /usr/local/redis-sentinel/7505/sentinel-7505.conf
cp /root/redis-3.2.1/sentinel.conf /usr/local/redis-sentinel/7506/sentinel-7506.conf
cp /root/redis-3.2.1/sentinel.conf /usr/local/redis-sentinel/7507/sentinel-7507.confspa
修改配置文件(以sentinel-7505.conf爲例)
daemonize yes
port 7505日誌
#指定工做目錄
dir "/usr/local/redis-sentinel/7505"no
logfile "./sentinel.log"orm
#指定別名 主節點地址 端口 哨兵個數(有幾個哨兵監控到主節點宕機執行轉移)
sentinel monitor mymaster 10.10.172.191 7501 2server
#若是哨兵3s內沒有收到主節點的心跳,哨兵就認爲主節點宕機了,默認是30秒
sentinel down-after-milliseconds mymaster 3000blog
#選舉出新的主節點以後,能夠同時鏈接從節點的個數
sentinel parallel-syncs mymaster 1
#若是10秒後,master仍沒活過來,則啓動failover,默認180s
sentinel failover-timeout mymaster 10000
#配置鏈接redis主節點密碼
sentinel auth-pass mymaster 123456
啓動redis和sentinel
分別啓動4個redis實例
redis-server /usr/local/redis-sentinel/7501/redis-7501.conf
redis-server /usr/local/redis-sentinel/7502/redis-7502.conf
redis-server /usr/local/redis-sentinel/7503/redis-7503.conf
redis-server /usr/local/redis-sentinel/7504/redis-7504.conf
而後分別登錄7502 7503 7504三個實例,動態改變主從關係,成爲7501的slave
redis-cli -h 192.168.111.146 -p 7502 -a 123456
192.168.111.146:7502> SLAVEOF 127.0.0.1 7501
能夠事先直接修改從實例redis文件追加slaveof 192.168.111.146 7501
192.168.111.146:7501> info replication
# Replication
role:master
connected_slaves:3
slave0:ip=10.10.172.191,port=7502,state=online,offset=127,lag=0
slave1:ip=10.10.172.191,port=7503,state=online,offset=127,lag=0
slave2:ip=10.10.172.191,port=7504,state=online,offset=127,lag=1
master_repl_offset:127
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:126
之後臺啓動模式啓動兩個sentinel(哨兵):
redis-sentinel /usr/local/redis-sentinel/7505/sentinel-7505.conf
redis-sentinel /usr/local/redis-sentinel/7506/sentinel-7506.conf
redis-sentinel /usr/local/redis-sentinel/7507/sentinel-7507.conf
測試:
登錄到 master:
# redis-cli -h 10.10.172.191 -p 7501 -a 123456
192.168.111.146:7501> info Replication #列出Master的信息
192.168.111.146:7501> set name "zhangsan"
# redis-cli -h 10.10.172.191 -p 7502 -a 123456
192.168.111.146:7502> get name
"zhangsan"
192.168.111.146:7502> set age 24
(error) READONLY You can't wri
te against a read only slave.
目前7501是master, 咱們強制kill掉 7501 的進程之後,查看sentinel打出的日誌信息:
ps -ef|grep redis
kill 7927
tail -fn 10 /usr/local/redis-sentinel/7505/sentinel.log
能夠看到master從7501轉到7504