蜜桃av色欲a片精品一区,麻豆aⅴ精品无码一区二区,亚洲人成网站在线播放影院在线,亚洲 素人 字幕 在线 最新

微立頂科技

新聞資訊

創(chuàng)新 服務 價值

  分布式系統(tǒng)中的主從復制基本原理

發(fā)布日期:2022/10/4 21:02:36      瀏覽量:

復制指在多臺機器上保存相同數(shù)據(jù)的副本,通過數(shù)據(jù)的復制,人們希望達到以下目的:

  • 使用戶使用物理上離他們更近的的數(shù)據(jù),降低訪問延遲。
  • 部分組件出現(xiàn)故障,系統(tǒng)仍然可以繼續(xù)工作,提高可用性。
  • 擴展至多臺機器以令他們同時提供數(shù)據(jù)訪問服務,提高讀吞吐量。

本文只討論一些簡單情況:數(shù)據(jù)規(guī)模比較小,每臺機器都可以存儲數(shù)據(jù)集的完整副本;只考慮簡單的故障問題;不考慮多主節(jié)點和無主節(jié)點架構。

1. 主從復制的基本工作原理

  1. 指定一個節(jié)點為主節(jié)點,客戶寫數(shù)據(jù)庫時首先寫到主節(jié)點。
  2. 其他節(jié)點為從節(jié)點,主節(jié)點將數(shù)據(jù)寫到本地后將數(shù)據(jù)更改以日志的形式發(fā)送給所有從節(jié)點。每個從節(jié)點獲得日志后將其應用到本地的,且嚴格保持與主節(jié)點相同的寫入順序。
  3. 客戶端從數(shù)據(jù)庫讀數(shù)據(jù)時,可以在主節(jié)點或從節(jié)點上執(zhí)行查詢。只有主節(jié)點可以接受寫請求,所有節(jié)點都可以接受讀請求。

復制技術廣泛應用于各種關系型數(shù)據(jù)庫、非關系型數(shù)據(jù)庫、分布式消息隊列、網(wǎng)絡文件系統(tǒng)等等。


2. 同步復制與異步復制

對于關系型數(shù)據(jù)庫,復制通常是同步或異步可選的的。對于其它系統(tǒng)通常是只能選擇其中一個。


上圖中表達了向從節(jié)點1同步變更,向從節(jié)點2異步變更。

2.1 從節(jié)點失效:追趕式恢復

從節(jié)點的失效恢復比較簡單,只需要通過中斷前記錄的最后一個執(zhí)行事務的事務號,向主節(jié)點請求從這個事務到當前中間執(zhí)行的所有操作,然后追趕上主節(jié)點的進度即可。

2.2 主節(jié)點失效:節(jié)點切換

當主節(jié)點失效,我們要做的是將其中一個從節(jié)點提升為主節(jié)點,令他行使主節(jié)點的職責。這個過程可以手動切換,也可以自動進行,自動進行的步驟如下:

  1. 確認主節(jié)點失效。一般使用心跳+超時的機制。節(jié)點之間互相發(fā)送心跳消息來確認對方是否存活,超過一段時間未收到心跳消息回復則認為該節(jié)點已下線。
  2. 選舉新的主節(jié)點。可以通過共識選舉的方式確定新的主節(jié)點,也可以由之前選定的某控制節(jié)點來指定新的主節(jié)點。主要原則在于讓新的主節(jié)點和原主節(jié)點最為相似。
  3. 重新配置系統(tǒng)使主節(jié)點生效。我們需要做一些配置讓新的主節(jié)點切實生效,例如讓所有客戶端將請求路由到新的主節(jié)點上;在原主節(jié)點再次上線之后令他降級為從節(jié)點。

上述過程中存在許多變數(shù):

  • 如果使用的是異步復制,且失效之前新主節(jié)點沒收到原主節(jié)點的所有數(shù)據(jù),且選舉之后原主節(jié)點很快重新上線。接下來新的主節(jié)點很可能收到來自原主節(jié)點的沖突的寫請求,因為原主節(jié)點尚未搞明白身份的變化。

    常見的解決方案是,原主節(jié)點上未完成復制的寫請求就此丟棄。

  • 在故障情況下,可能出現(xiàn)兩個節(jié)點都認為自己是主節(jié)點,這種情況非常危險并且難以處理。

  • 難以設置恰好的超時時間來判定主節(jié)點失效,過長可能導致恢復時間太長,過短可能導致很多不必要的主節(jié)點切換。

3. 復制日志的實現(xiàn)

3.1 基于語句的復制

最簡單的方法,主節(jié)點將每個寫請求轉發(fā)給從節(jié)點。這樣做很合理也不復雜,但有一些不適用的場景:

  • 任何調(diào)用非確定函數(shù)的語句,比如NOW()獲取當前時間,RAND()獲取一個隨機數(shù)。
  • 語句中使用了自增列,或依賴于數(shù)據(jù)庫的現(xiàn)有數(shù)據(jù)。那么副本必須按完全相同的順序執(zhí)行。
  • 有副作用的語句,如觸發(fā)器,存儲過程,用戶自定義函數(shù)等。

3.2 基于預寫日志W(wǎng)AL傳輸

主節(jié)點可以將它的 WAL 日志傳輸給從節(jié)點,從節(jié)點依次構造數(shù)據(jù)副本。

這樣做缺點在于復制方案強依賴于存儲引擎的實現(xiàn)方式(實質(zhì)上是 WAL 的實現(xiàn)方式)。

3.3 基于行的邏輯日志復制

我們也可以令復制和存儲引擎采用不同的日志格式,讓復制和存儲邏輯剝離。

關系型數(shù)據(jù)庫的邏輯日志往往是以下這樣的實現(xiàn):

  • 對于行插入,日志包含新值。
  • 對于行刪除,日志唯一標識已刪除的行,通常是依賴主鍵。
  • 對于行更新,日志唯一標識需要更新的行和他們的新值。

如果事務涉及多行的修改,則會產(chǎn)生多個這樣的日志記錄,并在后面跟著一條記錄來指出事務已經(jīng)提交。例如 MySQL 的 binlog 是這樣實現(xiàn)的。

3.4 基于觸發(fā)器的復制

前面的復制方法都是數(shù)據(jù)庫提供的,我們也可以自己實現(xiàn)一個觸發(fā)器,來自己實現(xiàn)復制的邏輯。



  業(yè)務實施流程

需求調(diào)研 →

團隊組建和動員 →

數(shù)據(jù)初始化 →

調(diào)試完善 →

解決方案和選型 →

硬件網(wǎng)絡部署 →

系統(tǒng)部署試運行 →

系統(tǒng)正式上線 →

合作協(xié)議

系統(tǒng)開發(fā)/整合

制作文檔和員工培訓

售后服務

馬上咨詢: 如果您有業(yè)務方面的問題或者需求,歡迎您咨詢!我們帶來的不僅僅是技術,還有行業(yè)經(jīng)驗積累。
QQ: 39764417/308460098     Phone: 13 9800 1 9844 / 135 6887 9550     聯(lián)系人:石先生/雷先生