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

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

①一主多從redis

②一主多從從數據庫

image.png


二:主從複製的優勢vim

(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的複製實時性和數據一致性是存在矛盾的。


四:主從複製過程詳解

image.png

一、slave向master發送sync命令。 

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

三、子進程寫完,父進程得知,開始將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主從配置過程

一、配置環境

master:172.17.214.73

slave:172.17.214.74

slave:172.17.214.75

二、配置前準備

①各服務器安裝redis

②備份主配置文件

③確保各節點防火牆關閉、selinux關閉,時鐘同步(不然容易被認爲已超時)

三、配置過程

修改全部主機主配置文件

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,查看從節點是否同步
相關文章
相關標籤/搜索