zk+kafka+storm クラスターの docker-compose デプロイメントの実装

zk+kafka+storm クラスターの docker-compose デプロイメントの実装

クラスターの展開の概要

172.22.12.20 172.22.12.21 172.22.12.22 172.22.12.23 172.22.12.24
動物園1:2181動物園2:2182動物園3:2183 zkui:9090 (管理者/マネージャー)
カフカ1:9092カフカ2:9092カフカ3:9092カフドロップ:9000
インフルクスdb:8086 grafana:3000 (管理者/chanhu)
ストームニンバス1ストームニンバス2ストームニンバス3ポーター:9002(admin/chanhu@123)
ストームスーパーバイザー1ストームスーパーバイザー2ストームスーパーバイザー3
ストーム-UI:8080

Dockerのインストール

yum アップデート -y     
yum インストール -y yum-utils デバイスマッパー永続データ lvm2    
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo    
yum インストール docker-ce docker-ce-cli containerd.io   
systemctl ドッカーを起動する

docker-compose のインストール

yum で epel-release をインストールします   
python-pip をインストールします   
pip インストール --upgrade pip   
pip で docker-compose をインストールします

各ホストマシンのhostsファイルを変更する

vim /etc/hosts   
172.22.12.20 データクラウド0   
172.22.12.21 データクラウド1   
172.22.12.22 データクラウド2   
172.22.12.23 データクラウド3   
172.22.12.24 データクラウド4

飼育員クラスター

マシン20、21、22にzkクラスターをデプロイし、それぞれdocker-composeファイルを書き込みます。

クラスター内の 1 台のマシンのみが正常に動作している場合、クラスターは失敗します。

そのうちの 1 つを例に挙げます。

動物園:   
    画像: 動物園飼育係:3.4.14   
    再起動: 常に   
    ホスト名: zoo1   
    コンテナ名: zoo1   
    ポート:   
     - 2181:2181   
     -2888:2888   
     -3888:3888   
    ボリューム:   
     - 「./zoo/data:/data」   
     - 「./zoo/datalog:/datalog」   
    環境:   
     動物園ID: 1   
     ZOO_SERVERS: サーバー.1=0.0.0.0:2888:3888 サーバー.2=172.22.12.21:2888:3888 サーバー.3=172.22.12.22:2888:3888

「./zoo/data:/data」はデータディレクトリのマウントであり、設定する必要があります

環境変数の設定、ZOO_MY_ID はそれぞれ 1、2、3、ZOO_SERVERS はクラスタ アドレスで構成され、現在のマシンは 0.0.0.0 です。

カクファクラスター

マシン 20、21、22 に kafka クラスターをデプロイし、それぞれに docker-compose ファイルを作成します (zk docker-compose ファイルと一緒に作成することもできます)。

そのうちの 1 つを例に挙げます。

カフカ:   
    画像: wurstmeister/kafka:2.12-2.2.2   
    再起動: 常に   
    ホスト名: kafka1   
    コンテナ名: kafka1   
    ポート:   
     - 「9092:9092」   
    環境:   
     KAFKA_ADVERTISED_LISTENERS: プレーンテキスト://172.22.12.20:9092   
     KAFKA_ADVERTISED_HOST_NAME: 172.22.12.20   
     KAFKA_ADVERTISED_PORT: 9092   
     KAFKA_ZOOKEEPER_CONNECT: 172.22.12.20:2181、172.22.12.21:2181、172.22.12.22:2181   
    ボリューム:   
     - ./kafka/logs:/kafka

注目すべき点はあまりありません。KAFKA_ZOOKEEPER_CONNECT は zk クラスター アドレスで正しく構成されており、ADVERTISED 関連の構成は現在のコンテナー用です。

インフルクスDB

インフルエンスDB:   
    画像: influxdb:1.7   
    再起動: 常に   
    コンテナ名: influxdb   
    ポート:   
     - 「2003:2003」   
     - 「8086:8086」   
     - 「8089:8089」   
     - 「8091:8091」   
    ボリューム:   
     - 「./influxdb:/var/lib/influxdb」   
    環境:   
     - INFLUXDB_GRAPHITE_ENABLED = true  

