Redis一主多從+Sentinel哨兵高可用方案
1、簡介
Redis-Sentinel是Redis官方推薦的高可用性(HA)解決方案。實際上這意味着你能夠使用Sentinel模式建立一個能夠不用人爲干預而應對各類故障的Redis部署。c++
2、主要功能
監控(Monitoring): Sentinel 會不斷地檢查你的主服務器和從服務器是否運做正常。
提醒(Notification): 當被監控的某個 Redis 服務器出現問題時, Sentinel 能夠經過 API 向管理員或者其餘應用程序發送通知。
自動故障遷移(Automatic failover): 當一個主服務器不能正常工做時, Sentinel 會開始一次自動故障遷移操做, 它會將失效主服務器的其中一個從服務器升級爲新的主服務器, 並讓失效主服務器的其餘從服務器改成複製新的主服務器; 當客戶端試圖鏈接失效的主服務器時, 集羣也會向客戶端返回新主服務器的地址, 使得集羣能夠使用新主服務器代替失效服務器。
Redis Sentinel 是一個分佈式系統, 你能夠在一個架構中運行多個 Sentinel 進程(progress), 這些進程使用流言協議(gossip protocols)來接收關於主服務器是否下線的信息, 並使用投票協議(agreement protocols)來決定是否執行自動故障遷移, 以及選擇哪一個從服務器做爲新的主服務器。
Sentinel的主從原理:
redis
3、環境搭建
三臺服務器: 分別部署3臺哨兵+Redis
172.16.63.130(master+哨兵A)
172.16.63.136(slaver+哨兵B)
172.16.63.135(slaver+哨兵C)
主從複製 - 讀寫分離
Redis的複製功能是支持多個數據庫之間的數據同步。一類是主數據庫(master)一類是從數據庫(slave),主數據庫能夠進行讀寫操做,當發生寫操做的時候自動將數據同步到從數據庫,而從數據庫通常是隻讀的,並接收主數據庫同步過來的數據,一個主數據庫能夠有多個從數據庫,而一個從數據庫只能有一個主數據庫。 經過redis的複製功能能夠很好的實現數據庫的讀寫分離,提升服務器的負載能力。主數據庫主要進行寫操做,而從數據庫負責讀操做。數據庫
4、主從複製過程
1:當一個從數據庫啓動時,會向主數據庫發送sync命令
2:主數據庫接收到sync命令後會開始在後臺保存快照(執行rdb操做),並將保存期間接收到的命令緩存起來
3:當快照完成後,redis會將快照文件和全部緩存的命令發送給從數據庫
4:從數據庫收到後,會載入快照文件並執行收到的緩存的命令。
注意:redis2.8以前的版本:當主從數據庫同步的時候從數據庫由於網絡緣由斷開重連後會從新執行上述操做,不支持斷點續傳。redis2.8以後支持斷點續傳。vim
5、安裝過程:
1.下載源碼並解壓 wget http://download.redis.io/releases/redis-4.0.11.tar.gztar -xzf redis-4.0.11.tar.gzcd redis-4.0.11
2.編譯 yum y install gcc gccc++ kernel-develmake MALLOC=libc 等待編譯完成
3.安裝 make PREFIX=/usr/local/redis installmkdir /usr/local/redis/conf/cp redis.conf sentinel.conf /usr/local/redis/conf/緩存
6、配置主從讀寫
A)172.16.63.130(master)
編輯配置文件 vim /usr/local/redis/conf/redis.conf服務器
B)172.16.63.136(slaver)
編輯配置文件 vim /usr/local/redis/conf/redis.conf
使用yes啓用守護進程 daemonize yes
網絡
port 6379 架構
requirepass "tst_redis"
主從同步密碼 masterauth "tst_redis"
分佈式
slave-read-only yes 測試
protected-mode no
C)172.16.63.135(slaver)
編輯配置文件 vim /usr/local/redis/conf/redis.conf
使用yes啓用守護進程 daemonize yes
port 6379
requirepass "tst_redis"
主從同步密碼 masterauth "tst_redis"
slave-read-only yes
protected-mode no
驗證主從讀寫
鏈接masterA
寫入key值
鏈接slaverB 獲取key值
鏈接slaverC 獲取key值
配置哨兵 A)172.16.63.130(哨兵A) 端口
訪問密碼
設置master地址
關閉保護模式
驗證哨兵
默認130A爲master
kill 掉130的master
通過三個哨兵投票選擇135爲新的master