すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for ClickHouse:Community-Compatible Edition クラスターの垂直スケーリングと水平スケーリング

最終更新日:Jul 04, 2026

変化する業務要件に対応するために、Alibaba Cloud ClickHouse Community-Compatible Edition クラスターの構成やサイズを調整できます。 Alibaba Cloud ClickHouse クラスターで垂直スケーリングと水平スケーリングを実行することで、コストとパフォーマンスの最適なバランスを実現できます。

垂直スケーリングと水平スケーリングの概要

垂直スケーリングは、水平スケーリングよりも高速で、業務への影響が少ないです。 クラスターのパフォーマンスが不十分な場合は、まず垂直スケーリングを検討してください。

スケーリング方法

ユースケース

仕組み

影響

操作

垂直スケーリング

CPU、メモリ、またはディスク容量が不足しているか、過剰にプロビジョニングされている場合にノードリソースを調整します。

Alibaba Cloud ClickHouse Community-Compatible Edition クラスターのノード仕様、ストレージ容量、および ZooKeeper 仕様を増減させ、コンピューティング能力、ストレージ容量、および分散協調能力を調整します。

説明

垂直スケーリングを使用してストレージ容量を減らすことはできません。 ストレージ容量を減らすには、次の解決策があります。

  • マルチノードインスタンスの場合、業務要件に基づいてノードをスケールインしてストレージ容量を減らすことができます。

  • シングルノードインスタンスの場合、新しいインスタンスを作成し、データを移行してストレージ容量を減らすことができます。

Alibaba Cloud ClickHouse Community-Compatible Edition クラスターのストレージタイプをアップグレードしたり、ストレージ容量を増やしたりしても、インスタンスには影響しません (2021 年 12 月 1 日以降に作成されたインスタンスにのみ適用されます) 。 ただし、クラスターまたは ZooKeeper 仕様を変更すると、クラスターが再起動します。

重要
  • 垂直スケーリングには 5〜10 分かかります。 クラスターの再起動にかかる時間は、データ量によって異なります。 クラスターのデータベース、テーブル、およびコールドデータが多いほど、再起動にかかる時間は長くなります。

  • デュアルレプリカクラスターの場合、リクエストがレプリカ間で切り替わるため、スケーリングによって一時的な接続中断が発生する可能性があります。 オフピーク時間にスケーリングを実行し、アプリケーションにリトライメカニズムがあることを確認してください。

  • シングルレプリカクラスターは、スケーリング中は利用できません。 この操作は、オフピーク時間または書き込み操作が中断されているときに実行し、アプリケーションにリトライメカニズムがあることを確認してください。

  • ピーク時に ZooKeeper 仕様を変更すると、テーブルのメタデータと実際のデータとの間に不整合が生じる可能性があります。 この操作は、オフピーク時間または書き込み操作が中断されているときに実行してください。

スケールアップとスケールダウン

スケールアウト

  • データ移行を伴うスケールアウト:スケールアウト後にクラスターデータのデータリバランスが必要な場合に使用します。

  • シンプルスケールアウト:

    クラスターが次の条件を満たす場合に使用します。

    • スケールアウト前に、データはローカルテーブルに直接書き込まれるか、シャーディングキーが rand に設定された分散テーブルに書き込まれます。

    • ノード間のデータリバランスは不要です。

重要

ReplacingMergeTree、CollapsingMergeTree、VersionedCollapsingMergeTree などのエンジンを使用するテーブルを含むクラスターには、シンプルスケールアウトを使用しないでください。 これらのタイプのテーブルのデータは、同じノードでのみマージできます。 シンプルスケールアウトは、マージが必要なデータを異なるノードに分散させ、マージを妨げます。

データ移行を伴うスケールアウト:Alibaba Cloud ClickHouse Community-Compatible Edition クラスターのノード数を増やして、コンピューティング能力を水平スケーリングします。 既存のデータは移行され、リバランスされます。