「./influxdb:/var/lib/influxdb」はデータ ディレクトリのマウントであり、設定する必要があります。 INFLUXDB_GRAPHITE_ENABLED はグラファイト機能を有効にします。

Influxdb の簡​​単な操作:

  • docker exec -it influxdb インフラックス
  • データベースを表示
  • データベースXXを作成
  • XXを使用する
  • INSERT cpu、ホスト=serverA、リージョン=us_west、値=0.64
  • 「ホスト」、「リージョン」、「値」を「CPU」から選択します。

Docker-compose関連の操作

docker-compose [-f <ファイル名>] up -d   
docker-compose [-f <ファイル名>] ダウン

zkui/kafdrop/grafana

マシン 23 に、次の 3 つの Web インターフェースをデプロイします。

ズクイ:   
    画像: maauso/zkui   
    再起動: 常に   
    コンテナ名: zkui   
    ポート:   
     -9090:9090   
    環境:   
     ZKリスト: 172.22.12.20:2181,172.22.12.21:2181,172.22.12.22:2181   
   カフドロップ:   
    画像: obsidiandynamics/kafdrop:latest   
    再起動: 常に   
    コンテナ名: kafdrop   
    ポート:   
     - 「9000:9000」   
    環境:   
     KAFKA_BROKERCONNECT: 172.22.12.20:9092、172.22.12.20:9092、172.22.12.20:9092   
   グラファナ:   
    画像: grafana/grafana:master   
    再起動: 常に   
    コンテナ名: grafana   
    ポート:   
     - 「3000:3000」   
    ボリューム:   
     - 「./grafana:/var/lib/grafana」 

Webページなので、該当するサービスアドレスを設定して起動するだけです。

Grafana は、主にカスタム データ ソースやパネル構成などを記録するために、ディレクトリ マウントを使用して構成する必要があります (ここでは chmod -R 777 grafana/ が必要です)

ストームクラスター

ストームクラスターは、ニンバス、スーパーバイザー、UIの3つの部分で構成されています。

Nimbus はマスター ノードで、supervisor はスレーブ ノードです。前者は Zookeeper にタスクを送信し、後者は Zookeeper からタスクを取得します。 ui は Web ページです。

マシン 20、21、22 にそれぞれ 3 つの Nimbus ノードとスーパーバイザー ノードをデプロイし、別の docker-compose スクリプト ファイルを作成して、Zookeeper の起動後に実行することをお勧めします。

docker-compose スクリプトはおおよそ次のようになります。

ニンバス:
  画像: storm:2.2.0
  コンテナ名: nimbus1
  コマンド: ストームニンバス
  再起動: 常に
  ホスト名: nimbus1
  ポート:
   -6627:6627
  ボリューム:
   - 「./storm.yaml:/conf/storm.yaml」
   - 「./nimbus/data:/data」
   - 「./nimbus/logs:/logs」

 監督者:
  画像: storm:2.2.0
  コンテナ名: supervisor1
  指揮: 嵐の監督者
  ホスト名: supervisor1
  依存:
   -ニンバス
  リンク:
   - ニンバス:ニンバス
  再起動: 常に
  ボリューム:
   - 「./storm.yaml:/conf/storm.yaml」
   - 「./supervisor/data:/data」
   - 「./supervisor/logs:/logs」

Nimbus、supervisor、ui はすべて同じ storm イメージを使用しますが、起動時のコマンド パラメーターは異なります。

Nimbus と supervisor のホスト名をここで指定するのは、デフォルトでは、zookeeper に登録されるときのホストが docker コンテナによってランダムに生成される uuid であるためです。

Nimbus と supervisor を再起動すると、コンテナの uuid もリセットされ、zookeeper にすでに保存されている uuid と競合してエラーが発生します。

インターネット上の解決策は次のとおりです。1. ストーム クラスターを停止した後、Zookeeper 上のストーム ノードを削除し、Zookeeper + ストーム クラスターを再起動します。2. ストーム クラスター用に別のステートレス Zookeeper を構築します。

ここでの解決策は、NimbusとSupervisorが登録されているときにホストを指定することです。これは再起動しても変更されません。

