docker-compose部署zk+kafka+storm集群

**目錄:**

1.? docker環(huán)境安裝

2.? zookeeper和kafka集群部署

3.? influxdb單例部署

4.? zkui、kafdrop咆贬、grafana等界面安裝

5.? storm集群部署

6.? canal部署

7.? portainer部署

## 集群部署總覽

| 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?

```?

沒有太多需要注意的地方紧帕,`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 exec -it influxdb influx? ?

? show databases? ?

? create database XX? ?

? use XX? ?

? INSERT cpu,host=serverA,region=us_west value=0.64? ?

? SELECT "host", "region", "value" FROM "cpu"*




## 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集群

1.? 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)生變化? ?

2. 啟動(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笆怠。?

3. 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)后才能通過注冊(cè)上來(lái)的別名host對(duì)應(yīng)到真正的ip地址蹬刷。?

> 部署docker容器時(shí)經(jīng)常會(huì)遇到需要映射宿主機(jī)的配置文件到容器里,這樣容器重啟后配置就不會(huì)重置频丘。?

> 比如storm配置:- "./storm.yaml:/conf/storm.yaml"

> 但是映射后如果本地沒有正確格式的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ù)表過濾而克。

## 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幕随,提交后即可看到其所有容器信息。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宿接,一起剝皮案震驚了整個(gè)濱河市赘淮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌睦霎,老刑警劉巖梢卸,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異副女,居然都是意外死亡蛤高,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門碑幅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)戴陡,“玉大人,你說我怎么就攤上這事沟涨⌒襞” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵裹赴,是天一觀的道長(zhǎng)喜庞。 經(jīng)常有香客問我,道長(zhǎng)篮昧,這世上最難降的妖魔是什么赋荆? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮懊昨,結(jié)果婚禮上窄潭,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好嫉你,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布月帝。 她就那樣靜靜地躺著,像睡著了一般幽污。 火紅的嫁衣襯著肌膚如雪嚷辅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天距误,我揣著相機(jī)與錄音簸搞,去河邊找鬼。 笑死准潭,一個(gè)胖子當(dāng)著我的面吹牛趁俊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播刑然,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼寺擂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了泼掠?” 一聲冷哼從身側(cè)響起怔软,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎择镇,沒想到半個(gè)月后挡逼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沐鼠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年挚瘟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饲梭。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乘盖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出憔涉,到底是詐尸還是另有隱情订框,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布兜叨,位于F島的核電站穿扳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏国旷。R本人自食惡果不足惜矛物,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望跪但。 院中可真熱鬧履羞,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至糙及,卻和暖如春详幽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背浸锨。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工唇聘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人柱搜。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓雳灾,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親冯凹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345