通過DTS實(shí)現(xiàn)數(shù)據(jù)庫的垂直拆分
本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業(yè)務(wù)造成影響,請務(wù)必仔細(xì)閱讀。
當(dāng)RDS實(shí)例負(fù)載過大時(shí),可以將該實(shí)例的一個(gè)數(shù)據(jù)庫或表垂直拆分至另外一個(gè)單獨(dú)的實(shí)例中。本文介紹如何通過雙寫方案和簡易拆分方案實(shí)現(xiàn)垂直拆分。
背景信息
假設(shè)一個(gè)RDS實(shí)例上有數(shù)據(jù)庫A和B,隨著業(yè)務(wù)增長實(shí)例瓶頸也日趨可見,如想要減輕該實(shí)例的壓力,您可以將數(shù)據(jù)庫B垂直拆分至另外一個(gè)單獨(dú)的實(shí)例中,詳情請參見雙寫方案和簡易拆分方案。
注意事項(xiàng)
您需要使用一個(gè)單獨(dú)的實(shí)例作為目標(biāo)實(shí)例,且目標(biāo)實(shí)例的數(shù)據(jù)庫賬號(hào)權(quán)限需與源實(shí)例的數(shù)據(jù)庫賬號(hào)權(quán)限一致。支持的目標(biāo)實(shí)例類型,請參見DTS數(shù)據(jù)遷移方案概覽。
說明為便于區(qū)分會(huì)話信息以及提升數(shù)據(jù)安全性,建議在源和目標(biāo)實(shí)例中單獨(dú)創(chuàng)建并授權(quán)一個(gè)數(shù)據(jù)庫賬號(hào)以供數(shù)據(jù)遷移使用。
需將目標(biāo)實(shí)例的連接串加入應(yīng)用程序中。
由于簡易拆分方案需要短暫暫停業(yè)務(wù)并暫停向數(shù)據(jù)庫寫入數(shù)據(jù),請選擇業(yè)務(wù)低峰期操作以降低程序變更發(fā)布、切換實(shí)例過程中對業(yè)務(wù)的影響。
雙寫方案
可以實(shí)現(xiàn)業(yè)務(wù)的灰度切流,最大限度保證業(yè)務(wù)不受影響,但您需要先改造業(yè)務(wù)的應(yīng)用程序,使應(yīng)用程序的相關(guān)數(shù)據(jù)能夠同時(shí)寫入源和目標(biāo)實(shí)例的數(shù)據(jù)庫B中。
配置源和目標(biāo)實(shí)例的數(shù)據(jù)遷移任務(wù),遷移對象選擇為數(shù)據(jù)庫B,配置案例請參見DTS數(shù)據(jù)遷移方案概覽。
說明配置數(shù)據(jù)遷移任務(wù)時(shí),您必須選中結(jié)構(gòu)數(shù)據(jù)遷移、全量數(shù)據(jù)遷移、增量數(shù)據(jù)遷移。
等待數(shù)據(jù)遷移任務(wù)的進(jìn)度變更為增量遷移,并顯示為無延遲狀態(tài)或延遲時(shí)間低于5秒。
驗(yàn)證源和目標(biāo)實(shí)例的數(shù)據(jù)庫B中的數(shù)據(jù)是否一致。
如果數(shù)據(jù)一致,則結(jié)束數(shù)據(jù)遷移的任務(wù),詳情請參見結(jié)束數(shù)據(jù)遷移任務(wù)。
警告用于數(shù)據(jù)遷移的數(shù)據(jù)庫賬號(hào)擁有讀寫權(quán)限,為保障數(shù)據(jù)庫安全性,請?jiān)跀?shù)據(jù)遷移完成后,刪除用于數(shù)據(jù)遷移的數(shù)據(jù)庫賬號(hào)或回收相關(guān)寫權(quán)限。
將應(yīng)用程序中的相關(guān)數(shù)據(jù)同時(shí)寫入源和目標(biāo)實(shí)例數(shù)據(jù)庫B中。
登錄源和目標(biāo)實(shí)例數(shù)據(jù)庫B,根據(jù)數(shù)據(jù)庫類型選擇下述命令查看會(huì)話信息,確保有新的會(huì)話執(zhí)行寫入操作。
MySQL
show processlist;
SQL Server
select * from sys.dm_exec_connections;
Oracle
select sid,serial#,username,program,machine,status from v$session;
PostgreSQL
select * from pg_stat_activity;
Redis
CLIENT LIST
MongoDB
use admin db.runCommand({currentOp: 1, $all:[{"active" : true}]})
說明上述語句查詢到的進(jìn)程或會(huì)話信息中,包含DTS連接源和目標(biāo)實(shí)例數(shù)據(jù)庫B的進(jìn)程或會(huì)話。
應(yīng)用程序的相關(guān)數(shù)據(jù)同時(shí)傳入至源實(shí)例和目標(biāo)實(shí)例的數(shù)據(jù)庫B中并穩(wěn)定運(yùn)行一個(gè)業(yè)務(wù)周期或者7天。
測試所有業(yè)務(wù)涉及的功能并確認(rèn)無問題,可下線源實(shí)例的數(shù)據(jù)庫B。
簡易拆分方案
有一定的回滾失敗風(fēng)險(xiǎn),但無需改造業(yè)務(wù)的應(yīng)用程序。
配置源和目標(biāo)實(shí)例的數(shù)據(jù)遷移任務(wù),遷移對象選擇為數(shù)據(jù)庫B,配置案例請參見DTS數(shù)據(jù)遷移方案概覽。
等待數(shù)據(jù)遷移任務(wù)的進(jìn)度變更為增量遷移,并顯示為無延遲狀態(tài)或延遲時(shí)間低于5秒。
說明配置數(shù)據(jù)遷移任務(wù)時(shí),如果未選中增量數(shù)據(jù)遷移,進(jìn)度條不會(huì)變更為增量遷移,且遷移完成后會(huì)自動(dòng)結(jié)束任務(wù)。此類情況通常約定在執(zhí)行數(shù)據(jù)遷移任務(wù)之前將業(yè)務(wù)中斷并停止新的數(shù)據(jù)寫入源數(shù)據(jù)庫,所以請直接跳轉(zhuǎn)至 步驟6繼續(xù)操作。
驗(yàn)證源和目標(biāo)實(shí)例的數(shù)據(jù)庫B中的數(shù)據(jù)是否一致。
如果數(shù)據(jù)一致,則結(jié)束數(shù)據(jù)遷移的任務(wù),詳情請參見結(jié)束數(shù)據(jù)遷移任務(wù)。
警告用于數(shù)據(jù)遷移的數(shù)據(jù)庫賬號(hào)擁有讀寫權(quán)限,為保障數(shù)據(jù)庫安全性,請?jiān)跀?shù)據(jù)遷移完成后,刪除用于數(shù)據(jù)遷移的數(shù)據(jù)庫賬號(hào)或回收相關(guān)寫權(quán)限。
斷開源實(shí)例數(shù)據(jù)庫B與應(yīng)用程序的連接。
說明源實(shí)例數(shù)據(jù)庫B與應(yīng)用程序的連接中斷后,如果影響了數(shù)據(jù)庫A涉及業(yè)務(wù)的功能,您需要暫時(shí)中斷整個(gè)源實(shí)例與應(yīng)用程序的連接。
登錄源實(shí)例數(shù)據(jù)庫B,根據(jù)數(shù)據(jù)庫類型選擇下述命令查看會(huì)話信息,確保沒有新的會(huì)話執(zhí)行寫入操作。
MySQL
show processlist;
SQL Server
select * from sys.dm_exec_connections;
Oracle
select sid,serial#,username,program,machine,status from v$session;
PostgreSQL
select * from pg_stat_activity;
Redis
CLIENT LIST
MongoDB
use admin db.runCommand({currentOp: 1, $all:[{"active" : true}]})
說明上述語句查詢到的進(jìn)程或會(huì)話信息中,包含DTS連接源實(shí)例數(shù)據(jù)庫B的進(jìn)程或會(huì)話。
創(chuàng)建反向數(shù)據(jù)遷移任務(wù)并啟動(dòng),用于將目標(biāo)實(shí)例數(shù)據(jù)庫B后續(xù)產(chǎn)生增量數(shù)據(jù)遷移到源實(shí)例數(shù)據(jù)庫B。
此步驟創(chuàng)建的反向遷移任務(wù)的作用是為業(yè)務(wù)提供回退方案,業(yè)務(wù)恢復(fù)運(yùn)行后,一旦出現(xiàn)異常可將業(yè)務(wù)切換至原有的數(shù)據(jù)庫中。
警告在配置反向數(shù)據(jù)遷移任務(wù)時(shí),在設(shè)置遷移類型及列表環(huán)節(jié)僅需選擇增量數(shù)據(jù)遷移,然后選擇需要遷移回源數(shù)據(jù)庫的庫或表。
保持源實(shí)例數(shù)據(jù)庫B與應(yīng)用程序的斷開狀態(tài),驗(yàn)證源和目標(biāo)實(shí)例的數(shù)據(jù)庫B數(shù)據(jù)一致后,將應(yīng)用程序的相關(guān)數(shù)據(jù)庫服務(wù)切換至目標(biāo)實(shí)例的數(shù)據(jù)庫B并恢復(fù)業(yè)務(wù)。
登錄目標(biāo)實(shí)例數(shù)據(jù)庫B,根據(jù)數(shù)據(jù)庫類型選擇下述命令查看會(huì)話信息,確保有新的會(huì)話執(zhí)行寫入操作。
MySQL
show processlist;
SQL Server
select * from sys.dm_exec_connections;
Oracle
select sid,serial#,username,program,machine,status from v$session;
PostgreSQL
select * from pg_stat_activity;
Redis
CLIENT LIST
MongoDB
use admin db.runCommand({currentOp: 1, $all:[{"active" : true}]})
說明上述語句查詢到的進(jìn)程或會(huì)話信息中,包含DTS連接源實(shí)例數(shù)據(jù)庫B的進(jìn)程或會(huì)話。
業(yè)務(wù)切換至目標(biāo)數(shù)據(jù)庫并穩(wěn)定運(yùn)行一個(gè)業(yè)務(wù)周期或者7天。
測試所有業(yè)務(wù)涉及的功能并確認(rèn)無問題,可下線源實(shí)例的數(shù)據(jù)庫B并結(jié)束反向數(shù)據(jù)遷移的任務(wù),詳情請參見結(jié)束數(shù)據(jù)遷移任務(wù)。
警告用于數(shù)據(jù)遷移的數(shù)據(jù)庫賬號(hào)擁有讀寫權(quán)限,為保障數(shù)據(jù)庫安全性,請?jiān)跀?shù)據(jù)遷移完成后,刪除用于數(shù)據(jù)遷移的數(shù)據(jù)庫賬號(hào)或回收相關(guān)寫權(quán)限。