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

スケーリングアウト

説明

この例のアーキテクチャは、拡張性を提供するために設計されています。 それは3つのノードを含みます:2つのClickHouseと調整(ClickHouse Keeper)サーバー、および第3のサーバーは、クオーラムを三つにするためだけのClickHouse Keeperを持っています。この例では、データベース、テーブル、および両方のノードのデータをクエリできる分散テーブルを作成します。

レベル: 基本

Terminology

Replica

データのコピーです。ClickHouseは常にデータのコピーを少なくとも1つ保持しており、レプリカの最小数は1です。この点は重要で、データの元のコピーをレプリカとしてカウントすることに慣れていないかもしれませんが、これはClickHouseのコードおよびドキュメントで使用されている用語です。データの2番目のレプリカを追加することで、フォールトトレランスが提供されます。

Shard

データのサブセットです。ClickHouseは常にデータのために少なくとも1つのシャードを持っており、データを複数のサーバーに分割しない場合、データは1つのシャードに保存されます。データを複数のサーバーにシャーディングすることで、単一のサーバーの容量を超えた場合に負荷を分散することができます。宛先サーバーはシャーディングキーによって決定され、分散テーブルを作成するときに定義されます。シャーディングキーはランダムでも、ハッシュ関数の出力としても設定できます。シャーディングに関する展開例では、rand()をシャーディングキーとして使用し、異なるシャーディングキーをいつどのように選ぶかについてのさらなる情報を提供します。

Distributed coordination

ClickHouse Keeperは、データレプリケーションおよび分散DDLクエリの実行のための調整システムを提供します。ClickHouse KeeperはApache ZooKeeperと互換性があります。

環境

アーキテクチャ図

2つのシャードと1つのレプリカのためのアーキテクチャ図
ノード説明
chnode1データ + ClickHouse Keeper
chnode2データ + ClickHouse Keeper
chnode3ClickHouse Keeperのクオーラム用
注記

本番環境では、ClickHouse Keeperが専用ホストで実行されることを強くお勧めします。この基本構成では、Keeper機能がClickHouse Serverプロセス内で実行されます。 ClickHouse Keeperをスタンドアロンでデプロイするための手順は、インストールドキュメントにあります。

インストール

アーカイブタイプに関する手順に従って、3つのサーバーにClickhouseをインストールします(.deb、.rpm、.tar.gzなど)。この例では、すべての3台のマシンでClickHouse ServerおよびClientのインストール手順に従います。

設定ファイルの編集

best practices

ClickHouse Serverを設定する際に、設定ファイルを追加または編集する場合は、次のことに注意してください:

  • /etc/clickhouse-server/config.d/ ディレクトリにファイルを追加する
  • /etc/clickhouse-server/users.d/ ディレクトリにファイルを追加する
  • /etc/clickhouse-server/config.xml ファイルはそのままにしておく
  • /etc/clickhouse-server/users.xml ファイルはそのままにしておく

chnode1の設定

chnode1には5つの設定ファイルがあります。これらのファイルを1つのファイルに統合することもできますが、ドキュメントの明確さのために、個別に見る方が簡単かもしれません。設定ファイルを読み進めると、chnode1chnode2のほとんどの設定が同じであることがわかります; 違いは強調されます。

ネットワークおよびロギング設定

これらの値は必要に応じてカスタマイズできます。この例の設定は、1000Mで3回ロールオーバーするデバッグログを提供します。ClickHouseはポート8123と9000でIPv4ネットワークをリッスンし、ポート9009をサーバー間通信に使用します。

ClickHouse Keeper の設定

ClickHouse Keeperはデータレプリケーションと分散DDLクエリ実行の調整システムを提供します。 ClickHouse KeeperはApache ZooKeeperと互換性があります。この設定は、ポート9181でClickHouse Keeperを有効にします。強調された行は、このKeeperインスタンスのserver_idが1であることを示しています。これは、3台のサーバーで唯一の違いです。 chnode2にはserver_idが2に設定され、chnode3にはserver_idが3に設定されます。 raft設定セクションはすべての3台のサーバーで同じであり、server_idとraft設定内のserverインスタンスの関係を示すために強調されています。

