ドッカー飼育係&カフカクラスタを構築

最近の研究ではKafka、状態は両方のオープン3台の仮想マシンを感じたときに、クラスタをテストしたり、あまりにも多くの問題を持っている(主に怠惰な..ああ)仮想マシンに三つの異なるポート番号を開く準備をして。

環境の準備

インターネットにアクセスできるコンピュータと仮想マシンのコンピュータがCentOS7

なぜ仮想マシンを使うのか?ノートパソコンの使用しているので、あなたがIPネットワークを接続するたびに変更されますが、また、常に、設定ファイルを変更するのが面倒、テストに不便。(あなたは、実験が時に知らなかったとき、仮想ネットワークドッカーの方法によってこの問題を回避することができます)

ドッカーインストール

あなたがインストールしている場合は、このステップドッカーを無視してください

  1. ドッカーCentOSのバージョンは、次の機能をサポートします。
  2. CentOSの7(64ビット):請求項64、カーネルバージョン3.10以上に記載のシステム。
  3. 後のCentOS 6.5(64ビット)または:システム64、システム・カーネル・バージョン2.6.32-431以上の要件。
  4. CentOSのカーネルは、ドッカーのリリースのみをサポートしています。

yumをインストール

3.10よりも高いドッカーシステム要件CentOSのカーネルバージョン、あなたのCentOSのバージョンがドッカーをサポートして検証するには、上記の前提条件を参照してください。

# 查看内核版本
$ uname -a
#安装 Docker
$ yum -y install docker
#启动 Docker 后台服务
$ service docker start
# 由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行。
$ docker run hello-world

スクリプトのインストール

  1. CentOSにはsudoの権限またはroot権限を使用してログインしてください。
  2. 日までのyumパッケージことを確認してください。
$ sudo yum update
  1. ドッキングウィンドウは、入手して、インストールスクリプトを実行します。
$ curl -fsSL https://get.docker.com -o get-docker.sh
# 执行这个脚本会添加 docker.repo 源并安装 Docker。
$ sudo sh get-docker.sh

スタートドッカー

$ sudo systemctl start docker
# 验证 docker 是否安装成功并在容器中执行一个测试的镜像。
$ sudo docker run hello-world
$ docker ps

ミラー加速

私は拒否されますが、使用した後、ダウンロード速度がすることが判明したとき、私は国内のミラーリングの設定を始めましょうduang~上がるしようとしています。強くあなたが国内のソースをミラーリング設定することをお勧めします。
オープン/作成し/etc/docker/daemon.jsonたファイルを、次の行を追加します。

