Dws同步mysql数据_数据库技术丨GaussDB(DWS)数据同步状态查看方法
摘要:針對(duì)數(shù)據(jù)同步狀態(tài)查看方法,GaussDB(DWS)提供了豐富的系統(tǒng)函數(shù)、視圖、工具等可以直觀地對(duì)同步進(jìn)度進(jìn)行跟蹤,尤其是為方便定位人員使用,gs_ctl工具已集合了大部分相關(guān)系統(tǒng)函數(shù)的調(diào)用,可做到在任何時(shí)間,從未啟動(dòng)、啟動(dòng)、重建到運(yùn)行時(shí)的關(guān)鍵信息顯示。
1 背景概述:
1.1DN高可用架構(gòu)模型
要理解或描述數(shù)據(jù)同步的過(guò)程機(jī)制,需要首先要了解GaussDB(DWS)的DN高可用架構(gòu),理解涉及數(shù)據(jù)同步的各組件的關(guān)系、數(shù)據(jù)類(lèi)型、數(shù)據(jù)流向、設(shè)計(jì)原理和目的。
GaussDB(DWS)的DN高可用架構(gòu)為主、備、從備架構(gòu)。即在分布式環(huán)境中,完整的集群數(shù)據(jù)采用分片技術(shù)分布在多個(gè)DN組上,每組DN承擔(dān)一個(gè)數(shù)據(jù)分片,包括:一個(gè)主DN、一個(gè)備DN和一個(gè)從備DN。主和備各有一份完整的數(shù)據(jù),從備上一般不存儲(chǔ)數(shù)據(jù),僅在備機(jī)故障時(shí)做數(shù)據(jù)的暫存。組件之間關(guān)系如圖1所示:
圖1 DN高可用架構(gòu)關(guān)系圖
主、備、從備高可用架構(gòu)下,主、備及主、從備之間均會(huì)建立流復(fù)制通道。流復(fù)制又分為日志復(fù)制和數(shù)據(jù)頁(yè)復(fù)制。日志復(fù)制用于同步主DN由于WAL機(jī)制刷到磁盤(pán)上的XLOG,同步到備DN進(jìn)行回放。數(shù)據(jù)頁(yè)復(fù)制用于同步批量導(dǎo)入的行存數(shù)據(jù)、或列存CU文件。需要注意的一點(diǎn)是,從備僅用于存放XLOG和數(shù)據(jù),回放(replay)僅發(fā)生在備DN上。
1.2 數(shù)據(jù)同步涵蓋范圍
數(shù)據(jù)同步就是涉及集群中主、備節(jié)點(diǎn)以及從備節(jié)點(diǎn)之間的日志復(fù)制數(shù)據(jù)的傳輸、回放,數(shù)據(jù)頁(yè)復(fù)制數(shù)據(jù)的傳輸、追趕,備機(jī)重建等過(guò)程。GaussDB(DWS)集群高可用實(shí)踐WAL(Write Ahead Logging)思想,并通過(guò)各組件的主備的數(shù)據(jù)同步、倒換、重建等機(jī)制,保證數(shù)據(jù)庫(kù)單實(shí)例遭遇Crash后,具備故障恢復(fù)及自愈的能力,保護(hù)數(shù)據(jù)庫(kù)中數(shù)據(jù)的可靠性和完整性,最終實(shí)現(xiàn)集群對(duì)外業(yè)務(wù)連續(xù)性的過(guò)程。
這些主要的過(guò)程有:
(1)主備之間的正常流復(fù)制
每組DN獨(dú)立承擔(dān)一個(gè)數(shù)據(jù)分片,因此要求各個(gè)DN主與備必須強(qiáng)同步。為保證DN的主備強(qiáng)同步,數(shù)據(jù)在主DN操作時(shí)產(chǎn)生日志,事務(wù)提交時(shí)將日志同步給備DN。備機(jī)對(duì)接收到的XLOG進(jìn)行回放(replay),將日志轉(zhuǎn)為數(shù)據(jù)。另外,列存和行存批插場(chǎng)景下,備機(jī)正常時(shí),新增(變更)數(shù)據(jù)會(huì)發(fā)往備機(jī)。使用數(shù)據(jù)頁(yè)同步相對(duì)于日志同步少了磁盤(pán)IO,可以提升同步效率,減小RTO。
(2)備機(jī)追趕
為了解決單節(jié)點(diǎn)故障后集群寫(xiě)事務(wù)可用,DN的高可用設(shè)計(jì)引入從備這個(gè)實(shí)例。一旦備DN故障,數(shù)據(jù)將發(fā)送給從備,仍然保證了數(shù)據(jù)寫(xiě)兩份的原則,事務(wù)照樣可以提交。但主機(jī)會(huì)對(duì)BCM文件里面的標(biāo)記位置狀態(tài)位。BCM文件中每一bit位(除預(yù)留位外)對(duì)應(yīng)數(shù)據(jù)文件中每一頁(yè)(8k)狀態(tài)。
當(dāng)備機(jī)重新啟動(dòng)的時(shí)候,會(huì)連接主機(jī)做數(shù)據(jù)頁(yè)追趕(catchup)。追趕機(jī)制分為全量和增量?jī)煞N。全量catchup機(jī)制,不依賴(lài)于從備,主機(jī)遞歸掃描本地默認(rèn)表空間和自定義表空間下的所有BCM文件,然后查看狀態(tài)位來(lái)確認(rèn)哪些數(shù)據(jù)文件需要發(fā)送給備機(jī)。增量catchup機(jī)制依賴(lài)于從備,主機(jī)通知從備遍歷其從備上暫存的數(shù)據(jù)頁(yè),將變更的數(shù)據(jù)頁(yè)列表發(fā)往主機(jī),主機(jī)直接按照從備發(fā)來(lái)的變更列表,將變更數(shù)據(jù)發(fā)往備機(jī)。
(3)主備倒換
當(dāng)主DN故障時(shí),需要對(duì)備DN進(jìn)行failover,failover后備DN升為主DN來(lái)接管業(yè)務(wù)。所以failover時(shí),備DN需要連接從備DN,向從備DN請(qǐng)求數(shù)據(jù),以補(bǔ)齊備DN比主DN缺少的數(shù)據(jù)。failover的過(guò)程是備DN獨(dú)立完成的,不需要和主DN進(jìn)行交互。
(4)備機(jī)重建
重建功能主要目的是單點(diǎn)故障修復(fù),備機(jī)重建方式按照實(shí)現(xiàn)分為全量重建和增量重建,均和主DN進(jìn)行交互。全量重建是備機(jī)清空數(shù)據(jù)目錄,保留配置文件,向主機(jī)發(fā)送全量重建請(qǐng)求,主機(jī)將自己的數(shù)據(jù)目錄除了配置文件外,全部發(fā)給備機(jī),重建后啟動(dòng)備機(jī)。增量重建是一種以主DN文件為基準(zhǔn),按照文件塊對(duì)備DN文件進(jìn)行校驗(yàn),如果備DN文件的某個(gè)文件塊校驗(yàn)不一致,則主機(jī)將此文件塊發(fā)給備DN,寫(xiě)入文件對(duì)應(yīng)的文件塊中。與全量重建相比較,拷貝的數(shù)據(jù)量和WAL日志量都更少,代價(jià)更小。
從以上這些數(shù)據(jù)同步過(guò)程中,我們發(fā)現(xiàn)表現(xiàn)在運(yùn)維上一個(gè)明顯的特點(diǎn)是,這些過(guò)程有可能會(huì)時(shí)間花費(fèi)較長(zhǎng),一旦同步過(guò)程中出現(xiàn)異常問(wèn)題,其內(nèi)部關(guān)鍵過(guò)程信息輸出對(duì)于問(wèn)題分析定位十分重要。因此,GaussDB(DWS)提供了豐富的系統(tǒng)函數(shù)、視圖、工具等可以直觀地對(duì)同步進(jìn)度進(jìn)行跟蹤,尤其是為方便定位人員使用,gs_ctl工具已集合了大部分相關(guān)系統(tǒng)函數(shù)的調(diào)用,可做到在任何時(shí)間,從未啟動(dòng)、啟動(dòng)、重建到運(yùn)行時(shí)的關(guān)鍵信息顯示。
2 方法總結(jié)
2.1 系統(tǒng)視圖
總結(jié)涉及數(shù)據(jù)同步的系統(tǒng)視圖如表1所示。具體參數(shù)、返回值定義請(qǐng)參考相應(yīng)版本的產(chǎn)品文檔手冊(cè)。
2.2 系統(tǒng)函數(shù)
總結(jié)涉及數(shù)據(jù)同步的系統(tǒng)函數(shù)如表2所示。具體參數(shù)、返回值定義請(qǐng)參考相應(yīng)版本的產(chǎn)品文檔手冊(cè)。
2.3 常用工具
總結(jié)涉及數(shù)據(jù)同步的常用工具如表3所示。具體工具說(shuō)明、參數(shù)定義請(qǐng)參考相應(yīng)版本的產(chǎn)品文檔手冊(cè)中的定義。
3 應(yīng)用場(chǎng)景
3.1 查看DN實(shí)例Redo進(jìn)度
當(dāng)DN實(shí)例crash發(fā)生時(shí),我們可以通過(guò)回放XLOG日志中記錄的數(shù)據(jù)變化還原crash前的操作。這個(gè)就是所謂的redo/recovery過(guò)程。如果需要redo的XLOG比較多,或者遇到某種特殊日志類(lèi)型,對(duì)DN實(shí)例進(jìn)行啟動(dòng),啟動(dòng)過(guò)程時(shí)間就會(huì)有些長(zhǎng)。
DN實(shí)例啟動(dòng)過(guò)程中,如果期望查看XLOG redo的進(jìn)度。最方便的是使用gs_ctl query工具對(duì)指定DN實(shí)例路徑進(jìn)行狀態(tài)查詢(xún),結(jié)果中可以顯示xlog redo的進(jìn)度,如圖2所示。此外,在DN實(shí)例可以接受gsql連接時(shí)(啟動(dòng)到最小恢復(fù)點(diǎn)之前是拒絕連接的),也可直接在當(dāng)前DN上執(zhí)行pg_xlog_replay_completion 函數(shù)來(lái)獲取XLOG redo進(jìn)度信息。
圖2 DN實(shí)例啟動(dòng)時(shí)XLOG Redo進(jìn)度查詢(xún)
啟動(dòng)Redo進(jìn)度相關(guān)信息(Xlog replay info)包括:replay_start:Xlog Redo的起始LSN 。DN實(shí)例啟動(dòng)XLOG redo過(guò)程時(shí),記錄replay_start。
replay_current:Xlog Redo的當(dāng)前replay的LSN。
replay_end:DN本地接收到的最大XLOG lsn。
replay_percent:Xlog Redo的當(dāng)前完成的百分比。(replay_current - replay_start)*100 / (replay_end - replay_start)的計(jì)算值。
依據(jù)replay_current的變化,可以看到XLOG redo的推進(jìn)。
依據(jù)replay_percent和啟動(dòng)開(kāi)始時(shí)間,可以推測(cè)DN實(shí)例啟動(dòng)到正常狀態(tài)的所需時(shí)間。
3.2 查看備機(jī)Failover進(jìn)度
當(dāng)主機(jī)發(fā)生故障時(shí),我們需要將備機(jī)failover成主機(jī),此時(shí)備機(jī)需要連接從備同步XLOG和數(shù)據(jù)頁(yè)文件。如果需要同步的XLOG比較多,或者遇到某種特殊日志類(lèi)型,或者數(shù)據(jù)文件比較多時(shí),對(duì)備DN實(shí)例進(jìn)行failover,過(guò)程時(shí)間就會(huì)有些長(zhǎng)。
備機(jī)failover升主過(guò)程中,如果期望查看XLOG redo和數(shù)據(jù)頁(yè)文件同步的進(jìn)度。最方便的是使用gs_ctl query工具對(duì)指定DN實(shí)例路徑進(jìn)行狀態(tài)查詢(xún),結(jié)果中可以顯示xlog redo的進(jìn)度和從備數(shù)據(jù)同步的進(jìn)度,如圖3所示。此外,在DN實(shí)例可以接受gsql連接時(shí),也可直接在當(dāng)前DN上執(zhí)行pg_data_sync_from_dummy_completion 函數(shù)來(lái)獲取從備數(shù)據(jù)文件同步的進(jìn)度信息。
圖3 備機(jī)Failover進(jìn)度查詢(xún)
Failover Redo進(jìn)度相關(guān)信息(Xlog replay info),字段含義同Start Redo,區(qū)別在于,備DN在處理failover請(qǐng)求連接從備時(shí)候獲取最新的replay lsn更新了replay_start。
Failover數(shù)據(jù)頁(yè)文件進(jìn)度相關(guān)信息(Data sync from dummy)包括:start_index:數(shù)據(jù)頁(yè)文件同步的起始編號(hào)。
current_index:數(shù)據(jù)頁(yè)文件同步的當(dāng)前編號(hào)。
total_index:數(shù)據(jù)頁(yè)文件同步的最大編號(hào)。
sync_percent:數(shù)據(jù)頁(yè)文件當(dāng)前完成的百分比。(current_index - start_index) *100/ (total_index - start_index + 1) 的計(jì)算值。
依據(jù)current_index的變化,可以看到數(shù)據(jù)頁(yè)同步的推進(jìn)。
依據(jù)sync_percent和failover開(kāi)始時(shí)間,可以推測(cè)DN實(shí)例failover到正常狀態(tài)的所需時(shí)間。
3.3 查看備機(jī)Catchup進(jìn)度
當(dāng)備機(jī)重新啟動(dòng)的時(shí)候,會(huì)連接主機(jī)做數(shù)據(jù)頁(yè)追趕(catchup)。如果需要傳輸?shù)臄?shù)據(jù)頁(yè)比較多,或者因?yàn)闃I(yè)務(wù)造成的鎖沖突,catchup 時(shí)間就會(huì)比較長(zhǎng),備DN長(zhǎng)時(shí)間不能成為Normal狀態(tài)。
如果期望查看數(shù)據(jù)頁(yè)catchup的進(jìn)度,可以在CN上執(zhí)行select * from pgxc_get_senders_catchup_time()可進(jìn)行當(dāng)前活躍的主備發(fā)送線程的追趕信息顯示,如圖4所示。
圖4 集群上catchup進(jìn)度查詢(xún)
也可以在相應(yīng)的主DN上執(zhí)行select * from pg_get_senders_catchup_time可進(jìn)行當(dāng)前活躍的主備發(fā)送線程的追趕信息顯示。完成后,看到的是剛結(jié)束的catchup過(guò)程信息,如圖5所示。
圖5 主DN上catchup進(jìn)度查詢(xún)
備機(jī)Catchup進(jìn)度相關(guān)信息包括:catchup_type:"Incremental"或者"Full"。catchup方式為全量還是增量。
catchup_bcm_filename:當(dāng)前主機(jī)正在處理的一個(gè)BCM文件名稱(chēng)。
catchup_bcm_finished:catchup已操作完成的BCM文件數(shù)量。
catchup_bcm_total:catchup總共需要操作的BCM文件數(shù)量。
catchup_percent:catchup已經(jīng)操作完成的百分。catchup_bcm_finished*100 / catchup_bcm_total 的計(jì)算值。
catchup_remaining_time:依據(jù)已完成的進(jìn)度,預(yù)估剩余完成時(shí)間。
依據(jù)catchup_bcm_filename和catchup_bcm_finished的變化,可以看到數(shù)據(jù)頁(yè)追趕的推進(jìn)。
依據(jù)catchup_percent和catchup_remaining_time,可以推測(cè)備DN實(shí)例追趕到正常狀態(tài)的所需時(shí)間。
3.4 查看DN實(shí)例XLOG空間使用狀況
隨著數(shù)據(jù)庫(kù)的不斷運(yùn)行,產(chǎn)生的日志文件越來(lái)越多,如果因?yàn)楣?jié)點(diǎn)故障或其它原因有可能造成日志文件不斷積累而充爆磁盤(pán)。為了解此使用信息,最方便的是使用gs_ctl query工具對(duì)指定DN實(shí)例路徑進(jìn)行狀態(tài)查詢(xún),結(jié)果中可以顯示該實(shí)例的XLOG空間使用信息,截圖示例請(qǐng)參見(jiàn)上面其它場(chǎng)景。此外,還提供系統(tǒng)函數(shù) pgxc_stat_xlog_space、pg_stat_xlog_space 對(duì)數(shù)據(jù)庫(kù)集群或單個(gè)實(shí)例進(jìn)行查詢(xún),例如使用pgxc_stat_xlog_space可以獲取到整個(gè)集群的CN、主DN的XLOG空間使用信息,如圖6所示。
圖6 Xlog空間使用查詢(xún)
XLOG空間使用信息(Xlog space info)包括:xlog_files:pg_xlog目錄下,去除backup、archive_status等子目錄,所有識(shí)別為xlog文件的數(shù)目;
xlog_size:pg_xlog目錄下,去除backup、archive_status等子目錄,所有識(shí)別為xlog文件的大小之和,以MB單位顯示;
other_size:pg_xlog目錄下backup、archive_status等子目錄文件的大小之和,以MB單位顯示。
總結(jié)
以上是生活随笔為你收集整理的Dws同步mysql数据_数据库技术丨GaussDB(DWS)数据同步状态查看方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql auto_increment
- 下一篇: 刘子佼 mysql 下载_MySQL数据