社區相容版叢集垂直變更配置和水平擴縮容
為了應對業務的不斷變化,當您需要調整雲資料庫 ClickHouse 社區相容版叢集的配置或規模時,您可以對雲資料庫ClickHouse進行垂直變更配置和水平擴縮容操作,以協助您的業務在成本與效能之間達到最佳平衡。
垂直變更配置和水平擴縮容概覽
垂直變更配置相比水平擴縮容,變更配置耗時更短,因此對您的業務影響更小。當您的叢集效能指標未能滿足業務需求時,建議優先考慮垂直變更配置。
|
變更類型 |
適用情境 |
原理 |
影響 |
操作 |
|
垂直變更配置 |
CPU、記憶體、磁碟資源不足或冗餘時,增加或減少每個節點的資源。 |
增加或減少社區相容版叢集的節點規格、儲存空間和ZooKeeper規格,縱向擴充叢集的計算能力、儲存空間能力和分布式協作能力 說明
儲存空間不支援垂直降配。儲存空間縮容解決方案如下。
|
社區相容版叢集進行升級儲存類型和增加儲存空間後不會對執行個體產生影響(僅2021年12月01日之後建立的執行個體),但在變更集群規格和ZooKeeper規格後會重啟叢集。 重要
|
|
|
水平擴容 |
重要
叢集中包含ReplacingMergeTree、CollapsingMergeTree、VersionedCollapsingMergeTree等表引擎的表,禁止使用簡單擴容。由於這些類型的表的資料只有在同一個節點上才能合并,然而,簡單的擴容會導致需要合并的資料被分散到不同的節點,從而使其無法進行合并。 |
遷移擴容:遷移擴容將增加社區相容版叢集節點數量,橫向擴充叢集的計算能力,並對已有歷史資料進行遷移和資料重分布。 簡單擴容:遷移擴容將增加社區相容版叢集節點數量,橫向擴充叢集的計算能力,資料是直接寫入本地表模式且擴容前後不依賴節點間的資料均衡。 |
|
|
|
水平縮容 |
|
減少社區相容版叢集節點數量,降低成本。 |
|
前提條件
-
叢集為社區相容版叢集。
-
叢集狀態為運行中。
-
叢集沒有未完成支付的續約訂單。
說明您可以登入雲資料庫ClickHouse控制台,在頁面右上方,選擇費用 > 费用与成本,在左側導覽列,單擊訂單管理,完成訂單支付或作廢該訂單。
注意事項
-
垂直變更配置:僅2021年12月01日之後建立的雲資料庫ClickHouse社區相容版叢集支援變更ZooKeeper規格。ZooKeeper規格費用請參見社區相容版ZooKeeper規格費用。
-
水平擴縮容:
-
MergeTree類型引擎表水平擴容後,會將原有歷史資料移轉寫入新的叢集中並自動完成重分布。
支援遷移的內容:
-
庫、資料字典、物化視圖。
-
表結構:除了Kafka和RabbitMQ引擎表以外的所有表結構。
-
資料:增量遷移MergeTree族表的資料。
不支援遷移的內容:
-
Kafka和RabbitMQ引擎表的表以及資料。
重要配置變更時會遷移資料到建立執行個體,並最終切流到建立執行個體。為保證Kafka和RabbitMQ資料不分流,請先清理源叢集的Kafka和RabbitMQ引擎表,待變更完成後再重新建立。
-
非MergeTree類型表(例如外表、Log表等)的資料。
重要以上不支援的內容,在擴縮容過程中,您需根據操作步驟,手動處理。
-
-
水平擴縮容過程中,全程禁止進行DDL操作。如不遵循,擴縮容最後,可能會出現資料校正不通過的現象,進而導致擴縮容失敗。
-
水平擴容後內部節點IP會發生變化,如果依賴節點IP資料寫入和訪問,需重新擷取叢集的VPC網段IP,具體操作,請參見擷取叢集的VPC網段IP。
-
僅本地碟版本支援指定節點縮容。在指定節點縮容模式下,被下線的節點的資料將會丟失;而在水平縮容模式下,資料則不會丟失,而是會進行重分布。
-
-
變更集群配置後,會持續一段時間高頻merge操作,這會導致IO使用率上升,從而引起業務請求的延遲增加。建議您提前規劃以應對業務請求延遲的潛在影響。具體merge操作時間的計算方法,請參見計算遷移結束後的merge時間。
-
變更集群配置過程中,叢集CPU和記憶體使用量率會升高,預計單節點佔用資源小於5核20GB。
費用
變更集群配置後,費用將會發生變化,具體費用請以控制台為準。更多資訊,請參見變更配置計費說明。
垂直升配和垂直降配
垂直變更配置影響,請參見垂直變更配置和水平擴縮容概覽和注意事項。
-
登入雲資料庫ClickHouse控制台,在頁面左上方,選擇叢集所在地區。
-
在集群清單頁面,選擇默認實例列表。
-
在目的地組群ID的操作列,單擊變更配置。
-
在變更配置彈窗中,選擇垂直升配或者垂直降配,單擊確定。
-
在變配或降配頁面,根據業務需求選擇相應的變更配置。
說明-
儲存空間或存儲類型在進行變配時,不能與規格同時進行變更配置。
-
叢集預設提供4核8 GB的ZooKeeper規格。您可以在監控告警頁面的集群監控面板查看ZooKeeper指標是否存在資源瓶頸,當預設規格不滿足業務需求時請及時升配。
-
-
單擊立即購買,根據提示完成支付。
-
在支付完成頁面,單擊管理控制台。
-
在默認實例列表的状态列,可查看目的地組群的狀態。
說明-
變更儲存空間後,變更立即生效,叢集狀態為运行中。
-
變更規格和ZooKeeper規格後,預計等待10~15分鐘。當叢集狀態由變配中轉變為运行中時,垂直升配或垂直降配成功。
-
水平擴容和水平縮容
水平擴容和水平縮容影響,請參見垂直變更配置和水平擴縮容概覽和注意事項。
步驟一:記錄並清理 Kafka/RabbitMQ 引擎表
Kafka/RabbitMQ 引擎表無法通過控制台變更配置功能隨即轉移。變更配置前,您必須記錄這些表的 DDL 語句並將其從叢集中刪除,以避免幹擾變更配置任務。
-
登入叢集並執行以下語句查詢所有 Kafka 和 RabbitMQ 引擎表及其下遊依賴。
/* create_table_query:表定義語句 dependencies_database:依賴該表的資料庫 dependencies_table:依賴該表的表名 通過 dependencies_database 和 dependencies_table 可以確定依賴 Kafka/RabbitMQ 表的物化視圖 */ SELECT * FROM system.tables WHERE engine IN ('RabbitMQ', 'Kafka'); -
查看物化視圖定義,檢查其目標表是否為隱式表。
/* 查看物化視圖定義。 如果物化視圖的目標表為隱式表,需特別注意: 刪除物化視圖時會同時刪除隱式表,導致資料丟失。 樣本:如果 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>'; -
如果物化視圖建立時未使用 TO 子句,系統會自動產生以
.inner或.inner_id為首碼的隱含顯示目標表。變更配置時這些隱式表會遷移到新叢集節點,但由於內部命名機制,直接重建原物化視圖可能導致命名衝突。因此,您必須先將隱含顯示目標表重新命名為常規表名。-- 將隱含顯示目標表重新命名為常規表名(在所有節點上執行) RENAME TABLE <database>.`.inner_id.<uuid>` TO <database>.<new_target_table_name> ON CLUSTER default; -
刪除物化視圖和 Kafka/RabbitMQ 引擎表。
重要必須先刪除引用 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;
請務必儲存所有記錄的 DDL 語句。後續需要在升級後的叢集上重建這些表。如果執行了 RENAME 操作,重建物化視圖時請使用 TO 子句指向重新命名後的目標表。更多資訊,請參見 CREATE MATERIALIZED VIEW。
如果叢集中不包含 Kafka/RabbitMQ 引擎表,可跳過步驟一、步驟四、步驟五和步驟六,直接從步驟二開始執行。
步驟二:備份非MergeTree類型表的業務資料
-
登入叢集,通過以下語句,查看需要遷移資料的非MergeTree類型的表。
SELECT `database` AS database_name, `name` AS table_name, `engine` FROM `system`.`tables` WHERE (`engine` NOT LIKE '%MergeTree%') AND (`engine` != 'Distributed') AND (`engine` != 'MaterializedView') AND (`engine` NOT IN ('Kafka', 'RabbitMQ')) AND (`database` NOT IN ('system', 'INFORMATION_SCHEMA', 'information_schema')) AND (`database` NOT IN ( SELECT `name` FROM `system`.`databases` WHERE `engine` IN ('MySQL', 'MaterializedMySQL', 'MaterializeMySQL', 'Lazy', 'PostgreSQL', 'MaterializedPostgreSQL', 'SQLite') )) -
備份資料。
您需將以上非MergeTree類型的業務資料進行備份。具體操作,請參見備份資料至OSS。
步驟三:控制台擴縮容操作
-
登入雲資料庫ClickHouse控制台,在頁面左上方,選擇叢集所在地區。
-
在集群清單頁面,選擇默認實例列表。
-
在目的地組群ID的操作列,單擊變更配置。
-
在變更配置彈窗中,選擇水平擴容或者水平縮容,單擊確定。
-
在彈出的擴容或縮容檢測視窗,查看檢測狀態。
說明進入檢測視窗時,水平擴容預設選擇的遷移擴容的方式,如需選擇簡單擴容,需單擊此頁面的上一步,在扩容选择彈框中,選擇簡單擴容,單擊下一步,進入變配頁面。
如果叢集中包含 Kafka/RabbitMQ 引擎表:當擴縮容任務進入資料移轉階段(表結構遷移完成後),請執行步驟四,在叢集上重建 Kafka/RabbitMQ 引擎表,使增量資料恢複流動並同步到新節點。
在配置的停寫視窗到來之前,請執行步驟五,刪除叢集上的 Kafka/RabbitMQ 引擎表及其下遊物化視圖,以防止停寫期間訊息堆積導致資料不一致。
-
檢測成功:單擊下一步。
-
檢測失敗:根據頁面提示進行相應修改,修改完成後單擊重試檢測。檢測成功後,單擊下一步。
在水平擴容的過程中,檢測失敗的原因主要有以下幾種。
-
缺失唯一的分布式表:表示本地表沒有建立分布式表,需要再建立一個對應的分布式表。
-
對應的分布式表不唯一:表示本地表有不止一個分布式表,請刪除多餘的分布式表,僅保留一個即可。
-
Kafka/RabbitMQ引擎表不支援:表示存在Kafka/RabbitMQ引擎表,請刪除。
-
多副本執行個體存在非Replicated的
*MergeTree表:表示資料在多副本之間不一致,擴縮容在遷移資料期間會出現異常。 -
分布式表和本地表的列不一致:表示需要您修改分布式表和本地表的列一致,否則擴縮容在遷移資料期間會出現異常。
-
該表在部分節點缺失:您需要在不同分區建立同名的表。針對物化視圖inner表,建議重新命名inner表,然後重建物化視圖,指向重新命名後的inner表。具體操作,請參見物化視圖inner表在不同分區不一致。
-
-
-
在變配或降配頁面,根據您的業務需求,配置Server节点数量以及停寫視窗。
說明停寫視窗是客戶配置的允許核心停寫的時間視窗,內部遷移邏輯會判斷是否停寫,其判斷邏輯如下:如果目前時間處於停寫視窗內,且剩餘的資料可以在10分鐘內遷移完成,則會自動進入停寫狀態。停寫過程中,後台會繼續遷移資料,直到資料完全追平。遷移完成後會自動結束停寫狀態。
叢集擴縮容會發生資料移轉,為了保證遷移的成功率,停寫視窗有以下要求:
-
建議您停寫視窗至少設定30分鐘。
-
擴縮容必須在配置變更建立後的5天內結束,因此,源叢集停寫視窗的結束日期必須小於或等於當前日期+5。
-
為了降低擴縮容對您業務的影響,建議您設定的停寫視窗時間範圍處於您的業務低峰時段。
-
-
單擊立即購買,並根據頁面提示完成支付。
-
在訂購完成頁面,單擊管理控制台。
-
在默認實例列表的状态列,可查看目的地組群的狀態。
水平擴容或水平縮容預計等待30分鐘以上,等待時間長度和資料量相關,具體任務執行狀態以控制台顯示的叢集狀態為準。
步驟四:資料移轉階段重建 Kafka/RabbitMQ 引擎表
當變更配置任務進入資料移轉階段(表結構遷移完成後),使用之前儲存的 DDL 語句重建 Kafka/RabbitMQ 引擎表及其下遊物化視圖。重建後,增量資料恢複流動並自動同步到新叢集節點。
如果您在步驟一中對隱含顯示目標表執行了 RENAME 操作,請在重建物化視圖時使用 TO 子句指向重新命名後的目標表。關於 TO 子句的更多資訊,請參見 CREATE MATERIALIZED VIEW.
-- Rebuild Kafka/RabbitMQ engine tables
CREATE TABLE <database>.<kafka_or_rabbitmq_table_name> (...)
ENGINE = Kafka/RabbitMQ
SETTINGS ...;
-- Rebuild materialized view (using TO clause pointing to the renamed target table)
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 引擎表及其下遊物化視圖,以停止增量資料寫入並確保最終資料同步的一致性。
-- Delete materialized views first
DROP TABLE <database>.<materialized_view_name> ON CLUSTER default;
-- Then delete Kafka/RabbitMQ engine tables
DROP TABLE <database>.<kafka_or_rabbitmq_table_name> ON CLUSTER default;
步驟六:變更配置完成後重建 Kafka/RabbitMQ 引擎表
變更配置任務完成後,使用之前儲存的 DDL 語句在已完成變更配置的叢集上重建 Kafka/RabbitMQ 引擎表及其下遊物化視圖,以恢複增量資料消費管道。
如果您在步驟一中對隱含顯示目標表執行了 RENAME 操作,請在重建物化視圖時使用 TO 子句指向重新命名後的目標表。關於 TO 子句的更多資訊,請參見 CREATE MATERIALIZED VIEW.
-- Rebuild Kafka/RabbitMQ engine tables
CREATE TABLE <database>.<kafka_or_rabbitmq_table_name> (...)
ENGINE = Kafka/RabbitMQ
SETTINGS ...;
-- Rebuild materialized view (using TO clause pointing to the renamed target table)
CREATE MATERIALIZED VIEW <database>.<materialized_view_name> TO <database>.<new_target_table_name>
AS SELECT ... FROM <database>.<kafka_or_rabbitmq_table_name>;
步驟七:遷移非MergeTree類型表的業務資料
登入叢集,通過OSS遷移步驟二:備份非MergeTree類型表的業務資料備份的資料。具體操作,請參見從OSS匯入資料。