全部產品
Search
文件中心

ApsaraDB for ClickHouse:通過遷移升級核心大版本

更新時間:May 29, 2026

核心大版本的升級能夠提升效能、引入新功能並修複問題。本文介紹如何通過叢集間的資料移轉,進行升級雲資料庫ClickHouse社區相容版叢集的核心大版本。

版本支援

支援將雲資料庫ClickHouse社區相容版叢集的核心版本為19.15及以上版本,升級至更高的核心版本。最新版本,請參見社區相容版

前提條件

說明

如果您還未建立目的地組群,您需建立一個高版本的社區相容版叢集。支援的版本號碼和建立社區兼版叢集的操作步驟,請參見版本支援建立叢集

  • 源叢集和目的地組群均需具備的條件:

    • 均為社區相容版叢集。

      說明

      如果您的需求是將社區版叢集遷移至企業版叢集,或者企業版叢集遷移至社區版叢集,請參見ClickHouse社區版叢集遷移至企業版叢集

    • 均處於運行中狀態。

    • 均已具有資料庫帳號和密碼。

    • 二者冷熱分層狀態一致。

    • 二者使用相同的VPC且在同一地區,並已將彼此的IP添加到了對方白名單中。如果不滿足此條件,請先解決網路問題。具體操作,請參見如何解決目的地組群與資料來源網路互連問題

      說明

      您可以通過SELECT * FROM system.clusters;查看雲資料庫ClickHouse執行個體的IP地址。如何設定白名單,請參見設定白名單

  • 目的地組群需額外滿足如下條件:

    • 版本高於源叢集版本。

    • 未使用磁碟儲存空間(不包含冷存)大於或等於源叢集已使用磁碟儲存空間(不包括冷存)的1.2倍。

  • 源叢集的所有本地表都需要具有唯一的分布式表。

注意事項

  • 升級核心大版本後不支援降級核心大版本。

  • 遷移發起時,源叢集和目的地組群不能有正在啟動並執行管控任務(包含擴容,升降配等)。

  • 雲資料庫ClickHouse叢集間的資料移轉支援全量遷移和增量遷移。

  • 遷移內容:

    • 支援遷移的內容包含叢集、庫、表、資料字典、物化視圖、使用者權限和叢集配置。

      • 只支援遷移SQL建立的資料字典,不支援通過XML建立的資料字典。

        確認方法:SELECT * FROM system.dictionaries WHERE (database = '') OR isNull(database);,如果SQL存在返回結果,代表有XML建立的資料字典。

      • 資料字典訪問外部服務時,請確保外部服務可用且為叢集開放白名單;資料字典的資料來源為當前ClickHouse的內表資料時,如果定義中HOST參數配置的是IP地址,遷移後可能會因IP變更而導致訪問失敗,需重新確認當前ClickHouseHOST並手動建立資料字典。

    • 不支援遷移Kafka和RabbitMQ引擎表。

    • 重要

      為保證Kafka和RabbitMQ資料不分流,請先清理源叢集的Kafka和RabbitMQ引擎表後,再在目的地組群建立,或者使用不同的消費者組。

      非MergeTree類型的表(例如外表、Log表等)僅支援遷移表結構。

      說明

      當源叢集存在非MergeTree類型的表時,資料移轉後,目的地組群此類表只有表結構,沒有具體的業務資料。具體業務資料移轉可以使用remote函數進行遷移。具體操作,請參見通過remote函數進行資料移轉

  • 遷移資料量:

    • 冷資料:冷存資料的遷移速度相對較慢,建議您盡量清理自建叢集中的冷存資料,以確保其總量不超過1TB。否則,遷移時間過長可能會導致遷移失敗。

    • 熱資料:熱資料如果超過10TB,遷移任務失敗率比較高,不建議您使用此方案進行遷移。

  • 升級核心大版本後,請務必自行將用戶端串連地址切換至目的地組群。