シンプルスケールアウト:Alibaba Cloud ClickHouse Community-Compatible Edition クラスターのノード数を増やして、コンピューティング能力を水平スケーリングします。 この方法は、データがローカルテーブルに直接書き込まれ、ノード間のデータリバランスが不要な場合に使用されます。

  • スケールアウト中は DDL 操作が禁止されています。

  • スケールアウト中にクラスターの CPU とメモリ使用量が増加します。 推定されるリソースオーバーヘッドは、ノードあたり CPU 5 コア、メモリ 20 GB 未満です。

  • スケールアウトが完了すると、マージ操作が頻発する期間が続きます。 これにより、I/O 使用量が増加し、業務リクエストのレイテンシが増加する可能性があります。

スケールアウトとスケールイン

スケールイン

  • 標準スケールイン:

    • ノード数を減らしてコストを節約します。

    • ノードはランダムにオフラインになります。 削除するノードを指定することはできません。

  • ノード指定のスケールイン:大規模なストレージ仕様のクラスターにおいて、指定されたノードをオフラインにします。

Alibaba Cloud ClickHouse Community-Compatible Edition クラスターのノード数を減らしてコストを削減します。

  • スケールイン中は DDL 操作が禁止されています。

  • スケールイン中にクラスターの CPU とメモリ使用量が増加します。 推定されるリソースオーバーヘッドは、ノードあたり CPU 5 コア、メモリ 20 GB 未満です。

  • スケールインが完了すると、マージ操作が頻発する期間が続きます。 これにより、I/O 使用量が増加し、業務リクエストのレイテンシが増加する可能性があります。

スケールアウトとスケールイン

前提条件

  • Alibaba Cloud ClickHouse Community-Compatible Edition クラスターであること。

  • クラスターのステータスが「実行中」であること。

  • クラスターに未払いの更新注文がないこと。

    説明

    Alibaba Cloud ClickHouse コンソールにログインします。 ページの右上隅で、料金 > 料金と費用 を選択します。 左側メニューで 支払失敗 をクリックし、支払いを完了するか、注文をキャンセルしてください。

注意事項

  • 垂直スケーリング:ZooKeeper 仕様は、2021 年 12 月 1 日以降に作成された Alibaba Cloud ClickHouse Community-Compatible Edition クラスターでのみ変更できます。 ZooKeeper 仕様の料金については、「Community-Compatible Edition の ZooKeeper 仕様の料金」をご参照ください。

  • 水平スケーリング:

    • MergeTree ファミリーのエンジンテーブルを持つクラスターをスケールアウトすると、システムは既存のデータを新しいクラスターに移行し、自動的にリバランスします。

      移行対象

      • データベース、データディクショナリ、およびマテリアライズドビュー。

      • テーブルスキーマ:Kafka または RabbitMQ エンジンを使用するテーブルを除くすべてのテーブルスキーマ。

      • データ:MergeTree ファミリーのエンジンを使用するテーブルのデータは、増分的に移行されます。

      移行対象外

      • Kafka および RabbitMQ エンジンテーブルのテーブルスキーマとデータ。

        重要

        構成変更中に、データは新しいインスタンスに移行され、トラフィックは新しいインスタンスに切り替えられます。 Kafka と RabbitMQ のデータが分断されるのを防ぐため、まずソースクラスターから Kafka および RabbitMQ エンジンテーブルを削除してください。 構成変更が完了した後に、それらを再作成してください。

      • 外部テーブルや Log ファミリーテーブルなど、非 MergeTree テーブルのデータ。

      重要

      スケーリング中は、手順に従って、サポートされていない項目を手動で処理する必要があります。

    • 水平スケーリング中は DDL 操作が禁止されています。 この制約に従わない場合、データ検証が失敗し、スケーリングが失敗する可能性があります。

    • スケールアウト後、内部ノードの IP アドレスが変更されます。 アプリケーションがデータの書き込みとアクセスにノードの IP アドレスを使用している場合は、クラスターの新しい VPC CIDR ブロックを取得する必要があります。 詳細については、「クラスターの VPC CIDR ブロックの取得」をご参照ください。

    • ノード指定によるスケールインは、ローカルディスクベースのクラスターのみでサポートされています。 このモードでは、オフラインになるノードのデータは失われます。 標準のスケールインモードでは、データは失われずにリバランスされます。

  • クラスター構成の変更後、マージ操作が頻発する期間が続きます。 これにより、I/O 使用量が増加し、業務リクエストのレイテンシが増加する可能性があります。 リクエストのレイテンシ増加による影響を軽減するために、事前に計画してください。 マージ期間の計算方法については、「移行後のマージ期間の計算」をご参照ください。

  • クラスター構成の変更中に、CPU とメモリの使用量が増加します。 推定されるリソースオーバーヘッドは、ノードあたり CPU 5 コア、メモリ 20 GB 未満です。

