1. 程式人生 > >Redis企業級緩存策略之——Redis主從

Redis企業級緩存策略之——Redis主從

redis。 緩存 主從 高可用

一:企業常見的Redis主從架構

①一主多從

②一主多從從

技術分享圖片


二:主從復制的優點

(1)高可用性

在一個Redis集群中,如果master宕機,slave可以介入並取代master的位置,因此對於整個Redis服務來說不至於提供不了 服務,這樣使得整個Redis服務足夠安全。

(2)高性能

在一個Redis集群中,master負責寫請求,slave負責讀請求,這麽做一方面通過將讀請求分散到其他機器從而大大減少了 master服務器的壓力,另一方面slave專註於提供讀服務從而提高了響應和讀取速度。

(3)水平拓展性

通過增加slave機器可以橫向(水平)擴展Redis服務的整個查詢服務的能力。


三:主從復制能夠解決什麽問題,同時又帶來了什麽問題

復制提供了高可用性的解決方案,但同時引入了分布式計算的復雜度問題,認為有兩個核心問題:

(1)數據一致性問題:如何保證master服務器寫入的數據能夠及時同步到slave機器上。

(2)讀寫分離:如何在客戶端提供讀寫分離的實現方案,通過客戶端實現將讀寫請求分別路由到master和slave實例上。 上面兩個問題,尤其是第一個問題是Redis服務實現一直在演變,致力於解決的一個問題:復制實時性和數據一致性矛盾

總結:Redis提供了提高數據一致性的解決方案,一致性程度的增加雖然使得我能夠更信任數據,但是更好的一致性方案通常伴隨著性能的損失,從而減少了吞吐量和服務能力。然而我們希望系統的性能達到最優,則必須要犧牲一致性的程度,因此Redis的復制實時性和數據一致性是存在矛盾的。


四:主從復制過程詳解

技術分享圖片

1、slave向master發送sync命令。 

2、master開啟子進程來將dataset寫入rdb文件,同時將子進程完成之前接收到的寫命令緩存起來。 

3、子進程寫完,父進程得知,開始將RDB文件發送給slave。 master發送完RDB文件,將緩存的命令也發給slave。 master增量的把寫命令發給slave。

註意:slave與master斷開後可自動重新連接master。在redis2.8版本之前,每當slave進程掛掉重新連接master的時候都會開始新的一輪全量復制。如果
master同時接收到多個slave的同步請求,則master只需要備份一次RDB文件。

相關知識點:Redis持久化存儲策略之RDBAOF

①RDB:snapshotting 數據快照, 二進制格式;
    1)策略描述:按事先定制的策略,周期性地將數據從內存同步至磁盤;數據文件默認為dump.rdb;
    2)快照方法:redis-cli 顯式使用sava或bgsave命令來手動啟動快照保存機制
        SAVE:同步,即在主線程中保存快照,此時會阻塞所有客戶端請求; 
        BGSAVE:異步;backgroud
②AOF:Append Only File, fsync
    1)策略描述:記錄每次寫操作至指定的文件尾部實現的持久化;當redis重啟時,可通過重新執行文件中的命令在內存中重建出數據庫;
    2)redis-cli命令
        BGREWRITEAOF:AOF文件重寫
        不會讀取正在使用的AOF文件,而是通過將內存中的數據以命令的方式保存至臨時文件中,完成之後替換原來的AOF文件;
註意:①Redis默認使用RDB文件進行持久化存儲,可通過修改redis主配置文件,開啟AOF功能
   ②兩文件默認存儲在/var/lib/redis/目錄下


五:Redis主從配置過程

1、配置環境

master:172.17.214.73

slave:172.17.214.74

slave:172.17.214.75

2、配置前準備

①各服務器安裝redis

②備份主配置文件

③確保各節點防火墻關閉、selinux關閉,時鐘同步(否則容易被認為已超時)

3、配置過程

修改所有主機主配置文件

vim /etc/redis.conf
    daemonize yes     #以守護進程啟動
    bind    127.0.0.1   #監聽本機IP
註意:工作環境中應將bind綁定在127.0.0.1上,且修改默認端口,防止Redis相關的”key“網絡植入攻擊


修改從服務器主配置文件

### REPLICATION ### 
slaveof 192.168.1.29 6379     #指定主節點地址IP port
#masterauth             #如果設置了訪問認證就需要設定此項。 
slave-server-stale-data yes     #當slave與master連接斷開或者slave他
r正處於同步狀態時,如果slave收到請求允許響應,no表示返回錯誤。 
slave-read-only yes         #slave節點為只讀
slave-priority 100         #設定此節點的優先級,是否優先被同步(值越小,優先級越高)


③測試結果

主節點上新建一個key value,查看從節點是否同步


Redis企業級緩存策略之——Redis主從