2021-03-03 13:45 | 來源:和訊網新聞 | 作者:俠名 | [產業] 字號變大| 字號變小
隨著互聯網業務發展對容災以及對訪問加速、多供應商成本控制等需求的產生,互聯網公司的多云部署和跨云遷移逐漸成為剛需,而在此過程中,最困擾運維和研發人員的就是數據的...
前言
隨著互聯網業務發展對容災以及對訪問加速、多供應商成本控制等需求的產生,互聯網公司多云部署和跨云遷移逐漸成為剛需,而在此過程中,最困擾運維和研發人員的就是數據的遷移和同步。俗語說“ 上屋搬下屋,搬灑一籮谷 ”,在業務的遷移過程中一旦遇到重要數據的丟失,將會對企業造成巨大的損失。
UCloud優刻得通過對一些客戶的跨云遷移過程進行總結,發現普遍存在的挑戰有三點:
>數據完整性和一致性挑戰。
>時效性,即遷移窗口期相對有限。
>應用依賴性和各種調用關系。
跨云遷移涉及到的資源主要分成三大類:
第一類是EIP、VPC、負載均衡和NAT網關這類網絡服務,在跨云遷移的過程中這些都會發生變化,而且是無狀態服務,配置并不復雜,對于這部分資源可以通過人工的方法對齊配置。
第二類是最為常見的云主機資源,這部分我們可以通過UCloud優刻得服務器遷移工具USMC,以相同的配置在UCloud優刻得公有云上創建一份,只需保持和源端服務器IP一致的目標端服務器IP,支持按分鐘級別進行增量數據同步,減少業務切換的時間。
而第三類就是包括數據庫、文件存儲和對象存儲在內的一些存儲服務,我們可以通過UDTS數據傳輸工具進行遷移,而這一部分也正是本文重點討論的實踐內容。
通常,我們將跨云遷移劃分為三個階段: 數據同步階段、數據規整階段(清理測試時產生的臟數據)和數據割接階段。數據同步階段主要是需要解決兩個問題,首先是將數據復制到新平臺,并且讓應用程序在新平臺運行,這也是跨云遷移的核心;其次就是利用真實數據對應用程序進行測試,確認應用程序在目標平臺可以符合預期地運行。我們知道數據可以分為結構化數據和非結構化數據,用來存儲數據的方法眾多,本文主要介紹數據同步階段中常見的存儲組件例如MySQL、文件存儲和對象存儲的數據遷移實踐。其它不同的存儲組件各有不同,但也是可以參考這幾個組件的遷移邏輯來處理的。
MySQL同步
一般來說,我們認為對于MySQL的同步,只要存量數據和增量數據都能做到一致,那么整個數據庫的同步就是一致的。而常見的MySQL數據遷移方式有兩種:一種是基于MySQL主從的方式,通過mysqldump記錄下binlog位置,然后把這個binlog位置前的數據完整導出,恢復出一個備庫,然后再從記錄的binlog位置開始向主庫追平增量數據。
另一種就是UDTS工具,總體上也是分為存量階段和增量階段,增量階段的追及是將從存量同步發起的一瞬間開始往后的數據變化通過binlog的形式同步到目標庫。增量同步依靠binlog完成,這是MySQL主從同步的基礎,是我們需要默認信任的數據一致性機制,當然我們最終需要以數據校驗結果來確認數據是否一致。簡而言之, 跨云遷移過程中MySQL的數據一致性主要就集中在存量數據的遷移如何保證一致。
【案例】
以近期的xx公司遷移到UCloud為例,其涉及數據庫實例有數十個,并且由于應用依賴的原因需要進行整體遷移。在這案例中,如果采用mysqldump的方法,那么這數十個數據庫都需要經過導出、傳輸、導入和配置主從這樣的操作,給整個遷移任務增加了不少工作量。
同時也正如很多商業智能應用需要將數據匯總用作分析,這家公司的業務系統也有類似的匯總數據庫,這種級聯關系會讓數據同步操作進一步復雜化。最終該公司使用了UDTS作為跨云數據同步的解決方案,在保障數據一致的同時,DBA只需要提供兩邊數據庫的連接和賬號信息即可將數據同步任務托管,釋放了運維人員的精力,專注去處理業務上的數據庫工作需求。
數據同步
前面提到MySQL事務,在理解存量數據遷移過程中的數據一致性時,需要先了解InnoDB為代表的事務引擎和MyISAM代表的非事務引擎。使用MyISAM引擎的數據表確實沒有很好的數據一致性確保手段,存量數據只能對數據表加讀鎖并遷移,在完成存量數據同步后,通過binlog追平,這樣因為讀鎖會阻塞數據的寫入,會導致業務的寫入功能不可用,而且這一不可用的時間視表中數據體量而定。
然而因為MyISAM的不靈活,實際互聯網公司中已經很少使用MyISAM引擎了。而InnoDB引擎因為它支持事務和行級鎖的特性,在數據同步過程中對業務的影響小很多,但也因此對數據一致性的保護方法也相對復雜,而這一套一致性保護方法,核心就在于基于連接session的事務隔離和基于MVCC的數據版本管理,而UDTS也正是基于此而實現數據一致。
數據校驗
數據一致性的關鍵,除了數據同步過程中的一致性保障,更加簡單直接的手段是數據校驗,只有對比過數據是一致的,那才是真正的一致。MySQL數據校驗的手段有很多,其中最經典的是pt-table-checksum。
pt-table-checksum會新建一個臨時的checksum表,并且獲取與主庫有主從關系的所有從庫信息。在校驗工作時,工具會將該session的binlog格式設置為statement,這樣是為了利用mysql的binlog機制,將主庫上執行的sql語句同步到從庫去。接著工具會以chunk為單位從主庫中讀取數據和計算校驗,將校驗結果寫入checksum表,這個過程會在一個語句中完成,隨后這個語句由于對checksum表進行修改,會被同步到從庫并且被從庫執行。這樣從庫也會在自己的checksum表寫入校驗值。這個時候工具再從庫中把checksum值讀出,就可以與主庫的計算值進行對比。
pt-table-checksum的優勢在于使用方便,在經歷了多年迭代也有非常好的可靠性保證。但是它的技術限制也是明顯,那就是要求被校驗的兩個庫需要是主從關系,同時也要求數據表有索引,因為chunk大小的計算是通過索引完成的。
【案例】
以近期的xx公司遷移到UCloud為例,在數據同步的階段由于數據庫實例眾多,需要減少DBA的工作負擔而采用了UDTS來進行數據庫遷移,但是這樣就打破了源和目標庫的主從關系,進而導致pt-table-checksum無法使用。當然實際上數據導出-傳輸-導入-配置主從這樣的機械化操作可以通過制作腳本來解決,但是為了遷移而開發一套復用率不高的腳本代碼并不明智。這時候sync_diff_inspector工具的優勢就體現出來了。
sync_diff_inspector是TiDB團隊為了方便用戶在MySQL數據遷移到TiDB后對數據一致性進行檢查的開源工具,它不要求被校驗的兩個數據庫存在主從關系,也沒有對數據表索引的要求,甚至允許源庫和目標庫有不同的庫名和表名,只要有明確的映射,就可以對數據本身進行校驗。同時,在sync_diff_inspector發現某一塊數據存在差異的時候,會通過二分對比的辦法,最終找到實際不一致的行,縮小了疑似不一致的數據范圍。
雖然這種相對松耦合的環境下對數據進行校驗,可能會出現記錄下一些數據不一致,例如主庫的某個寫入還沒有完全即時的同步到從庫,這時候進行檢查可能會存在數據差異,但是除非源庫insert/delete/update操作非常頻繁,否則一般期望工具檢查發現的差異不會太多。這時候只需要針對檢查報告中的少數差異做第二次的手工或腳本校驗,就可以確認數據一致性。當然如果一致性檢查工具發現有較多數據不一致,一是可以用檢查工具生成的一致性修復腳本來修復一致性,也可以對通過對數據進行重新同步來完成。
需要留意的是,pt-table-checksum和sync_diff_inspector都是對實體數據進行校驗的工具,在數據量較大的情況下校驗操作會相對緩慢,不適合在割接時間窗口中操作。在實際項目中筆者測得一個500G的數據庫的完整校驗耗時大約28小時。在割接時間窗口中,一般通過select max(id)或者select count(id)對數據進行簡單對比。
文件存儲同步
文件同步
相比于MySQL,文件作為一種非結構化的存儲方式,遷移方法相對較少,也沒有太多的數據一致性保障方法。與此同時,海量小文件的處理效率有限一直都是技術難題。
一般來說,文件存儲的方式一般是硬盤本地存儲或者基于NFS協議的存儲服務,這兩種存儲服務中NFS存儲的同步會更困難一些。單個文件的同步是簡單的,將文件復制到目標空間然后再對文件計算md5校驗和,只要兩邊的數據是一致的就行。難點在于獲知文件是否有發生變化。在linux kernel中可以利用 inotify機制了解到本機對文件的修改動作。
inotify應用在啟動的時候除了初始化監聽和創建事件隊列以外,還會在文件系統操作的函數中加入inotify hook函數以將文件系統事件通知到inotify系統中,這些都是操作系統內核中的系統調用。所以對于NFS而言inotify就失效了,因為相關調用都是本機環境中的系統調用而沒有經過網絡,掛載了同一個NFS的多臺主機沒有機制了解對方在什么時候對文件進行了操作。
所以這時候,從業務中對出現變化的文件進行記錄就很有必要,因為實際上所有對文件的增、刪、改都是業務所需的操作行為。所以在數據同步階段,我們依然通過rsync或類似方法來同步數據,并且通過業務日志記錄發生了變化的文件,最后在割接階段解析業務日志,將出現過變化的文件做最后的增量同步,從而實現數據追平。
典型的組件可以參考FastDFS,FastDFS實現了類似binlog的方式,來記錄每個storaged接受到哪些文件的更新,是哪種更新操作。在啟動storaged之后,就可以實現自動讀取其它同副本關系的storaged的數據來恢復。例如大C表示源創建,小c表示創建副本,大A表示源追加,小a標識副本追加,大D表示源刪除,小d表示副本刪除等等。
當然也有一些實現了分布式鎖的文件系統,例如vmware的vmfs和oracle的ocfs,可以共享文件系統數據的同時,通過鎖機制來實現操作系統對文件變化的感知。
文件校驗
文件的校驗,這里會涉及到存儲靜默錯誤的問題。我們回憶硬盤壞道這個概念,就會發現硬盤自己也不知道某個扇區目前狀態是否良好,需要專門進行掃描才能確認。一個扇區寫了數據,在長久的運行中這一扇區成為了壞道導致不能讀出數據,這時候應用不讀取就不知道底層數據出現問題,這就是靜默錯誤。
要解決靜默錯誤的唯一辦法是全鏈路數據校驗:
>在數據上傳前,確認數據正常,生成校驗和;
>上傳到某個存儲服務之后,存儲服務存儲文件并且記錄這個文件的校驗和;
>定期對數據進行巡檢,重新計算文件校驗和并且和記錄值比較;
>取出數據時,也對數據進行校驗和比較,這樣才能保證文件數據一致。
因此從技術層面來說建議從一開始就使用帶有全鏈路數據校驗功能的服務,自建存儲服務的全鏈路一致性也需要自行建設,否則在遷移后只能通過md5sum這類工具對全部數據進行校驗,確保遷移前后數據沒有差異,而不保證遷移后的文件依然是訪客當初上傳的文件。盡管需要做這樣的妥協,海量小文件的遷移和校驗依然會造成遷移工期的壓力。
利用md5sum遞歸遍歷整個目錄,生成所有文件的md5結果,可以通過以下命令完成:
find ./ -type f -print0 | xargs -0 md5sum > ./my.md5
相應的,可以通過以下命令對遷移后的整個目錄進行遞歸遍歷校驗。
md5sum -c my.md5
對象存儲同步
數據同步
對象存儲的數據同步和校驗的復雜度介于數據庫和文件存儲之間,因為它基本上是基于HTTP協議的,鏡像回源的功能就能派上用場了,即如果一個文件在我們平臺上不存在,那對象存儲會嘗試到源站去獲取并保存下來。而相對于InnoDB數據表這種結構化數據,對象存儲的數據一致性保障還是相對較弱。
目前市面上各種平臺的對象存儲服務對S3協議都有較好支持,而通過US3SYNC工具就可以將其他支持S3協議的對象存儲數據遷移到UCloud對象存儲US3中。雖然US3也支持鏡像回源,但是在數據同步的剛開始時,不建議將原平臺bucket配置為回源目標之后就將US3作為服務入口來使用起來,因為這個時候US3 bucket中還沒有數據,直接使用US3會造成大量鏡像回源,一是從而導致整體訪問延遲變大,其次也容易出現訪問失敗的情況。
US3SYNC工具與redis協同工作。在數據同步開始前,US3SYNC工具會通過S3協議的列表接口,將一定數量的源bucket對象key以及這些key的同步狀態記錄進redis中。每當一個文件完成從源bucket的下載、緩存和上傳到US3后,導入工具就會在redis中將數據標記為已同步。這樣在US3SYNC工具因為一些可能的原因,例如網絡環境不好等問題故障掛起之后,只需要重啟US3SYNC,它都可以從斷點開始續傳。
當完成一輪數據導入之后,就可以開始配置鏡像回源配置了,這時候直接訪問US3也能得到不錯的命中率。當然也可以選擇再運行一次US3SYNC工具,如果這樣操作需要注意US3SYNC工具原本的功能是斷點續傳的,所以我們應該把redis的內容清除。
但是直接清理掉redis再重新跑,US3SYNC工具的行為是重新加載文件列表并且重新寫入US3,這樣會導致所有數據都要重新寫一次,效率很低。在這個時候,我們可以配置US3SYNC工具為文件比對模式,在獲取文件列表后將文件都通過HEAD獲取文件大小,這時候只要將源bucket HEAD成功,但是US3為not found或者文件大小不同的數據同步到US3即可。在實際的數據遷移實踐中,我們可以更加靈活的使用續傳和比對模式來提高工作效率。
【案例】
以近期的xx公司遷移到UCloud為例,該公司的CDN和對象存儲從友商遷移到UCloud的過程里面,有一個bucket中存在文件數量達到了12億,將所有key存儲到redis中并不合理,會導致redis數據膨脹,進而對遷移中轉主機提出非常高的內存需求。這時候應該從一開始就配置US3SYNC工具為文件比對模式對數據進行遷移,進而避免不合理的redis內存使用。
數據校驗
對象存儲的數據校驗方面,大多數對象存儲都支持給文件提供ETag的Header,且ETag的生成都跟原始數據有一定關系,所以可以根據源平臺的ETag計算方式,在下載到文件后對文件進行一次計算,看看ETag是否相符。而US3SYNC功能本身也會按照US3的ETag計算規則預先計算我們的ETag,在上傳成功后對比US3返回的ETag和導入工具自行計算的值,來實現對數據的校驗。
數據規整階段
1、臟數據處理
正如前面提到,為了了解新平臺中應用是否能正常運行,一般來說遷移過程中涉及到的應用測試都會盡量使用真實數據,甚至采用流量重放的方法對新系統進行測試,以便通過對比原平臺環境中真實行為的結果來校驗新平臺應用是否正常工作。
在測試之后,新平臺就會出現臟數據,需要對其進行處理。通常臟數據的處理有兩種思路可以使用,其一是回滾,就是在開展業務測試前先對數據進行備份或者記錄還原點。對于MySQL數據庫可以基于binlog進行回滾,也可以通過云平臺能力進行數據庫備份和回滾,但是需要注意備份時暫停UDTS任務以及其它寫入,以及記錄binlog位置。對于文件存儲和對象存儲,文件變更日志的作用就很顯著了,所有變更過的文件從日志中解析出來之后從源頭重新同步,這樣可以避免所有文件的重新同步。
當然也可以丟掉全部臟數據,采取與數據同步階段相同的數據遷移手段對數據進行重新同步,這樣雖然慢一些,但是整個數據同步過程就是冪等的,可重復性更強。兩種臟數據的處理方式可以根據實際數據量靈活采用。
2、保障數據一致性
在割接準備階段時候進行的數據同步所得到的數據就是割接和割接后的生產數據了,所以需要通過一定的手段,保障數據的持續同步,同時避免數據被意外修改。下面說說幾種保障的辦法。
→ 基于用戶的數據庫只讀
對于MySQL而言,通過對數據同步和業務應用設置不同的賬戶,并且對不同用戶分配不同的權限,這幾乎是最簡單易行的實踐方式。設立數據同步賬戶,賦予增刪查改權限和DDL語句的權限,這樣可以滿足存量和增量數據同步的需要,然后將數據同步賬戶嚴格控制只配置給UDTS數據同步工具和sync_diff_inspector數據校驗工具。
而對于業務應用的配置文件,或者記錄到配置中心中的配置,上面所使用的數據庫賬戶就只分配select語句權限,這樣就能保障業務應用、腳本或者各種定時任務都無法對數據進行更改。而且這樣做還有一個好處,對于一些沒有實現數據庫重連邏輯的業務應用,這時候數據庫是可以正常連接的,這意味著在數據割接的時候不需要重啟應用,而是只需要調整MySQL中業務賬戶的權限。
對于一些場景,不重啟對于割接過程來說是非常重要的。例如由于分布式框架的引入,對象和方法可以輕松的通過RPC獲取,這時候業務團隊也專注于業務的實現,忽略了底層重連機制的實現。結果就是應用系統成為了一個分布式的緊耦合系統,主機A上某個進程的正常運行需要依賴主機B上進程的正常運行,而且B還不能隨便重啟,因為重啟后A不會重連。這時候如果應用不用重啟,那意味著清理臟數據后,應用保持當前的運行狀態即可,而不是調查所有應用的啟動順序,在割接時確認數據同步后再按順序逐個啟動,這樣有利于提升割接后的業務穩定性和降低割接操作的復雜度。
然而,通過數據庫只讀來保障數據一致性的方式受限也會比較多,例如MySQL有基于用戶的只讀方法,同時Redis、SQLServer、MongoDB、Elastic Search、文件存儲、對象存儲等等組件又有各自不同的只讀方法,在組件數量和種類增加以后,這種操作方式的優勢會逐漸喪失。
因此,數據庫只讀的方式適用于MySQL數據庫且實例數量不多的情況,例如整體遷移以模塊化方式進行的情況。另外對于需要盡量減少應用重啟的系統也可以優先考慮這種方式來保障數據一致性。
→ 結束應用進程
前面提到,在一些應用系統里重啟應用并不是易事,但有一些應用系統,重啟造成的困擾并沒有那么大,可以相對自由的重啟應用。實際上對于一個系統而言,會有三類程序可能對數據存儲進行修改,分別是應用程序和操作系統定時任務腳本,對于數據庫而言還需要多加一個定時任務。只需要保證這三類程序都是停止的,那么就可以保證沒有同步服務以外的程序對數據進行修改,從而保障數據一致性。
通過這種方法來保證數據不被意外修改的優勢在于它是普遍適用的,不管提供存儲服務的是數據庫或者其他類型的存儲組件,只要進程停了數據就不可能被修改。
但是這種處理方法的限制也是很明顯的,首先就是應用可以隨意重啟。其次是在分布式環境下面,需要具備批量的啟動或者關閉應用程序,以及修改操作系統定時任務的能力,不管是基于Ansible或者其他方式。除此以外也需要確保生產環境中應用程序和腳本的統計是正確的,也就是說所有應用程序和腳本都是運維和開發共同知曉的。例如運維為了短時間方便,編寫腳本作用在生產環境的數據而不被其他同事所了解,那在停止應用的時候自然也不會被考慮到。
總結來說,結束應用程序的方式適合應用可以各自獨立啟停,且生產環境應用、腳本和數據庫定時任務都完全統計清楚明確的情況下使用。
→ ACL網絡隔離
通過ACL網絡對數據存儲服務做隔離是一個操作上相對比較簡單的方法。簡單來說,就是在網絡環境上配置ACL,允許數據同步服務連接存儲并且禁止其它應用主機連接。這種方法的優勢在于規則的套用和解除都相對簡單,在數據同步時直接對整個VPC子網生效,在割接時候只需要在控制臺上解除,從而對整個VPC子網的存儲服務做到批量控制。而且相比于數據庫只讀和結束應用進程這兩種方法,通過網絡ACL進行隔離則不用依賴于運維團隊對全系統所有細節的掌握,對所有基于網絡的存儲服務進行覆蓋,可以說完全具備了前面兩種數據一致性保護方式的優點。
當然ACL網絡隔離的方法也有它的適用場景限制。其中最主要的是這種方式的實施要求運維團隊對各個子網的功能劃分是清晰明確的,網絡入口、業務應用和數據存儲分別在不同的子網,所以如果應用習慣了大二層的部署方式,那么網絡ACL的批量管理優勢就會大打折扣。其次,由于對應用的網絡中斷,因此對于沒有重連機制的應用,網絡重新開通后依然需要重啟應用。最后,這一方法對于不連網絡的應用是無法限制的,例如云硬盤本地存儲,這種情況需要以掛載云硬盤的主機為單位去考慮網絡隔離。
經過對上面三種保障數據一致性方法的對比,可以發現這三種方法其實并沒有相互沖突的點,在實際中我們可以靈活組合來匹配更多業務環境的要求,例如同時使用結束應用進程和ACL網絡隔離。
【案例】
在XX公司的跨云遷移任務中,我們在前期調研中發現了幾個問題。首先是數據庫實例數量眾多,源庫和目標庫既有自建的也有云平臺產品,具體操作方式各有差異;其次是數據存儲服務種類眾多,除了MySQL以外,還有MongoDB、SQL Server、NFS存儲、Elastic Search等,逐個組件去設計讀寫-只讀切換的邏輯需要運維人員很大的精力投入。另一方面,由于目標系統對存儲和應用有比較好的網段劃分,雖然組件眾多,但是至少都在相同子網內,適合使用ACL來隔離。最后,由于應用層面沒有讀寫-只讀的切換開關,也沒有實現重連機制。
所以,在實際操作過程中,我們推薦客戶使用了結束應用進程和ACL網絡隔離的雙重保險,因為應用不具備重連實現的情況下,割接測試前應用至少需要重啟一次,ACL和結束應用的限制都會被接受。與此同時,ACL隔離也補充了結束應用的覆蓋面,從網絡層面保障不會有數據同步組件以外的系統連接到數據存儲層面來進行操作。
數據割接階段
不管是整體割接,還是以業務模塊為單位的割接,時間窗口大小總是有限的,而且從業務角度也希望割接窗口越小越好。
1、數據校驗時機
數據校驗最早應該在完成數據規整階段后才啟動,這一點應該是可以簡單理解的,因為數據規整前的數據不用作割接后投產,沒有校驗價值。而在前面數據校驗章節中提到,數據校驗分為兩種,一種是sync_diff_inspector這類實體數據校驗,另一種是select max(id)這類元數據校驗,兩種方法并不沖突,在實際任務中可以靈活安排來減少對割接時間窗口的壓力。
【案例】
以近期XX公司遷移到UCloud項目為例,割接時間只有凌晨12點到早上6點的6個小時,中間需要進行應用配置和業務測試,留給數據校驗的時間不多,所以早在數據割接之前就啟動了sync_diff_inspector對實體數據進行校驗。結果數據校驗時間和效果都如前預料,最大一個500G數據庫的實體數據校驗花費了1天多的時間,同時多個數據庫的校驗也發現了少量的不一致,這一部分不一致經過人工對比后發現實際一致。隨后在割接過程中進行元數據校驗,結果隨著消息隊列完成消費和定時任務結束,兩邊的select max(id)或者select count(id)結果最終一致了。
2、割接與回滾
在割接階段,不得不考慮的一個問題就是回滾,在割接過程中發現數據確實出現了不一致,這時就需要對不一致的范圍做合理的評估。如果在割接時間窗口中的元數據校驗如果發現不一致,這時候最明智的處理手段就是回滾,而保障原平臺沒有臟數據則是回滾的基礎。
【案例】
以xx公司遷移到UCloud為例,在托管IDC遷移到UCloud混合云的過程中,由于業務依賴較少,所以采用了可以敏捷割接和回滾的業務模塊遷移方式。在這一案例的割接實踐中,運維團隊不僅為數據庫設置了只讀,而且也在業務應用中嵌入了只讀開關,只要通過配置中心發布開啟只讀開關即可生效。在數據庫只讀后就參考數據同步階段的數據校驗方式,對數據或者元數據進行校驗,最后在確認應用的讀取功能都正常以后再解除目標庫的只讀,并開放業務。在這個案例中回滾也是相對簡單的,如果發現應用的讀取功能異常,這時候只需將應用重新部署回原平臺,啟動和解除數據庫只讀即可。
而對于需要進行整體割接的任務,割接過程相比于模塊化的割接會復雜一些,但是與模塊化割接的機理大同小異。在割接過程中先通過停用負載均衡、設置ACL的方式停止業務入口,等待消息隊列完成消費數據落地以及定時任務運行完成,然后參考割接準備階段的方法對原平臺數據進行保護。在完成原平臺的數據封存后,需要等待同步任務最終完成同步以及對數據進行校驗,具體的數據校驗方法是參考前文中數據校驗方法完成的。在確認兩邊平臺數據一致后,就可以停止同步,在新平臺啟動應用和進行內部測試。
至于回滾操作,本身也是有時間邊界的,當新平臺業務入口做了灰度開放后就不能進行回滾操作了,因為這時候有很大機率真正的客戶數據已經寫入到新平臺,但是這部分新數據又沒有同步回原平臺,這樣兩邊數據就是不一致的。但是一般而言,只要保證遷移兩邊平臺數據是一致的,應用程序大多是應用狀態或者代碼邏輯問題,相對可控。
寫在最后
多云部署已成趨勢,在幫助平臺用戶進行多云部署和數據遷移的過程中,UCloud技術團隊摸索和積累了豐富的實戰經驗。為了在有限的業務窗口期將海量數據進行遷移, UCloud服務器遷移中心USMC和數據傳輸工具UDTS,助力用戶在保證數據完整性和一致性的前提下,大大提升了多云部署的數據同步效率。
以上就是UCloud華南架構團隊關于跨云遷移在數據同步、規整和割接過程中保障數據一致性的一些實踐和思考,希望對遇到同類問題的大家有所幫助。當然,本文所闡述的數據遷移同步的解決方案也適用于本地IDC遷移上云的場景。
《電鰻快報》
熱門
相關新聞