最近の研究では
Kafka
、状態は両方のオープン3台の仮想マシンを感じたときに、クラスタをテストしたり、あまりにも多くの問題を持っている(主に怠惰な..ああ)仮想マシンに三つの異なるポート番号を開く準備をして。
環境の準備
インターネットにアクセスできるコンピュータと仮想マシンのコンピュータがCentOS7
なぜ仮想マシンを使うのか?ノートパソコンの使用しているので、あなたがIPネットワークを接続するたびに変更されますが、また、常に、設定ファイルを変更するのが面倒、テストに不便。(あなたは、実験が時に知らなかったとき、仮想ネットワークドッカーの方法によってこの問題を回避することができます)
ドッカーインストール
あなたがインストールしている場合は、このステップドッカーを無視してください
- ドッカーCentOSのバージョンは、次の機能をサポートします。
- CentOSの7(64ビット):請求項64、カーネルバージョン3.10以上に記載のシステム。
- 後のCentOS 6.5(64ビット)または:システム64、システム・カーネル・バージョン2.6.32-431以上の要件。
- 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
スクリプトのインストール
- CentOSにはsudoの権限またはroot権限を使用してログインしてください。
- 日までのyumパッケージことを確認してください。
$ sudo yum update
- ドッキングウィンドウは、入手して、インストールスクリプトを実行します。
$ 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
、必要に応じて、ディレクトリ内のホストにマップすることができます。
パラメータ説明
- --name:指定されたコンテナの名前
- -p:露出した容器に割り当てられたポートのポート番号
- -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
使用します。
- インストール
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
- すべての新しいディレクトリの
docker-compose.yml
ファイルは、以下をコピー - コマンドを実行します。
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
検証
私たちはそこで、図から見ることができますLeader
2、Flower
私たちの持って来る、Zookeeper
クラスタが良いを構築しています
カフカクラスタのセットアップ
上記の根拠で、行くと取得Kafka
クラスタまたは問題が?実際には、いくつかの異なる変数値のみ。
例の上で、私たちは激しい単一のノードに従事していないKafka
、直接使用docker-compose
3つのノードを展開する方法は、実際には、ほとんど同じ方法で、また、それが異なる属性の数も、実際には、トップに来るとき、この時間は、私達は行く必要はありません新ドッカーネットワーク、およびの前で直接設定しZookeeper
たネットワークは、時にクラスタを作成することができます!
環境の準備
Kafka镜像:wurstmeister/kafka
Kafka-Manager镜像:sheepkiller/kafka-manager
# 不指定版本默认拉取最新版本的镜像
docker pull wurstmeister/kafka
docker pull sheepkiller/kafka-manager
脚本ドッキングウィンドウ-compose.yml
使用します。
- インストール
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
- すべての新しいディレクトリの
docker-compose.yml
ファイルは、以下をコピー - コマンドを実行します。
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つのノードがあります
建物の過程で発生する問題
- データ量無制限の再起動を取り付け、参照
log
をchown:ヒントの所有権を変更する'/ VAR / libに/ mysqlの/ ....':許可拒否された
ソリューション:- --privileged追加ドッキングウィンドウの実行中=真の容器に加えて、特定の権限へ
- SELinuxを一時的にオフにします。setenforce 0
- 、SELinuxのルールを追加マウントしたいセキュリティテキストディレクトリを変更
- カフカ・マネージャーは、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!
- コンテナ内のビュー
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>