ApsaraDB for ClickHouse Community-Compatible Edition は、垂直スケーリング (スケールアップまたはスケールダウン) と水平スケーリング (スケールアウトまたはスケールイン) をサポートしています。垂直スケーリングはノードリソースを変更し、水平スケーリングはノード数を変更します。
スケーリングアプローチの選択
垂直スケーリングはより高速で、中断が少なくなります。クラスターの CPU、メモリ、またはディスクリソースが不足している場合は、まずスケールアップを検討してください。
アプローチ | 変更内容 | 使用するケース | 影響 | 所要時間 |
スケールアップ | ノード仕様、ストレージ容量、ストレージタイプ、または ZooKeeper 仕様 | CPU、メモリ、またはディスクリソースが不足している | ストレージ変更:なし。仕様変更:クラスターの再起動。 | ストレージ:即時。仕様:10~15 分。 |
スケールダウン | ノード仕様または ZooKeeper 仕様 | リソースが過剰にプロビジョニングされている | スケールアップと同じ | 10~15 分 |
スケールアウト | ノードの追加 | より多くの計算容量が必要。ノード間でデータを再分散する。 | DDL 操作がブロックされる。移行中に CPU とメモリの使用量が増加する。 | 30 分以上 (データ量に依存) |
スケールイン | ノードの削除 | より少ないノードで実行してコストを削減する | スケールアウトと同じ | 30 分以上 (データ量に依存) |
垂直スケーリングではストレージ容量を削減できません。ストレージを削減するには、ノードをスケールインする (マルチノードクラスター) か、新しいインスタンスを作成してデータを移行します (スタンドアロンクラスター)。
前提条件
クラスターが Community-Compatible Edition クラスターであること。
クラスターのステータスが [実行中] であること。
未払いの更新注文が存在しないこと。確認するには、ApsaraDB for ClickHouse コンソールにログインします。右上隅で、[費用] > [費用とコスト] を選択します。左のナビゲーションウィンドウで、[注文] をクリックします。未払いの注文を支払うか、キャンセルしてください。
マスターレプリカクラスターの場合:仕様変更中の一時的な接続中断に対して、ご利用のアプリケーションにリトライメカニズムがあることを確認してください。
スタンドアロンクラスターの場合:仕様変更中はクラスターが完全に利用できなくなります。開始する前に書き込み操作を停止してください。
課金
スケーリングによってクラスターの課金が変更されます。実際のコストは操作中にコンソールに表示されます。詳細については、「設定変更の課金」をご参照ください。
スケールアップまたはスケールダウン (垂直スケーリング)
垂直スケーリングは、ノード仕様、ストレージ容量、ストレージタイプ、または ZooKeeper 仕様を変更します。
制限事項
ZooKeeper 仕様の変更は、2021 年 12 月 1 日以降に作成されたクラスターでのみサポートされています。価格については、「Community-Compatible Edition の ZooKeeper 仕様の価格」をご参照ください。
ストレージ容量またはストレージタイプのアップグレードでは、クラスターは再起動しません (2021 年 12 月 1 日以降に作成されたクラスターにのみ適用されます)。クラスター仕様または ZooKeeper 仕様を変更すると、クラスターが再起動します。
[サーバー仕様] または [ZooKeeper 仕様] は、[ストレージ容量] または [ストレージタイプ] の [アップグレード] と同時に変更することはできません。
ピーク時に ZooKeeper 仕様を変更すると、テーブルのメタデータと実際のデータとの間に不整合が生じる可能性があります。この変更は、オフピーク時または書き込み操作が停止しているときに実行してください。
クラスタータイプ別の影響
クラスタータイプ | 仕様変更中の動作 |
マスターレプリカ | リクエストがレプリカ間で切り替わる際に、一時的な接続中断が発生します。変更はオフピーク時にスケジュールしてください。 |
スタンドアロン | アップグレード中はクラスターが利用できなくなります。変更はオフピーク時にスケジュールするか、最初に書き込み操作を停止してください。 |
操作手順
ApsaraDB for ClickHouse コンソールにログインします。
左上隅で、ご利用のクラスターが存在するリージョンを選択します。
[クラスター] ページで、[Community-compatible Edition のクラスター] タブをクリックします。
対象のクラスターを見つけます。[アクション] 列で、[変更] をクリックします。
[変更] ダイアログボックスで、[スケールアップ] または [スケールダウン] を選択し、[OK] をクリックします。
[スペックアップ/スペックダウン] ページで、目的の構成を選択します。デフォルトでは、クラスターには 4 コア、8 GB のメモリを持つ ZooKeeper サービスがあります。リソースのボトルネックを確認するには、[モニタリングとアラート] ページに移動し、[クラスターモニタリング] パネルで ZooKeeper のメトリックを表示します。デフォルトの仕様が不十分な場合は、ZooKeeper の仕様をアップグレードしてください。
[今すぐ購入] をクリックし、支払いを完了します。
[注文が完了しました] ページで、[コンソール] をクリックします。
[Community-compatible Edition のクラスター] リストの [ステータス] 列でクラスターのステータスを確認します。
[ストレージ容量] の変更はすぐに有効になります。クラスターのステータスは [実行中] のままです。
[サーバー仕様] または [ZooKeeper 仕様] の変更には 10~15 分かかります。操作が完了すると、ステータスは [仕様変更中] から [実行中] に変わります。
スケーリング後の動作
クラスターまたは ZooKeeper の仕様を変更した後、クラスターは再起動します。再起動の所要時間は、データベース、テーブルの数、およびコールドデータの量によって異なります。変更後、一定期間、高頻度のマージ操作が実行される可能性があり、I/O 使用量が増加し、リクエストのレイテンシーが増加する可能性があります。マージ期間の推定については、「移行後のマージ期間の計算」をご参照ください。
スケールアウトまたはスケールイン (水平スケーリング)
水平スケーリングは、クラスターのノードを追加または削除します。これにはデータ移行が含まれ、追加の準備が必要です。
スケールアウト方法
方法 | コンソールラベル | データ移行 | 使用するケース |
データ移行を伴うスケールアウト | [移行拡張] (デフォルト) | 既存のデータをすべてのノードに移行し、再分散します | ほとんどのシナリオ。バランスの取れたデータ分布を保証します。 |
シンプルスケールアウト | [シンプル拡張] | 再分散なし。新しいデータは新しいノードにのみ書き込まれます。 | データがローカルテーブルに直接書き込まれたか、 |
ReplacingMergeTree、CollapsingMergeTree、または VersionedCollapsingMergeTree テーブルを持つクラスターには、シンプルスケールアウトを使用しないでください。これらのエンジンは同じノードでデータをマージします。シンプルスケールアウトはデータをノード間に分散させ、マージが正しく完了するのを妨げます。
スケールイン方法
方法 | 動作 | データ損失 |
標準スケールイン | ノードをランダムに削除します。データは移行され、再分散されます。 | なし |
指定ノードによるスケールイン | 指定されたノードを削除します。ローカルディスクを使用するクラスターでのみ利用可能です。 | あり -- 削除されたノード上のデータは失われます。 |
移行範囲
データ移行を伴うスケールアウトまたは標準スケールイン中、以下のデータが新しいクラスター構成に移行されます。
サポート対象:
データベース、ディクショナリ、マテリアライズドビュー
Kafka および RabbitMQ エンジンテーブルを除くすべてのテーブルのテーブルスキーマ
MergeTree エンジンファミリーテーブルのデータ (増分移行)
サポート対象外:
Kafka および RabbitMQ エンジンテーブルとそのデータ
MergeTree 以外のテーブル (外部テーブルや Log ファミリーエンジンテーブルなど) のデータ
スケールアウトまたはスケールイン中、データは新しいインスタンスに移行され、トラフィックが切り替えられます。Kafka および RabbitMQ のデータが分割されるのを防ぐため、操作前にソースクラスターからこれらのエンジンテーブルを削除してください。操作完了後に再作成してください。
制限事項
スケールアウトまたはスケールインのプロセス全体で DDL 操作は禁止されています。
操作中に CPU とメモリの使用量が増加します。推定オーバーヘッド:ノードあたり 5 コア未満、メモリ 20 GB 未満。
スケーリング後、一定期間、高頻度のマージ操作が続き、I/O 使用量が増加し、リクエストのレイテンシーが増加する可能性があります。マージ期間の推定については、「移行後のマージ期間の計算」をご参照ください。
スケールアウト後、内部クラスターノードの IP アドレスが変更されます。ご利用のアプリケーションが特定のノード IP アドレスに接続している場合は、VPC CIDR ブロックを再度取得してください。詳細については、「クラスターの VPC CIDR ブロックの取得」をご参照ください。
ステップ 1:Kafka および RabbitMQ エンジンテーブルの処理
ご利用のクラスターに Kafka または RabbitMQ エンジンテーブルがない場合は、このステップをスキップしてください。
クラスターにログインします。接続手順については、「DMS を使用した ClickHouse クラスターへの接続」をご参照ください。
Kafka および RabbitMQ エンジンテーブルをクエリします:
SELECT * FROM `system`.`tables` WHERE engine IN ('RabbitMQ', 'Kafka');各テーブルの
CREATE TABLE文をバックアップします:SHOW CREATE TABLE <table_name>;Kafka および RabbitMQ エンジンテーブルを削除します。> 重要: Kafka テーブルを削除する際は、それを参照するマテリアライズドビューも削除してください。そうしないと、スケールアウトまたはスケールイン操作が失敗します。
ステップ 2:MergeTree 以外のテーブルからのデータバックアップ
保持する必要のあるデータを持つ 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') ))特定されたテーブルからデータをバックアップします。手順については、「OSS へのデータバックアップ」をご参照ください。
ステップ 3:コンソールからのスケールアウトまたはスケールイン
ApsaraDB for ClickHouse コンソールにログインします。
左上隅で、ご利用のクラスターが存在するリージョンを選択します。
[クラスター] ページで、[Community-compatible Edition のクラスター] タブを選択します。
対象のクラスターを見つけます。[アクション] 列で、[変更] をクリックします。
[変更] ダイアログボックスで、[スケールアウト] または [スケールイン] を選択し、[OK] をクリックします。
チェックウィンドウで、チェックステータスを確認します。[スケールアウト] ウィンドウでは、デフォルトで [移行拡張] が選択されています。[シンプル拡張] を使用するには、[前へ] をクリックし、[スケールアウト] ダイアログボックスで [シンプル拡張] を選択して、[次へ] をクリックします。一般的なチェック失敗の理由:
チェックに合格した場合は、[次へ] をクリックします。
チェックに失敗した場合は、報告された問題を修正し、[再試行] をクリックします。チェックに合格した後、[次へ] をクリックします。
失敗
解決策
一意の分散テーブルが見つからない
ローカルテーブルに対応する分散テーブルがありません。作成してください。
対応する分散テーブルが一意でない
ローカルテーブルに複数の分散テーブルがあります。1 つだけ保持してください。
Kafka/RabbitMQ エンジンテーブルが存在する
最初にこれらのテーブルを削除してください (ステップ 1 を参照)。
マスターレプリカインスタンスに非レプリケートの
*MergeTreeテーブルがあるレプリカ間でデータが不整合です。不整合を解決してください。
分散テーブルとローカルテーブルの列が不整合
列定義を揃えてください。
一部のノードでテーブルが見つからない
すべてのシャードに一致するテーブルを作成してください。マテリアライズドビューの内部テーブルについては、内部テーブルの名前を変更し、マテリアライズドビューを再構築してください。詳細については、「マテリアライズドビューの内部テーブルがシャード間で不整合」をご参照ください。
[スペックアップ/スペックダウン] ページで、[サーバーノード] の数と書き込み中断ウィンドウを設定します。書き込み中断ウィンドウの要件:
書き込み中断時間を少なくとも 30 分に設定してください。
操作は 5 日以内に完了する必要があります。ソースクラスターの [データ書き込みの停止] の終了日は、現在の日付から 5 日以内でなければなりません。
ビジネスへの影響を減らすため、書き込み中断ウィンドウをオフピーク時に設定してください。
[今すぐ購入] をクリックし、支払いを完了します。
[注文が完了しました] ページで、[コンソール] をクリックします。
[Community-compatible Edition のクラスター] リストの [ステータス] 列でクラスターのステータスを確認します。ステータスが [スケーリング中] から [実行中] に変わると、操作は完了です。スケールアウトまたはスケールイン操作には少なくとも 30 分かかります。正確な所要時間はデータ量によって異なります。
ステップ 4:Kafka および RabbitMQ エンジンテーブルの再作成
ステップ 1 で Kafka または RabbitMQ エンジンテーブルを削除しなかった場合は、このステップをスキップしてください。
クラスターにログインし、ステップ 1 でバックアップした CREATE TABLE 文を実行します。接続手順については、「DMS を使用した ClickHouse クラスターへの接続」をご参照ください。
ステップ 5:MergeTree 以外のテーブルへのデータ復元
ステップ 2 で MergeTree 以外のテーブルデータをバックアップしなかった場合は、このステップをスキップしてください。
クラスターにログインして、手順 2 でバックアップしたデータをインポートします。詳細については、「OSS からのデータのインポート」をご参照ください。
スケーリング後の動作
マージ操作:操作後、一定期間、高頻度のマージ操作が続き、I/O 使用量が増加し、リクエストのレイテンシーが増加する可能性があります。マージ期間の推定については、「移行後のマージ期間の計算」をご参照ください。
IP アドレス:スケールアウト後、内部クラスターノードの IP アドレスが変更されます。ご利用のアプリケーションが特定のノード IP に接続している場合は、アプリケーション構成を更新してください。詳細については、「クラスターの VPC CIDR ブロックの取得」をご参照ください。
データの検証:操作が完了し、クラスターのステータスが [実行中] に戻ったら、データとテーブルが無傷であることを確認してください。