🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
三台主机: - 主机一:172.16.3.52 - 主机一:172.16.3.63 - 主机一:172.16.3.64 1、下载镜像 ``` docker pull zookeeper:3.4.12 ``` 2、在主机上建立挂载目录和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 ``` 三台主机上的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、在主机一上为自己分配server id,命令如下: ``` cd /home/data/zookeeper_data/data echo "0" > myid ``` 在主机二上为自己分配server id,命令如下: ``` cd /home/data/zookeeper_data/data echo "1" > myid ``` 在主机二上为自己分配server id,命令如下: ``` cd /home/data/zookeeper_data/data echo "2" > myid ``` 4、三台主机依次启动容器: ``` 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 ``` 命令说明: - --network host: 使用主机上的网络配置,如果不用这种模式,而用默认的bridge模式,会导致容器跨主机间通信失败 - -v /data/zookeeper_data/data:/data:主机的数据目录挂载到容器/data下 - -v /data/zookeeper_data/conf:/conf: 主机的配置目录挂载到容器的/conf下,容器内的zkServer.sh默认会读取/conf/zoo.cfg下的配置 都启动完成后,每台主机的2181/2888/3888端口都会开放出来了 5、验证 ``` docker exec -it 容器id /bin/bash ``` ``` docker logs 容器id/容器名称 ``` 使用windows工具zoolnspector ![image.png](https://upload-images.jianshu.io/upload_images/7100414-76c608a5c205cb91.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 6、排错 前面两台发现没有问题,后面有台机器报错。 权限不足,发现用户不一样: ``` [root@bogon conf]# id #不能启动的主机用户 uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 #正常的主机用户 uid=0(root) gid=0(root) 组=0(root) ``` 根据后面的信息我查到是因为selinux的原因。 ``` [root@bogon conf]# docker logs -f 19f5e6824a57 chown: /data: Permission denied chown: /data: Permission denied ``` 这是因为开启了SELinux,解决办法: ①直接将SELinux的工作模式设置成 disabled,这样就不会出现策略拦截问题了,但是这样的话我们的系统就没有SELinux安全防护了 ②通过 restorecon 或者 chcon 命令来修复我们的文件上下文信息 命令 restorecon 可以用来恢复文件默认的上下文: ``` restorecon -R -v /home/data/zookeeper_data/  ```  //-R 表示递归,如果是目录,则该目录下的所有子目录、文件都会得到修复   命令 chcon 可以改变文件的上下文信息,通常我们使用一个参照文件来进行修改: ``` chcon --reference=/var/www/html/index.html /var/www/html/test.html restorecon -v zoo.cfg ```