Redis主從複製配置

來源:互聯網
上載者:User

標籤:

redis雖然有著卓越的效能,但我們仍然可以通過master/slave這種簡單架構,進行讀寫分離,進一步挖掘redis的效能,提高系統的可用性。

redis怎麼進行主從複製呢?redis複製主要是通過master server持久化的rdb檔案實現的。master server 先dump出記憶體快照檔案,然後將rdb檔案傳給slave server,slave server 根據rdb檔案重建記憶體表。redis複製過程如下:

1、slave server啟動串連到master server之後,salve server主動發送SYNC命令給master server

2、master server接受SYNC命令之後,判斷,是否有進行中記憶體快照的子進程,如果有,則等待其結束,否則,fork一個子進程,子進程把記憶體資料儲存為檔案,並發送給slave server

3、master server子進程進程做資料快照時,父進程可以繼續接收client端請求寫資料,此時,父進程把新寫入的資料放到待發送緩衝隊列中

4、slave server 接收記憶體快照檔案之後,清空記憶體資料,根據接收的快照檔案,重建記憶體表資料結構

5、master server把快照檔案發送完畢之後,發送緩衝隊列中儲存的子進程快照期間改變的資料給slave server,slave server做相同處理,儲存資料一致性

6、master server 後續接收的資料,都會通過步驟1建立的串連,把資料發送到slave server

需要注意:slave server如果因為網路或其他原因斷與master server的串連,當slave server重新串連時,需要重新擷取master server的記憶體快照檔案,slave server的資料會自動全部清空,然後再重建立立記憶體表,這樣會讓slave server 啟動恢複服務比較慢,同時也給master server帶來較大壓力,可以看出redis的複製沒有差異複寫的概念,這是redis主從複製的一個主要弊端,在實際環境中,盡量規避中途增加從庫。

通過上面的介紹,我們對redis的主從複製有了個大概瞭解,下面講講具體怎麼配置master/slave。由於條件限制,這裡用一台機器,啟動兩個進程來進行主從複製。

master server 設定檔master.conf, 主要配置如下:

daemonize yes  
pidfile /var/run/redis_6379.pid  
port 6379  
#save 900 1  
#save 300 10  
#save 60 10000  
dbfilename dump.rdb  
dir /var/lib/redis/6379

slave server 設定檔slave.conf,主要配置如下:

daemonize yes  
pidfile /var/run/redis_6379.pid  
port 6380  
save 900 1  
save 300 10  
save 60 10000  
dbfilename dump.rdb  
dir /var/lib/redis/6380  
slaveof 127.0.0.1 6379  

slave.conf中,主要通過slaveof指定其master的ip和連接埠。啟動master和slave:

/usr/local/bin/redis-server /etc/redis/master.conf  
/usr/local/bin/redis-server /etc/redis/slave.conf

串連master server,寫入資料:

[[email protected] ~]# redis-cli -p 6379  
redis 127.0.0.1:6379> set user.1.name zhangsan  
OK

串連 slave server,讀資料:

[[email protected] ~]# redis-cli -p 6380  
redis 127.0.0.1:6380> get user.1.name  
"zhangsan"

從測試結果看,資料確實自動複製了。通過複製功能,我們可以在master上唯寫資料,在slave上讀資料,關閉master的持久化(或aof)功能(在salve上開啟),從而分擔master伺服器讀壓力,提高master伺服器效能,同時,master掛了,可以快速地用slave server來替換master server,提高系統的可用性。

在實際環境中,我們可以根據redis複製特點,定製適合我們自己的複製架構。比如,採用master server ->slave server ->slave server ->slave server這種一拖一【或一拖一再拖多】的方式,和常規的一拖多方式相比,這種方式更能減少master server在複製資料時的壓力。當然,由於redis複製的天然缺陷,我們也可以採用主動複製的方式【通過redis代理層,client在寫master時,寫多個master】來改造最佳化redis內建的複製策略,不過,主動複製,怎麼保持資料的一致性也是個不小的挑戰。

Redis主從複製配置

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.