日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql dcn_Tdsql DCN同步技术原理介绍

發(fā)布時(shí)間:2023/12/16 数据库 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql dcn_Tdsql DCN同步技术原理介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

概述:

利用主從復(fù)制+

GTID

的特性實(shí)現(xiàn)異地?cái)?shù)據(jù)同步與讀寫分離。下面是實(shí)現(xiàn)細(xì)節(jié)與不同于常規(guī)方案的特性。

實(shí)現(xiàn)背景

是為了將分屬兩個(gè)不同集群的實(shí)例,建立同步關(guān)系。備實(shí)例會(huì)自動(dòng)選擇主實(shí)例中延遲較小的備機(jī)建立同步,當(dāng)該主實(shí)例備機(jī)發(fā)生故障時(shí),會(huì)自動(dòng)與另一個(gè)備機(jī)建立同步關(guān)系。

DCN同步建立后,主實(shí)例可寫,備實(shí)例只讀。這可作為一種異地容災(zāi)方案,也可作為一種異地讀寫方案

,參照

D

CN

技術(shù)分為兩步:

第一部分:

在主備機(jī)房中,如圖2

在主機(jī)房一主兩備中,master提交事務(wù)后,寫入binlog,通過mysql主從復(fù)制協(xié)議,master機(jī)將binlog傳輸?shù)饺我鈙lave機(jī),然后slave機(jī)回放relaylog,最終完成主從復(fù)制。第二部分:如圖1,主備機(jī)房完成建立DCN同步后,備機(jī)房的master機(jī)會(huì)從主機(jī)房中主備延遲最小的slave機(jī)上的拉取binlog,隨后回放binlog。

部分:

如果主機(jī)房當(dāng)前已經(jīng)建立DCN同步的slave機(jī)器故障了,會(huì)自動(dòng)與另一個(gè)備機(jī)建立同步關(guān)系如圖2

主從同步的方式實(shí)現(xiàn)異地容災(zāi)方案比較成熟,但仍需要解決一些核心問題。

1.

由于存在“級(jí)聯(lián)復(fù)制”的情況,那么如何準(zhǔn)備的計(jì)算延遲?

2.

如果實(shí)例需要進(jìn)行擴(kuò)容時(shí),同步關(guān)系是否收到影響,作為異地讀寫分離的場(chǎng)景,級(jí)聯(lián)節(jié)點(diǎn)數(shù)據(jù)延遲擴(kuò)大如何解決?

針對(duì)上述問題:

1.

計(jì)算延遲

a)

不采用

Seconds_Behind_Master

的值作為延遲依據(jù),主機(jī)

agent不停地向主機(jī)數(shù)據(jù)庫(kù)寫入帶有當(dāng)前時(shí)間戳的記錄,這些記錄會(huì)同步到備機(jī)數(shù)據(jù)庫(kù)中

備機(jī)的

agent根據(jù)數(shù)據(jù)庫(kù)中最新的記錄與機(jī)器當(dāng)前時(shí)間戳,就可以計(jì)算出實(shí)時(shí)延遲時(shí)間了

,然后備機(jī)

agent再將這些信息(包括實(shí)時(shí)延遲與延遲的主機(jī)信息)寫入到zk中,告知其它模塊

,而這些信也息作為scheduler仲裁擴(kuò)容的依據(jù)。

b)

如下圖延遲的計(jì)算過程,在擴(kuò)容的同步數(shù)據(jù)步驟中

M每寫入一條時(shí)間戳記錄,目標(biāo)實(shí)例中的所有節(jié)點(diǎn)都會(huì)同步到該條記錄,然后上報(bào)到zk中,當(dāng)scheduler發(fā)現(xiàn)所有節(jié)點(diǎn)的延遲小于5秒,且delayip都是M(這點(diǎn)主要是防止異常)時(shí),進(jìn)入到下一個(gè)流程

2.實(shí)例進(jìn)行擴(kuò)容的時(shí)候,集群具備自動(dòng)更新

dcn同步關(guān)系的功能,并且在擴(kuò)容過程中

不需要人為介入,減少了

延遲

影響

。由程序介入,并分拆為三步:

a)

建立原實(shí)例與目標(biāo)實(shí)例的同步關(guān)系

b)

檢測(cè)目標(biāo)實(shí)例與原實(shí)例之間的延遲,當(dāng)延遲小于

5S時(shí),設(shè)置原實(shí)例只讀,拒絕掉新的寫入

c)

檢測(cè)目標(biāo)實(shí)例與原實(shí)例之間的

gtid,當(dāng)gtid無差別時(shí),斷開原實(shí)例與目標(biāo)實(shí)例之間的同步關(guān)系,并將Proxy路由切換到目標(biāo)實(shí)例

d)

下圖表示利用D

CN

進(jìn)行集群擴(kuò)容的流程:

i.

MM表示主實(shí)例的主機(jī),MS表示主實(shí)例備機(jī),MSET表示主實(shí)例。SM表示備實(shí)例主機(jī),SS表示備實(shí)例備機(jī),SSET表示備實(shí)例。EMM表示主實(shí)例擴(kuò)容的目標(biāo)實(shí)例的主機(jī),EMS表示主實(shí)例擴(kuò)容的目標(biāo)實(shí)例的備機(jī),EMSET表示主實(shí)例擴(kuò)容的目標(biāo)實(shí)例。ESM表示備實(shí)例擴(kuò)容的目標(biāo)機(jī)器的主機(jī),ESS表示備實(shí)例擴(kuò)容的目標(biāo)機(jī)器的備機(jī),ESSET表示備實(shí)例擴(kuò)容的目標(biāo)實(shí)例

擴(kuò)容流程:

(

1)建立EMSET與MSET之間的擴(kuò)容同步關(guān)系。

(

2)檢測(cè)到EMSET與MSET之間的延遲小于5秒時(shí),斷開SSET與MSET之間的DCN同步關(guān)系。(

提前斷開是為了防止后續(xù)S

SET

GTID

的信息不被

EMSET

GTID

列表包含,這里的差異信息可能是

MM

節(jié)點(diǎn)與E

MSET

斷開后新寫入Z

K

的時(shí)間戳記錄

)

(

3)確認(rèn)SSET與MSET之間的DCN同步關(guān)系斷開后,設(shè)置MSET為隔離狀態(tài)(此時(shí)網(wǎng)關(guān)會(huì)拒絕掉所有新的連接),并向EMM節(jié)點(diǎn)的agent發(fā)送擴(kuò)容處理任務(wù)。

(

4)當(dāng)EMM節(jié)點(diǎn)的agent接收到scheduler發(fā)送的擴(kuò)容處理后,設(shè)置MM節(jié)點(diǎn)只讀,并計(jì)算EMM與MM節(jié)點(diǎn)gtid的差值,當(dāng)gtid無差值時(shí),反饋scheduler任務(wù)處理成功。如果期間設(shè)置只讀失敗,反饋sheduler處理失敗。

(

5)Scheduler根據(jù)agent反饋進(jìn)行區(qū)分處理,反饋成功進(jìn)入步驟6,反饋失敗進(jìn)入步驟7。

(

6)斷開EMSET與MSET之間的擴(kuò)容同步關(guān)系,返回?cái)U(kuò)容成功,并建立EMSET與SSET之間的DCN同步關(guān)系。

(

7)把MSET設(shè)置為正常狀態(tài)(網(wǎng)關(guān)正常接收新連接),返回?cái)U(kuò)容失敗,并重建MSET與SSET之間的DCN關(guān)系。

總結(jié)

以上是生活随笔為你收集整理的mysql dcn_Tdsql DCN同步技术原理介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。