傳統(tǒng)業(yè)務(wù)公有云遷移避坑指南
本文轉(zhuǎn)載自微信公眾號(hào)「新鈦云服」,作者秦鳴。轉(zhuǎn)載本文請(qǐng)聯(lián)系新鈦云服公眾號(hào)。
目前國內(nèi)很多企業(yè)已經(jīng)在深入的使用公有云了。隨著業(yè)務(wù)的發(fā)展,這些企業(yè)大部分會(huì)考慮做多云的雙活或?yàn)?zāi)備以及根據(jù)云上產(chǎn)品功能和成本考慮從一家云遷到另一家云。
我司前幾個(gè)月接了一個(gè)公有云業(yè)務(wù)遷移的項(xiàng)目,在項(xiàng)目中總結(jié)了一些經(jīng)驗(yàn),下面是我的總結(jié),希望能幫助每個(gè)運(yùn)維在遇到類似的問題時(shí)能快速解決。
數(shù)據(jù)庫同步問題
數(shù)據(jù)庫同步使用DTS工具來做的,目前主流的公有云都有各家的DTS工具,DTS的工具原理基本都是從源庫binlog讀取數(shù)據(jù)然后插入到目標(biāo)數(shù)據(jù)庫。但各家的DTS工具容錯(cuò)性還是相差比較大的。下面我就說說數(shù)據(jù)庫同步碰到的那些坑。
1、數(shù)據(jù)庫中的表字段要允許NULL
在MySQL 同步過程中出現(xiàn) Error 3140: Invalid JSON text: "The document is empty." at position 0 in value for column,
原因是源庫校驗(yàn)不嚴(yán)格。數(shù)據(jù)庫中的字段要求為 NOT NULL,但是數(shù)據(jù)中存在值為 NULL 的數(shù)據(jù)。
有兩個(gè)解決方法,根據(jù)需要處理:
(1)對(duì)源庫中的數(shù)據(jù)進(jìn)行修復(fù),將所有值 NULL 的數(shù)據(jù)修正為正確的值 (這也符合業(yè)務(wù)邏輯需要)。
(2)對(duì)目標(biāo)庫中的表進(jìn)行修改,將字段修改為允許為 NULL。例如表為 xxxx,字段為 total
ALTER TABLE `xxxx` CHANGE `total` `total` JSON NULL;
2、數(shù)據(jù)庫源庫binlog要保留時(shí)間久一點(diǎn)
在執(zhí)行數(shù)據(jù)庫同步的時(shí)候可能會(huì)碰到問題而導(dǎo)致需要重新啟動(dòng)做增量同步,但是有時(shí)這個(gè)同步是在晚上進(jìn)行的,早上人為發(fā)現(xiàn)問題可能距離出現(xiàn)問題已經(jīng)過去了好幾個(gè)小時(shí)。
如果源庫這個(gè)時(shí)候binlog只保留1~2個(gè)小時(shí)的話會(huì)導(dǎo)致用戶在早上重啟同步任務(wù)時(shí)找不到對(duì)應(yīng)的binlog文件,從而只能再次做全量同步。建議源庫binlog在同步時(shí)保留2~3天以上。
3、目標(biāo)數(shù)據(jù)庫磁盤空間建議是源庫的2倍
在執(zhí)行數(shù)據(jù)庫同步的時(shí)候目標(biāo)庫除了會(huì)有大量的寫入外還會(huì)有一些臨時(shí)表及日志產(chǎn)生。如果兩個(gè)庫的磁盤空間一樣大很容易產(chǎn)生目標(biāo)庫磁盤空間不足導(dǎo)致寫入失敗的問題。這樣無疑會(huì)浪費(fèi)很多的時(shí)間去處理。
所以建議是目標(biāo)數(shù)據(jù)庫磁盤空間先申請(qǐng)?jiān)磶斓?倍空間。如果費(fèi)用相差不大遷完后就不要降了。
4、數(shù)據(jù)庫同步時(shí)不能有計(jì)劃任務(wù)
在同步數(shù)據(jù)庫時(shí)DTS突然報(bào)出了一個(gè)主鍵ID錯(cuò)誤的日志,同時(shí)同步也中斷了。后來經(jīng)過調(diào)研發(fā)現(xiàn)用戶數(shù)據(jù)庫有計(jì)劃任務(wù)在跑導(dǎo)致的。所以在同步數(shù)據(jù)庫時(shí)必須關(guān)閉針對(duì)數(shù)據(jù)庫的計(jì)劃任務(wù)。
ES遷移問題
ES遷移本身并沒有什么問題,但是ES不同版本之間是有較大差異的,不仔細(xì)測(cè)試是發(fā)現(xiàn)不了一些隱藏的問題的。
客戶碰到的ES問題是之前在XX云用的是ES低版本,默認(rèn)分片為5。切換至XX云用的是ES 7版本,默認(rèn)分片是1。
正??蛻魳I(yè)務(wù)使用時(shí)需要根據(jù)業(yè)務(wù)去修改分片數(shù),來適配業(yè)務(wù)。但客戶并沒有這么做導(dǎo)致了生產(chǎn)事故。幫客戶去重建索引調(diào)整分片數(shù)后問題得到了解決。
DNS問題
遷移最后必定會(huì)經(jīng)歷域名的切換,域名切換覆蓋全國和全世界時(shí)間都是不一定的,且不同的區(qū)域都會(huì)有一定的差異。
客戶就碰到了某個(gè)項(xiàng)目訪問有問題的情況。我們的做法是,在原公有云入口部署nginx,只要還是訪問到原nginx的都proxy_pass到新的公有云入口。這樣就保證了不會(huì)有人訪問到老環(huán)境的情況。
結(jié)論:應(yīng)用跨云遷移,看似一件非常簡(jiǎn)單的事情,實(shí)則充滿了很多未知的問題。這些問題可能是公有云產(chǎn)品造成的可能是業(yè)務(wù)代碼造成的。
但無論是什么原因,新鈦云服作為一家專業(yè)的云管理服務(wù)商都能很好的處理好這些問題,并在遷移過程中為客戶梳理信息,優(yōu)化架構(gòu)和運(yùn)維流程,為客戶業(yè)務(wù)保駕護(hù)航。