StarRocks 升級注意事項

前段時間升級了生產環境的?StarRocks,從 3.3.3 升級到了 3.3.9,期間還是踩了不少坑所以在這里記錄下。

因為我們的集群使用的是存算分離的版本,也是使用官方提供的 operator 部署在 kubernetes 里的,所以沒法按照官方的流程進入虛擬機手動啟停對應的服務。

只能使用 operator 提供的方案手動修改對應組件的鏡像版本,后續的升級操作交給 operator 去完成。

理論上這個升級流程沒什么問題,修改鏡像版本之后只需要安靜等待他滾動更新即可。

元數據備份與恢復

但考慮到之前在社區看到有存算分離集群升級失敗導致數據丟失的案例,我們的全量業務已經切換到 StarRocks,如果數據丟失那需要花幾天時間進行數據同步,這在業務上是無法接受的,所以我們最好是可以在升級前備份數據,即便是升級失敗數據依然還在。

原本官方社區是有提供數據備份與恢復能力的,但是我們使用的存算分離集群不支持😂,而想要獲得社區版的支持應該還要等一段時間,即便是支持了我們升級到那個版本依然是需要備份的。

好消息,在最新的 3.4.1 版本中已經支持了快照備份了,只是作為一個新 feature,穩定性還有待觀察。

所以我們的計劃是在當前這個版本(3.3.3)能否自己備份數據,由于我們是存算分離的版本,所以數據主要分為兩部分:

  • 存儲在所有 FE 節點里的 meta 元數據

  • 存儲在云存儲里的業務數據

備份的時候自然就需要備份這兩部分的數據。

備份元數據

在元數據里存放了所有的數據庫、表、視圖等信息,具體在磁盤的結構如下:

|-- bdb
| ? |-- 00000000.jdb
| ? |-- je.config.csv
| ? |-- je.info.0
| ? |-- je.info.0.lck
| ? |-- je.lck
| ? `-- je.stat.csv
|-- image
| ? |-- ROLE
| ? |-- VERSION
| ? |-- image.327375
| ? |-- starmgr
| ? | ? `-- image.390
| ? `-- v2
| ? ? ? |-- checksum.327375
| ? ? ? `-- image.327375

bdb 目錄主要是用于 leader 選舉的,理論上并不需要備份,真正需要的是?image?目錄下的?image.327375?等元數據文件。

里面是用 JSON 存儲的各種類型的元數據,FE 在啟動的時候會讀取該文件,然后根據不同的類型取不同的偏移量讀取其中的元數據加載到內存里。

我們的 FE 一共有三個節點,需要找到其中的 leader 節點(理論上只需要備份 leader 節點即可,其他節點會在 leader 啟動后同步過去),直接將這個 meta 目錄備份到本地即可:

在開始之前需要停掉所有的寫入任務,暫停所有的物化視圖刷新。

# inactive 所有的物化視圖
SELECT?CONCAT('ALTER MATERIALIZED VIEW ', TABLE_NAME,?' INACTIVE;')?FROM?information_schema.materialized_views;# 手動創建鏡像
ALTER?SYSTEM?CREATE?IMAGE;# 找到 leader 節點
SHOW?FRONTENDS;

然后進入 leader 節點備份元數據:

k exec -it kube-starrocks-fe-0-n sr -- bashtar -zcvf meta.tar.gz meta/#?下載備份元數據到本地
k cp starrocks-fe-0:/opt/starrocks/fe/meta/image.tar.gz image.tar.gz -n starrocks -c fe --retries=5

備份云存儲數據

云存儲的備份就需要結合你使用的云廠商來備份了,通常他們都有提供對應的備份能力。

要注意的是我們再備份的時候需要記錄在存儲桶里的目錄名稱,之后還原的時候名稱得保持一致才行。

恢復元數據

當出現極端情況升級失敗的時候,我們需要把元數據覆蓋回去;但由于我們的應用運行在容器里,不可以在應用啟動之后再替換元數據。

只能在應用啟動之前將之前備份的元數據覆蓋回去,這里可以使用 kubernetes 中的?initContainers?提前將數據復制到應用容器里。

在開始之前我們需要先把備份的元數據打包為一個鏡像。

FROM?busybox ?
ADD?meta.tar.gz /temp

然后我們需要手動修改 FE 的?statefulset?的資源,創建一個 initContainers。

initContainers:??
-name:copy-file-initimage:meta:0.0.1command:["/bin/sh","-c"]args:["rm-rf/meta-target/*&&cp-r/temp/meta/./meta-target"]volumeMounts:-name:fe-metamountPath:"/meta-target"

原理就是在 initContainers 中掛載原本 FE 的元數據目錄,這樣就可以直接將之前備份的元數據覆蓋過去。

當然也可以直接使用 k8s 的 go client 用代碼的方式來修改,會更容易維護。

還原的時候需要先將云存儲里的數據先還原之后再還原元數據。

物化視圖刷新策略

