メインコンテンツまでスキップ
メインコンテンツまでスキップ

フォールトトレランスのためのレプリケーション

説明

このアーキテクチャでは、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と互換性があります。

環境

アーキテクチャ図

ReplicatedMergeTreeを使用した1シャードと2レプリカのアーキテクチャ図
ノード説明
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-01clickhouse-02にClickHouseサーバーとクライアントをインストールします。アーカイブタイプのインストレーション手順に従って(.deb、.rpm、.tar.gzなど)。

clickhouse-keeper-01clickhouse-keeper-02clickhouse-keeper-03の3台のサーバーにClickHouse Keeperをインストールします。アーカイブタイプのインストレーション手順に従って(.deb、.rpm、.tar.gzなど)。

設定ファイルの編集

best practices

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でリッスンします。

マクロ設定

マクロshardreplicaは、分散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-01clickhouse-02で同じです。

clickhouse-02の設定

設定はclickhouse-01とclickhouse-02で非常に似ているため、ここでは違いのみをポイントアウトします。

ネットワークとログ設定

このファイルは、display_name以外はclickhouse-01とclickhouse-02で同じです。

マクロ設定

マクロ設定はclickhouse-01とclickhouse-02で異なります。このノードではreplica02に設定されています。

レプリケーションとシャーディングの設定

このファイルは、clickhouse-01とclickhouse-02で同じです。

Keeperの使用設定

このファイルは、clickhouse-01とclickhouse-02で同じです。

clickhouse-keeper-01の設定

best practices

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_id2に設定され、clickhouse-keeper-03にはserver_id3に設定されています。Raft構成セクションは、3台のサーバーで同じであり、server_idとRaft構成内のserverインスタンスとの関係を示すために強調表示されています。

注記

何らかの理由でKeeperノードが置き換えられたり再構築された場合は、既存のserver_idを再利用しないでください。たとえば、server_id2のKeeperノードを再構築する場合は、4以上のserver_idを与えてください。

clickhouse-keeper-02の設定

clickhouse-keeper-01clickhouse-keeper-02の違いは1行だけです。このノードではserver_id2に設定されています。

clickhouse-keeper-03の設定

clickhouse-keeper-01clickhouse-keeper-03の違いは1行だけです。このノードではserver_id3に設定されています。

テスト

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に接続します。

  1. 上記の構成されたクラスタにデータベースを作成します
  1. ReplicatedMergeTreeテーブルエンジンを使用してデータベースにテーブルを作成します
  1. 1つのノードにデータを挿入し、別のノードでクエリを実行します
  1. ノードclickhouse-02でテーブルをクエリします
  1. 他のノードにデータを挿入し、ノードclickhouse-01でクエリします
  1. 1つのClickHouseサーバーノードを停止します ノードを開始するために使用したのと同様のオペレーティングシステムコマンドを実行して、1つのClickHouseサーバーノードを停止します。systemctl startを使用してノードを開始した場合は、systemctl stopを使用して停止します。

  2. 実行中のノードにさらにデータを挿入します

データを選択します:

  1. 停止していたノードを再起動し、そこからも選択します