記錄一次云原生線上服務數據遷移全過程

文章目錄

  • 背景
  • 遷移方案調研
  • 遷移過程
    • 服務監控腳本定時任務暫停
    • 本地副本服務啟動,在線服務下線
    • MySQL 數據遷移
    • Mongo 數據遷移
    • 切換新數據庫 ip 本地服務啟動
    • 數據庫連接驗證
    • 服務打包部署
    • 服務重啟
    • 前端恢復正常
    • 監控腳本定時任務啟動
    • 舊服務器器容器關閉
  • 遷移總結

背景

校園 e 站,一群大學生在畢業前夕,為打破信息差而開發的一個校園論壇。一個從零到一全靠一群大學生的滿腔熱忱而打造的一個前后端分離以小程序為最終展示載體的一個微服務架構體系的 App。并發量的初始定位為 w 級,使用到多級緩存、數據分庫等等前沿技術,當然這也是本次就是數據遷移的根本原因所在,架構過于龐大,用戶較少,資源空等率高,所以決定將服務縮容,降低運營成本。
image.png
整體架構如上所示,本次需要遷移的數據重點為,Mongo 以及 MySQL 持久層數據。

遷移方案調研

因為持久層數據本身是通過 docker-compose進行容器編排加docker volume腳本啟動,所以調研到的方案大體可分為以下幾種:

  1. 在磁盤級別進行 volume遷移
  2. 以舊數據庫為主庫,新數據庫為從庫,進行主從同步
  3. 在應用層面使用應用本身的備份恢復功能進行數據遷移

三種方案的優缺點

方案優點缺點
磁盤暫時想不到,可能是看起來很牛技術要求高,容易出現兼容性問題
主從停機時間短需要改動兩次服務啟動腳本(主從搭建時,從庫切主庫)
備份恢復操作簡單,風險低停機時間較長

在綜合考慮下,選擇了方案三進行備份恢復。
原因也很簡單,生產級別一般都是選擇風險最低且操作簡單的方式,因為不管你有多牛,也沒辦法保證遷移過程不會出現一點問題~

遷移過程

服務監控腳本定時任務暫停

本地副本服務啟動,在線服務下線

MySQL 數據遷移

遇到的第一個問題是,導出的文件壓縮前 38M zip 壓縮后依然 3.9 M,遠大于 phpmyadmin 允許上傳的 2M ,此時有兩個方案:一是調大數據導入的文件大小限制,二是減少數據量。按道理正常使用數據,不應該那么大,畢竟用戶量不大,且主要數據存在 mongo 中,在查詢了之后發現,有一個請求時間監控的表數據量達到 50W
image.png
執行 sql 將數據壓縮,

-- 數據平均
insert into controller_time(controller, time_cost, success) SELECT controller, AVG(time_cost) as time_cost, successFROM controller_time where id < 563003GROUP BY controller, success
;-- 刪除舊數據
delete from controller_time where id < 563003;

controller_time 數據壓縮后導出文件 4.5M 壓縮后 359K,導入新數據庫約十秒。

Mongo 數據遷移

進入 新機器 容器內,到 /usr/bin目錄調用,容器已有的 mongo命令
image.png
image.png

  • 將遠程 mongo(舊的數據庫)數據備份到新機器容器內
mongodump -h <remote_ip>:<remote_port> -d <database>  -u<user_name> -p<user_password> --authenticationDatabase admin -
o /home/mongodb/

image.png

  • 數據恢復到新 mongo
mongorestore  -u  <local_user_name>  -p <user_password> --port 27017  --authenticationDatabase admin -d <database>   
/home/mongodb/

image.png

  • 數據恢復結果

image.png

切換新數據庫 ip 本地服務啟動

image.png

數據庫連接驗證

image.png

服務打包部署

mvn clean install package

image.png

服務重啟

image.png

前端恢復正常

image.png

監控腳本定時任務啟動

舊服務器器容器關閉

image.png

遷移總結

總涉及用戶 6592 個用戶,其中已通過校園認證的用戶 3943 ,全部數據遷移完畢,服務恢復于 13:47 總耗時約 17 分鐘。
image.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212745.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212745.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212745.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