真正升級的時候倒是沒有碰到升級失敗的情況,所以沒有走恢復流程;但是卻碰到了一個更麻煩的事情。

物化視圖作為基表

我們在升級前將所有的物化視圖設置為了?INACTIVE,升級成功后需要將他們都改為?ACTIVE

第一個問題是如果某個物化視圖?MV1?的基表也是一個物化視圖?MV-base,這樣會導致?MV1?的全量刷新。

我之前在這個?PR?里新增了一個參數:excluded_refresh_tables?可以用于排除基表發生變化的時候刷新物化視圖,但是忘記了基表也是物化視圖的場景。

所以在這個?PR?中修復了該問題,現在基表是物化視圖的時候也可以使用了。

物化視圖手動 ACTIVE

前面提到在升級之前需要將所有的物化視圖設置為?INACTIVE,升級成功后再手動設置為 ACTIVE。

我們在手動 ACTIVE 之后發現這些物化視圖又在做全量刷新了,于是我們檢查了代碼。

發現在使用?ALTER MATERIALIZED VIEW order_mv ACTIVE;?修改視圖狀態的時候會強制刷新物化視圖的所有分區。

force: true 的時候會直接跳過基表的分區檢查,導致分區的全量刷新。

同時會在 ACTIVE 的時候將視圖基表的?baseTableVisibleVersionMap?版本號緩存清空,FE 需要在刷新的時候判斷當前需要刷新的分區是否存在與緩存中,如果存在的話說明不需要刷新,現在被清空后就一定會被刷新。

所以我提了一個 PR 可以在?ACTIVE?物化視圖的時候人工判斷是否需要刷新:

alter?materialized?view?mv_test1 ACTIVE?WITH?NO_VALIDATION

這樣帶上?NO_VALIDATION?參數后就?force=false?也就不會全量刷新了。

如果在 ACTIVE 物化視圖的時候碰到類似場景,可以在這個?PR?發布之后加上?NO_VALIDATION?來跳過刷新。

參考鏈接:

  • https://github.com/StarRocks/starrocks/pull/50926

  • https://github.com/StarRocks/starrocks/pull/56428

  • https://github.com/StarRocks/starrocks/pull/56864

往期推薦

雖遲但到的 2024 總結

StarRocks 開發環境搭建踩坑指北之存算分離篇

k8s 云原生應用如何接入監控.md

深入解析 Istioctl:如何正確更新 Istio 配置?

點分享

點收藏

點點贊

點在看

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

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

相關文章

深入探究 JVM 堆的垃圾回收機制(一)— 判活

垃圾回收分為兩步:1)判定對象是否存活。2)將“消亡”的對象進行內存回收。 1 判定對象存活 可達性分析算法:通過一系列“GC Roots”對象作為起始節點集,從這些節點開始,根據引用關系向下搜索,…

國產開發板—米爾全志T113-i如何實現ARM+RISC-V+DSP協同計算?

近年來,隨著半導體產業的快速發展和技術的不斷迭代,物聯網設備種類繁多(如智能家居、工業傳感器),對算力、功耗、實時性要求差異大,單一架構無法滿足所有需求。因此米爾推出MYD-YT113i開發板(基…

Tomcat虛擬主機配置詳解:Centos環境下多域名部署(詳細教程!)

🏡作者主頁:點擊! Tomcat服務器📝專欄:點擊! 🐧Linux高級管理防護和群集專欄:點擊! ??創作時間:2025年3月18日14點14分 最近在折騰 Tomcat 的時候&…

鴻蒙開發工程師簡歷項目撰寫全攻略

一、項目結構的黃金法則 建議采用「41」結構: 項目背景(業務價值)技術架構(鴻蒙特性)核心實現(技術難點)個人貢獻(量化成果)附加價值(延伸影響) …

dfs刷題排列問題 + 子集問題 + 組和問題總結

文章目錄 一、排列問題全排列II題解代碼 優美的排列題解代碼 二、子集問題字母大小寫全排列題解代碼 找出所有子集的異或總和再求和題解代碼 三、組合問題電話號碼的字母組合題解代碼 括號生成題解代碼 組合題解代碼 目標和題解代碼 組合總和題解代碼 總結 一、排列問題 全排列…

【Linux】VMware17 安裝 Ubuntu24.04 虛擬機

目錄 安裝教程 一、下載 Ubuntu 桌面版iso映像 二、安裝 VMware 三、安裝 Ubuntu 桌面版 VMware 創建虛擬機 掛載 Ubuntu ISO 安裝 Ubuntu 系統 安裝教程 一、下載 Ubuntu 桌面版iso映像 鏈接來自 清華大學開源軟件鏡像站 ISO文件地址:ubuntu-24.04.2-des…

CVPR2025 | 對抗樣本智能安全方向論文匯總 | 持續更新中~

匯總結果來源:CVPR 2025 Accepted Papers 若文中出現的 論文鏈接 和 GitHub鏈接 點不開,則說明還未公布,在公布后筆者會及時添加. 若筆者未及時添加,歡迎讀者告知. 文章根據題目關鍵詞搜索,可能會有遺漏. 若筆者出現…

PostgreSQL_數據回退,數據庫導出、導入

目錄 前置: 1 數據回退 1.1 代碼 1.2 pgAdmin4 中查看 1)t_daily 2) t_stock_daily 2 數據庫導出、導入 前置: 本博文是一個系列。在本人“數據庫專欄”-》“PostgreSQL_”開頭的博文。 1 數據回退 上一節“PostgreSQL_數據下載并…

