本篇文章帶大家了解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命令
更多編程相關知識,請訪問:Redis視頻教程!!