叢集影響

  • 源叢集:遷移過程中,支援對源叢集的表進行讀取與寫入資料操作,但不支援DDL操作(增、刪、改庫表的中繼資料操作)。

    重要
    • 為了保證遷移任務正常完成,當控制台上資料移轉的預計剩餘時間小於等於10分鐘時,源叢集會在預設的停寫時間視窗內自動暫停資料寫入。

    • 在預設的停寫時間範圍內資料全部遷移完成,或超出源叢集預設的停寫時間範圍仍未完成資料移轉,源叢集都會自動回復資料寫入。

  • 目的地組群:遷移結束後,目的地組群會持續一段時間高頻merge操作,這會導致IO使用率上升,從而引起業務請求的延遲增加。建議您提前規劃以應對業務請求延遲的潛在影響。具體merge操作時間,您需自己計算。如何計算,請參見計算遷移結束後的merge時間

操作步驟

重要

以下操作均在目的地組群完成,而非源叢集。

步驟一:記錄並清理 Kafka/RabbitMQ 引擎表

說明

如果源叢集中不存在 Kafka/RabbitMQ 引擎表,請跳過步驟一、步驟五、步驟六和步驟七,直接從步驟二開始。

遷移前,您需要記錄源叢集中所有 Kafka/RabbitMQ 引擎表及其下遊物化視圖的定義,處理隱含顯示目標表,然後刪除這些表,避免影響遷移任務的正常執行。

  1. 登入源叢集,查詢所有 Kafka 和 RabbitMQ 引擎表及其下遊依賴關係。

    /*
    create_table_query:表定義
    dependencies_database:依賴該表的資料庫
    dependencies_table:依賴該表的表名
    通過 dependencies_database 和 dependencies_table 可以查看依賴 Kafka/RabbitMQ 表的物化視圖
    */
    SELECT * FROM system.tables WHERE engine IN ('RabbitMQ', 'Kafka');
  2. 查看物化視圖定義,確認其目標表是否為隱式表。

    /*
    查看物化視圖定義。
    如果物化視圖的目標表為隱式表,需特別注意:
    刪除物化視圖會同時刪除隱式表,導致資料丟失。
    樣本:如果 CREATE MATERIALIZED VIEW [db.]table_name [TO[db.]name] 未指定 TO,
    系統會自動建立隱式表,格式可能為 '.inner_id.<TABLE_UUID>' 或 '.inner.<TABLE>'
    */
    SELECT * FROM system.tables WHERE database='<DATABASE>' AND name = '<MATERIALIZED_VIEW_NAME>';
  3. 如果物化視圖的目標表為隱式表,將隱含顯示目標表 RENAME 為新名稱,防止後續刪除物化視圖時資料丟失。

    -- 將隱含顯示目標表重新命名為新名稱以保護資料
    RENAME TABLE <DATABASE>.`.inner_id.<TABLE_UUID>` TO <DATABASE>.<new_target_table_name>;
  4. 刪除 Kafka/RabbitMQ 引擎表及其下遊物化視圖。

    -- 先刪除物化視圖
    DROP TABLE <DATABASE>.<MATERIALIZED_VIEW_NAME>;
    -- 再刪除 Kafka/RabbitMQ 引擎表
    DROP TABLE <DATABASE>.<KAFKA_OR_RABBITMQ_TABLE_NAME>;
重要

請妥善儲存所有記錄的 DDL 語句,後續需要在源叢集和目的地組群上重建這些表。如果執行了 RENAME 操作,重建物化視圖時需使用 TO 子句指向重新命名後的目標表。更多資訊,請參見CREATE MATERIALIZED VIEW