golang單機鎖實現

1、鎖的概念引入 首先,為什么需要鎖? 在并發編程中,多個線程或進程可能同時訪問和修改同一個共享資源(例如變量、數據結構、文件)等,若不引入合適的同步機制,會引發以下問題: 數據競…

【HarmonyOS Next】鴻蒙應用實現彈框DialogHub詳解

【HarmonyOS Next】鴻蒙應用實現彈框DialogHub詳解 一、前言 鴻蒙中實現彈框目前官方提供openCustomDialog和CustomDialog兩種模式。推薦前者,詳情見下圖和官網文檔鏈接: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V14/arkts-u…

機器學習算法實戰——天氣數據分析(主頁有源碼)

?個人主頁歡迎您的訪問 ?期待您的三連 ? ?個人主頁歡迎您的訪問 ?期待您的三連 ? ?個人主頁歡迎您的訪問 ?期待您的三連? ? ??? 1. 引言 天氣數據分析是氣象學和數據科學交叉領域的一個重要研究方向。隨著大數據技術的發展,氣象數據的采集、存儲和分…

輸電線路專業英語詞匯

輸電線路transmission line 雙回路double circuit 導線conductor 地線ground (Earth)wire 雙回路耐張塔double-circuit tension towers 直線塔tangent tower 地質Geological 水文Hydrological 塔位坐標Coordinate of Tower Location 轉角塔angle tower 直…

炫酷的3D按鈕效果實現 - CSS3高級特性應用

炫酷的3D按鈕效果實現 - CSS3高級特性應用 這里寫目錄標題 炫酷的3D按鈕效果實現 - CSS3高級特性應用項目介紹核心技術實現1. 基礎結構設計2. 視覺效果實現2.1 背景漸變2.2 立體感營造 3. 交互動效設計3.1 懸停效果3.2 按壓效果 技術要點分析1. 深度層次感2. 動畫過渡3. 性能優…

解決python配置文件類configparser.ConfigParser,插入、讀取數據,自動轉為小寫的問題

配置類 [Section1] Key_AAA Value[Section2] AnotherKey Value默認情況下,ConfigParser會將ini配置文件中的KEY,轉為小寫。 重載后配置類: 繼承類從configparser.ConfigParser改為configparser.RawConfigParser重載方法optionxform&#…

微服務的網關配置

微服務的網關配置 1. 網關路由 1.1 網關 1.1.1 存在問題 單體架構時我們只需要完成一次用戶登錄、身份校驗,就可以在所有業務中獲取到用戶信息。而微服務拆分后,每個微服務都獨立部署,這就存在一些問題:每個微服務都需要編寫身…

【硬核實戰】ETCD+AI智能調度深度整合!從架構設計到調優避坑,手把手教你打造高可用調度系統!

一、核心架構設計:ETCD如何賦能AI調度? 🔥 架構圖: [AI調度引擎] ← 實時數據 → [ETCD集群] ↓ 決策指令 [執行層(車輛/物流/交通設備)] 核心角色: ETCD:存儲調度策略、節點狀…

區間震蕩指標

區間震蕩指標的邏輯如下: 一、函數注解 1. Summation函數 功能: 計算給定價格序列Price的前Length個數據點的和,或在數據點數量超過Length時,計算滾動窗口內的價格和。 參數: Price(1):價格序列&#…

C語言-數組指針和指針數組

指針 數組指針與指針數組 數組指針 定義 概念:數組指針是指向數組的指針,本質上還是指針 特點: ①先有數組,后有指針 ②它指向的是一個完整的數組 一維數組指針 語法: 數據類型 (*指針變量名)[容量]; 案例&a…

31天Python入門——第5天:循環那些事兒

你好,我是安然無虞。 文章目錄 1. while循環1.1 while循環的嵌套1.2 補充學習:print函數 2. for循環2.1 range函數2.2 for循環2.3 continue和break以及return2.4 for循環的嵌套 3. 補充學習3.1 enumerate函數3.2 zip函數3.3 不要在遍歷列表的過程中刪除元素 循環 是…

T3 出行:網約車全棧分布式數據庫升級實踐

現今,網約車已成為民眾日常出行不可或缺的選擇。伴隨“互聯網出行”模式的快速推進,龐大的出行數據應運而生,如同構建了城市交通系統的數字神經脈絡。與此同時,對高效數據存儲與深入數據分析的需求也在持續攀升。 T3 出行于2019年…