這篇文章帶大家了解Redis6中的主從複製架構,介紹一下Redis6主從複製有何特點,希望對大家有幫助!
#主從複製,是指將一台Redis伺服器的數據,複製到其他的Redis伺服器。前者為主節點(master),後者成為從節點(slave);資料的複製都是單向的,只能由主節點到從節點。預設情況下,每台Redis伺服器都是一個主節點,且一個主節點可以有多個從節點(或沒有從節點),但一個從節點只能有一個主節點。 【相關推薦:Redis影片教學】
使用主從複製的好處:讀寫分離,能夠擴展主節點的讀能力,給主節點分擔壓力。容災恢復,一旦主節點宕機,可以在從節點作為主節點的備份隨時可以頂上來。
從節點複製了主節點的數據,複製之後我們可以做一個讀寫分離。如果是單節點的話,應用程式的請求都集中在主節點,但有了從節點之後可以承擔部分的讀取壓力。主節點就可以做讀寫操作,而從節點只做讀取操作。這樣便給主節點分擔壓力了。
Redis主從複製,一主二從架構環境準備
說了那麼多概念咱們就開始動手部署Redis的主從複製架構吧,這次我們部署的是一主二從的架構。
#创建文件 mkdir -p /data/redis/master/data mkdir -p /data/redis/slave1/data mkdir -p /data/redis/slave2/data #从节点开启只读模式(默认) replica-read-only yes #从节点访问主节点的密码,和requirepass⼀样 masterauth 123456 #哪个主节点进⾏复制 replicaof 8.129.113.233 6379
先建立一個主節點,在data/redis/master/data目錄下touch一個redis.conf文件,編輯redis.conf檔
bind 0.0.0.0 port 6379 daemonize yes requirepass "123456" logfile "/usr/local/redis/log/redis1.log" dbfilename "xdclass1.rdb" dir "/usr/local/redis/data" appendonly yes appendfilename "appendonly1.aof" masterauth "123456"
接著建立從節點1,在data /redis/slave1/data目錄下建redis.conf
bind 0.0.0.0 port 6380 daemonize yes requirepass "123456" logfile "/usr/local/redis/log/redis2.log" dbfilename "xdclass2.rdb" dir "/usr/local/redis/data" appendonly yes appendfilename "appendonly2.aof" replicaof 8.129.113.233 6379 masterauth "123456"
建立從節點2,在data/redis/slave2/data目錄下建redis.conf
bind 0.0.0.0 port 6381 daemonize yes requirepass "123456" logfile "/usr/local/redis/log/redis3.log" dbfilename "xdclass3.rdb" dir "/usr/local/redis/data" appendonly yes appendfilename "appendonly3.aof" replicaof 8.129.113.233 6379 masterauth "123456"
注意:防火牆記得關閉,阿里雲伺服器記得開放網路安全群組。
創建好後就開始啟動已經設定好的節點
啟動方式:
#启动主 ./redis-server/data/redis/master/data/redis.conf #启动从1 ./redis-server/data/redis/slave1/data/redis.conf #启动从2 ./redis-server/data/redis/slave2/data/redis.conf
使用info replication可以查看目前節點的狀態
主從複製與讀寫驗證
1.在主节点创建一个key set name jack 2.在两个从节点测试是否能拿到主节点的数据 get name 3.在从节点set key是失败的,因为从节点只支持读操作
Redis6主從架構-複製讀寫分離原理解析
主從複製分為兩種:一種是主從剛開始連接的時候,進行全量同步;另一種是全同步結束後,進行增量同步。
全量複製:master伺服器會開啟一個後台的程序用於將Redis的資料產生一個rdb文件,主伺服器會快取所有接受到的來自客戶端的寫入命令,當後台保存進程後,會將rdb檔案傳給slave伺服器,這時候slave伺服器就有了master伺服器的資料了。在此之後,master伺服器會將在此期間把快取過來的指令透過redis傳輸協定傳送給slave伺服器,然後slave伺服器再將這些指令依序用於自己本機上,最終達到資料的一致性
增量複製:主節點會有不斷的指令寫進來,slave完成初始化後開始工作時主伺服器發送寫的操作同步到伺服器的過程就叫增量複製。增量複製是伺服器每執行一個寫入命令就會向從伺服器發送相同的寫入命令,從伺服器接受並執行收到的寫入命令。
主從複製有何特點:
主從複製對於主/從伺服器來說都是非阻塞的,所有在同步數據期間都可以正常處理外界的請求,一個主節點可以包含多個從節點,每個從節點可以接受來自其他從節點的連線。從節點不會讓key過期,而是在主節點的key過期刪除後,發送刪除指令給從節點進行刪除。
加速複製:在節點完成重新同步的時候需要在磁碟上建立一個RDB文件,然後載入這個文件來為從伺服器發送數據,但如果磁碟的速率比較低呢?這就會導致主節點與從節點的資料不一致。在新版的Redis中,支援無磁碟的複製,直接將RBD檔案經由網路傳送的形式給從伺服器,不在使用磁碟作為中間件。
如果主從連線斷開的話,重新連線後可以從中斷的地方繼續複製,而不會重新同步。在2.8版本後,重新同步的這個新特性使用PSYNC指令,而舊的使用SYNC指令
#更多程式相關知識,請造訪:程式設計影片! !
以上是聊聊Redis6中的主從複製架構,看看它有何特色!的詳細內容。更多資訊請關注PHP中文網其他相關文章!