前面に書かれたビッグデータに関する経験を更新する時間を見つけました。最初にアーキテクチャを選択するときに、データ ウェアハウスとして Hadoop を使用することを検討しました。ただし、Hadoop には多数のサーバーが必要であり、少なくとも 6 台以上のサーバーのクラスターが必要であるため、Clickhouse (以下、CH と呼びます) を選択しました。 CH がクラスター化されている場合は、3 台のサーバーから始めることができます。もちろん、必須ではありません。Zookeeper がクラスター化されているかどうかによって異なります。次に、CH の方がパフォーマンスが強力です。ボリュームがそれほど大きくないシナリオでは、1 台のマシンでさまざまな OLAP シナリオを処理できます。 では本題に入りましょう。関連環境:
各サービスに docker をインストールします。図に示すように、docker には ch-main、ch-sub、zookeeper_node の 3 つのサービスがインストールされています。 注意深い観察者なら、ポート間にマッピング関係がないことに気付くでしょう。ここでは Docker ホスト ネットワーク モードが使用されています。このモードはシンプルでパフォーマンスが高く、コンテナ間またはサーバー間の多くの通信問題を回避できます。これは長い間行われてきました。 環境の展開1. サーバー環境の構成 各サーバーで実行します: vim /etc/hosts、hosts を開いて次の構成を追加します。 172.192.13.10 サーバー01 172.192.13.11 サーバー02 172.192.13.12 サーバー03 2. Dockerをインストールする シンプルすぎる、ちょっと… 3. クリックハウスと動物園の画像をプルする シンプルすぎる、ちょっと… Zookeeper クラスタの展開各サーバー上の保存場所 (ここでは /usr/soft/zookeeper/) に、Zookeeper 構成情報を保存する新しいフォルダーを作成し、各サーバーで次の起動コマンドを順番に実行します。 Server01 は次を実行します: docker run -d -p 2181:2181 -p 2888:2888 -p 3888:3888 --name zookeeper_node --restart always \ -v /usr/soft/zookeeper/data:/data \ -v /usr/soft/zookeeper/datalog:/datalog \ -v /usr/soft/zookeeper/logs:/logs \ -v /usr/soft/zookeeper/conf:/conf \ --ネットワークホスト\ -e ZOO_MY_ID=1 飼育係 Server02 は次を実行します: docker run -d -p 2181:2181 -p 2888:2888 -p 3888:3888 --name zookeeper_node --restart always \ -v /usr/soft/zookeeper/data:/data \ -v /usr/soft/zookeeper/datalog:/datalog \ -v /usr/soft/zookeeper/logs:/logs \ -v /usr/soft/zookeeper/conf:/conf \ --ネットワークホスト\ -e ZOO_MY_ID=2 飼育係 Server03 は次を実行します: docker run -d -p 2181:2181 -p 2888:2888 -p 3888:3888 --name zookeeper_node --restart always \ -v /usr/soft/zookeeper/data:/data \ -v /usr/soft/zookeeper/datalog:/datalog \ -v /usr/soft/zookeeper/logs:/logs \ -v /usr/soft/zookeeper/conf:/conf \ --ネットワークホスト\ -e ZOO_MY_ID=3 飼育係 唯一の違いは -e ZOO_MY_ID=* です。 次に、各サービスの /usr/soft/zookeeper/conf パスを開き、zoo.cfg 構成ファイルを見つけて、次のように変更します。 データディレクトリ=/データ dataLogDir=/データログ ティックタイム=2000 初期化制限=5 同期制限=2 クライアントポート=2181 自動パージ.snapRetainCount=3 自動パージ.パージ間隔=0 最大クライアント接続数=60 サーバー1=172.192.13.10:2888:3888 サーバー2=172.192.13.11:2888:3888 サーバー3=172.192.13.12:2888:3888 次に、サーバーの 1 つに入り、zk と入力して、構成が成功したかどうかを確認します。 docker exec -it zookeeper_node /bin/bash ./bin/zkServer.sh ステータス Clickhouse クラスターの展開1. 一時的なミラーコピー構成ホスト上の構成、データ、ログ、その他の情報を保存する一時コンテナを実行します。 docker run --rm -d --name=temp-ch yandex/clickhouse-server コンテナ内のファイルをコピーします。 docker cp temp-ch:/etc/clickhouse-server/ /etc/ //https://www.cnblogs.com/EminemJK/p/15138536.html 2. config.xml構成を変更する// IPV6 とも互換性があります。<listen_host>0.0.0.0</listen_host> //タイムゾーンを設定します <timezone>Asia/Shanghai</timezone> //元のノードのテスト情報を削除します <remote_servers> <remote_servers incl="clickhouse_remote_servers" /> // 新しく追加されました。上の remote_servers ノードと同じレベルです <include_from>/etc/clickhouse-server/metrika.xml</include_from> // 新しく追加されました。上の remote_servers ノードと同じレベルです <zookeeper incl="zookeeper-servers" optimal="true" /> // 新しく追加されました。上の remote_servers ノードと同じレベルです <macros incl="macros" optimal="true" /> 他の listen_host については、エントリを 1 つだけ残し、他のエントリをコメント アウトします。 3. 別のフォルダにコピーするcp -rf /etc/clickhouse-server/ /usr/soft/clickhouse-server/main cp -rf /etc/clickhouse-server/ /usr/soft/clickhouse-server/sub main はプライマリ シャードであり、sub はレプリカです。 4. 他のサーバーに配布する#設定をserver02にコピーします scp /usr/soft/clickhouse-server/main/ server02:/usr/soft/clickhouse-server/main/ scp /usr/soft/clickhouse-server/sub/ server02:/usr/soft/clickhouse-server/sub/ #設定をserver03にコピーします scp /usr/soft/clickhouse-server/main/ server03:/usr/soft/clickhouse-server/main/ scp /usr/soft/clickhouse-server/sub/ server03:/usr/soft/clickhouse-server/sub/ SCPは本当に良いです。 その後、一時コンテナを削除します: docker rm -f temp-ch クラスターの構成ここには3台のサーバーがあり、各サーバーには2つのCHインスタンスがあり、リングで相互にバックアップすることで高可用性を実現しています。リソースが十分にある場合は、レプリカのSubインスタンスを完全に独立させ、構成を変更することもできます。これはClickhouseのもう1つの利点であり、水平拡張が非常に便利です。 1. 設定を変更するserver1 サーバーに入り、/usr/soft/clickhouse-server/sub/conf の config.xml ファイルを変更し、次の内容を変更します。 オリジナル: <http_ポート>8123</http_ポート> <tcp_port>9000</tcp_port> <mysql_port>9004</mysql_port> <インターサーバーhttp_ポート>9009</インターサーバーhttp_ポート> 変更後: <http_ポート>8124</http_ポート> <tcp_port>9001</tcp_port> <mysql_port>9005</mysql_port> <インターサーバー_http_ポート>9010</インターサーバー_http_ポート> 変更の目的は、メインシャードの構成と区別することです。ポートは 2 つのプログラムに同時に適用できません。 Server02 と server03 は、この方法で変更されるか、scp コマンドを使用して配布されます。 2. クラスター構成ファイル metrika.xml を追加するserver01、メインプライマリシャード構成: /usr/soft/clickhouse-server/main/conf フォルダに移動し、metrika.xml ファイル (ファイル エンコーディング: utf-8) を追加します。 <ヤンデックス> <!-- CH クラスター構成、すべてのサーバーは同じです--> <クリックハウスリモートサーバー> <クラスター_3s_1r> <!-- データ シャード 1 --> <破片> <内部レプリケーション> 真</内部レプリケーション> <レプリカ> <ホスト>server01</ホスト> <ポート>9000</ポート> <user>デフォルト</user> <パスワード></パスワード> </レプリカ> <レプリカ> <ホスト>server03</ホスト> <ポート>9001</ポート> <user>デフォルト</user> <パスワード></パスワード> </レプリカ> </シャード> <!-- データ シャード 2 --> <破片> <内部レプリケーション> 真</内部レプリケーション> <レプリカ> <ホスト>server02</ホスト> <ポート>9000</ポート> <user>デフォルト</user> <パスワード></パスワード> </レプリカ> <レプリカ> <ホスト>server01</ホスト> <ポート>9001</ポート> <user>デフォルト</user> <パスワード></パスワード> </レプリカ> </シャード> <!-- データ シャード 3 --> <破片> <内部レプリケーション> 真</内部レプリケーション> <レプリカ> <ホスト>server03</ホスト> <ポート>9000</ポート> <user>デフォルト</user> <パスワード></パスワード> </レプリカ> <レプリカ> <ホスト>server02</ホスト> <ポート>9001</ポート> <user>デフォルト</user> <パスワード></パスワード> </レプリカ> </シャード> </cluster_3s_1r> </clickhouse_remote_servers> <!-- すべての zookeeper_servers インスタンスは同じ構成です --> <動物園飼育員サーバー> <ノードインデックス="1"> <ホスト>172.16.13.10</ホスト> <ポート>2181</ポート> </ノード> <ノードインデックス="2"> <ホスト>172.16.13.11</ホスト> <ポート>2181</ポート> </ノード> <ノードインデックス="3"> <ホスト>172.16.13.12</ホスト> <ポート>2181</ポート> </ノード> </動物園管理サーバー> <!-- marcos の各インスタンスは異なる構成を持ちます --> <マクロ> <レイヤー>01</レイヤー> <シャード>01</シャード> <レプリカ>クラスター01-01-1</レプリカ> </マクロ> <ネットワーク> <ip>::/0</ip> </ネットワーク> <!-- データ圧縮アルゴリズム--> <クリックハウス圧縮> <ケース> <最小部分サイズ>10000000000</最小部分サイズ> <最小部分サイズ比率>0.01</最小部分サイズ比率> <メソッド>lz4</メソッド> </ケース> </clickhouse_compression> </ヤンデックス> <macros> ノードはサーバーおよびインスタンスごとに異なり、他のノードの構成は同じにすることができます。以下は、<macros> ノードの構成の違いのみを示します。 Server01、サブレプリカ構成: <マクロ> <レイヤー>01</レイヤー> <shard>02</shard> <レプリカ>クラスター01-02-2</レプリカ> </マクロ> Server02、メインプライマリシャード構成: <マクロ> <レイヤー>01</レイヤー> <shard>02</shard> <レプリカ>クラスター01-02-1</レプリカ> </マクロ> Server02、サブレプリカ構成: <マクロ> <レイヤー>01</レイヤー> <shard>03</shard> <レプリカ>クラスター01-03-2</レプリカ> </マクロ> Server03、メインプライマリシャード構成: <マクロ> <レイヤー>01</レイヤー> <shard>03</shard> <レプリカ>クラスター01-03-1</レプリカ> </マクロ> Server03、サブレプリカ構成: <マクロ> <レイヤー>01</レイヤー> <shard>02</shard> <レプリカ>クラスター01-01-2</レプリカ> </マクロ> この時点で、すべての設定が完了しています。パスワードなどのその他の設定は、必要に応じて追加できます。 クラスターの運用とテスト各サーバーでインスタンスを順番に実行します。Zookeeper は以前に実行されています。そうでない場合は、まず zk クラスターを実行する必要があります。 メインインスタンスを実行します。 docker run -d --name=ch-main -p 8123:8123 -p 9000:9000 -p 9009:9009 --ulimit nofile=262144:262144 \ -v /usr/soft/clickhouse-server/main/data:/var/lib/clickhouse:rw \ -v /usr/soft/clickhouse-server/main/conf:/etc/clickhouse-server:rw \ -v /usr/soft/clickhouse-server/main/log:/var/log/clickhouse-server:rw \ --add-host server01:172.192.13.10 \ --add-host server02:172.192.13.11 \ --add-host server03:172.192.13.12 \ --ホスト名 server01 \ --ネットワークホスト\ --restart=常に\ yandex/クリックハウスサーバー サブインスタンスを実行します。 docker run -d --name=ch-sub -p 8124:8124 -p 9001:9001 -p 9010:9010 --ulimit nofile=262144:262144 \ -v /usr/soft/clickhouse-server/sub/data:/var/lib/clickhouse:rw \ -v /usr/soft/clickhouse-server/sub/conf:/etc/clickhouse-server:rw \ -v /usr/soft/clickhouse-server/sub/log:/var/log/clickhouse-server:rw \ --add-host server01:172.192.13.10 \ --add-host server02:172.192.13.11 \ --add-host server03:172.192.13.12 \ --ホスト名 server01 \ --ネットワークホスト\ --restart=常に\ yandex/クリックハウスサーバー 各サーバーでコマンドを実行する場合、唯一異なるパラメータはホスト名です。これは、以前にホスト名を設定してサーバーを指定しているためです。そうでない場合、クラスターをクエリするために select * from system.clusters を実行すると、is_local 列がすべて 0 になり、ローカル サービスが見つからないことが示されます。これは注意が必要なことです。各サーバー インスタンスが起動したら、正規の DataGrip を使用して開きます。 任意のインスタンスに新しいクエリを作成します。 クラスターcluster_3s_1rにテーブルT_UserTestを作成します。 ( ts 日時、 uid 文字列、 ビジネス文字列 ) エンジン = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/T_UserTest', '{replica}') PARTITION BY toYYYYMMDD(ts) 順序 設定 index_granularity = 8192; cluster_3s_1r は、先ほど設定したクラスターの名前です。これらは 1 対 1 で対応している必要があります。/clickhouse/tables/ は固定のプレフィックスです。関連する構文については、公式ドキュメントを参照してください。 各インスタンスを更新すると、すべてのインスタンスにこの T_UserTest テーブルがあることがわかります。Zookeeper がセットアップされているため、分散 DDL を簡単に実装できます。 新しい分散テーブルの作成を続行します。 クラスター cluster_3s_1r にテーブル T_UserTest_All を作成します。 T_UserTest ENGINE = Distributed(cluster_3s_1r, default, T_UserTest, rand()) 各プライマリ シャードは関連情報を個別に挿入します。 --server01 を T_UserTest の値に挿入します ('2021-08-16 17:00:00',1,1) --サーバー02 T_UserTest の値に挿入 ('2021-08-16 17:00:00',2,1) --サーバー03 T_UserTest の値に挿入 ('2021-08-16 17:00:00',3,1) 次に、分散テーブルをクエリします。select * from T_UserTest_All、 対応するレプリカ テーブルをクエリしたり、いずれかのサーバーの Docker インスタンスをシャットダウンしたりしても、クエリには影響しません。これは時間的制約のためテストされていません。 Clickhouse Docker クラスターの構成と展開に関するこの記事はこれで終わりです。Clickhouse Docker クラスターの関連コンテンツの詳細については、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: js を使用してシンプルなスイッチ ライト コードを実装する
この記事では主に Vue プロジェクトを紹介します。要素の導入を前提として、コンポーネントを 2 回...
前回のブログで、Xiao Xiong は関連する要素の操作方法を更新しましたが、同じ要素のグループが...
配列[1,8,5,4,3,9,2]が与えられた場合、配列の最大値9と最小値1を取得するアルゴリズムを...
証明書チェーンを生成するスクリプトを使用して、ルート証明書、中間証明書、および 3 つのクライアント...
1. マインドマップ 2. コンテナの構築方法2.1 実験環境の準備(1)環境選択管理ツール: D...
目次Vuex は単一の状態ツリーを使用するため、すべてのアプリケーション状態が比較的大きなオブジェク...
目次1. はじめに2. 切り替え1. 開発および本番環境の設定ファイルを追加する2. 複数の環境をサ...
この記事では、例を使用して、MySQL サーバーのスレッド数を表示する方法について説明します。ご参考...
MySQL データベースにとって binlog バイナリ ログがどれほど重要であるかについては詳し...
ReactRouterの実装ReactRouterはReactのコアコンポーネントです。主にReac...
目次オンデマンドインポート:グローバルインポートオンデマンドインポート:プラグインをインストールする...
通常、Java の学習とプロジェクトのデプロイはローカルで行われますが、実稼働環境は Linux 環...
Redis クラスターとはRedis クラスターは、Redis が提供する分散データベース ソリ...
記述した Dockerfile の内容は次のとおりです。 Python:3.6.8 から pip i...
MySQL インストール パッケージをダウンロードします。mysql-8.0.11-winx64 を...