起動時にいくつかの環境変数を指定する必要があります。ここでは、ローカル構成ファイル マッピングが使用されます。storm.yaml 構成は次のとおりです。

storm.zookeeper.servers: 
 - 「172.22.12.20」
 - 「172.22.12.21」
 - 「172.22.12.22」
ニンバスシード:
 - 「ニンバス1」
 - 「ニンバス2」
 - 「ニンバス3」
storm.log.dir: "/logs"
storm.local.dir: "/データ"
storm.cluster.mode: 分散

storm.zookeeper.servers は Zookeeper アドレスであり、デフォルトのポートは 2181 です。 nimbus.seeds は nimbus クラスターのアドレスであり、docker-compose でカスタマイズされたホスト名が使用されます。

Storm-ui は単一のインスタンスを起動でき、docker-compose 構成は次のようになります。

ストームUI:
  画像: storm:2.2.0
  コンテナ名: storm-ui
  コマンド: storm ui
  依存:
   -ニンバス
  リンク:
   - ニンバス:ニンバス
  再起動: 常に
  ポート:
   - 8080:8080
  ボリューム:
   - 「./storm.yaml:/conf/storm.yaml」
   - 「./ui/data:/data」
   - 「./ui/logs:/logs」 
  追加ホスト:
   - 「ニンバス1:172.22.12.20」
   - 「ニンバス2:172.22.12.21」
   - 「ニンバス3:172.22.12.22」
   - 「スーパーバイザー1:172.22.12.20」
   - 「スーパーバイザー2:172.22.12.21」
   - 「スーパーバイザー3:172.22.12.22」

このうち、extra_hosts はコンテナ起動後のカスタマイズされたホスト マッピングであり、UI ページの起動後に、登録されたエイリアス ホストを実際の IP アドレスに対応させることができます。

Docker コンテナをデプロイする場合、コンテナの再起動後に構成がリセットされないように、ホストの構成ファイルをコンテナにマップする必要があることがよくあります。

たとえば、storm の構成は、次のようになります: - "./storm.yaml:/conf/storm.yaml"。ただし、マッピング後に、正しい形式の storm.yaml がローカルに存在しない場合、起動は失敗します。公式 Web サイトからインストール パッケージをダウンロードして構成ファイルを取得するだけでなく、最初に一時コンテナーを起動して、その構成ファイルをホストにコピーすることもできます。

docker run -d --name nimbus-tmp storm:2.2.0 storm nimbus

docker cp nimbus-tmp:/conf/storm.yaml ローカルフォルダパス/

運河の展開

canal をデプロイする前に、接続先の MySQL を設定する必要があります。

[mysqld]
log-bin=mysql-bin # binlogを有効にする
binlog-format=ROW # ROWモードを選択 server_id=1 # MySQLの置き換えを構成するには定義が必要です。チャネルのスレーブIDを繰り返さないでください

canal の docker-compose 構成は次のとおりです。

運河サーバー:
  イメージ: canal/canal-server:v1.1.3
  コンテナ名: 運河サーバー
  ポート:
   - 11111:11111
  環境:
   - キャナルインスタンスmysql.スレーブID=12
   - キャナル自動スキャン=false
   - 運河の目的地=データクラウド
   - キャナルインスタンスマスターアドレス=10.23.16.32:3307
   - canal.instance.dbユーザー名=root
   - canal.instance.dbパスワード=chinaunicom@dengfy
   - canal.instance.filter.regex=river\\..*
  ボリューム:
   - ./canal-server/logs/:/admin/canal-server/logs/

slaveId は MySQL で設定されているものと異なる必要があり、destinations はカスタムインスタンス名であり、canal.instance.filter.regex は監視するデータベーステーブルフィルターです。

ポーテナーの展開

Portainer は Docker コンテナのビジュアル管理ツールです。上記マシンの Docker コンテナの管理、ログの表示、起動スクリプトの変更、コンテナの停止などを行うことができます。

まず、各マシンの docker API インターフェースを開く必要があります。

