1. 程式人生 > 資料庫 >Redis主從哨兵模式搭建

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