{
  "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

飼育係クラスタのセットアップ

飼育係ミラー:飼育係:3.4

準備ミラーリング

$ docker pull zookeeper:3.4

行くことができますミラーリング検索https://hub.docker.com/を
ドッカーロイヤリティーフリーを引っ張っ:引っ張っ//タグの代表TAGのバージョンをimageミラー

独立したコンテナの飼育係を確立

私たちは、最も簡単な方法のとは無関係に作成することによって開始Zookeeperノード、その後、我々はこの例によると、別のノードを作成します。

$ docker run --name zookeeper -p 2181:2181 -d zookeeper:3.4

デフォルトでは、コンテナの設定ファイルで/conf/zoo.cfgデータとログのデフォルトディレクトリ/data/datalog、必要に応じて、ディレクトリ内のホストにマップすることができます。
パラメータ説明

  1. --name:指定されたコンテナの名前
  2. -p:露出した容器に割り当てられたポートのポート番号
  3. -d:背景のコンテナとコンテナIDで印刷部数

クラスタのセットアップ

内の他のノードZookeeperの別々の容器を作成するための同様の方法を作成するための容器は、指定するノードことに留意すべきであるid:以下のように構成ファイルを変更し、マルチノード、対応するコマンドを作成しています

新しいドッキングウィンドウネットワーク

$ docker network create zoo_kafka
$ docker network ls

Zookeeper容器1

$ docker run -d \
     --restart=always \
     -v /opt/docker/zookeeper/zoo1/data:/data \
     -v /opt/docker/zookeeper/zoo1/datalog:/datalog \
     -e ZOO_MY_ID=1 \
     -p 2181:2181 \
     -e ZOO_SERVERS="server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888" \
     --name=zoo1 \
     --net=viemall-zookeeper \
     --privileged \
     zookeeper:3.4

Zookeeper容器2

$ docker run -d \
     --restart=always \
     -v /opt/docker/zookeeper/zoo2/data:/data \
     -v /opt/docker/zookeeper/zoo2/datalog:/datalog \
     -e ZOO_MY_ID=2 \
     -p 2182:2181 \
     -e ZOO_SERVERS="server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888" \
     --name=zoo2 \
     --net=viemall-zookeeper \
     --privileged \
     zookeeper:3.4

Zookeeper容器3

$ docker run -d \
     --restart=always \
     -v /opt/docker/zookeeper/zoo3/data:/data \
     -v /opt/docker/zookeeper/zoo3/datalog:/datalog \
     -e ZOO_MY_ID=3 \
     -p 2183:2181 \
     -e ZOO_SERVERS="server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888" \
     --name=zoo3 \
     --net=viemall-zookeeper \
     --privileged \
     zookeeper:3.4

この方法はまた、我々が望んで達成されていますが、手順は彼ら(後半怠け者癌)を維持するにはあまりにも煩雑で面倒ですが、私たちが使用しdocker-compose達成する方法を。

ドッキングウィンドウ-COMPOSEビルドのZooKeeperクラスタ

新しいドッキングウィンドウネットワーク

$ docker network create viemall-zookeeper
$ docker network ls

脚本ドッキングウィンドウ-compose.yml

使用します。

  1. インストール docker-compose
# 获取脚本
$ curl -L https://github.com/docker/compose/releases/download/1.25.0-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 赋予执行权限
$chmod +x /usr/local/bin/docker-compose
  1. すべての新しいディレクトリのdocker-compose.ymlファイルは、以下をコピー
  2. コマンドを実行します。 docker-compose up -d

コマンド・コントロール
|コマンド|通訳|
| - | - |
|ドッカー作曲アップ|すべてのコンテナを開始|
|バックアップおよびすべてのコンテナを実行している| |ドッカー作曲アップは、-d
| --no--d再作成ドッカー作曲アップ|ない再作成するコンテナが停止している|
|ドッカー作曲アップはtest2は-d | test2は唯一このコンテナを開始|
|ドッカー作曲-STOP |ストップコンテナ|
|ドッカー・作曲を開始|コンテナを開始|
|ドッカー作曲ダウン|停止と破棄コンテナ|

docker-compose.ymlダウンロード:https://github.com/JacianLiu/docker-compose/tree/master/zookeeper
docker-compose.yml詳細

version: '2'
services:
  zoo1:
    image: zookeeper:3.4 # 镜像名称
    restart: always # 当发生错误时自动重启
    hostname: zoo1
    container_name: zoo1
    privileged: true
    ports: # 端口
      - 2181:2181
    volumes: # 挂载数据卷
      - ./zoo1/data:/data
      - ./zoo1/datalog:/datalog 
    environment:
      TZ: Asia/Shanghai
      ZOO_MY_ID: 1 # 节点ID
      ZOO_PORT: 2181 # zookeeper端口号
      ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 # zookeeper节点列表
    networks:
      default:
        ipv4_address: 172.23.0.11

  zoo2:
    image: zookeeper:3.4
    restart: always
    hostname: zoo2
    container_name: zoo2
    privileged: true
    ports:
      - 2182:2181
    volumes:
      - ./zoo2/data:/data
      - ./zoo2/datalog:/datalog
    environment:
      TZ: Asia/Shanghai
      ZOO_MY_ID: 2
      ZOO_PORT: 2181
      ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
    networks:
      default:
        ipv4_address: 172.23.0.12

  zoo3:
    image: zookeeper:3.4
    restart: always
    hostname: zoo3
    container_name: zoo3
    privileged: true
    ports:
      - 2183:2181
    volumes:
      - ./zoo3/data:/data
      - ./zoo3/datalog:/datalog
    environment:
      TZ: Asia/Shanghai
      ZOO_MY_ID: 3
      ZOO_PORT: 2181
      ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
    networks:
      default:
        ipv4_address: 172.23.0.13

networks:
  default:
    external:
      name: zoo_kafka

検証

私たちはそこで、図から見ることができますLeader2、Flower私たちの持って来る、Zookeeperクラスタが良いを構築しています
飼育係

カフカクラスタのセットアップ

上記の根拠で、行くと取得Kafkaクラスタまたは問題が?実際には、いくつかの異なる変数値のみ。

例の上で、私たちは激しい単一のノードに従事していないKafka、直接使用docker-compose3つのノードを展開する方法は、実際には、ほとんど同じ方法で、また、それが異なる属性の数も、実際には、トップに来るとき、この時間は、私達は行く必要はありません新ドッカーネットワーク、およびの前で直接設定しZookeeperたネットワークは、時にクラスタを作成することができます!

環境の準備

Kafka镜像:wurstmeister/kafka
Kafka-Manager镜像:sheepkiller/kafka-manager

# 不指定版本默认拉取最新版本的镜像
docker pull wurstmeister/kafka
docker pull sheepkiller/kafka-manager

脚本ドッキングウィンドウ-compose.yml

使用します。

  1. インストール docker-compose
# 获取脚本
$ curl -L https://github.com/docker/compose/releases/download/1.25.0-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 赋予执行权限
$chmod +x /usr/local/bin/docker-compose
  1. すべての新しいディレクトリのdocker-compose.ymlファイルは、以下をコピー
  2. コマンドを実行します。 docker-compose up -d

コマンド・コントロール
|コマンド|通訳|
| - | - | - |
|ドッカー作曲アップ|すべてのコンテナを開始|
|ドッカー作曲アップは-d |すべてのコンテナのバックアップおよびランニング|
|ドッカー作曲アップ--no-再作成- D |ない再作成するコンテナが停止している|
|ドッカー作曲アップはtest2は-d | test2は唯一このコンテナを開始|
|ドッカー作曲-STOP |ストップコンテナ|
|ドッカー・作曲を開始| |コンテナを開始
|ドッカー作曲ダウン|ストップコンテナの破壊|

docker-compose.ymlダウンロード:https://github.com/JacianLiu/docker-compose/tree/master/zookeeper
docker-compose.yml詳細

version: '2'

services:
  broker1:
    image: wurstmeister/kafka
    restart: always
    hostname: broker1
    container_name: broker1
    privileged: true
    ports:
      - "9091:9092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_LISTENERS: PLAINTEXT://broker1:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker1:9092
      KAFKA_ADVERTISED_HOST_NAME: broker1
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1
      JMX_PORT: 9988
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./broker1:/kafka/kafka\-logs\-broker1
    external_links:
    - zoo1
    - zoo2
    - zoo3
    networks:
      default:
        ipv4_address: 172.23.0.14

  broker2:
    image: wurstmeister/kafka
    restart: always
    hostname: broker2
    container_name: broker2
    privileged: true
    ports:
      - "9092:9092"
    environment:
      KAFKA_BROKER_ID: 2
      KAFKA_LISTENERS: PLAINTEXT://broker2:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker2:9092
      KAFKA_ADVERTISED_HOST_NAME: broker2
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1
      JMX_PORT: 9988
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./broker2:/kafka/kafka\-logs\-broker2
    external_links:  # 连接本compose文件以外的container
    - zoo1
    - zoo2
    - zoo3
    networks:
      default:
        ipv4_address: 172.23.0.15

  broker3:
    image: wurstmeister/kafka
    restart: always
    hostname: broker3
    container_name: broker3
    privileged: true
    ports:
      - "9093:9092"
    environment:
      KAFKA_BROKER_ID: 3
      KAFKA_LISTENERS: PLAINTEXT://broker3:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker3:9092
      KAFKA_ADVERTISED_HOST_NAME: broker3
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1
      JMX_PORT: 9988
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./broker3:/kafka/kafka\-logs\-broker3
    external_links:  # 连接本compose文件以外的container
    - zoo1
    - zoo2
    - zoo3
    networks:
      default:
        ipv4_address: 172.23.0.16

  kafka-manager:
    image: sheepkiller/kafka-manager:latest
    restart: always
    container_name: kafka-manager
    hostname: kafka-manager
    ports:
      - "9000:9000"
    links:            # 连接本compose文件创建的container
      - broker1
      - broker2
      - broker3
    external_links:   # 连接本compose文件以外的container
      - zoo1
      - zoo2
      - zoo3
    environment:
      ZK_HOSTS: zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1
      KAFKA_BROKERS: broker1:9092,broker2:9092,broker3:9092
      APPLICATION_SECRET: letmein
      KM_ARGS: -Djava.net.preferIPv4Stack=true
    networks:
      default:
        ipv4_address: 172.23.0.10

networks:
  default:
    external:   # 使用已创建的网络
      name: zoo_kafka

検証

私たちは、オープンkafka-managerアクセス・パスは、ホストのIPで、管理ページを:9000;
カフカ-マネージャー
示された場合、記入Zookeeper最下段をクリックして描画する、クラスタアドレスsave
あなたが見ることができ、追加したクリックしてクラスタを、クラスタ内の3つのノードがあります
カフカクラスタ

建物の過程で発生する問題

  1. データ量無制限の再起動を取り付け、参照logをchown:ヒントの所有権を変更する'/ VAR / libに/ mysqlの/ ....':許可拒否された
    ソリューション:
    • --privileged追加ドッキングウィンドウの実行中=真の容器に加えて、特定の権限へ
    • SELinuxを一時的にオフにします。setenforce 0
    • 、SELinuxのルールを追加マウントしたいセキュリティテキストディレクトリを変更
  2. カフカ・マネージャーは、JMX関連のエラーを報告した
    ソリューションを:
    • 各ノードプラスカフカ環境では変数のポートJMX_PORT =
    • 発見プラスROM、およびネットワーク接続の問題の後、再度各ポートJMX暴露、その後、火壁の隙間には、問題を解決するために。
    • KAFKA_ADVERTISED_HOST_NAMEこれは、好ましくは、IPホスト、コードよりも、またはポートは、ポートを露出セットバック、ツールを接続する他のホストに設けられています。
[error] k.m.j.KafkaJMX$ - Failed to connect to service:jmx:rmi:///jndi/rmi://9.11.8.48:-1/jmxrmi java.lang.IllegalArgumentException: requirement failed: No jmx port but jmx polling enabled!
  1. コンテナ内のビューtopic・タイムズ次のエラー(コマンドの話題だけでなく、すべてが間違って行くかのように)
$ bin/kafka-topics.sh --list --zookeeper zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1
# 以下是错误
Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: 7203; nested exception is:
        java.net.BindException: Address already in use

解決策:
コマンドのあるunset JMX_PORT;命令は、変換コマンドの上にあります:

$ unset JMX_PORT;bin/kafka-topics.sh --list --zookeeper zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1

附属書:ドッカー命令を使用します

# 查看所有镜像
docker images
# 查看所有运行中的容器
docker ps
# 查看所有容器
docker ps -a
# 获取所有容器ip
$ docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
# 查看容器内部日志
$ docker logs -f <容器ID>
# 进入容器内部
$ docker exec -it <容器ID> /bin/basj
# 创建容器 -d代表后台启动
docker run --name <容器名称> -e <参数> -v <挂载数据卷> <容器ID>
# 重启容器
docker restart <容器ID>
# 关闭容器
docker stop <容器id>
# 运行容器
docker start <容器id>

おすすめ

転載: www.cnblogs.com/Jacian/p/11421114.html