注記

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

マクロの設定

マクロshardreplicaは分散DDLの複雑さを軽減します。設定された値は、DDLクエリ内で自動的に置き換えられ、DDLを簡単にします。この設定のマクロは、各ノードのシャードとレプリカ番号を指定します。 この2シャード1レプリカの例では、レプリカマクロはreplica_1で、両方のchnode1chnode2に設定されています。シャードマクロはchnode11で、chnode22です。

レプリケーションおよびシャーディングの設定

上から始めましょう:

  • XMLのremote_serversセクションは、環境内の各クラスタを指定します。属性replace=trueは、デフォルトのClickHouse構成のサンプルremote_serversをこのファイルで指定されたremote_servers構成に置き換えます。この属性がないと、このファイル内のリモートサーバーはデフォルトのサンプルリストに追加されます。
  • この例では、cluster_2S_1Rという名前のクラスタが1つあります。
  • クラスタcluster_2S_1Rには、値mysecretphraseのための秘密が作成されます。この秘密は、正しいサーバーが一緒に参加できるように、環境内のすべてのリモートサーバーで共有されます。
  • クラスタcluster_2S_1Rには2つのシャードがあり、それぞれのシャードには1つのレプリカがあります。このドキュメントの冒頭にあるアーキテクチャ図を見て、それを以下のXMLの2つのshard定義と比較してください。各シャードの定義には1つのレプリカがあります。そのレプリカはその特定のシャードのためのものです。そのレプリカのホストとポートが指定されています。設定内の最初のシャードのレプリカはchnode1に保存され、設定内の2番目のシャードのレプリカはchnode2に保存されます。
  • シャードの内部レプリケーションはtrueに設定されています。各シャードには、設定ファイル内でinternal_replicationパラメータを定義できます。このパラメータがtrueに設定されている場合、書き込み操作は最初の正常なレプリカを選択し、データを書き込みます。

Keeperの使用の設定

上記のいくつかのファイルでClickHouse Keeperが設定されていました。この設定ファイルuse-keeper.xmlは、ClickHouse Serverがレプリケーションと分散DDLの調整にClickHouse Keeperを使用するように設定しています。このファイルでは、ClickHouse Serverがノードchnode1からchnode3でポート9181のKeeperを使用する必要があることを指定し、このファイルはchnode1chnode2で同じです。

chnode2の設定

chnode1chnode2の設定は非常に似ているため、ここでは違いのみを指摘します。

ネットワークおよびロギング設定

ClickHouse Keeper の設定

このファイルにはchnode1chnode2の間の2つの違いの1つがあります。Keeper設定の中で、server_idが2に設定されています。

マクロの設定

マクロの設定にはchnode1chnode2の間の違いの1つがあります。shardがこのノードで2に設定されています。

レプリケーションおよびシャーディングの設定

Keeperの使用の設定

chnode3の設定

chnode3はデータを保存せず、ClickHouse Keeperがクオーラムの3番目のノードを提供するためだけに使われるため、chnode3はネットワークおよびロギングを設定するための設定ファイルが2つだけあります。

ネットワークおよびロギング設定

ClickHouse Keeper の設定

テスト

  1. chnode1に接続し、上記で設定されたクラスタcluster_2S_1Rが存在することを確認します。
  1. クラスタにデータベースを作成します。
  1. クラスタ上にMergeTreeテーブルエンジンを持つテーブルを作成します。
注記

テーブルエンジンのパラメータは自動的にマクロに基づいて定義されるため、指定する必要はありません。

  1. chnode1に接続し、行を挿入します。
  1. chnode2に接続し、行を挿入します。
  1. 任意のノード、chnode1またはchnode2に接続すると、そのノードのテーブルに挿入された行のみが表示されます。 たとえば、chnode2
  1. 両方のノードの両方のシャードをクエリするための分散テーブルを作成します。 (この例では、rand()関数がシャーディングキーとして設定されているため、各挿入をランダムに分散させます)
  1. chnode1またはchnode2のいずれかに接続し、分散テーブルをクエリして両方の行を確認します。

詳細情報