Redis單機模擬搭建主從複製及哨兵模式

1、環境準備

系統centos7,創建一個目錄:

mkdir /usr/local/redis

下載或上傳redis安裝包到/usr/local/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目錄:

進入bin目錄,會發現安裝的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-cli連接進去,看一看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節點:

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

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

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-cli -p 27002
##查看master的狀態 
sentinel master mymaster
##查看salves的狀態
SENTINEL slaves mymaster
##查看哨兵的狀態
SENTINEL sentinels mymaster
##獲取當前master的地址
SENTINEL get-master-addr-by-name mymaster
##查看哨兵信息
info sentinel

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章