データベースの作成
zoo_path— ZooKeeper のパスです。同じ ZooKeeper パスは同じデータベースに対応します。shard_name— 分片名です。データベースのレプリカはshard_nameによって分片ごとにグループ化されます。replica_name— レプリカ名です。同じ分片内のすべてのレプリカで、レプリカ名はそれぞれ異なっている必要があります。
zoo_path にマクロ {uuid} が含まれている場合は、このデータベースのすべてのレプリカで同じ UUID が使われるように、明示的に UUID を指定するか、CREATE ステートメントに ON CLUSTER を追加する必要があります。
ReplicatedMergeTree テーブルでは、引数が指定されていない場合、デフォルト引数 /clickhouse/tables/{uuid}/{shard} と {replica} が使用されます。これらは、サーバー設定 default_replica_path および default_replica_name で変更できます。マクロ {uuid} はテーブルの uuid に展開され、{shard} と {replica} はデータベースエンジンの引数ではなく、サーバー設定の値に展開されます。ただし将来的には、Replicated データベースの shard_name と replica_name を使用できるようになる予定です。
デフォルトの ZooKeeper クラスターの代わりに、Replicated データベースのメタデータ保存先として補助 ZooKeeper クラスターを使用することもサポートされています。次のように SQL を使用して、補助 ZooKeeper クラスターを使うReplicated データベースを作成できます。
特有の動作と推奨事項
Replicated データベースでの DDL クエリは、ON CLUSTER クエリとほぼ同様に動作しますが、いくつか細かな違いがあります。
まず、DDL リクエストはイニシエーター (ユーザーからのリクエストを最初に受け取ったホスト) で実行が試みられます。ここでリクエストを完了できなかった場合、ユーザーには即座にエラーが返され、他のホストで実行が試みられることはありません。イニシエーターで正常に完了した場合は、他のすべてのホストが完了するまで自動的に再試行します。イニシエーターは、他のホストでのクエリ完了を待機しようとし (待機時間は distributed_ddl_task_timeout まで) 、各ホストにおけるクエリ実行ステータスを示すテーブルを返します。
エラー時の動作は distributed_ddl_output_mode 設定で制御されますが、Replicated データベースではこれを null_status_on_timeout に設定することを推奨します。つまり、一部のホストが distributed_ddl_task_timeout 以内にリクエストを実行できなかった場合でも、例外をスローするのではなく、それらのホストについてはテーブル内に NULL ステータスを表示します。
system.clusters システムテーブルには、Replicated データベースと同名のクラスターが含まれており、そのクラスターはそのデータベースのすべてのレプリカで構成されます。このクラスターは、レプリカの作成や削除に応じて自動的に更新され、Distributed 分散テーブルで利用できます。
データベースの新しいレプリカを作成すると、そのレプリカは自動的にテーブルを作成します。レプリカが長期間利用不能で、レプリケーションログに対して大きく遅れている場合は、ローカルメタデータを ZooKeeper 上の現在のメタデータと照合し、余分なデータを含むテーブルを別の非レプリケートデータベースに移動し (不要なものを誤って削除しないようにするため) 、不足しているテーブルを作成し、テーブル名が変更されている場合はその名前を更新します。データは ReplicatedMergeTree レベルでレプリケートされます。つまり、テーブルがレプリケートされていない場合、データはレプリケートされません (データベースが担うのはメタデータのみです) 。
ALTER TABLE FREEZE|ATTACH|FETCH|DROP|DROP DETACHED|DETACH PARTITION|PART クエリは許可されていますが、レプリケートはされません。データベースエンジンは、現在のレプリカに対してのみパーティションまたはパートの追加、fetch、削除を行います。ただし、テーブル自体が Replicated テーブルエンジンを使用している場合は、ATTACH 実行後にデータがレプリケートされます。
テーブルのレプリケーションを維持せずにクラスターだけを構成したい場合は、Cluster Discovery 機能を参照してください。
使用例
{uuid} を zoo_path で使用している場合に、別のホストへレプリカを追加する:
設定
デフォルト値は設定ファイルで上書きできます