Clickhouse Docker クラスターの展開と構成を例を使って説明します

Clickhouse Docker クラスターの展開と構成を例を使って説明します

前面に書かれた

ビッグデータに関する経験を更新する時間を見つけました。最初にアーキテクチャを選択するときに、データ ウェアハウスとして Hadoop を使用することを検討しました。ただし、Hadoop には多数のサーバーが必要であり、少なくとも 6 台以上のサーバーのクラスターが必要であるため、Clickhouse (以下、CH と呼びます) を選択しました。 CH がクラスター化されている場合は、3 台のサーバーから始めることができます。もちろん、必須ではありません。Zookeeper がクラスター化されているかどうかによって異なります。次に、CH の方がパフォーマンスが強力です。ボリュームがそれほど大きくないシナリオでは、1 台のマシンでさまざまな OLAP シナリオを処理できます。

では本題に入りましょう。関連環境:

IPサーバー名オペレーティング·システム仕える述べる
172.192.13.10サーバー01ウブントゥ 20.04 2つのClickhouseインスタンス、Zookeeper

CH インスタンス 1 ポート: tcp 9000、http 8123、同期ポート 9009、MySQL 9004、タイプ: プライマリ シャード 1

CH インスタンス 2 ポート: tcp 9000、http 8124、同期ポート 9010、MySQL 9005、タイプ: server02 のレプリカ

172.192.13.11サーバー02ウブントゥ 20.04 2つのClickhouseインスタンス、Zookeeper

CH インスタンス 3 ポート: tcp 9000、http 8123、同期ポート 9009、MySQL 9004、タイプ: プライマリ シャード 2

CH インスタンス 4 ポート: tcp 9000、http 8124、同期ポート 9010、MySQL 9005、タイプ: server03 のレプリカ

172.192.13.12サーバー03ウブントゥ 20.04 2つのClickhouseインスタンス、Zookeeper

CH インスタンス 5 ポート: tcp 9000、http 8123、同期ポート 9009、MySQL 9004、タイプ: プライマリ シャード 3

CH インスタンス 6 ポート: tcp 9000、http 8124、同期ポート 9010、MySQL 9005、タイプ: server01 のレプリカ

各サービスに 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 を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • SpringbootはClickhouseリアルタイムビッグデータ分析エンジンを使用する(使用方法)
  • Apache Superset を使用して ClickHouse データを視覚化する 2 つの方法
  • MybatisをClickHouseに接続する方法
  • SpringBoot2 統合 ClickHouse データベースのケース分析
  • ビッグデータ分野におけるデータ分析データベースClickHouseの応用実践

<<:  js を使用してシンプルなスイッチ ライト コードを実装する

>>:  サイト全体を灰色にするCSSコードのまとめ

推薦する

vue+element カスタムクエリコンポーネント

この記事では主に Vue プロジェクトを紹介します。要素の導入を前提として、コンポーネントを 2 回...

JavaScript排他的思考の具体的な実装

前回のブログで、Xiao Xiong は関連する要素の操作方法を更新しましたが、同じ要素のグループが...

JavaScript で配列の最大値と最小値を実装する 6 つの方法

配列[1,8,5,4,3,9,2]が与えられた場合、配列の最大値9と最小値1を取得するアルゴリズムを...

nginx プロキシ サーバーで双方向証明書検証を構成する方法

証明書チェーンを生成するスクリプトを使用して、ルート証明書、中間証明書、および 3 つのクライアント...

VMware での Ubuntu Docker のインストール (コンテナ構築)

1. マインドマップ 2. コンテナの構築方法2.1 実験環境の準備(1)環境選択管理ツール: D...

vuex名前空間の使用

目次Vuex は単一の状態ツリーを使用するため、すべてのアプリケーション状態が比較的大きなオブジェク...

Vue3 Vue CLI マルチ環境設定

目次1. はじめに2. 切り替え1. 開発および本番環境の設定ファイルを追加する2. 複数の環境をサ...

MySQLサーバのスレッド数を表示する方法の詳細な説明

この記事では、例を使用して、MySQL サーバーのスレッド数を表示する方法について説明します。ご参考...

MySQL データベースの Binlog 使用法の概要 (必読)

MySQL データベースにとって binlog バイナリ ログがどれほど重要であるかについては詳し...

ReactRouterの実装

ReactRouterの実装ReactRouterはReactのコアコンポーネントです。主にReac...

element-plus でオンデマンドインポートとグローバルインポートを実装する方法

目次オンデマンドインポート:グローバルインポートオンデマンドインポート:プラグインをインストールする...

Centos7 で Java8 と MySQL をインストールしてデプロイする

通常、Java の学習とプロジェクトのデプロイはローカルで行われますが、実稼働環境は Linux 環...

Docker で Redis クラスターを素早く構築する方法の例

Redis クラスターとはRedis クラスターは、R​​edis が提供する分散データベース ソリ...

Dockerfile ビルド中に発生する「/bin/sh: pip: コマンドが見つかりません」という問題の解決方法

記述した Dockerfile の内容は次のとおりです。 Python:3.6.8 から pip i...

Windows 環境に mysql-8.0.11-winx64 をインストールする際に発生する問題を解決する

MySQL インストール パッケージをダウンロードします。mysql-8.0.11-winx64 を...