一、準備
3臺虛擬機安裝linux,centos7.
網絡連接使用NAT模式
二、docker安裝zookeeper
1.啓動docker 服務
service docker start
2.查找鏡像
docker search zookeeper
3.下載鏡像
docker pull zookeeper
4.主機上建立掛載目錄
mkdir -p /opt/zookeeper/data
mkdir -p /opt/zookeeper/conf
5.分別設置每臺機器的server id
cd /opt/zookeeper/data
touch myid
echo 0 > myid
id分別要對應配置文件中的id,即server.0,server.1,server.2
6.編寫zookeeper配置文件zoo.cfg,配置文件放在/opt/zookeeper/conf 目錄下
cd /opt/zookeeper/conf
vim zoo.cfg
clientPort=2181
dataDir=/data
dataLogDir=/data/log
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
server.0=192.168.137.129:2888:3888
server.1=192.168.137.130:2888:3888
server.2=192.168.137.131:2888:3888
注意:若安裝單機版zookeeper,則配置文件如下:
clientPort=2181
dataDir=/data
dataLogDir=/data/log
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
7.在三臺機器上分別啓動容器(使用docker-compose編排zookeeper步驟爲8-14步)
docker run --network host -v /opt/zookeeper/data:/data -v /opt/zookeeper/conf:/conf --name zookeeper_rh -d docker.io/zookeeper
注意:
命令說明:
--network host: 使用主機上的網絡配置,如果不用這種模式,而用默認的bridge模式,會導致容器跨主機間通信失敗
-v /opt/zookeeper/data:/data:主機的數據目錄掛載到容器/data下
-v /opt/zookeeper/conf:/conf: 主機的配置目錄掛載到容器的/conf下,容器內的zkServer.sh默認會讀取/conf/zoo.cfg下的配置
8.編排zookeeper.yml
cd /opt/zookeeper/dockerfile
vim zookeeper.yml
zookeeper_rh:
image: zookeeper
container_name: zookeeper_rh
restart: always
volumes:
- /opt/zookeeper/data:/data
- /opt/zookeeper/conf:/conf
ports:
- "2181:2181"
9.構建zookeeper容器
docker-compose -f /opt/zookeeper/dockerfile/zookeeper.yml up
10.啓動容器
docker-compose -f /opt/zookeeper/dockerfile/zookeeper.yml start
11.編輯開機啓動腳本
cd /opt/zookeeper/dockerfile
vim boot_zookeeper
#!/bin/bash
#chkconfig:2345 30 80
case $1 in
start)
docker-compose -f /opt/zookeeper/zookeeper.yml start
;;
stop)
docker-compose -f /opt/zookeeper/zookeeper.yml stop
;;
restart)
docker-compose -f /opt/zookeeper/zookeeper.yml restart
;;
*)
echo "require start|stop|restart" ;;
esac
12.上傳 boot_zookeeper到/etc/init.d/
cp boot_zookeeper /etc/init.d
13.添加執行權限
chmod +x /etc/init.d/boot_zookeeper
14.加入開機啓動
chkconfig --add boot_zookeeper
15.開啓2181端口
vim /etc/sysconfig/iptables
# 加入如下代碼
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT
16.保存退出後重啓防火牆
service iptables restart
17.查看容器狀態
選擇一臺服務器,進入容器,在zookeeper的bin目錄下執行 ./zkServer.sh status,可看到該節點是leader還是follower
docker ps
docker exec -it 546 bash
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
546a2cf471ad zookeeper "/docker-entrypoint.…" 27 minutes ago Up 27 minutes zookeeper_1
[root@localhost ~]# docker exec -it 546 bash
root@localhost:/apache-zookeeper-3.7.0-bin# docker exec -it 546 bashdocker exec -it 546 bash
bash: docker: command not found
root@localhost:/apache-zookeeper-3.7.0-bin# ls
LICENSE.txt NOTICE.txt README.md README_packaging.md bin conf docs lib
root@localhost:/apache-zookeeper-3.7.0-bin# cd bin
root@localhost:/apache-zookeeper-3.7.0-bin/bin# ls
README.txt zkCli.cmd zkEnv.cmd zkServer-initialize.sh zkServer.sh zkSnapShotToolkit.sh zkSnapshotComparer.sh zkTxnLogToolkit.sh
zkCleanup.sh zkCli.sh zkEnv.sh zkServer.cmd zkSnapShotToolkit.cmd zkSnapshotComparer.cmd zkTxnLogToolkit.cmd
root@localhost:/apache-zookeeper-3.7.0-bin/bin# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
root@localhost:/apache-zookeeper-3.7.0-bin/bin#