正確使用React組件緩存

簡介 正常來講的話當我們點擊組件的時候&#xff0c;該組件以及該組件的子組件都會重新渲染&#xff0c;但是如何避免子組件重新渲染呢&#xff0c;我們經常用memo來解決 React.memo配合useCallback緩存組件 父組件沒有傳props const Index ()> {console.log(子組件刷新…

Java14道高頻面試題

面試題 1、JWT ①、JWT(全稱:Json Web Token)是一個開放標準(RFC 7519),它定義了一種緊湊的、自包含的方式,用于作為 JSON 對象在各方之間安全地傳輸信息。 ②、JWT 的原理是&#xff0c;服務器認證以后&#xff0c;生成一個 JSON 對象&#xff0c;發回給用戶 ③、JWT是由頭…

機器學習基本概念介紹 2023

筆記來源于&#xff1a; https://www.youtube.com/watch?vphQK8xZpgoU&t172s https://www.youtube.com/watch?vXLyPFnephpY&t645s Machine/Deep Learning 機器學習概況來說&#xff0c;讓機器具備自動找函式的能力 &#xff08;Machine Learning 約等于 Looking …

智能優化算法應用:基于飛蛾撲火算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用&#xff1a;基于飛蛾撲火算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用&#xff1a;基于飛蛾撲火算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.飛蛾撲火算法4.實驗參數設定5.算法結果6.…

訂單系統的設計與海量數據處理實戰

概述 訂單系統可以說是整個電商系統中最重要的一個子系統&#xff0c;因此訂單數據可以算作電商企業最重要的數據資產。訂單系統從代碼上來說可分為兩部分&#xff1a;訂單程序和歷史訂單處理程序。數據存儲進行分庫分表。 訂單系統業務分析 對于一個合格的訂單系統&#xf…

如何使用bash寫腳本

本章主要介紹如何使用bash寫腳本。 了解通配符了解變量了解返回值和數值運算數值的對比判斷語句循環語句 grep的用法是“grep 關鍵字 file”&#xff0c;意思是從file中過濾出含有關鍵字的行。 例如&#xff0c;grep root /var/log/messages&#xff0c;意思是從/var/log/me…

基于Html+騰訊云播SDK開發的m3u8播放器

周末業余時間在家無事&#xff0c;學習了一下騰訊的云播放sdk&#xff0c;并制作了一個小demo&#xff08;m3u8播放器&#xff09;&#xff0c;該在線工具是基于騰訊的云播sdk開發的&#xff0c;云播sdk非常牛&#xff0c;可以支持多種播放格式。 預覽地址 m3u8player.org 源碼…

JVM進程緩存

引言 緩存在日常開發中啟動至關重要的作用&#xff0c;由于是存儲在內存中&#xff0c;數據的讀取速度是非常快的&#xff0c;能大量減少對數據庫的訪問&#xff0c;減少數據庫的壓力。我們把緩存分為兩類&#xff1a; 分布式緩存&#xff0c;例如Redis&#xff1a; 優點&…

Mybatis之簡介、使用操作(安裝、XML、SqlSession、映射的SQL語句、命名空間、作用域和生命周期)

學習的最大理由是想擺脫平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;遲一天就多一天平庸的困擾。各位小伙伴&#xff0c;如果您&#xff1a; 想系統/深入學習某技術知識點… 一個人摸索學習很難堅持&#xff0c;想組團高效學習… 想寫博客但無從下手&#xff0c;急需…

Java項目-瑞吉外賣Day4

實現文件的上傳下載&#xff1a; 前端代碼&#xff1a; 對文件的操作就是對流的操作。 上傳文件的后端代碼&#xff0c;需要注意MultipartFile的名字必須與前端相對&#xff1a; 為文件存儲位置進行動態設置&#xff0c;配置application.xml 在CommonController中設置屬性讀…

Nodejs后端+express框架

