フォールトトレランスのためのレプリケーション
説明
このアーキテクチャでは、5台のサーバーが構成されています。2台はデータのコピーをホストするために使用されます。残りの3台はデータのレプリケーションを調整するために使用されます。この例では、ReplicatedMergeTreeテーブルエンジンを使用して、両方のデータノード間でレプリケートされるデータベースとテーブルを作成します。
レベル: 基本
Terminology
Replica
データのコピーです。ClickHouseは常にデータのコピーを少なくとも1つ保持しており、レプリカの最小数は1です。この点は重要で、データの元のコピーをレプリカとしてカウントすることに慣れていないかもしれませんが、これはClickHouseのコードおよびドキュメントで使用されている用語です。データの2番目のレプリカを追加することで、フォールトトレランスが提供されます。
Shard
データのサブセットです。ClickHouseは常にデータのために少なくとも1つのシャードを持っており、データを複数のサーバーに分割しない場合、データは1つのシャードに保存されます。データを複数のサーバーにシャーディングすることで、単一のサーバーの容量を超えた場合に負荷を分散することができます。宛先サーバーはシャーディングキーによって決定され、分散テーブルを作成するときに定義されます。シャーディングキーはランダムでも、ハッシュ関数の出力としても設定できます。シャーディングに関する展開例では、rand()
をシャーディングキーとして使用し、異なるシャーディングキーをいつどのように選ぶかについてのさらなる情報を提供します。
Distributed coordination
ClickHouse Keeperは、データレプリケーションおよび分散DDLクエリの実行のための調整システムを提供します。ClickHouse KeeperはApache ZooKeeperと互換性があります。
環境
アーキテクチャ図