課金

クラスター構成を変更すると、料金も変更されます。 実際の料金はコンソールに表示されるものが適用されます。 詳細については、「構成変更の課金」をご参照ください。

スケールアップとスケールダウン

重要

垂直スケーリングの影響については、「垂直スケーリングと水平スケーリングの概要」と「注意事項」をご参照ください。

  1. Alibaba Cloud ClickHouse コンソールにログインします。 ページの左上隅で、クラスターのあるリージョンを選択します。

  2. クラスターリスト ページで、Community Edition インスタンスのリスト をクリックします。

  3. 対象クラスターの 操作 列で、設定を変更 をクリックします。

  4. 設定を変更 ダイアログボックスで、垂直持ち上げ または 垂直ドロップ を選択し、を決定 をクリックします。

  5. バリエーション または ダウングレード ページで、業務要件に基づいて必要な構成を選択します。

    説明
    • バリエーション を行う際、バケット または ストレージの種類仕様 を同時に変更することはできません。

    • デフォルトでは、クラスターには 4 CPU コアと 8 GB のメモリを持つ ZooKeeper 仕様が設定されています。 モニタリングアラーム ページの クラスターモニタリング パネルで ZooKeeper メトリックを表示し、リソースのボトルネックを確認してください。 デフォルトの仕様が不十分な場合は、速やかにスケールアップしてください。

  6. 今すぐ購入 をクリックし、プロンプトに従って支払いを完了してください。

  7. Paid ページで、Console をクリックしてください。

  8. Community Edition インスタンスのリスト で、対象クラスターのステータスを 状態 列で確認します。

    説明
    • バケット を変更すると、変更は即時に有効になり、クラスターのステータスは 実行中 のままです。

    • 仕様[ZooKeeper 仕様] を変更した後、約 10〜15 分待ちます。 クラスターのステータスが バリエーションで から 実行中 に変わると、スケールアップまたはスケールダウン操作は完了です。

スケールアウトとスケールイン

重要

水平スケーリングの影響については、「垂直スケーリングと水平スケーリングの概要」と「注意事項」をご参照ください。

ステップ 1:Kafka/RabbitMQ テーブルの記録と削除

コンソールのスケーリング機能は、Kafka および RabbitMQ エンジンテーブルを直接移行できません。 クラスターをスケーリングする前に、これらのテーブルの DDL ステートメントを記録し、スケーリングタスクに影響を与えないようにクラスターから削除する必要があります。

  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. TO 句なしでマテリアライズドビューが作成された場合、システムは自動的に .inner または .inner_id というプレフィックスを持つ暗黙的なターゲットテーブルを生成します。 これらの暗黙的なテーブルはスケーリング中に新しいノードに移行されますが、内部の命名メカニズムにより、元のマテリアライズドビューを直接再作成すると命名の競合が発生する可能性があります。 したがって、まず暗黙的なターゲットテーブルを通常のテーブル名に名前変更する必要があります。

    -- 暗黙的なターゲットテーブルを通常のテーブル名に名前変更します (全ノードで実行) 。
    RENAME TABLE <database>.`.inner_id.<uuid>` TO <database>.<new_target_table_name> ON CLUSTER default;
  4. マテリアライズドビューと 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 エンジンテーブルが含まれていない場合は、ステップ 1、ステップ 4、ステップ 5、およびステップ 6 をスキップして、ステップ 2 から開始できます。