前言 基于vue3Node后臺管理項目&#xff0c;補充nodejs和express相關知識。 文章目錄 一&#xff0c;express 1.官網 Express - 基于 Node.js 平臺的 web 應用開發框架 - Express中文文檔 | Express中文網 2.安裝 npm install express --save 二、MongoDB 特點 非關…

uniapp 藍牙小程序

在 uni-app 中開發藍牙相關的小程序涉及到使用 uni-app 提供的藍牙 API。uni-app 為多端開發提供了統一的 API&#xff0c;這意味著你編寫的代碼可以在不同的平臺上運行&#xff0c;包括微信小程序。 以下是實現藍牙功能的基本步驟和代碼示例&#xff1a; 1. 開啟藍牙適配器 …

java之SpringBoot開發實用篇

MENU SpringBoot開發實用篇KF-1.熱部署KF-1-1.手動啟動熱部署KF-1-2.自動啟動熱部署KF-1-3.參與熱部署監控的文件范圍配置KF-1-4.關閉熱部署 KF-2.配置高級KF-2-1.ConfigurationPropertiesKF-2-2.寬松綁定/松散綁定KF-2-3.常用計量單位綁定KF-2-4.校驗KF-2-5.數據類型轉換 KF-3…

【頭歌系統數據庫實驗】實驗8 SQL的復雜多表查詢-2

目錄 第1關&#xff1a;基于派生表查詢每個隊員解答中超過他平均memory的user_id及題目編號problem_id 第2關&#xff1a;用ANY/ALL實現查詢2019級選手&#xff08;user_id前4位為2019&#xff09;滿足比2020級其中一個選手注冊時間早即可的選手 第3關&#xff1a;用聚集查詢…

python zblog API實現類似XMLRPC/發布文章

我發現python對Zblog的XML發布并不友好&#xff0c;雖然也有對應的模塊&#xff0c;但是遠遠沒有XPCRPC更直接方便&#xff0c;但是使用xmlRpc是直接給發布文章帶來了不小的便利&#xff0c;但是對系統也并不友好&#xff0c;但是zblog也開放了Api&#xff0c;但是干部子弟不樂…

UE小:物品拼裝功能

藍圖B1的實現步驟&#xff1a; 獲取玩家控制器和視角&#xff1a;首先獲取玩家控制器&#xff0c;然后使用Deproject Screen to World節點將屏幕上的鼠標位置轉換為世界空間中的一條射線。 射線檢測&#xff1a;使用Line Trace by Channel或Line Trace for Objects節點發射射線…

深度學習測試流程

深度學習模型測試的功能旨在驗證模型在各種情況下的性能和魯棒性。以下是深度學習模型測試的主要功能&#xff1a; 性能評估&#xff1a; 測試模型在任務目標上的整體性能&#xff0c;例如分類準確性、回歸誤差等。評估指標的選擇取決于具體的任務類型。 泛化能力&#xff1a;…

《信息技術時代》期刊雜志論文發表投稿

《信息技術時代》期刊收稿方向&#xff1a;通信工程、大數據、計算機、辦公自動化、信息或計算機教育、電子技術、系統設計、移動信息、圖情信息研究、人工智能、智能技術、信息技術與網絡安全等。 刊名&#xff1a;信息技術時代 主管主辦單位&#xff1a;深圳灣科技發展有限…

C++筆記之int、size_t、uint8_t、unsigned char*區別

C筆記之int、size_t、uint8_t、unsigned char*區別 code review! 文章目錄 C筆記之int、size_t、uint8_t、unsigned char*區別1.ChatGPT第一次查詢解釋2.ChatGPT第二次查詢解釋3.分別的使用示例 1.ChatGPT第一次查詢解釋 size_t、uint8_t 和 int 是編程中使用的不同類型&…

《微信小程序開發從入門到實戰》學習四十七

4.4 云函數 4.4.5 云函數的定時觸發 如果云函數需要定時執行&#xff0c;可以使用云函數定時觸發器。配置了定時觸發器&#xff0c;云函數會在相應時間點被自動觸發。函數返回結果不會返回調用方 在需要添加觸發器的云函數下新建文件config.json。格式如下&#xff1a; &quo…