三臺(tái)主機(jī):
- 主機(jī)一:172.16.3.52
- 主機(jī)一:172.16.3.63
- 主機(jī)一:172.16.3.64
1、下載鏡像
docker pull zookeeper:3.4.12
2、在主機(jī)上建立掛載目錄和zookeeper配置文件
mkdir -p /home/data/zookeeper_data/conf \
mkdir -p /home/data/zookeeper_data/data \
cd /home/data/zookeeper_data/conf
touch zoo.cfg
vi zoo.cfg
三臺(tái)主機(jī)上的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=172.16.3.52:2888:3888
server.1=172.16.3.63:2888:3888
server.2=172.16.3.64:2888:3888
3、在主機(jī)一上為自己分配server id,命令如下:
cd /home/data/zookeeper_data/data
echo "0" > myid
在主機(jī)二上為自己分配server id,命令如下:
cd /home/data/zookeeper_data/data
echo "1" > myid
在主機(jī)二上為自己分配server id,命令如下:
cd /home/data/zookeeper_data/data
echo "2" > myid
4、三臺(tái)主機(jī)依次啟動(dòng)容器:
docker run --restart=always --network host -v /home/data/zookeeper_data/data:/data -v /home/data/zookeeper_data/conf:/conf --name zookeeper -d zookeeper:3.4.12
命令說(shuō)明:
- --network host: 使用主機(jī)上的網(wǎng)絡(luò)配置,如果不用這種模式,而用默認(rèn)的bridge模式,會(huì)導(dǎo)致容器跨主機(jī)間通信失敗
- -v /data/zookeeper_data/data:/data:主機(jī)的數(shù)據(jù)目錄掛載到容器/data下
- -v /data/zookeeper_data/conf:/conf: 主機(jī)的配置目錄掛載到容器的/conf下,容器內(nèi)的zkServer.sh默認(rèn)會(huì)讀取/conf/zoo.cfg下的配置
都啟動(dòng)完成后,每臺(tái)主機(jī)的2181/2888/3888端口都會(huì)開(kāi)放出來(lái)了
5、驗(yàn)證
docker exec -it 容器id /bin/bash
docker logs 容器id/容器名稱
使用windows工具zoolnspector

6、排錯(cuò)
前面兩臺(tái)發(fā)現(xiàn)沒(méi)有問(wèn)題,后面有臺(tái)機(jī)器報(bào)錯(cuò)。
權(quán)限不足,發(fā)現(xiàn)用戶不一樣:
[root@bogon conf]# id
#不能啟動(dòng)的主機(jī)用戶
uid=0(root) gid=0(root) 組=0(root) 環(huán)境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
#正常的主機(jī)用戶
uid=0(root) gid=0(root) 組=0(root)
根據(jù)后面的信息我查到是因?yàn)閟elinux的原因。
[root@bogon conf]# docker logs -f 19f5e6824a57
chown: /data: Permission denied
chown: /data: Permission denied
這是因?yàn)殚_(kāi)啟了SELinux,解決辦法:
①直接將SELinux的工作模式設(shè)置成 disabled,這樣就不會(huì)出現(xiàn)策略攔截問(wèn)題了,但是這樣的話我們的系統(tǒng)就沒(méi)有SELinux安全防護(hù)了
②通過(guò) restorecon 或者 chcon 命令來(lái)修復(fù)我們的文件上下文信息
命令 restorecon 可以用來(lái)恢復(fù)文件默認(rèn)的上下文:
restorecon -R -v /home/data/zookeeper_data/
//-R 表示遞歸,如果是目錄,則該目錄下的所有子目錄、文件都會(huì)得到修復(fù)
命令 chcon 可以改變文件的上下文信息,通常我們使用一個(gè)參照文件來(lái)進(jìn)行修改:
chcon --reference=/var/www/html/index.html /var/www/html/test.html
restorecon -v zoo.cfg