ステップ 2:非 MergeTree テーブルデータのバックアップ

  1. クラスターにログインし、次のステートメントを実行して、データ移行が必要な非 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')
    ))
  2. データをバックアップします。

    非 MergeTree テーブルにある業務データをバックアップします。 詳細については、OSS へのデータのバックアップ」をご参照ください。

ステップ 3:コンソールでのスケーリング

  1. Alibaba Cloud ClickHouse コンソールにログインします。 ページの左上隅で、クラスターのあるリージョンを選択します。

  2. クラスターリスト ページで、Community Edition インスタンスのリスト をクリックします。

  3. 対象クラスターの 操作 列で、設定を変更 をクリックします。

  4. 設定を変更 ダイアログボックスで、水平拡張 または 水平収縮 を選択し、を決定 をクリックします。

  5. スケールアウトまたはスケールインのチェック画面で、チェック結果を確認します。

    説明

    水平拡張 のチェック画面に入ると、デフォルトで 移行の拡張 が選択されます。 簡単な拡張 を選択するには、このページで 前のステップ をクリックします。 スケールアウトの選択 ダイアログボックスで、簡単な拡張 を選択し、次のステップ をクリックして バリエーション ページに移動します。

    クラスターに Kafka/RabbitMQ エンジンテーブルが含まれている場合、スケーリングタスクが [データ移行] 段階 (テーブルスキーマの移行完了後) に進んだら、ステップ 4 に従ってクラスターに Kafka/RabbitMQ エンジンテーブルを再作成します。 これにより、増分データのフローが再開され、新しいノードに同期されます。

    設定した書き込み停止ウィンドウが始まる前に、ステップ 5 に従って、クラスターから Kafka/RabbitMQ エンジンテーブルとその下流のマテリアライズドビューを削除します。 これにより、書き込み停止ウィンドウ中のメッセージのバックログによるデータの不整合を防ぎます。

    • チェックが成功した場合は、次のステップ をクリックします。

    • チェックが失敗した場合は、ページ上のプロンプトに従って問題を修正し、検出を再試行します をクリックします。 チェックが成功したら、次のステップ をクリックします。

      スケールアウトチェックが失敗する一般的な理由には、次のようなものがあります。

      • 一意な分散テーブルが見つからない:ローカルテーブルに対応する分散テーブルがありません。 作成する必要があります。

      • 対応する分散テーブルが一意ではない:ローカルテーブルに複数の分散テーブルがあります。 余分な分散テーブルを削除し、1 つだけ保持します。

      • サポートされていない Kafka/RabbitMQ エンジンテーブル:クラスターに Kafka または RabbitMQ エンジンテーブルが含まれています。 それらを削除する必要があります。

      • マルチレプリカインスタンス内の非レプリケーション MergeTree テーブル:レプリカ間でデータが不整合であり、スケーリング中にデータ移行エラーが発生します。

      • 分散テーブルとローカルテーブルの列に不整合がある:列を整合させる必要があります。 そうしないと、スケーリング中にデータ移行エラーが発生します。

      • 一部のノードにテーブルが存在しない:異なるシャードに同じ名前のテーブルを作成する必要があります。 マテリアライズドビューの内部テーブルについては、内部テーブルの名前を変更してから、名前変更した内部テーブルを指すようにマテリアライズドビューを再作成することを推奨します。 詳細については、「マテリアライズドビューの内部テーブルがシャード間で不整合である」をご参照ください。

  6. バリエーション または ダウングレード ページで、サーバーノード数 の数と書き込み停止ウィンドウを設定します。

    説明

    書き込み停止ウィンドウとは、カーネルによる書き込み停止が許可される、ユーザーが設定した時間帯です。 内部の移行ロジックは、次の条件に基づいて書き込みを中断するかどうかを判断します:現在の時刻が書き込み停止ウィンドウ内であり、残りのデータを 10 分以内に移行できる場合、システムは自動的に書き込み停止状態に入ります。 中断中、バックエンドはすべてのデータが同期されるまでデータの移行を続けます。 移行が完了すると、システムは自動的に書き込み停止状態を終了します。

    データ移行はクラスターのスケーリング中に発生します。 移行を成功させるには、書き込み停止ウィンドウが次の要件を満たす必要があります。

    • 書き込み停止ウィンドウは、少なくとも 30 分に設定することを推奨します。

    • スケーリングは、構成変更が作成されてから 5 日以内に完了する必要があります。 したがって、ソースクラスターの書き込み停止ウィンドウの終了時刻は、現在の日付 + 5 日より後にならないように設定する必要があります。

    • 業務への影響を最小限に抑えるために、書き込み停止ウィンドウをオフピーク時間に設定することを推奨します。

  7. 今すぐ購入 をクリックし、プロンプトに従って支払いを完了してください。

  8. [購入成功] ページで、Console をクリックしてください。

  9. Community Edition インスタンスのリスト で、対象クラスターのステータスを 状態 列で確認します。

