一:企業常見的Redis主從架構linux
①一主多從redis
②一主多從從數據庫
二:主從複製的優勢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的複製實時性和數據一致性是存在矛盾的。
四:主從複製過程詳解
一、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持久化存儲策略之RDB與AOF
①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,查看從節點是否同步