1. 程式人生 > >Centos7 編譯安裝redis-4.0.1及主從+哨兵模式

Centos7 編譯安裝redis-4.0.1及主從+哨兵模式

一、redis概述及哨兵模式

redis對資料快取到記憶體,實現高效快取,使用持久化模組對資料進行儲存,使用sentinel模式實現redis叢集,提供高可用服務。

下面是在巨集觀層面上哨兵模式的功能列表:

·監控哨兵不斷的檢查masterslave是否正常的執行。

·通知當監控的某臺Redis例項發生問題時,可以通過API通知系統管理員和其他的應用程式。

·自動故障轉移如果一個master不正常運行了,哨兵可以啟動一個故障轉移程序,將一個slave升級成為master,其他的slave被重新配置使用新的master,並且應用程式使用Redis服務端通知的新地址。

·配置提供者哨兵作為Redis

客戶端發現的權威來源:客戶端連線到哨兵請求當前可靠的master的地址。如果發生故障,哨兵將報告新地址。

二、網路規劃及拓撲
hostname IP redis服務埠 哨兵 哨兵服務埠
redis-master 10.0.0.141 6739 sentinel1 26739
redis-slave1 10.0.0.142 6739 sentinel2 26739
redis-slave2 10.0.0.143 6739 sentinel3 26739



三、編譯安裝redis及採用systemd啟動指令碼

1、解決依賴包問題並上傳安裝包

[[email protected] ~]#yum install gcc gcc-c++ -y

2、建立必須的使用者、檔案及授權

[[email protected] ~]# cd /usr/local/src/
[[email protected] src]# tar -xf redis-4.0.1.tar.gz
[[email protected] src]# mkdir /usr/local/redis
[[email protected] src]# useradd redis
[[email protected] src]# mv redis-4.0.1/* /usr/local/redis
[[email protected] src]# chown -R redis:redis /usr/local/redis

3、編譯安裝redis,makeMALLOC=libc是呼叫管理記憶體碎片

[[email protected] src]# cd /usr/local/redis
[[email protected] redis]# make MALLOC=libc
[[email protected] redis]# make && make install
4、配置redis配置檔案
[[email protected] redis]# vim /usr/local/redis/redis.conf
daemonize yes(為體現效果,一開始使用預設,暫時設為前臺執行)
protected-mode no
bind 10.0.0.141
logfile “/var/log/redis/redis.log”(日誌存放路徑,一開始使用預設)
dir /usr/local/redis/rdb(持久化配置)
supervised systemd(採用systemd啟動)
[[email protected] redis]# mkdir /usr/local/redis/rdb
[[email protected] redis]# chown -R redis:redis /usr/local/redis/
[[email protected] redis]# mkdir /var/log/redis
[[email protected] redis]# chown -R redis:redis /var/log/redis

5、啟動redis測試

[[email protected] redis]# pwd
/usr/local/redis
[[email protected] redis]# ./src/redis-server redis.conf

redis啟動成功!!
6、編寫啟動指令碼,並增加執行許可權
[[email protected] redis]# vim /usr/lib/systemd/system/redis.service
[[email protected] redis]# cat /usr/lib/systemd/system/redis.service
[Unit]
Description=Redis persistent key-value database
After=network.target

[Service]
User=redis
Group=redis
ExecStart=/usr/local/redis/src/redis-server /usr/local/redis/redis.conf --daemonize no
ExecStop=/usr/local/redis/src/redis-cli -h 10.0.0.141 -p 6379 shutdown
Restart=always

[Install]
WantedBy=multi-user.target
[[email protected] redis]# chmod 750 /usr/lib/systemd/system/redis.service
使用systemd啟動服務
[[email protected] redis]# systemctl start redis

 檢視啟動狀態


四、配置redis主從+哨兵模式
1、配置兩臺從伺服器(redis-slave1和redis-slave2)
[[email protected] redis]# vim redis.conf
slaveof 10.0.0.141 6379
[[email protected] redis]# vim redis.conf
slaveof 10.0.0.141 6379

2、配置哨兵模式(三臺伺服器都要配置)

[[email protected] redis]# vim sentinel.conf
daemonize yes(方便測試效果,使用預設)
sentinel monitor mymaster 10.0.0.141 6379 2(ip指向master)
protected-mode no
3、啟動哨兵(手動啟動)

配置完Redis和Sentinel之後,按順序啟動各個角色。啟動順序如下:

Master->Slave->Sentinel,要確保按照這個順序依次啟動。

Sentinel的啟動命令和Redis類似。

[[email protected] ~]# systemctl start redis
[[email protected] ~]# systemctl start redis
[[email protected] ~]# systemctl start redis
[[email protected] ~]# cd /usr/local/redis/
[[email protected] redis]# ./src/redis-sentinel sentinel.conf
[[email protected] redis]# ./src/redis-sentinel sentinel.conf

哨兵啟動成功!!!!
4、編寫systemd啟動sentinel指令碼,使用systemd啟動sentinel
[[email protected] ~]# vim /usr/lib/systemd/system/sentinel.service
[Unit]
Description=Redis persistent key-value database
After=network.target

[Service]
User=redis
Group=redis
ExecStart=/usr/local/redis/src/redis-sentinel /usr/local/redis/sentinel.conf --daemonize no
ExecStop=/usr/local/redis/src/redis-cli -h 10.0.0.141 -p 6379 shutdown
Restart=always

[Install]
WantedBy=multi-user.target
[[email protected] redis]# chmod 750 /usr/lib/systemd/system/sentinel.service
systemd啟動sentinel

五、測試

1、測試master寫入快取並檢視slave是否同步



2、持久化資料


2、測試哨兵模式

實現高可用切換master(故障前master位於10.0.0.141)



redis-master主機故障,兩臺從伺服器選舉出新master


新master產生