変化する業務要件に対応するために、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 仕様を変更すると、クラスターが再起動します。 重要
|
|
|
スケールアウト |
重要
ReplacingMergeTree、CollapsingMergeTree、VersionedCollapsingMergeTree などのエンジンを使用するテーブルを含むクラスターには、シンプルスケールアウトを使用しないでください。 これらのタイプのテーブルのデータは、同じノードでのみマージできます。 シンプルスケールアウトは、マージが必要なデータを異なるノードに分散させ、マージを妨げます。 |
データ移行を伴うスケールアウト:Alibaba Cloud ClickHouse Community-Compatible Edition クラスターのノード数を増やして、コンピューティング能力を水平スケーリングします。 既存のデータは移行され、リバランスされます。 シンプルスケールアウト:Alibaba Cloud ClickHouse Community-Compatible Edition クラスターのノード数を増やして、コンピューティング能力を水平スケーリングします。 この方法は、データがローカルテーブルに直接書き込まれ、ノード間のデータリバランスが不要な場合に使用されます。 |
|
|
|
スケールイン |
|
Alibaba Cloud ClickHouse Community-Compatible Edition クラスターのノード数を減らしてコストを削減します。 |
|
前提条件
-
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 未満です。
課金
クラスター構成を変更すると、料金も変更されます。 実際の料金はコンソールに表示されるものが適用されます。 詳細については、「構成変更の課金」をご参照ください。
スケールアップとスケールダウン
垂直スケーリングの影響については、「垂直スケーリングと水平スケーリングの概要」と「注意事項」をご参照ください。
-
Alibaba Cloud ClickHouse コンソールにログインします。 ページの左上隅で、クラスターのあるリージョンを選択します。
-
クラスターリスト ページで、Community Edition インスタンスのリスト をクリックします。
-
対象クラスターの 操作 列で、設定を変更 をクリックします。
-
設定を変更 ダイアログボックスで、垂直持ち上げ または 垂直ドロップ を選択し、を決定 をクリックします。
-
バリエーション または ダウングレード ページで、業務要件に基づいて必要な構成を選択します。
説明-
バリエーション を行う際、バケット または ストレージの種類 と 仕様 を同時に変更することはできません。
-
デフォルトでは、クラスターには 4 CPU コアと 8 GB のメモリを持つ ZooKeeper 仕様が設定されています。 モニタリングアラーム ページの クラスターモニタリング パネルで ZooKeeper メトリックを表示し、リソースのボトルネックを確認してください。 デフォルトの仕様が不十分な場合は、速やかにスケールアップしてください。
-
-
今すぐ購入 をクリックし、プロンプトに従って支払いを完了してください。
-
Paid ページで、Console をクリックしてください。
-
Community Edition インスタンスのリスト で、対象クラスターのステータスを 状態 列で確認します。
説明-
バケット を変更すると、変更は即時に有効になり、クラスターのステータスは 実行中 のままです。
-
仕様 と [ZooKeeper 仕様] を変更した後、約 10〜15 分待ちます。 クラスターのステータスが バリエーションで から 実行中 に変わると、スケールアップまたはスケールダウン操作は完了です。
-
スケールアウトとスケールイン
水平スケーリングの影響については、「垂直スケーリングと水平スケーリングの概要」と「注意事項」をご参照ください。
ステップ 1: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 エンジンテーブルが含まれていない場合は、ステップ 1、ステップ 4、ステップ 5、およびステップ 6 をスキップして、ステップ 2 から開始できます。
ステップ 2:非 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 へのデータのバックアップ」をご参照ください。
ステップ 3:コンソールでのスケーリング
-
Alibaba Cloud ClickHouse コンソールにログインします。 ページの左上隅で、クラスターのあるリージョンを選択します。
-
クラスターリスト ページで、Community Edition インスタンスのリスト をクリックします。
-
対象クラスターの 操作 列で、設定を変更 をクリックします。
-
設定を変更 ダイアログボックスで、水平拡張 または 水平収縮 を選択し、を決定 をクリックします。
-
スケールアウトまたはスケールインのチェック画面で、チェック結果を確認します。
説明水平拡張 のチェック画面に入ると、デフォルトで 移行の拡張 が選択されます。 簡単な拡張 を選択するには、このページで 前のステップ をクリックします。 スケールアウトの選択 ダイアログボックスで、簡単な拡張 を選択し、次のステップ をクリックして バリエーション ページに移動します。
クラスターに Kafka/RabbitMQ エンジンテーブルが含まれている場合、スケーリングタスクが [データ移行] 段階 (テーブルスキーマの移行完了後) に進んだら、ステップ 4 に従ってクラスターに Kafka/RabbitMQ エンジンテーブルを再作成します。 これにより、増分データのフローが再開され、新しいノードに同期されます。
設定した書き込み停止ウィンドウが始まる前に、ステップ 5 に従って、クラスターから Kafka/RabbitMQ エンジンテーブルとその下流のマテリアライズドビューを削除します。 これにより、書き込み停止ウィンドウ中のメッセージのバックログによるデータの不整合を防ぎます。
-
チェックが成功した場合は、次のステップ をクリックします。
-
チェックが失敗した場合は、ページ上のプロンプトに従って問題を修正し、検出を再試行します をクリックします。 チェックが成功したら、次のステップ をクリックします。
スケールアウトチェックが失敗する一般的な理由には、次のようなものがあります。
-
一意な分散テーブルが見つからない:ローカルテーブルに対応する分散テーブルがありません。 作成する必要があります。
-
対応する分散テーブルが一意ではない:ローカルテーブルに複数の分散テーブルがあります。 余分な分散テーブルを削除し、1 つだけ保持します。
-
サポートされていない Kafka/RabbitMQ エンジンテーブル:クラスターに Kafka または RabbitMQ エンジンテーブルが含まれています。 それらを削除する必要があります。
-
マルチレプリカインスタンス内の非レプリケーション
MergeTreeテーブル:レプリカ間でデータが不整合であり、スケーリング中にデータ移行エラーが発生します。 -
分散テーブルとローカルテーブルの列に不整合がある:列を整合させる必要があります。 そうしないと、スケーリング中にデータ移行エラーが発生します。
-
一部のノードにテーブルが存在しない:異なるシャードに同じ名前のテーブルを作成する必要があります。 マテリアライズドビューの内部テーブルについては、内部テーブルの名前を変更してから、名前変更した内部テーブルを指すようにマテリアライズドビューを再作成することを推奨します。 詳細については、「マテリアライズドビューの内部テーブルがシャード間で不整合である」をご参照ください。
-
-
-
バリエーション または ダウングレード ページで、サーバーノード数 の数と書き込み停止ウィンドウを設定します。
説明書き込み停止ウィンドウとは、カーネルによる書き込み停止が許可される、ユーザーが設定した時間帯です。 内部の移行ロジックは、次の条件に基づいて書き込みを中断するかどうかを判断します:現在の時刻が書き込み停止ウィンドウ内であり、残りのデータを 10 分以内に移行できる場合、システムは自動的に書き込み停止状態に入ります。 中断中、バックエンドはすべてのデータが同期されるまでデータの移行を続けます。 移行が完了すると、システムは自動的に書き込み停止状態を終了します。
データ移行はクラスターのスケーリング中に発生します。 移行を成功させるには、書き込み停止ウィンドウが次の要件を満たす必要があります。
-
書き込み停止ウィンドウは、少なくとも 30 分に設定することを推奨します。
-
スケーリングは、構成変更が作成されてから 5 日以内に完了する必要があります。 したがって、ソースクラスターの書き込み停止ウィンドウの終了時刻は、現在の日付 + 5 日より後にならないように設定する必要があります。
-
業務への影響を最小限に抑えるために、書き込み停止ウィンドウをオフピーク時間に設定することを推奨します。
-
-
今すぐ購入 をクリックし、プロンプトに従って支払いを完了してください。
-
[購入成功] ページで、Console をクリックしてください。
-
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 からのデータのインポート」をご参照ください。