docker zookeeper集群

三臺(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


image.png

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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容