天天看點

Redis單機模拟搭建主從複制及哨兵模式

1、環境準備

系統centos7,建立一個目錄:

mkdir /usr/local/redis
           

下載下傳或上傳redis安裝包到/usr/local/redis目錄:

Redis單機模拟搭建主從複制及哨兵模式

解壓安裝包至目前目錄:

Redis單機模拟搭建主從複制及哨兵模式

編譯,進入到解壓目錄進行make:

cd /usr/local/redis/redis-5.0.4
make
           

編譯完成後,進入src目錄進行安裝:

cd src
# 我這裡将redis安裝至/usr/local/redis目錄下,這個目錄與上面建立的目錄沒有直接關系,可修改為其他目錄
make install PREFIX=/usr/local/redis
           

安裝完成後,會發現目錄下面多了一個bin目錄:

Redis單機模拟搭建主從複制及哨兵模式

進入bin目錄,會發現安裝的redis指令腳本檔案:

Redis單機模拟搭建主從複制及哨兵模式
  • redis-benchmark:性能測試工具
  • redis-check-aof:修複有問題的AOF檔案
  • redis-check-dump:修複有問題的dump.rdb檔案
  • redis-cli:用戶端,操作入口
  • redis-sentinel:redis叢集使用
  • redis-server:Redis伺服器啟動指令

至此,redis已經編譯、安裝完成。

2、模拟配置主從模式

建立redis啟動檔案目錄:

mkdir /usr/local/redis/etc
           

我們預備三個節點,一個主節點,兩個從節點,通過不同的端口來模拟三台不同的機器,具體的操作就是配置三個redis.conf檔案,分别配置不同的端口,此處我們用7001、7002、7003三個端口,其中7001為主,7002和7003為從:

cd /usr/local/redis/etc
mkdir ./7001 ./7002 ./7003
           

複制redis.conf分到到./7001 ./7002 ./7003三個目錄下面:

cd /usr/local/redis/redis-5.0.4
cp redis.conf /usr/local/redis/etc/7001/
cp redis.conf /usr/local/redis/etc/7002/
cp redis.conf /usr/local/redis/etc/7003/
           

建立資料和日志存儲目錄:

cd /usr/local/redis/
mkdir data/
mkdir logs/
mkdir data/7001 data/7002 data/7003
mkdir logs/7001 logs/7002 logs/7003
           

修改主節點(7001)配置檔案:

cd /usr/local/redis/etc/7001/
vi redis.conf
##具體需要修改的配置
port 7001
##redis一般都在内網運作,是以注釋掉#bind 127.0.0.1
# bind 127.0.0.1
關閉保護模式,protected-mode 把yes改為no
protected-mode no
##開啟背景守護程序模式啟動
daemonize yes
##密碼
requirepass 123456
##
masterauth 123456
pidfile /var/run/redis_7001.pid
###指明日志檔案名
logfile "/usr/local/redis/logs/7001/7001.log"
dir /usr/local/redis/data/7001
           

修改從節點(7002)配置檔案:

cd /usr/local/redis/etc/7002/
vi redis.conf
##具體需要修改的配置
port 7002
##redis一般都在内網運作,是以注釋掉#bind 127.0.0.1
# bind 127.0.0.1
關閉保護模式,protected-mode 把yes改為no
protected-mode no
##開啟背景守護程序模式啟動
daemonize yes
##密碼
requirepass 123456
##
masterauth 123456
pidfile /var/run/redis_7002.pid
###指明日志檔案名
logfile "/usr/local/redis/logs/7001/7002.log"
dir /usr/local/redis/data/7002
           

修改從節點(7003)配置檔案:

cd /usr/local/redis/etc/7003/
vi redis.conf
##具體需要修改的配置
port 7003
##redis一般都在内網運作,是以注釋掉#bind 127.0.0.1
# bind 127.0.0.1
關閉保護模式,protected-mode 把yes改為no
protected-mode no
##開啟背景守護程序模式啟動
daemonize yes
##密碼
requirepass 123456
##
masterauth 123456
pidfile /var/run/redis_7003.pid
###指明日志檔案名
logfile "/usr/local/redis/logs/7001/7003.log"
dir /usr/local/redis/data/7003
           

啟動redis執行個體:

cd /usr/local/redis/bin
./redis-server /usr/local/redis/etc/7001/redis.conf
./redis-server /usr/local/redis/etc/7002/redis.conf
./redis-server /usr/local/redis/etc/7003/redis.conf
           