1.vim /usr/lib/systemd/system/docker.service
ExecStartスタートアップ項目に -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock を追加します。
2. dockerサービスを再起動します。systemctl daemon-reload systemctl restart docker

いずれかのマシンに portainer コンテナをデプロイします。

ポーター:
  画像: portainer/portainer:1.24.1
  再起動: 常に
  コンテナ名: portainer_datacloud
  ポート:
   - 「8000:8000」
   - 「9002:9000」
  ボリューム:
   - 「./portainer/data:/data」
   - "/var/run/docker.sock:/var/run/docker.sock"

"/var/run/docker.sock:/var/run/docker.sock" このマッピング関係はスタンドアロン モードで使用されます。リモート API 呼び出しを使用するため、省略できます。

ip:9002 を開いた後、ユーザーとして登録してログインし、設定 > エンドポイント > エンドポイントの追加 > docker を選択します。

エンドポイント URL にターゲット IP:2375 を入力し、パブリック IP にターゲット IP を追加します。送信すると、そのコンテナーの情報がすべて表示されます。

zk+kafka+storm クラスターの docker-compose デプロイメントの実装に関するこの記事はこれで終わりです。より関連性の高い docker compose デプロイメント クラスター コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker コンテナを使用して Kafka クラスターを構築する詳細なプロセス
  • Zookeeper&Kafka クラスターを構築するための Docker の実装
  • DockerでKafkaクラスターを構築する方法

<<:  Vue+Elementでページング効果を実現

>>:  MySqlは指定されたユーザーのデータベースビュークエリ権限を設定します

推薦する

Tomcatディレクトリ構造の詳細な説明

目次ディレクトリ構造binディレクトリconfディレクトリlibディレクトリwebapps ディレク...

MySQLは文字列の連結、インターセプション、置換、位置検索操作を実装しています

MySQL 文字列の連結、インターセプト、置換、および検索位置。よく使用される文字列関数:関数例示す...

Node.js http モジュールの使用

目次序文ウェブHTTP サーバーファイルサーバー練習する序文Node.js 開発の目的は、JavaS...

IDEA が MySQL データベースに接続できない問題の 6 つの解決策

この記事では、IDEA が MySQL データベースに接続できない問題に対する 6 つの解決策を主に...

共通要素のデフォルトのマージンとパディング値に関する議論

今日は、さまざまなブラウザでのデフォルト要素のマージン値が何であるかという問題について説明しました。...

Jenkinsを使用してプロジェクトを別のホストにデプロイするプロセス

環境ホスト名IPアドレス仕えるジェンキンス192.168.216.200トムキャット、ジェンキンスサ...

MySQLの高性能最適化スキルの概要

データベースコマンド仕様すべてのデータベース オブジェクト名には小文字を使用し、アンダースコアで区切...

Linux インストール Apache サーバー構成プロセス

袋を用意するインストールApacheがすでにインストールされているかどうかを確認するrpm -qa ...

MySQLのunion allとunionの違いを簡単に理解する

Union は、重複行を除外し、デフォルトのソートを実行する、データに対する結合操作です。Union...

HTML5+CSS3コーディング標準

黄金律プロジェクトに何人の人が取り組んでいるかに関係なく、すべてのコード行が同じ人によって書かれたよ...

HTML スペースコードの簡単な分析

HTML についてどれくらい知っていますか? 現在、基本的な HTML コードを学習している場合は、...

完璧なアロエベラジェルを選ぶには?完璧なアロエベラジェルの本物と偽物の見分け方

最新のパーフェクト アロエ ベラ ジェルのパッケージ ボックスには、赤いフォントで完璧な英語の文字が...

きちんとした標準的なHTMLタグの書き方を学ぶ

優れた HTML コードは美しい Web サイトの基礎となります。私が CSS を教えるときは、まず...

MySQL のバイナリおよび varbinary データ型の詳細な説明

序文BINARY と VARBINARY は、文字列ではなくバイナリ文字列を格納する点を除いて、CH...

HTMLのフォントがline-heightを指定しても垂直方向に中央揃えできない問題の解決方法を詳しく説明します

による写真に示されている効果を例に挙げてみましょう。明らかに、「次へ」というテキストを水平方向だけで...