步驟二:建立遷移任務

  1. 登入雲資料庫ClickHouse控制台

  2. 集群清單頁面,選擇默認實例列表,單擊目的地組群ID。

  3. 在左側導覽列,單擊数据迁移及同步 > 實例遷移

  4. 單擊創建遷移任務

    1. 配置源執行個體與目標執行個體。

      配置以下資訊,單擊測試連接以進行下一步

      說明

      測試連接成功後,進入下一個步驟。如果測試連接失敗,請根據提示,重新設定源執行個體和目標執行個體。

      image

    2. 確認遷移內容。

      仔細閱讀頁面中資料移轉的包含內容提示資訊,單擊下一步:預檢測並啟動同步

    3. 後台遷移鏈路預檢測並啟動任務。

      後台會對目標執行個體和源執行個體進行實例狀態檢測存儲空間檢測本地表和分布式錶檢測

      • 檢測成功:

        1. 仔細閱讀頁面遷移過程中對執行個體的影響提示內容。

        2. 設定停写时间

          說明
          • 遷移的最後10分鐘需要源叢集停止寫入,以確保資料的一致性。

          • 為了保證遷移的成功率,建議您停寫時間至少設定30分鐘。

          • 遷移任務必須在任務啟動(即任務建立完成)後的5天內結束,因此,源叢集停写时间的結束日期必須小於或等於當前日期+5

          • 為了降低遷移對您業務的影響,建議您設定的停寫時間範圍處於您的業務低峰時段。

        3. 單擊完成

          說明

          單擊完成後,任務建立完成且啟動任務。

      • 檢測失敗:您需要按照提示資訊進行操作,重新進行資料移轉。檢測內容及要求如下。

        檢測專案

        檢測要求

        實例狀態檢測

        遷移發起時,源叢集和目的地組群不能有正在啟動並執行管控任務(包含擴容,升降配等)。如果當前源叢集和目的地組群有管控任務正在運行,則不能發起遷移任務。

        存儲空間檢測

        遷移進行前,進行儲存空間校正。保證目的地組群的儲存空間大於等於源叢集的儲存空間的1.2倍。

        本地表和分布式錶檢測

        如果源叢集存在本地表沒有建立分布式表或者分布式表不唯一,則校正失敗。請刪除多餘的分布式表或建立唯一分布式表。

步驟三:評估遷移是否可以完成

如果源群的寫入速度小於 20MB/s,您可跳過此步驟。

如果源叢集的寫入速度大於 20MB/s,由於目的地組群理論上單節點寫入速度也大於 20MB/s。為了確保目的地組群的寫入速度能夠趕上源叢集的寫入速度,從而順利完成遷移,您需要檢查目的地組群的真實寫入速度,以評估遷移的可行性。具體操作如下:

  1. 查看目的地組群的磁碟吞吐,以判斷目的地組群的真實寫入速度,如何查看磁碟吞吐,請參見查看叢集監控資訊

  2. 判斷目的地組群與源叢集的寫入速度的關係。

    1. 目的地組群寫入速度大於源叢集的寫入速度:遷移成功率較高,繼續步驟四操作。

    2. 目的地組群寫入速度小於源叢集的寫入速度:遷移失敗率較高,建議您取消遷移任務,使用手動遷移進行資料移轉。

步驟四:查看遷移任務

  1. 集群清單頁面,選擇默認實例列表,單擊目的地組群ID。

  2. 在左側導覽列,單擊数据迁移及同步>實例遷移

    在執行個體遷移列表頁面,查看遷移任務的遷移狀態运行阶段信息停写窗口

    說明

    运行阶段信息列中資料移轉的預計剩餘時間小於等於 10 分鐘時,且遷移狀態為遷移進行中時,為了確保資料的一致性,將觸發源叢集停寫。停寫規則如下:

    • 觸發時間源叢集預設的停寫時間範圍內,源叢集停寫。

    • 觸發時間不在源叢集預設的停寫時間範圍內,且小於或等於任務啟動(即任務建立)日期+5,您可通過修改停寫視窗時間,繼續遷移任務。

    • 觸發時間不在源叢集預設的停寫時間範圍內,且大於任務啟動(即任務建立)日期+5,遷移失敗。您需取消遷移任務,並清理目的地組群中已遷移的資料,重新建立遷移任務,發起遷移。

    重要
    • 如果源叢集存在 Kafka/RabbitMQ 引擎表:當遷移任務進入資料移轉階段(即表結構遷移完成)時,請執行步驟五在源叢集重建 Kafka/RabbitMQ 引擎表,使增量資料恢複寫入並同步到目的地組群。

    • 快到預設的停寫時間視窗時,請執行步驟六刪除源叢集的 Kafka/RabbitMQ 引擎表及其下遊物化視圖,避免停寫期間因訊息積壓導致資料不一致。