ノード | 説明 |
---|---|
clickhouse-01 | データ |
clickhouse-02 | データ |
clickhouse-keeper-01 | 分散コーディネーション |
clickhouse-keeper-02 | 分散コーディネーション |
clickhouse-keeper-03 | 分散コーディネーション |
本番環境では、ClickHouse Keeperに専用ホストを使用することを強く推奨します。テスト環境では、ClickHouse ServerとClickHouse Keeperを同じサーバーで組み合わせて実行することは許容されます。他の基本的な例であるスケーリングアウトでもこの方法が使用されています。この例では、KeeperとClickHouse Serverを分離することを推奨する方法を示します。Keeperサーバーは小型のものでも問題なく、一般的に各Keeperサーバーには4GBのRAMで十分です。
インストール
2台のサーバーclickhouse-01
とclickhouse-02
にClickHouseサーバーとクライアントをインストールします。アーカイブタイプのインストレーション手順に従って(.deb、.rpm、.tar.gzなど)。
clickhouse-keeper-01
、clickhouse-keeper-02
、clickhouse-keeper-03
の3台のサーバーにClickHouse Keeperをインストールします。アーカイブタイプのインストレーション手順に従って(.deb、.rpm、.tar.gzなど)。
設定ファイルの編集
ClickHouse Serverを設定する際に、設定ファイルを追加または編集する場合は、次のことに注意してください:
/etc/clickhouse-server/config.d/
ディレクトリにファイルを追加する/etc/clickhouse-server/users.d/
ディレクトリにファイルを追加する/etc/clickhouse-server/config.xml
ファイルはそのままにしておく/etc/clickhouse-server/users.xml
ファイルはそのままにしておく
clickhouse-01の設定
clickhouse-01には5つの設定ファイルがあります。これらのファイルを1つのファイルにまとめることもできますが、ドキュメントの明瞭さのために、別々に見る方が簡単かもしれません。設定ファイルを通して読み進めると、ほとんどの設定がclickhouse-01とclickhouse-02で同じであることがわかります。違いは強調されます。
ネットワークとログ設定
これらの値は、必要に応じてカスタマイズできます。この例の設定は以下の通りです:
- 1000Mで3回ロールオーバーするデバッグログ
clickhouse-client
で接続したときに表示される名前はcluster_1S_2R node 1
- ClickHouseはIPV4ネットワーク上でポート8123と9000でリッスンします。
マクロ設定
マクロshard
とreplica
は、分散DDLの複雑さを減らします。設定された値はDDLクエリ内で自動的に置き換えられ、DDLが簡素化されます。この設定のマクロは、各ノードのシャードとレプリカ番号を指定しています。
この1シャード2レプリカの例では、レプリカマクロはclickhouse-01でreplica_1
、clickhouse-02でreplica_2
です。シャードマクロは、シャードが1つしかないため、両方のclickhouse-01とclickhouse-02で1
です。
レプリケーションとシャーディングの設定
上から始めます:
- XMLのremote_serversセクションは、環境内の各クラスタを指定します。属性
replace=true
は、このファイル内で指定されたremote_serverの設定で、デフォルトのClickHouse設定のサンプルremote_serversを置き換えます。この属性がない場合、このファイルのremote_serverはデフォルトのサンプルリストに追加されます。 - この例では、
cluster_1S_2R
という名前のクラスタが1つあります。 - クラスタ
cluster_1S_2R
のために、値mysecretphrase
の秘密が作成されます。この秘密は、環境内のすべてのremote_serverで共有され、正しいサーバーが結合されることを確実にします。 - クラスタ
cluster_1S_2R
は1つのシャードと2つのレプリカを持ちます。この文書の初めにあるアーキテクチャ図を見て、以下のXML内のshard
定義と比較してください。シャード定義には2つのレプリカが含まれています。各レプリカのホストとポートが指定されています。1つのレプリカはclickhouse-01
に、もう1つのレプリカはclickhouse-02
に保存されます。 - シャードの内部レプリケーションはtrueに設定されています。各シャードには、構成ファイル内にinternal_replicationパラメータを定義できます。このパラメータがtrueに設定されている場合、書き込み操作は最初の健全なレプリカを選択し、データを書き込みます。
Keeperの使用設定
この設定ファイルuse-keeper.xml
は、ClickHouse Serverがレプリケーションと分散DDLの調整にClickHouse Keeperを使用するように設定しています。このファイルは、ClickHouse Serverがポート9181でノードclickhouse-keeper-01からclickhouse-keeper-03のKeeperを使用するべきであることを指定しています。このファイルは、clickhouse-01
とclickhouse-02
で同じです。
clickhouse-02の設定
設定はclickhouse-01とclickhouse-02で非常に似ているため、ここでは違いのみをポイントアウトします。
ネットワークとログ設定
このファイルは、display_name
以外はclickhouse-01とclickhouse-02で同じです。
マクロ設定
マクロ設定はclickhouse-01とclickhouse-02で異なります。このノードではreplica
が02
に設定されています。
レプリケーションとシャーディングの設定
このファイルは、clickhouse-01とclickhouse-02で同じです。
Keeperの使用設定
このファイルは、clickhouse-01とclickhouse-02で同じです。
clickhouse-keeper-01の設定
ClickHouse Keeperを設定する際に、設定ファイルを編集することで以下のことを行うべきです:
/etc/clickhouse-keeper/keeper_config.xml
をバックアップする/etc/clickhouse-keeper/keeper_config.xml
ファイルを編集する
ClickHouse Keeperは、データのレプリケーションと分散DDLクエリの実行のための調整システムを提供します。ClickHouse KeeperはApache ZooKeeperと互換性があります。この設定により、ポート9181でClickHouse Keeperが有効になります。強調された行は、このインスタンスのKeeperのserver_id
が1であることを指定します。これは、3台のサーバー間でenable-keeper.xml
ファイルでの唯一の違いです。clickhouse-keeper-02
にはserver_id
が2
に設定され、clickhouse-keeper-03
にはserver_id
が3
に設定されています。Raft構成セクションは、3台のサーバーで同じであり、server_id
とRaft構成内のserver
インスタンスとの関係を示すために強調表示されています。
何らかの理由でKeeperノードが置き換えられたり再構築された場合は、既存のserver_id
を再利用しないでください。たとえば、server_id
が2
のKeeperノードを再構築する場合は、4
以上のserver_id
を与えてください。
clickhouse-keeper-02の設定
clickhouse-keeper-01
とclickhouse-keeper-02
の違いは1行だけです。このノードではserver_id
が2
に設定されています。
clickhouse-keeper-03の設定
clickhouse-keeper-01
とclickhouse-keeper-03
の違いは1行だけです。このノードではserver_id
が3
に設定されています。
テスト
ReplicatedMergeTreeとClickHouse Keeperを経験するために、以下のコマンドを実行すると、次のことが行われます:
- 上記の構成されたクラスタにデータベースを作成します
- ReplicatedMergeTreeテーブルエンジンを使用してデータベースにテーブルを作成します
- 1つのノードにデータを挿入し、別のノードでクエリを実行します
- 1つのClickHouseサーバーノードを停止します
- 実行中のノードにさらにデータを挿入します
- 停止していたノードを再起動します
- 再起動したノードでクエリを実行して、データが利用可能であることを確認します
ClickHouse Keeperが実行中であることを確認する
mntr
コマンドは、ClickHouse Keeperが実行中であることを確認し、3つのKeeperノードの関係に関するステート情報を取得するために使用されます。この例で使用される設定では、3つのノードが協力して作業します。ノードはリーダーを選出し、残りのノードはフォロワーになります。mntr
コマンドは、パフォーマンスに関連する情報と、特定のノードがフォロワーかリーダーであるかを提供します。
mntr
コマンドをKeeperに送信するためにnetcat
をインストールする必要があるかもしれません。ダウンロード情報についてはnmap.orgページを参照してください。
ClickHouseクラスタの機能を確認する
1つのシェルでclickhouse client
を使用してノードclickhouse-01
に接続し、別のシェルでノードclickhouse-02
に接続します。
- 上記の構成されたクラスタにデータベースを作成します
- ReplicatedMergeTreeテーブルエンジンを使用してデータベースにテーブルを作成します
- 1つのノードにデータを挿入し、別のノードでクエリを実行します
- ノード
clickhouse-02
でテーブルをクエリします
- 他のノードにデータを挿入し、ノード
clickhouse-01
でクエリします
-
1つのClickHouseサーバーノードを停止します ノードを開始するために使用したのと同様のオペレーティングシステムコマンドを実行して、1つのClickHouseサーバーノードを停止します。
systemctl start
を使用してノードを開始した場合は、systemctl stop
を使用して停止します。 -
実行中のノードにさらにデータを挿入します
データを選択します:
- 停止していたノードを再起動し、そこからも選択します