前言node
其實zookeeper在通常的公司的應用不太多,註冊中心、分佈式鎖、選舉等等。以前用dubbo,就會用到zookeeper做爲服務註冊中心,如今轉向springcloud,就不多用zookeeper了。可是近期研究分佈式鎖,對比了不少方案,好比數據庫,redis,zookeeper等等,最終仍是選擇zookeeper,至於緣由會在後續的文章中提到。
在開發環境中,你們應該都用的是zookeeper單點吧,可是在生產環境中我相信沒有人敢用單點的,應該都是用的集羣,由於萬一單點掛掉的話,咱們的應用也就天然而然的ConnectionException。那麼,接下來我就記錄一下我本身用docker搭建zookeeper集羣。redis
準備工具spring
1、安裝docker
2、在docker庫獲取鏡像:zookeeper(tips:我下載的版本是3.4.13)docker
搭建數據庫
1、啓動zookeeper單點,在開發環境中通常都用單點分佈式
docker run -d -p 2181:2181 --restart always --name zookeeper \ -v $PWD/volume/data:/data \ -v $PWD/volume/datalog:/datalog \ zookeeper:3.4.13
2、zookeeper 集羣搭建,這裏我準備利用三個zookeeper節點組成一個集羣,而且三個節點都在同一臺主機上,若是須要節點原型在不一樣的主機上,修改對應的ip和端口便可工具
-- 建立節點文件夾 mkdir cluster/node1 -p && mkdir cluster/node2 -p && mkdir cluster/node3 -p -- 機器ip machine_ip=10.82.12.95 -- 運行節點1 docker run -d -p 2181:2181 -p 2887:2888 -p 3887:3888 --name zookeeper_node1 --restart always \ -v $PWD/cluster/node1/volume/data:/data \ -v $PWD/cluster/node1/volume/datalog:/datalog \ -e "TZ=Asia/Shanghai" \ -e "ZOO_MY_ID=1" \ -e "ZOO_SERVERS=server.1=0.0.0.0:2888:3888 server.2=$machine_ip:2888:3888 server.3=$machine_ip:2889:3889" \ zookeeper:3.4.13 -- 運行節點2 docker run -d -p 2182:2181 -p 2888:2888 -p 3888:3888 --name zookeeper_node2 --restart always \ -v $PWD/cluster/node2/volume/data:/data \ -v $PWD/cluster/node2/volume/datalog:/datalog \ -e "TZ=Asia/Shanghai" \ -e "ZOO_MY_ID=2" \ -e "ZOO_SERVERS=server.1=$machine_ip:2887:3887 server.2=0.0.0.0:2888:3888 server.3=$machine_ip:2889:3889" \ zookeeper:3.4.13 -- 運行節點3 docker run -d -p 2183:2181 -p 2889:2888 -p 3889:3888 --name zookeeper_node3 --restart always \ -v $PWD/cluster/node3/volume/data:/data \ -v $PWD/cluster/node3/volume/datalog:/datalog \ -e "TZ=Asia/Shanghai" \ -e "ZOO_MY_ID=3" \ -e "ZOO_SERVERS=server.1=$machine_ip:2887:3887 server.2=$machine_ip:2888:3888 server.3=0.0.0.0:2888:3888" \ zookeeper:3.4.13
打開zookeeper連接工具ZooInspector進行測試,沒毛病。。。。。。測試