手游項目運維遷移規(guī)劃實踐

一.項目介紹
公司有一個項目,’賽馬’項目,在手機(jī)上會有個 ’賽馬APP’。因為業(yè)務(wù)原因,并發(fā)從最初幾千,將擴(kuò)展到上萬,需要將項目擴(kuò)展,均為阿里云的ESC和其他產(chǎn)品。
APP下載后有3個頁面 1.查詢’賽馬比分’信息頁面 2.投注’賽馬’頁面 3.注冊/登錄頁面
玩家可以在投注頁面投注’賽馬’,成績在查詢信息頁面查詢。
服務(wù)器情況:玩家app點擊咨詢頁面,將發(fā)送請求到 zixun.saima.cn,上面解析到 1.1.1.1 這臺公網(wǎng)機(jī)器的nginx負(fù)載均衡上。
nginx將請求給后端的java服務(wù)(zixun-saima:9091)端口。zixun-saima這個java程序則從 1.1.1.1 這臺機(jī)器安裝的mysql中查詢數(shù)據(jù)。
投注和注冊/登錄頁面均為如此,分別是 touzhu-saima:9092、zhuce-saima:9093
所以 1.1.1.1 上面部署了 jenkins/gogs/nginx/mysql/jdk/maven。gogs存放代碼,jenkins用于構(gòu)建后在本地服務(wù)器發(fā)布。
二.遷移任務(wù)
擴(kuò)展需求
將這一臺機(jī)器的服務(wù),需要擴(kuò)展遷移成4臺機(jī)器+阿里云RDS。
其中1.1.1.1中jenkins和gogs不動 新購買一臺ESC 1.1.1.2用于搭建zabbix 新購買2臺ESC 1.1.1.3/1.1.1.4 每臺機(jī)器部署那3個java項目,2臺機(jī)器就做冗余和負(fù)載均衡。新購買一個RDS,將1.1.1.1中的mysql數(shù)據(jù)遷移上去。
業(yè)務(wù)遷移
根據(jù)業(yè)務(wù)情況來和開發(fā)分析重要性和低峰期,一般是夜里 在決定遷移的白天中先購買好機(jī)器,做好環(huán)境初始化 暫停項目更新,更改jenkins發(fā)布地址,將項目發(fā)布到1.1.1.3/1.1.1.4上面并進(jìn)行測試,因為是新機(jī)器,并不影響當(dāng)前項目 夜里將nignx負(fù)載均衡地址更改。進(jìn)行業(yè)務(wù)測試,在app進(jìn)行操作查看是否正常。進(jìn)行高可用測試(nignx健康檢查)。 均確定沒問題后遷移成功
業(yè)務(wù)遷移注意點
記錄好項目啟動的端口號,確定新機(jī)器上端口起來了,很多時候jenkins上面顯示發(fā)布,但端口未啟動。 項目啟動一般是有順序的,要按順序進(jìn)行依次發(fā)布啟動 項目發(fā)布后一般是通過域名調(diào)用,比如’賽馬APP’點擊咨詢頁面將訪問zixun.saima.cn,但有些可能是寫的ip,這就需要在代碼里更改。 在遷移中原有服務(wù)都不要關(guān)閉,一直開啟即可。
數(shù)據(jù)庫遷移
評估業(yè)務(wù)低峰期,一般是晚上遷移 需要開發(fā)陪同,遷移到新數(shù)據(jù)庫后,需要開發(fā)人員進(jìn)行項目里數(shù)據(jù)庫地址更改 當(dāng)前’賽馬’業(yè)務(wù)數(shù)據(jù)庫只有一個’saimadata’庫,大小為2G,這樣采用mysqldump導(dǎo)出,在導(dǎo)入到新庫即可。 白天時間確定數(shù)據(jù)庫字符集,在新RDS上建立同字符集數(shù)據(jù)庫,防止錯誤。同時確定好導(dǎo)出的語句。 遷移時,停掉業(yè)務(wù),讓數(shù)據(jù)庫沒有更新。確定當(dāng)前數(shù)據(jù)庫中數(shù)據(jù)總條目數(shù)進(jìn)行記錄。2分鐘后再抽查,確定數(shù)據(jù)庫確實已經(jīng)沒有新數(shù)據(jù)寫入。 導(dǎo)出數(shù)據(jù),mysql xxx < xx.sql 方式導(dǎo)入到新庫。導(dǎo)入后進(jìn)行新庫數(shù)據(jù)條目對比,一樣即可。不放心可進(jìn)行數(shù)據(jù)庫隨機(jī)抽取比對。 沒問題后通知開發(fā)人員進(jìn)行數(shù)據(jù)庫地址更換。
數(shù)據(jù)庫遷移注意點
導(dǎo)入時注意數(shù)據(jù)庫確實已經(jīng)停止寫了。如果數(shù)據(jù)量大,可以進(jìn)行主從方式同步,阿里也有工具DTS。
三.遷移策略
成功遷移策略
遷移成功后,原有數(shù)據(jù)庫和服務(wù)進(jìn)行關(guān)閉,保留3周或1月后刪除。
失敗遷移策略
如果出現(xiàn)問題并3小時內(nèi)未解決。將負(fù)載均衡地址改回原有服務(wù)地址,數(shù)據(jù)庫地址不變,開放數(shù)據(jù)寫入。
對出現(xiàn)的問題進(jìn)行記錄,白天時間進(jìn)行討論分析,在模擬解決后,晚上繼續(xù)遷移。
四.具體遷移方案
資源統(tǒng)計
應(yīng)用服務(wù)遷移(3臺) 分布式服務(wù)遷移(3臺,集群) web服務(wù)遷移(1臺) 跳板機(jī)遷移(1臺) nginx遷移(1臺) 數(shù)據(jù)庫遷移(2臺)
遷移技術(shù)選型確定
2月10號開會,確定每人每塊業(yè)務(wù)不會有遺漏,并且確定遷移注意事項,確定配合遷移人員,調(diào)試人員等
操作前打通隧道,實現(xiàn)內(nèi)網(wǎng)互通,采用業(yè)務(wù)先遷移的方法,數(shù)據(jù)庫同步,遷移時更改數(shù)據(jù)庫連接地址即可
內(nèi)網(wǎng)打通,通過內(nèi)網(wǎng)拷貝,速度為120M/秒
方案1-整體遷移
時間:2月15 - 2月20日
步驟:
提前使用DTS同步數(shù)據(jù)庫 某一時刻,停止全部業(yè)務(wù),避免有數(shù)據(jù)寫入到數(shù)據(jù)庫中,停掉同步 打包9臺服務(wù)器鏡像,并分享到新賬號下(由于使用是普通硬盤原因,生成鏡像會比較慢預(yù)計2小時完成) 打包的同時需要遷移oss,表格存儲到新賬號中 服務(wù)器鏡像打包完成,在新賬號上建立服務(wù)器,使用這些打包的鏡像 啟動所有服務(wù)器,建立網(wǎng)絡(luò) 配置host訪問,使用跳板機(jī)管理 免密碼登錄需要重新設(shè)置 更改服務(wù)器IP,基礎(chǔ)環(huán)境已經(jīng)硬盤掛載,服務(wù)器基礎(chǔ)環(huán)境建立 更改服務(wù)啟動的IP,服務(wù)的IP 啟動服務(wù)測試有無異常 通知業(yè)務(wù)相關(guān)人員,更改發(fā)布系統(tǒng),更改連接數(shù)據(jù)庫,oss,表格存儲地址 重新發(fā)布所有服務(wù) 開始測試所有服務(wù)是否正常 正常,遷移完成
方案2-批次遷移
時間:2月15號正式遷移 驗證測試所有重要服務(wù)器遷移步驟,如redis集群,redis單點,oss,對象存儲,表格存儲等遷移方式。
應(yīng)用服務(wù)器遷移(3臺)
備份服務(wù)器所有開放服務(wù)端口 新老賬號內(nèi)網(wǎng)打通 不影響業(yè)務(wù)時間段,一次性停止所有服務(wù)器,發(fā)公告服務(wù)器維護(hù),進(jìn)行鏡像打包 晚上遷移應(yīng)用服務(wù)器,在新賬號建立這些服務(wù)器 所有服務(wù),如RDS,OSS,對象存儲,都通過之前內(nèi)網(wǎng)打通方式連接 啟動新服務(wù)器,對IP,服務(wù)地址進(jìn)行更改 jenkins更改發(fā)布服務(wù)器的地址 nginx更改負(fù)載均衡地址 針對新服務(wù)進(jìn)行發(fā)布 測試所有服務(wù)是否正常 正常遷移完成 以上操作必須在幾小時內(nèi)完成,不能影響第二天業(yè)務(wù)
分布式服務(wù)遷移(3臺,集群)
備份服務(wù)器所有開放服務(wù)端口 不影響業(yè)務(wù)時間段,關(guān)閉所有入口,發(fā)公告服務(wù)器維護(hù) 按照集群手動停止服務(wù),redis使用工具備份業(yè)務(wù)出來,同時java同事通過業(yè)務(wù)備份出來一份redis數(shù)據(jù),避免遷移出現(xiàn)數(shù)據(jù)丟失的問題 關(guān)閉zookeeper,redis,kafaka,關(guān)閉服務(wù)之前,關(guān)閉服務(wù)器,打包鏡像 在新賬號下通過這些鏡像恢復(fù)服務(wù)器 更改服務(wù)器初始化環(huán)境,對IP 服務(wù)器地址 恢復(fù)集群,主要是更改了IP之后的恢復(fù) 集群恢復(fù)完成 啟動業(yè)務(wù)trade項目,連接基礎(chǔ)服務(wù) zk redis,kafka測試服務(wù)是否正常,數(shù)據(jù)是否丟失 測試通過,本次service切割完成 以上操作必須在幾小時內(nèi)完成,不能影響第二天業(yè)務(wù)
web服務(wù)遷移(1臺)
備份服務(wù)器所有開放服務(wù)端口 不影響業(yè)務(wù)時間段,關(guān)閉所有入口,確保沒有數(shù)據(jù)寫入數(shù)據(jù)庫 備份數(shù)據(jù),如REDIS上所有數(shù)據(jù),以及重要文件 關(guān)閉服務(wù)器,并進(jìn)行鏡像打包 在新賬號下恢復(fù)此服務(wù)器 更改服務(wù)器初始化環(huán)境,對IP 服務(wù)器地址 啟動服務(wù),沒有問題,web1遷移完成 以上操作必須在幾小時內(nèi)完成,不能影響第二天業(yè)務(wù)
跳板機(jī)遷移(1臺)
備份服務(wù)器所有開放服務(wù)端口 不影響業(yè)務(wù)時間段,關(guān)閉服務(wù)器,進(jìn)行打包 在新賬號下恢復(fù)此服務(wù)器更改服務(wù)器初始化環(huán)境,對IP和服務(wù)器地址 更改服務(wù)IP地址,如jenkins 啟動服務(wù),沒有問題,ops遷移完成 以上操作必須在幾小時內(nèi)完成,不能影響發(fā)布業(yè)務(wù)
nginx遷移(1臺)
備份服務(wù)器所有開放服務(wù)端口 不影響業(yè)務(wù)時間段,關(guān)閉服務(wù)器,進(jìn)行打包 在新賬號下恢復(fù)此服務(wù)器 更改服務(wù)器初始化環(huán)境,對IP 服務(wù)器地址 由于之前已經(jīng)更改了負(fù)載均衡的IP,此時不用更改,更改外網(wǎng)地址,以及域名解析即可 啟動服務(wù),沒有問題,nginx遷移完成 以上操作必須在幾小時內(nèi)完成,不能影響發(fā)布業(yè)務(wù)
數(shù)據(jù)庫遷移(2臺)
數(shù)據(jù)庫一直在同步,此時使用的是老庫 不影響業(yè)務(wù)時間,停服務(wù),確保沒有數(shù)據(jù)寫入數(shù)據(jù)庫 數(shù)據(jù)庫DTS同步停止 通知相關(guān)業(yè)務(wù)人員更改數(shù)據(jù)庫連接 啟動服務(wù) 測試數(shù)據(jù)是否完整可用 遷移完成
遷移技術(shù)選型確定
ECS遷移:阿里云-服務(wù)器遷移流程(鏡像備份).pdf
OSS遷移:使用 osslmport 工具遷移
RDS遷移:使用DTS進(jìn)行數(shù)據(jù)同步,同步結(jié)束后停止同步,并程序切換連接地址完成遷移
REDIS遷移:單點遷移直接拷貝RDB文件即可
表格存儲:Tablestore CL 工具進(jìn)行遷移
?點擊屏末?|?閱讀原文?|?即刻學(xué)習(xí)
