Redis主從哨兵模式搭建
一、Redis主從模式配置
1.2、環境說明
主機名稱 |
IP地址 |
redis版本和角色說明 |
master |
20.0.0.10 |
主伺服器 Redis 5.0.7 |
slave1 |
20.0.0.20 |
從伺服器 Redis 5.0.7 |
slave2 |
20.0.0.30 |
從伺服器 Redis 5.0.7 |
Slave3 |
20.0.0.40 |
從伺服器 Redis 5.0.7 |
1.3、Redis安裝
所有伺服器上安裝,在master上演示
[root@master ~]# tar zxvf redis-5.0.7.tar.gz
[root@master ~]# cd redis-5.0.7/
[root@master redis-5.0.7]# make -j4
[root@master redis-5.0.7]# make PREFIX=/usr/local/redis install
[root@master redis-5.0.7]# ln -s /usr/local/redis/bin/* /usr/local/bin/
[root@master redis-5.0.7]# cd utils/
[root@master utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379]
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log]
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379]
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server]
Selected config:
Port : 6379
Config file : /etc/redis/6379.conf
Log file : /var/log/redis_6379.log
Data dir : /var/lib/redis/6379
Executable : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
1.4、修改配置檔案
master配置檔案修改
[root@master src]# vim /etc/redis/6379.conf
#69行 修改監聽地址為20.0.0.10(在實驗環境使用),現網環境建議繫結從伺服器IP地址
bind 20.0.0.10
#136行 開啟守護程序
daemonize yes
#171行 修改日誌檔案目錄
logfile /var/log/redis_6379.log
#263行 修改工作目錄
dir /var/lib/redis/6379
#699行 開啟AOF持久化功能
appendonly yes
[root@master utils]# /etc/init.d/redis_6379 restart #開啟R
[root@master utils]# netstat -anpt | grep redis
tcp 0 0 20.0.0.10:6379 0.0.0.0:* LISTEN 57685/redis-server
1.4.2、slave1配置檔案修改
[root@slave1 src]# vim /etc/redis/6379.conf
#69行 修改監聽地址為20.0.0.10(在實驗環境使用),現網環境建議繫結從伺服器IP地址
bind 20.0.0.20
#136行 開啟守護程序
daemonize yes
#171行 修改日誌檔案目錄
logfile /var/log/redis_6379.log
#263行 修改工作目錄
dir /var/lib/redis/6379
#699行 開啟AOF持久化功能
appendonly yes
#287行 修改IP和埠
replicaof 20.0.0.10 6379
[root@slave1 utils]# /etc/init.d/redis_6379 restart #開啟Redis
[root@slave1 utils]# netstat -anpt | grep redis #檢視埠號
tcp 0 0 20.0.0.20:6379 0.0.0.0:* LISTEN 60864/redis-server
tcp 0 0 20.0.0.20:6379 20.0.0.10:50448 ESTABLISHED 60864/redis-server
slave2配置檔案修改
[root@slave2 src]# vim /etc/redis/6379.conf
#69行 修改監聽地址為20.0.0.10(在實驗環境使用),現網環境建議繫結從伺服器IP地址
bind 20.0.0.30
#136行 開啟守護程序
daemonize yes
#171行 修改日誌檔案目錄
logfile /var/log/redis_6379.log
#263行 修改工作目錄
dir /var/lib/redis/6379
#699行 開啟AOF持久化功能
appendonly yes
#287行 修改IP和埠
replicaof 20.0.0.10 6379
[root@slave2 utils]# /etc/init.d/redis_6379 restart #開啟Redis
[root@slave2 utils]# netstat -anpt | grep redis
tcp 0 0 20.0.0.30:6379 0.0.0.0:* LISTEN 18701/redis-server
tcp 0 0 20.0.0.30:43508 20.0.0.10:26379 ESTABLISHED 57434/redis-sentine
slave3配置檔案修改
[root@slave3 src]# vim /etc/redis/6379.conf
#69行 修改監聽地址為20.0.0.10(在實驗環境使用),現網環境建議繫結從伺服器IP地址
bind 20.0.0.40
#136行 開啟守護程序
daemonize yes
#171行 修改日誌檔案目錄
logfile /var/log/redis_6379.log
#263行 修改工作目錄
dir /var/lib/redis/6379
#699行 開啟AOF持久化功能
appendonly yes
#287行 修改IP和埠
replicaof 20.0.0.10 6379
[root@slave3 utils]# /etc/init.d/redis_6379 restart #開啟Redis
[root@slave3 utils]# netstat -anpt | grep redis
tcp 0 0 20.0.0.40:6379 0.0.0.0:* LISTEN 58845/redis-server
tcp 0 0 20.0.0.40:6379 20.0.0.30:35056 ESTABLISHED 58845/redis-server
1.5、測試效果
1.5.1、驗證主從效果(master上看日誌)
[root@master utils]# vi /var/log/redis_6379.log
1.5.2、master上驗證從節點
[root@master utils]# redis-cli -h 20.0.0.10 -p 6379
20.0.0.10:6379> info replication
# Replication
role:master
connected_slaves:3
slave0:ip=20.0.0.20,port=6379,state=online,offset=2702,lag=0
slave1:ip=20.0.0.30,port=6379,state=online,offset=2702,lag=1
slave2:ip=20.0.0.40,port=6379,state=online,offset=2702,lag=2
二、Redis哨兵模式
2.1、Redis sentinel介紹
Redis Sentinel是Redis高可用的實現方案。Sentinel是一個管理多個Redis例項的工具,它可以實現對Redis的監控、通知、自動故障轉移。
2.2、哨兵模式的作用
① 監控
不斷的檢查master和slave是否正常執行。master存活檢測、master與slave執行情況檢測
② 通知(提醒)
當被監控的伺服器出現問題時,向其他(哨兵間,客戶端)傳送通知。
③ 自動故障轉移
斷開master與slave連線,選取一個slave作為master,將其他slave連線到新的master,並告知客戶端新的伺服器地址
PS:哨兵也是一臺redis伺服器,只是不提供資料服務
哨兵的啟動依賴於主從模式,所以須把主從模式安裝好的情況下再去做哨兵模式,所有節點上都需要部署哨兵模式,哨兵模式會監控所有的redis工作節點是否正常,當
master出現問題的時候,因為其他節點與主節點失去聯絡,因此會投票,投票過半就認為這個master的確出現問題,然後會通知哨兵間,然後從slaves中選取一個作為新的
master,至少需要3個或3個以上伺服器
2.3、環境說明
主機名稱 |
IP地址 |
redis版本和角色說明 |
master |
20.0.0.10:26379 |
Sentinel1 Redis 5.0.7 |
slave1 |
20.0.0.20:26379 |
Sentinel2 Redis 5.0.7 |
slave2 |
20.0.0.30:26379 |
Sentinel3 Redis 5.0.7 |
Slave3 |
20.0.0.40:26379 |
Sentinel4 Redis 5.0.7 |
2.4、哨兵模式配置
所有節點都需要修改
[root@master ~]# vi redis-5.0.7/sentinel.conf
17行/protected-mode no #關閉保護模式
26行/daemonize yes #指定sentinel為後臺啟動
36行/logfile "/var/log/sentinel.log" #指定日誌存放路徑
65行/dir "/var/lib/redis/6379" #指定資料庫存放路徑
84行/sentinel monitor mymaster 20.0.0.10 6379 2 #至少幾個哨兵檢測到主伺服器故障了,才會進行故障遷移,全部指向masterIP
113行/sentinel down-after-milliseconds mymaster 30000 #判定伺服器down掉的時間週期,預設30000毫秒(30秒)
146行/sentinel failover-timeout mymaster 180000 #故障節的的最大超時時間為180000(180秒)
2.5、啟動哨兵模式
先啟master,再啟slave
[root@master ~]# redis-sentinel redis-5.0.7/sentinel.conf &
[1] 58571
[root@slave1 ~]# redis-sentinel redis-5.0.7/sentinel.conf &
[1] 19812
[root@slave2 ~]# redis-sentinel redis-5.0.7/sentinel.conf &
[1] 59917
2.6、檢視哨兵資訊
master檢視
[root@master ~]# redis-cli -h 20.0.0.10 -p 26379 info Sentinel
slave1檢視
[root@slave1 ~]# redis-cli -h 20.0.0.20 -p 26379 info Sentinel
slave2上檢視
[root@slave2 ~]# redis-cli -h 20.0.0.20 -p 26379 info Sentinel
2.7、故障模擬
2.7.1、
檢視master程序號
[root@master ~]# ps -ef | grep redis
殺死master上redis-server的程序號
[root@master ~]# kill -9 57685 #master上redis-server的程序號
2.7.2、驗證結果
[root@master ~]# tail -f /var/log/sentinel.log
[root@master ~]# redis-cli -p 26379 INFO Sentinel