説明

水平スケーリングには 30 分以上かかる見込みです。 所要時間はデータ量によって異なります。 実際のタスクの実行状況は、コンソールのクラスターのステータスで確認できます。

ステップ 4:Kafka/RabbitMQ テーブルの再作成

スケーリングタスクが [データ移行] 段階 (テーブルスキーマの移行完了後) に進んだら、保存した DDL ステートメントを使用して Kafka/RabbitMQ エンジンテーブルとその下流のマテリアライズドビューを再作成します。 再作成後、増分データのフローが再開され、新しいクラスターのノードに自動的に同期されます。

重要

ステップ 1 で暗黙的なターゲットテーブルに対して RENAME 操作を実行した場合は、マテリアライズドビューを再作成するときに TO 句を使用して、名前変更したターゲットテーブルを指定します。 TO 句の詳細については、「CREATE MATERIALIZED VIEW」をご参照ください。

-- Kafka/RabbitMQ エンジンテーブルを再作成します。
CREATE TABLE <database>.<kafka_or_rabbitmq_table_name> (...)
ENGINE = Kafka/RabbitMQ
SETTINGS ...;

-- マテリアライズドビューを再作成します (TO 句を使用して名前変更されたターゲットテーブルを指します) 。
CREATE MATERIALIZED VIEW <database>.<materialized_view_name> TO <database>.<new_target_table_name>
AS SELECT ... FROM <database>.<kafka_or_rabbitmq_table_name>;

ステップ 5:書き込み停止前の 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;

ステップ 6:スケーリング後の Kafka/RabbitMQ テーブルの再作成

スケーリングタスクの完了後、保存した DDL ステートメントを使用して、スケーリングされたクラスターに Kafka/RabbitMQ エンジンテーブルとその下流のマテリアライズドビューを再作成し、増分データ取り込みのパイプラインを復元します。

重要

ステップ 1 で暗黙的なターゲットテーブルに対して RENAME 操作を実行した場合は、マテリアライズドビューを再作成するときに TO 句を使用して、名前変更したターゲットテーブルを指定します。 TO 句の詳細については、「CREATE MATERIALIZED VIEW」をご参照ください。

-- Kafka/RabbitMQ エンジンテーブルを再作成します。
CREATE TABLE <database>.<kafka_or_rabbitmq_table_name> (...)
ENGINE = Kafka/RabbitMQ
SETTINGS ...;

-- マテリアライズドビューを再作成します (TO 句を使用して名前変更されたターゲットテーブルを指します) 。
CREATE MATERIALIZED VIEW <database>.<materialized_view_name> TO <database>.<new_target_table_name>
AS SELECT ... FROM <database>.<kafka_or_rabbitmq_table_name>;

ステップ 7:非 MergeTree テーブルデータの移行

クラスターにログインし、ステップ 2 でバックアップしたデータを OSS を使用して移行します。 詳細については、OSS からのデータのインポート」をご参照ください。