檢視redis程序:

Redis單機模拟搭建主從複制及哨兵模式

下面我們通過redis-cli連接配接進去,看一看redis是否啟動成功

Redis單機模拟搭建主從複制及哨兵模式

可見,redis執行個體已成功啟動。接下來,我們來配置redis主從。

前面已經說了,7001為主,7002和7003為從,因為主從模式下,master是不需要配置的,隻需要配置從服務的salveof即可,下面我們在/user/local/redis/etc/7002/redis.conf  和 /user/local/redis/etc/7003/redis.conf中添加如下配置:

vi /usr/local/redis/etc/7002/redis.conf 
slaveof 10.59.78.31 7001

vi /usr/local/redis/etc/7003/redis.conf
slaveof 10.59.78.31 7001
           

重新開機redis服務,連接配接7001節點使用info replication指令檢視發現該節點已經如預期結果成為了master節點:

Redis單機模拟搭建主從複制及哨兵模式

而7002和7003則同樣如預期,成為了7001的slave節點:

Redis單機模拟搭建主從複制及哨兵模式
Redis單機模拟搭建主從複制及哨兵模式

至此,我們已經完成了主從模式的配置。

3、模拟配置哨兵模式

大家知道,哨兵模式是基于主從模式的,那麼我們接下來就是上面主從模式的基礎上,模拟搭建哨兵模式。

redis哨兵的啟動和redis執行個體的啟動沒有關系,是以可以在任何機器上啟動redis哨兵,此處,我們給主從節點都添加上哨兵。

首先,在三個節點下建立哨兵配置檔案:

cd /usr/local/redis/etc/7001
vi sentinel.conf

cd /usr/local/redis/etc/7002
vi sentinel.conf

cd /usr/local/redis/etc/7003
vi sentinel.conf
           

三個節點的sentinel.conf配置檔案内容,除了端口不同,其他均一樣,具體如下(其中mymaster為叢集名稱):

#sentinel端口
port 27001
#工作路徑,注意路徑不要和主重複,下面給出建立目錄
dir "/usr/local/redis/sentry/7001/"
# 守護程序模式
daemonize yes
#關閉保護模式
protected-mode no
# 指明日志檔案名
logfile "./sentinel.log"
#哨兵監控的master,主從配置一樣,這裡隻用輸入redis主節點的ip/port和法定人數。
sentinel monitor mymaster 10.59.78.31 7001 1
# master或slave多長時間(預設30秒)不能使用後标記為s_down狀态。
sentinel down-after-milliseconds mymaster 5000
#若sentinel在該配置值内未能完成failover操作(即故障時master/slave自動切換),則認為本次failover失敗。
sentinel failover-timeout mymaster 18000
#設定master和slaves驗證密碼
sentinel auth-pass mymaster 123456
#指定了在執行故障轉移時, 最多可以有多少個從伺服器同時對新的主伺服器進行同步
sentinel parallel-syncs mymaster 1
           

建立哨兵工作路徑目錄:

mkdir /usr/local/redis/sentry
mkdir /usr/local/redis/sentry/7001/
mkdir /usr/local/redis/sentry/7002/
mkdir /usr/local/redis/sentry/7003/
           

啟動哨兵:

cd /usr/local/redis/bin
./redis-sentinel /usr/local/etc/7001/sentinel.conf
./redis-sentinel /usr/local/etc/7002/sentinel.conf
./redis-sentinel /usr/local/etc/7003/sentinel.conf
           

檢視redis執行個體,發現多了三個sentinel執行個體:

Redis單機模拟搭建主從複制及哨兵模式

可通過哨兵指令檢視叢集的資訊:

##連接配接哨兵
redis-cli -p 27002
##檢視master的狀态 
sentinel master mymaster
##檢視salves的狀态
SENTINEL slaves mymaster
##檢視哨兵的狀态
SENTINEL sentinels mymaster
##擷取目前master的位址
SENTINEL get-master-addr-by-name mymaster
##檢視哨兵資訊
info sentinel
           
Redis單機模拟搭建主從複制及哨兵模式

現在我們kill掉master程序,看是否會重新選舉出新的master:

Redis單機模拟搭建主從複制及哨兵模式

可見,7002被重新選舉為master,7003 salveof 7002。在哨兵的幫助下,完成了主從自動切換。

繼續閱讀