搭建一個redis高可用系統

來源:互聯網
上載者:User
原網址:http://www.jianshu.com/p/c2ab606b00b7 一、單個執行個體

當系統中只有一台redis運行時,一旦該redis掛了,會導致整個系統無法運行。
單個執行個體 二、備份

由於單台redis出現單點故障,就會導致整個系統不可用,所以想到的辦法自然就是備份(一般工業界認為比較安全的備份數應該是3份)。當一台redis出現問題了,另一台redis可以繼續提供服務。
備份 三、自動容錯移轉

雖然上面redis做了備份,看上去很完美。但由於redis目前只支援主從複本備份(不支援主主複製),當主redis掛了,從redis只能提供讀服務,無法提供寫服務。所以,還得想辦法,當主redis掛了,讓從redis升級成為主redis。

這就需要自動容錯移轉,redis sentinel帶有這個功能,當一個主redis不能提供服務時,redis sentinel可以將一個從redis升級為主redis,並對其他從redis進行配置,讓它們使用新的主redis進行複本備份。
自動容錯移轉 四、動手實踐

1.環境

這裡使用三台伺服器,每台伺服器上開啟一個redis-server和redis-sentinel服務,redis-server連接埠為8000,redis-sentinel的連接埠為6800,修改預設連接埠是安全的第一步^_^。

redis-server說明 192.168.56.101:8000 主 192.168.56.102:8000 從 192.168.56.103:8000 從

redis-sentinel說明 192.168.56.101:6800 192.168.56.102:6800 192.168.56.103:6800

2.搭建redis系統

首先下載安裝redis

wget http://download.redis.io/releases/redis-3.2.8.tar.gztar zxvf redis-3.2.8.tar.gzcd redis-3.2.8makecd src#複製redis相關命令到/usr/sbin目錄下,這樣就可以直接執行這些命令,不用寫全路徑sudo cp redis-cli  redis-server  redis-sentinel   /usr/sbin/

在redis目錄下有redis.conf和sentinel.conf設定檔樣本,使用sudo cp redis.conf sentinel.conf /etc/命令將兩個設定檔複製到/etc目錄下(當然也可以在/etc/目錄建立設定檔),然後修改設定檔。

修改主redis-server設定檔內容如下:

port  8000           #修改連接埠是安全的第一步daemonize  yesbind  0.0.0.0pidfile   /var/run/redis-8000.pidlogfile   /var/log/redis/redis-8000.log

修改從redis-server設定檔內容如下:

port  8000           #修改連接埠是安全的第一步daemonize  yesbind  0.0.0.0pidfile   /var/run/redis-8000.pidlogfile   /var/log/redis/redis-8000.logslaveof  192.168.56.101  8000    #從redis比主redis多這一行

啟動redis-server。

sudo redis-server /etc/redis.conf

三個redis服務啟動完畢後,進入命令列,執行info replication查看當前主從配置。
主節點上查看主從資訊

發現並沒有從節點資訊。

3.主從間無法通訊

這裡的原因是防火牆屏蔽了8000連接埠,需要修改防火牆設定,開放8000連接埠(同理redis-sentinel的6800連接埠)。

# 開啟防火牆設定檔,增加8000連接埠sudo vim /etc/sysconfig/iptables#修改完後,需要重啟防火牆sudo service iptables restart

增加8000連接埠和6800連接埠

然後重新進入主節點,查看主從資訊,可以發現兩個從節點資訊,表明redis-server主從已經配置完畢。
主節點上查看主從資訊

4.搭建redis-sentinel系統

redis-sentinel程式上面已經安裝過了,這裡只需要修改設定檔就可以了。修改/etc/sentinel.conf,如果沒有建立即可。

修改sentinel.conf設定檔內容如下:

daemonize yesport  6800logfile  /var/log/redis/sentinel.logpidfile  /var/run/sentinel.pidsentinel monitor master8000 192.168.56.101 8000 2#5秒內master6800沒有響應,就認為SDOWNsentinel down-after-milliseconds master8000 5000  sentinel failover-timeout  master8000 15000

啟動redis-sentinel。

redis-sentinel  /etc/sentinel.conf

三個redis-sentinel服務啟動完畢後,串連任意sentinel服務可以獲知當前主redis服務資訊。
sentinel監控狀態 五、測試

1.把住redis停掉

redis-cli -h 192.168.56.101 -p 8000 shutdown

2.查看redis-sentinel的監控狀態
sentinel監控狀態

發現102這台redis-server提升為主庫。

至此,redis的高可用方案已經搭建完成。 六、用戶端程式

用戶端程式(如PHP程式)串連redis時需要ip和port,但redis-server進行容錯移轉時,主redis是變化的,所以ip地址也是變化的。用戶端程式如何感知當前主redis的ip地址和連接埠呢。redis-sentinel提供了介面,請求任何一個sentinel,發送SENTINEL get-master-addr-by-name <master name>就能得到當前主redis的ip和port。
擷取當前主redis的ip和port

用戶端每次串連redis前,先向sentinel發送請求,獲得主redis的ip和port,然後用返回的ip和port串連redis。

這種方法的缺點是顯而易見的,每次操作redis至少需要發送兩次串連請求,第一次請求sentinel,第二次請求redis。

php請求sentinel程式碼可參見:https://github.com/huyanping/redis-sentinel

更好的辦法是使用VIP,當然這對配置的環境有一定的要求,比如redis搭建在阿里雲伺服器上,可能不支援VIP。

VIP方案是,redis系統對外始終是同一ip地址,當redis進行容錯移轉時,需要做的是將VIP從之前的redis伺服器漂移到現在新的主redis伺服器上。

比如:當前redis系統中主redis的ip地址是192.168.56.101,那麼VIP(192.168.56.250)指向192.168.56.101,用戶端程式用VIP(192.168.56.250)地址串連redis,實際上串連的就是當前主redis,這樣就避免了向sentinel發送請求。

當主redis宕機,進行容錯移轉時,192.168.56.102這台伺服器上的redis提升為主,這時VIP(192.168.56.250)指向192.168.56.102,這樣用戶端程式不需要修改任何代碼,串連的是192.168.56.102這台主redis。
VIP指向192.168.56.101
容錯移轉後,VIP漂移指向192.168.56.102 七、漂移VIP

那麼現在的問題是,如何在進行redis容錯移轉時,將VIP漂移到新的主redis伺服器上。

這裡可以使用redis sentinel的一個參數client-reconfig-script,這個參數配置執行指令碼,sentinel在做failover的時候會執行這個指令碼,並且傳遞6個參數<master-name>、 <role>、 <state>、 <from-ip>、 <from-port>、 <to-ip> 、<to-port>,其中<to-ip>是新主redis的IP地址,可以在這個指令碼裡做VIP漂移操作。

sentinel client-reconfig-script master8000   /opt/notify_master6800.sh

修改三個伺服器的redis-sentinel設定檔/etc/sentinel.conf,增加上面一行。然後在/opt/目錄下建立notify_master6800.sh指令檔,這個指令碼做VIP漂移操作,內容如下:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.