docker部署zookeeper集群方式(單主機、多主機)
1、一臺主機上部署zookeeper集群
下面這個是官方給出的docker-compose的部署方案(這個是都在一臺主機上部署的):
version: '3'
services:
zoo1:
image: zookeeper
restart: always
ports:
- 2182:2181
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
zoo2:
image: zookeeper
restart: always
ports:
- 2183:2181
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
zoo3:
image: zookeeper
restart: always
ports:
- 2184:2181
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
2、一臺主機部署zookeeper集群分析
我們從上面的分析,最主要的就是ZOO_MY_ID和ZOO_SERVERS(更多環(huán)境變量配置參考:https://hub.docker.com/_/zookeeper)
ZOO_MY_ID:節(jié)點IDZOO_SERVERS:集群節(jié)點地址,多個節(jié)點之間使用空格隔開
由此可以看出如果不在一個主機上,那么這幾個容器之間就得是想通的,為了使其想通,我們運用了Macvlan網絡
3、Macvlan網絡
macvlan本身是linxu kernel的模塊,本質上是一種網卡虛擬化技術。
其功能是允許在同一個物理網卡上虛擬出多個網卡,通過不同的MAC地址在數(shù)據(jù)鏈路層進行網絡數(shù)據(jù)的轉發(fā),一塊網卡上配置多個 MAC 地址(即多個 interface),每個interface可以配置自己的IP,Docker的macvlan網絡實際上就是使用了Linux提供的macvlan驅動.在物理網絡看來,每張?zhí)摂M網卡都是一個單獨的接口。
4、跨主機環(huán)境準備
| 編號 | 主機IP | 容器IP |
|---|---|---|
| 主機1 | 192.168.1.187 | 10.0.3.71 |
| 主機2 | 192.168.1.188 | 10.0.3.72 |
| 主機3 | 192.168.1.189 | 10.0.3.73 |
5、創(chuàng)建macvlan網絡
主機1(主機2和主機3也做如下類似操作):
docker network create -d macvlan --subnet=10.0.3.0/24 --gateway=10.0.3.1 -o parent=em2 zookeeper-kafka-net
subnet這里結尾最好是/24,代表255.255.255.0,如果是/16代表255.255.0.0,16這種據(jù)說在設置了iptable的情況下會出問題parent后是網卡名稱192.168.1.187的網卡名稱,可通過ipconfig查找

最后的zookeeper-kafka-net是你創(chuàng)建的macvlan網絡名稱,可隨意寫
6、docker-compose.yml文件
主機1:
version: "3" services: ? zookeeper1: ? ? container_name: zookeeper1 ? ? image: zookeeper:3.6.2 ? ? networks: ? ? ? zookeeper-kafka-net: ? ? ? ? ipv4_address: 10.0.3.71 ? ? ports: ? ? ? - "22181:2181" ? ? ? - "22888:2888" ? ? ? - "23888:3888" ? ? environment: ? ? ? ZOO_MY_ID: 1 ? ? ? ZOO_SERVERS: server.1=10.0.3.71:2888:3888;2181 server.2=10.0.3.72:2888:3888;2181 server.3=10.0.3.73:2888:3888;2181 ? ? restart: always networks: ? zookeeper-kafka-net: ? ? external: ? ? ? name: zookeeper-kafka-net
主機2:
version: "3" services: ? zookeeper2: ? ? container_name: zookeeper2 ? ? image: zookeeper:3.6.2 ? ? networks: ? ? ? zookeeper-kafka-net: ? ? ? ? ipv4_address: 10.0.3.72 ? ? ports: ? ? ? - "22181:2181" ? ? ? - "22888:2888" ? ? ? - "23888:3888" ? ? environment: ? ? ? ZOO_MY_ID: 2 ? ? ? ZOO_SERVERS: server.1=10.0.3.71:2888:3888;2181 server.2=10.0.3.72:2888:3888;2181 server.3=10.0.3.73:2888:3888;2181 ? ? restart: always networks: ? zookeeper-kafka-net: ? ? external: ? ? ? name: zookeeper-kafka-net
主機3:
version: "3" services: ? zookeeper3: ? ? container_name: zookeeper3 ? ? image: zookeeper:3.6.2 ? ? networks: ? ? ? zookeeper-kafka-net: ? ? ? ? ipv4_address: 10.0.3.73 ? ? ports: ? ? ? - "22181:2181" ? ? ? - "22888:2888" ? ? ? - "23888:3888" ? ? environment: ? ? ? ZOO_MY_ID: 3 ? ? ? ZOO_SERVERS: server.1=10.0.3.71:2888:3888;2181 server.2=10.0.3.72:2888:3888;2181 server.3=10.0.3.73:2888:3888;2181 ? ? restart: always networks: ? zookeeper-kafka-net: ? ? external: ? ? ? name: zookeeper-kafka-net
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
在docker容器中使用非root用戶執(zhí)行腳本操作
這篇文章主要介紹了在docker容器中使用非root用戶執(zhí)行腳本操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
詳解使用?docker?compose?部署?golang?的?Athens?私有代理問題
這篇文章主要介紹了使用?docker-compose?部署?golang?的?Athens?私有代理,幫助大家快速學習athens 如何構建私有代理,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04
docker部署minio并使用springboot連接的操作方法
這篇文章主要介紹了docker部署minio并使用springboot連接的操作方法,本文以minio為例結合實例代碼給大家詳細講解,需要的朋友可以參考下2023-11-11

