您好,登錄后才能下訂單哦!
本篇內容介紹了“Redis分布式基礎的主從同步”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
在使用Redis的時候首先開始是從單臺Redis服務器開始,隨著業務和用戶量的增長,單機會暴漏一些問題,比如單臺服務器的響應達到了上限、Redis服務器宕機所有請求全部越過緩存等等一系列問題。
那么我們最簡單的就是有一個備用的Redis服務器,當主服務器掛了從服務器就頂替主服務器繼續服務,提高可用性。
我們擁有了主從兩臺Redis服務器之后,當主服務器掛掉之后從服務器就替換上去繼續為我們服務,原來的主服務器恢復正常后我們兩臺服務器的數據又不一樣了,那么我們如何保證這兩臺服務器的數據一致性問題呢呢?前面我們提到過CAP定理和BASE理論,我們知道在分布式、集群環境中我們需要保證數據一致性。所以我們這里得使用主從同步,或者是如果我們服務器數量特別多,我們可以減輕主服務器的同步壓力,可以使用從從同步。下面我們來介紹Redis支持的幾種同步方式。
我們知道Redis增量備份是通過保存執行指令來備份的,那么同步的時候我們也可以如此。主節點會將那些對自己的狀態產生修改性影響的指令記錄在本地的內存buffer中,然后異步將buffer中的指令同步到從節點,從節點一邊執
行同步的指令流來達到和主節點一樣的狀態,一邊向主節點反饋自己同步到哪里了(偏移量) 。
但是內存的buffer是有限的,所以Redis主節點不能將所有的指令都記錄在內存buffer中,Redis的復制內存buffer是一個定長的環形數組,如果數組內容滿了,就會從頭開始覆蓋前面的內容;如果因為網絡狀況不好,從節點在短時間內無法和主節點進行同步,那么當網絡狀況恢復肘,Redis的主節點中那些沒有同步的指令在buffer中有可能已經被后續的指令覆蓋掉了。
從節點將無法直接通過指令流來進行同步,這個時候就需要用到更加復雜的同步機制一一快照同步。
快照同步既全量同步,就是把整個Redis數據庫快照發送給從節點進行同步,成功后接下來的動作就是增量同步了,所以快照同步是一個非常耗資源的同步方式,這里注意的是新增加從節點是需要先進行快照同步的。
過程:
先將主節點的數據先bgsave
將這個快照保存在磁盤上,重寫開啟一個socket線程
通過socket線程可以發送快照給子節點,此時的快照是所有子節點共享的
子節點同步
這里注意一個問題:當我們進行快照同步的時候,增量同步也在進行,當增量同步的數據被覆蓋后還會進行快照同步,如此反復形成一個死循環。
我們上面提到了在快照同步的時候會執行增量同步,這里還有一個沒關注的就是Redis的AOF增量同步問題。
當主節點進行快照同步時是先把這個快照保存到磁盤中,然后通過子線程共享文件到從節點,這里會進行文件的IO操作,這個操作是非常耗時的,在非SSD磁盤中存儲時快照同步會對系統產生較大的負載,此時剛好主節點到了執行AOF備份操作,但是這兩者并不能同時進行,所以AOF操作是會被延遲執行的,這樣會嚴重影響主節點的執行效率,所以在Redis2.8版本之后支持無盤復制。
無盤復制是指主服務器直接通過套接字將快照內容發送到從節點,生成快照是一個遍歷的過程,主節點會一邊遍歷內存,一邊將序列化的內容發送到從節點,從節點先將接收到的內容存儲到磁盤文件中,再進行一次性加載。
無盤復制屬于一種異步的方式,Redis3.0提供了一種同步復制的指令——wait,確保系統強一致性。wait提供兩個參數,第一個參數是從節點的數量,第二個參數是時間,以毫秒為單位。
等待wait指令之前的所有寫操作同步到N個從節點最多等待T毫秒時間。如果時間=0, 表示無限等待直至N個從節點同步完成 。
注意:如果時間等于0,剛好有個節點掉線了,那么這里會一直等待,阻塞服務器。
> set key valueOK> wait 1 0(integer) 1
總結一下:
同步類型有主從同步、從從同步
同步方式有:增量同步、快照同步、無盤復制、同步復制
增量同步內存中的buffer環形數組滿了會覆蓋,而主節點會執行快照同步
新添加從節點會使用快照同步
快照同步過程:先執行bgsave把快照信息放入磁盤,并且開啟子線程將快照共享,發送至從節點進行同步
快照同步的同時也會進行增量同步,如果增量同步已經被覆蓋則會執行快照同步,產生死循環
為了減小主節點的壓力,當啟用同步時數據不經過磁盤直接通過套接字將快照數據同步到從節點
“Redis分布式基礎的主從同步”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。