172.22.12.20 | 172.22.12.21 | 172.22.12.22 | 172.22.12.23 | 172.22.12.24 |
---|---|---|---|---|
zoo1:2181 | zoo2:2182 | zoo3:2183 | zkui:9090 (admin/manager) | |
kafka1:9092 | kafka2:9092 | kafka3:9092 | kafdrop:9000 | |
influxdb:8086 | grafana:3000 (admin/chanhu) | |||
storm-nimbus1 | storm-nimbus2 | storm-nimbus3 | portainer:9002(admin/chanhu@123) | |
storm-supervisor1 | storm-supervisor2 | storm-supervisor3 | ||
storm-ui:8080 |
docker安裝
yum update -y yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install docker-ce docker-ce-cli containerd.io systemctl start docker
docker-compose安裝
yum install epel-release yum install -y python-pip pip install --upgrade pip pip install docker-compose
修改每一臺(tái)宿主機(jī)的hosts文件
vim /etc/hosts 172.22.12.20 datacloud0 172.22.12.21 datacloud1 172.22.12.22 datacloud2 172.22.12.23 datacloud3 172.22.12.24 datacloud4
zookeeper集群
在20,21,22三臺(tái)機(jī)器部署zk集群,分別編寫docker-compose文件
集群中如果只剩一臺(tái)是正常運(yùn)行的,則集群失效
以其中一臺(tái)為例:
zoo: image: zookeeper:3.4.14 restart: always hostname: zoo1 container_name: zoo1 ports: - 2181:2181 - 2888:2888 - 3888:3888 volumes: - "./zoo/data:/data" - "./zoo/datalog:/datalog" environment: ZOO_MY_ID: 1 ZOO_SERVERS: server.1=0.0.0.0:2888:3888 server.2=172.22.12.21:2888:3888 server.3=172.22.12.22:2888:3888
"./zoo/data:/data"為數(shù)據(jù)目錄掛載,必須配置
環(huán)境變量配置, ZOO_MY_ID 三臺(tái)分別是1、2、3, ZOO_SERVERS 配置的是集群地址,其中當(dāng)前機(jī)器為0.0.0.0
kakfa集群
在20,21,22三臺(tái)機(jī)器部署kafka集群,分別編寫docker-compose文件(可以和zk的docker-compose文件寫在一起)
以其中一臺(tái)為例:
kafka: image: wurstmeister/kafka:2.12-2.2.2 restart: always hostname: kafka1 container_name: kafka1 ports: - "9092:9092" environment: KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://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 volumes: - ./kafka/logs:/kafka
沒(méi)有太多需要注意的地方, KAFKA_ZOOKEEPER_CONNECT 正確配置好zk集群地址,還有ADVERTISED相關(guān)配置為當(dāng)前容器。
influxdb
influxdb: image: influxdb:1.7 restart: always container_name: influxdb ports: - "2003:2003" - "8086:8086" - "8089:8089" - "8091:8091" volumes: - "./influxdb:/var/lib/influxdb" environment: - INFLUXDB_GRAPHITE_ENABLED=true
"./influxdb:/var/lib/influxdb"為數(shù)據(jù)目錄掛載, 必須配置 。INFLUXDB_GRAPHITE_ENABLED啟動(dòng)graphite功能。
influxdb簡(jiǎn)單操作:
docker-compose相關(guān)操作
docker-compose [-f <文件名>] up -d docker-compose [-f <文件名>] down
zkui/kafdrop/grafana
在23機(jī)器上,部署這三個(gè)web界面:
zkui: image: maauso/zkui restart: always container_name: zkui ports: - 9090:9090 environment: ZKLIST: 172.22.12.20:2181,172.22.12.21:2181,172.22.12.22:2181 kafdrop: image: obsidiandynamics/kafdrop:latest restart: always container_name: kafdrop ports: - "9000:9000" environment: KAFKA_BROKERCONNECT: 172.22.12.20:9092,172.22.12.20:9092,172.22.12.20:9092 grafana: image: grafana/grafana:master restart: always container_name: grafana ports: - "3000:3000" volumes: - "./grafana:/var/lib/grafana"
因?yàn)槭莣eb頁(yè)面,配置好相關(guān)服務(wù)地址,啟動(dòng)就行了
其中g(shù)rafana需要配置目錄掛載,主要是記錄自定義的數(shù)據(jù)源和面板配置等(這里需要chmod -R 777 grafana/)
storm集群
storm集群由 nimbus、supervisor、ui 三部分組成
nimbus為主節(jié)點(diǎn),supervisor為從節(jié)點(diǎn),前者將任務(wù)發(fā)到zookeeper上,后者到zookeeper上獲取任務(wù)。ui為web頁(yè)面。
20、21、22三臺(tái)機(jī)器分別部署nimbus和supervisor節(jié)點(diǎn)各三個(gè),且建議單獨(dú)建立docker-compose腳本文件,在zookeeper啟動(dòng)后執(zhí)行。
docker-compose腳本大致如下:
nimbus: image: storm:2.2.0 container_name: nimbus1 command: storm nimbus restart: always hostname: nimbus1 ports: - 6627:6627 volumes: - "./storm.yaml:/conf/storm.yaml" - "./nimbus/data:/data" - "./nimbus/logs:/logs" supervisor: image: storm:2.2.0 container_name: supervisor1 command: storm supervisor hostname: supervisor1 depends_on: - nimbus links: - nimbus:nimbus restart: always volumes: - "./storm.yaml:/conf/storm.yaml" - "./supervisor/data:/data" - "./supervisor/logs:/logs"
nimbus、supervisor、ui都是使用同一個(gè)storm鏡像,只是啟動(dòng)參數(shù)時(shí)command不同。
這里指定nimbus和supervisor的hostname,原因是默認(rèn)情況下它們注冊(cè)到zookeeper時(shí)的host為docker容器隨機(jī)生成的uuid,
如果nimbus和supervisor重啟了,其容器uuid也會(huì)重置,這時(shí)就和zookeeper中已經(jīng)保存的uuid沖突,發(fā)生錯(cuò)誤。
網(wǎng)上的方案是:1.停掉storm集群后刪除zookeeper上的storm節(jié)點(diǎn)并重啟zookeeper+storm集群;2.單獨(dú)建一個(gè)無(wú)狀態(tài)的zookeeper來(lái)給storm集群使用
這里采取的方案是指定nimbus和supervisor注冊(cè)時(shí)的host,其重啟時(shí)不會(huì)產(chǎn)生變化
啟動(dòng)時(shí)需要指定一些環(huán)境變量,這里采用本地配置文件映射的方式,storm.yaml配置如下:
storm.zookeeper.servers: - "172.22.12.20" - "172.22.12.21" - "172.22.12.22" nimbus.seeds: - "nimbus1" - "nimbus2" - "nimbus3" storm.log.dir: "/logs" storm.local.dir: "/data" storm.cluster.mode: distributed
storm.zookeeper.servers為zookeeper地址,默認(rèn)取端口2181。nimbus.seeds為nimbus集群地址,這里取docker-compose中自定義的hostname。
storm-ui啟動(dòng)單例即可,docker-compose配置如下:
storm-ui: image: storm:2.2.0 container_name: storm-ui command: storm ui depends_on: - nimbus links: - nimbus:nimbus restart: always ports: - 8080:8080 volumes: - "./storm.yaml:/conf/storm.yaml" - "./ui/data:/data" - "./ui/logs:/logs" extra_hosts: - "nimbus1:172.22.12.20" - "nimbus2:172.22.12.21" - "nimbus3:172.22.12.22" - "supervisor1:172.22.12.20" - "supervisor2:172.22.12.21" - "supervisor3:172.22.12.22"
其中 extra_hosts 為容器啟動(dòng)后自定義的host映射,這樣ui頁(yè)面啟動(dòng)后才能通過(guò)注冊(cè)上來(lái)的別名host對(duì)應(yīng)到真正的ip地址。
部署docker容器時(shí)經(jīng)常會(huì)遇到需要映射宿主機(jī)的配置文件到容器里,這樣容器重啟后配置就不會(huì)重置。
比如storm配置:- "./storm.yaml:/conf/storm.yaml" 但是映射后如果本地沒(méi)有正確格式的storm.yaml就會(huì)啟動(dòng)失敗,除了去官網(wǎng)下載安裝包拿到其配置文件以外,可以先啟動(dòng)一個(gè)臨時(shí)容器并拷貝其配置文件到宿主機(jī)。
docker run -d --name nimbus-tmp storm:2.2.0 storm nimbus
docker cp nimbus-tmp:/conf/storm.yaml 本地文件夾路徑/
canal部署
canal部署前需要對(duì)其要連接的mysql做相應(yīng)配置:
[mysqld] log-bin=mysql-bin # 開啟 binlog binlog-format=ROW # 選擇 ROW 模式 server_id=1 # 配置 MySQL replaction 需要定義,不要和 canal 的 slaveId 重復(fù)
canal的docker-compose配置如下:
canal-server: image: canal/canal-server:v1.1.3 container_name: canal-server ports: - 11111:11111 environment: - canal.instance.mysql.slaveId=12 - canal.auto.scan=false - canal.destinations=datacloud - canal.instance.master.address=10.23.16.32:3307 - canal.instance.dbUsername=root - canal.instance.dbPassword=chinaunicom@dengfy - canal.instance.filter.regex=river\\..* volumes: - ./canal-server/logs/:/admin/canal-server/logs/
其中 slaveId 需要和mysql中配置不同, destinations 為自定義的實(shí)例名, canal.instance.filter.regex 為需要監(jiān)控的數(shù)據(jù)庫(kù)表過(guò)濾。
portainer部署
portainer時(shí)docker容器的可視化管理工具,可以管理上述的幾臺(tái)機(jī)器的docker容器,查看日志,修改啟動(dòng)腳本,停止容器等。
首先要對(duì)每一臺(tái)機(jī)器開啟docker api接口:
1.vim /usr/lib/systemd/system/docker.service
在ExecStart啟動(dòng)項(xiàng)添加-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
2.重啟docker服務(wù) systemctl daemon-reload systemctl restart docker
在其中一臺(tái)機(jī)器上部署portainer容器:
portainer: image: portainer/portainer:1.24.1 restart: always container_name: portainer_datacloud ports: - "8000:8000" - "9002:9000" volumes: - "./portainer/data:/data" - "/var/run/docker.sock:/var/run/docker.sock"
"/var/run/docker.sock:/var/run/docker.sock" 此條映射關(guān)系是單機(jī)模式下使用,我們采用的是遠(yuǎn)程api調(diào)用,因此可以不加。
打開ip:9002后,注冊(cè)用戶登錄,settings>endpoints>Add endpoint>選擇docker方式。
其中Endpoint URL填寫目標(biāo)ip:2375,Public IP添加目標(biāo)ip,提交后即可看到其所有容器信息。
到此這篇關(guān)于docker-compose部署zk+kafka+storm集群的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)docker compose部署集群內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
標(biāo)簽:嘉興 運(yùn)城 亳州 拉薩 澳門 齊齊哈爾 衡陽(yáng) 烏海
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《docker-compose部署zk+kafka+storm集群的實(shí)現(xiàn)》,本文關(guān)鍵詞 docker-compose,部署,zk+kafka+storm,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。