zookeeper搭建集群有兩點注意:
1、data目錄下myid文件中的數(shù)字不能重復(fù)(data文件路徑可以在zoo.cnf中自己指定)
2暑刃、在zoo.cnf中要指定所有的zookeeper的ip和端口
docker搭建zk集群:
(ps:本文使用文件拷貝的方式來配置zk的集群,應(yīng)該不是最佳的解決方案膜眠,dockerHub提供一種方式啟動,但是一個zk節(jié)點掛點其他也會掛掉,故暫時使用以下方式配置)
一宵膨、下載docker
略架谎。。辟躏。
二谷扣、下載zk鏡像
docker pull registry.docker-cn.com/library/zookeeper
三、創(chuàng)建自定義的bridge捎琐,這一步必須的会涎,否側(cè)集群中通信只能通過ip比較麻煩,注冊到同一個bridge容器間可以通過容器名進行通信
docker network create -d bridge my-net
四瑞凑、啟動三個zk容器
docker run -d --name zookeeper01 -p 22181:2181 --network=my-net registry.docker-cn.com/library/zookeeper
docker run -d --name zookeeper02 -p 22182:2181 --network=my-net registry.docker-cn.com/library/zookeeper
docker run -d --name zookeeper03 -p 22183:2181 --network=my-net registry.docker-cn.com/library/zookeeper
(ps: -p后第一個端口為映射的本地端口可以隨便起末秃,但是不能重復(fù))
隨便找一個zk容器,拷貝出其中一個zoo.cfg
docker cp 容器id:conf/zoo.cfg zoo.cfg
用vim打開拷貝出來的zoo.cfg籽御,并在末尾增加集群配置:
server.1=zookeeper01:2881:3881
server.2=zookeeper02:2881:3881
server.3=zookeeper03:2881:3881
因為注冊到同一個bridge所以可以用容器名字進行通信
···
docker cp 第一個容器id:conf/zoo.cfg zoo.cfg
docker cp 第二個容器id:conf/zoo.cfg zoo.cfg
docker cp 第三個容器id:conf/zoo.cfg zoo.cfg
···
修改完zoo.cfg后我們還要修改容器data/myid练慕,在集群中的id
因為容器中的myid默認(rèn)都是1,故我們直接修改第二個和第三個
echo 2 >myid
將myid拷貝到第二個容器
docker cp myid:第二個容器id:/data/myid
修改myid為3
vim myid 自己改成三然后拷貝到第三個容器
最后重啟三個zk容器
docker restart 第一個容器id
docker restart 第一個容器id
docker restart 第一個容器id
測試:
進入鏡像查看狀態(tài)
docker exec -it 容器id /bin/sh
bin/zkServer.sh status
一個leader兩個follower
完畢<继汀A褰!