資料庫 達夢資料庫讀寫分離的實現原理

2022-03-27 20:32:42 字數 1557 閱讀 7788

實現讀寫分離集群的基本思路是:利用備庫提供唯讀服務、無法修改資料的特性,優先將所有操作傳送到備庫執行,一旦備庫執行報錯,則傳送到主庫重新執行。通過備庫「試錯」這麼乙個步驟,自然地將唯讀操作分流到備庫執行。並且,備庫「試錯」由介面層自動完成,對應用透明。

讀寫分離集群資料庫連線建立流程:

1. 使用者發起資料庫連線請求。

2. 介面(jdbc、dpi 等)根據服務名配置(在 dm_svc.conf 中進行配置)登入主庫。

3. 主庫挑選乙個有效即時備庫的 ip/port 返回給介面。

4. 介面根據返回的備庫 ip 和 port 資訊,向備庫發起乙個連線請求。

5. 備庫返回連線成功資訊。

6. 介面響應使用者資料庫連線建立成功介面在備庫上建立的連線是讀寫分離集群自動建立的;對使用者而言,就是在主庫上建立了乙個資料庫連線。下圖以配置了兩個備庫的讀寫集群為例,說明了讀寫分離集群的連線建立流程。

讀寫分離集群語句分發流程:

1. 介面收到使用者的請求。

2. 介面優先將 sql 傳送到備庫執行。

3. 備庫執行並返回執行結果。如果介面收到的是備庫執行成功訊息,則轉到第 6 步,如果介面收到的是備庫執行失敗訊息,則轉到第 4 步。

4. 重新將執行失敗的 sql 傳送到主庫執行。只要第 3 步中的 sql 在備庫執行失敗,則同乙個事務後續的所有操作(包括唯讀操作)都會直接傳送到主庫執行。

5. 主庫執行並返回執行結果給介面。一旦主庫上執行的寫事務提交,則下次繼續從第1 步開始執行。

6. 介面響應使用者並將執行結果返回給使用者。

執行舉例說明: 

--

資料準備

create

table t(c1 int

);--

事務開始

select

*from t; --

首先在備庫上執行

insert

into t values(1); --

寫操作轉移到主庫上執行

select

*from t; --

事務未提交,還在主庫上執行

commit; --

事務提交

select

*from t; --

事務已提交,重新轉移到備庫上執行

在實際應用過程中,使用者可以在jdbc連線串中增加對應的屬性來啟用和設定讀寫分離功能,主要屬性有以下兩個:

rwseparate 是否使用讀寫分離系統,預設 0;取值(0 不使用,1 使用)。 

rwpercent 分發到主庫的事務佔主備庫總事務的百分比,有效值 0~100,預設 值 25。

dm.jdbc.driver.dmdriver

jdbc:dm://

localhost:5236?rwseparate=1&rwpercent=10

達夢資料庫讀寫分離

讀寫分離與主備架構基本基本一致,僅歸檔和客戶端訪問不同 參考 1 開啟歸檔日誌,配置遠端歸檔 2 修改主庫引數 3 主備庫修改配置檔案 4 主備庫dawacher 5 配置dmmonitor監視器 6 註冊服務 7 設定開機啟動 8 提供對外服務 歸檔設定 主庫 vi home dmdba dmdb...

資料庫讀寫分離

隨著乙個 的業務不斷擴充套件,資料不斷增加,資料庫的壓力也會越來越大,對資料庫或者sql的基本優化可能達不到最終的效果,我們可以採用讀寫分離的策略來改變現狀。讀寫分離現在被大量應用於很多大型 這個技術也不足為奇了。ebay就做得非常好。ebay用的是oracle,聽說是用 quest share p...

資料庫讀寫分離

隨著乙個 的業務不斷擴充套件,資料不斷增加,資料庫的壓力也會越來越大,對資料庫或者sql的基本優化可能達不到最終的效果,我們可以採用讀寫分離的策略來改變現狀。讀寫分離現在被大量應用於很多大型 這個技術也不足為奇了。ebay就做得非常好。ebay用的是oracle,聽說是用 quest share p...