步驟五:在源叢集重建 Kafka/RabbitMQ 引擎表

當遷移任務進入資料移轉階段(即表結構遷移完成)後,使用之前儲存的 DDL 語句在源叢集重建 Kafka/RabbitMQ 引擎表及其下遊物化視圖。重建後,增量資料將恢複寫入並自動同步到目的地組群。

重要

如果之前對隱含顯示目標表執行了 RENAME 操作,重建物化視圖時需使用 TO 子句指向重新命名後的目標表。更多資訊,請參見CREATE MATERIALIZED VIEW

-- 在源叢集重建 Kafka/RabbitMQ 引擎表
CREATE TABLE <database>.<kafka_or_rabbitmq_table_name> (...)
ENGINE = Kafka/RabbitMQ
SETTINGS ...;
-- 重建物化視圖(指向重新命名後的目標表)
CREATE MATERIALIZED VIEW <database>.<materialized_view_name> TO <database>.<new_target_table_name>
AS SELECT ... FROM <database>.<kafka_or_rabbitmq_table_name>;

步驟六:在源叢集刪除 Kafka/RabbitMQ 引擎表

快到預設的停寫時間視窗時,刪除源叢集的 Kafka/RabbitMQ 引擎表及其下遊的物化視圖,以停止增量資料寫入,確保最終資料同步的一致性。

-- 先刪除物化視圖
DROP TABLE <database>.<materialized_view_name> ON CLUSTER default;

-- 再刪除 Kafka/RabbitMQ 引擎表
DROP TABLE <database>.<kafka_or_rabbitmq_table_name> ON CLUSTER default;

步驟七:遷移完成後在目的地組群重建 Kafka/RabbitMQ 引擎表

遷移任務完成後,使用之前儲存的 DDL 語句在目的地組群重建 Kafka/RabbitMQ 引擎表及其下遊物化視圖,恢複增量資料的消費鏈路。

重要

如果之前對隱含顯示目標表執行了 RENAME 操作,重建物化視圖時需使用 TO 子句指向重新命名後的目標表。更多資訊,請參見CREATE MATERIALIZED VIEW

-- 在目的地組群重建 Kafka/RabbitMQ 引擎表
CREATE TABLE <database>.<kafka_or_rabbitmq_table_name> (...)
ENGINE = Kafka/RabbitMQ
SETTINGS ...;
-- 重建物化視圖
CREATE MATERIALIZED VIEW <database>.<materialized_view_name> TO <database>.<target_table_name>
AS SELECT ... FROM <database>.<kafka_or_rabbitmq_table_name>;

步驟八:(可選)取消遷移任務

  1. 集群清單頁面,選擇默認實例列表,單擊目的地組群ID。

  2. 在左側導覽列,單擊数据迁移及同步>實例遷移

  3. 在目標遷移任務的操作列,單擊取消迁移

  4. 取消迁移對話方塊,單擊確定

    說明
    • 取消遷移後,工作清單不會立即更新,建議您,通過間隔重新整理查看任務狀態。

    • 任務取消後,任務的遷移狀態會變成已完成。

    • 在您重新發起遷移之前,必須先清理目的地組群中已遷移的資料,避免出現資料重複的情況。

步驟九:(可選)修改停寫視窗時間

  1. 集群清單頁面,選擇默認實例列表,單擊目的地組群ID。

  2. 在左側導覽列,單擊数据迁移及同步>實例遷移

  3. 在目標遷移任務的操作列,單擊修改停写窗口

  4. 修改停写窗口對話方塊,選擇停写时间

    說明

    停写时间設定規則,與建立遷移任務中停写时间的設定一致。

  5. 單擊確定

後續步驟:刪除源叢集

刪除源叢集的具體操作,請參見刪除叢集

警告

源叢集刪除後,源叢集的所有資料都會被刪除無法找回,請在目的地組群中檢測源叢集的業務資料是否全部遷移至目的地組群。