Zookeeper完全分布式集群服务

准备好3台服务器:

  • [x]A-> centos-helios:192.168.19.1
  • [x]B-> centos-hestia:192.168.19.2
  • [x]C-> centos-hebe:192.168.19.3

⚠️ [注意事项]:

1.一定要确定3台服务器之间可以相互通信

2.如果是采用的阿里云等服务器的话,一定要配置主机名与IP映射,否则会连接拒绝等问题

配置Zookeeper安装目录

  • 在3台宿主机配置zookeeper安装目录:/docker/zookeeper

  • 并且在文件夹创建 data 和logs 目录:mkdir -p /docker/zookeeper/data && mkdir -p /docker/zookeeper/logs

  1. mkdir -p /docker/zookeeper/data
  2. mkdir -p /docker/zookeeper/logs
  • 授权文件目录:chmod -R 777 /docker/zookeeper/

安装和部署Zookeeper

拉取zookeeper镜像:docker pull zookeeper:3.5.6

  1. [root@centos-helios ~]# docker pull zookeeper:3.5.6
  2. 3.5.6: Pulling from library/zookeeper
  3. 8ec398bc0356: Pull complete
  4. 8e866b095956: Pull complete
  5. e18af1784b1f: Pull complete
  6. 9cec9f51936c: Pull complete
  7. 475dcbe0e2e9: Pull complete
  8. 222ebb7346b3: Pull complete
  9. f0552f5b3f6c: Pull complete
  10. cdfcdbc43b13: Pull complete
  11. Digest: sha256:6b6b5f7fb6a47d2b311df5af1718af5a425a679dbb844d77913fa68d1a8bf0fd
  12. Status: Downloaded newer image for zookeeper:3.5.6
  13. docker.io/library/zookeeper:3.5.6
  14. [root@centos-helios ~]#

⚠️ [注意事项]:

1.由于Zookeeper是一个常规的基础服务组件,我这直接拉取Docker hub镜像,有兴趣的可以自行构建镜像部署

2.这里只对centos-helios有举例,另外2台需要执行相同操作,以下不再赘述

临时安装Zookeeper服务:zookeeper-tmp-server

  1. docker run -itd -p 2181:2181 --restart always --name=zookeeper-tmp-server --privileged=true \
  2. -v /docker/develop/zookeeper/data:/data \
  3. -v /docker/develop/zookeeper/datalog:/datalog \
  4. -v /docker/develop/zookeeper/logs:/logs \
  5. -e "ZOO_STANDALONE_ENABLED=true" \
  6. -e "TZ=Asia/Shanghai" \
  7. -e "ZOO_4LW_COMMANDS_WHITELIST=*" \
  8. -e "ZOO_AUTOPURGE_SNAPRETAINCOUNT=5" \
  9. -e "ZOO_AUTOPURGE_PURGEINTERVAL=24" \
  10. -e "ZOO_MAX_CLIENT_CNXNS=64" \
  11. -e "ZOO_TICK_TIME=2000" \
  12. -e "ZOO_INIT_LIMIT=100" \
  13. -e "ZOO_SYNC_LIMIT=5" \
  14. zookeeper:3.5.6

复制zookeeper-tmp-server的conf到/docker/zookeeper:

1.查看容器列表:docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}"

  1. [root@centos-helios zookeeper]# docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}"
  2. CONTAINER ID NAMES PORTS
  3. 71ad055739b6 zookeeper-tmp-server 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp
  4. [root@centos-helios zookeeper]#

2.执行Docker cp 命令:docker cp Zookeeper容器ID:/conf /docker/zookeeper/

  1. [root@centos-helios zookeeper]# docker cp 71ad055739b6:/conf /docker/zookeeper/
  2. [root@centos-helios zookeeper]#

centos-helios:docker cp 71ad055739b6:/conf /docker/zookeeper/

centos-hebe:docker cp bf9df9966efb:/conf /docker/zookeeper/

centos-hestia:docker cp 4b4f8e813c80:/conf /docker/zookeeper/

编写zookeeper的zoo.cfg配置文件:

1.服务器集群配置:

  • [x]centos-helios:192.168.19.1:2888:3888
  • [x]centos-hestia:192.168.19.2:2888:3888
  • [x]centos-hebe:192.168.19.3:2888:3888

2.对应的配置文件配置如下:

  • [x]centos-helios:/docker/zookeeper/conf/zoo.cfg
  1. tickTime=2000
  2. initLimit=100
  3. syncLimit=5
  4. dataDir=/data
  5. dataLogDir=/datalog
  6. clientPort=2181
  7. quorumListenOnAllIPs=true
  8. preAllocSize=64M
  9. globalOutstandingLimit=100000
  10. snapCount=50000
  11. maxClientCnxns=64
  12. minSessionTimeout=4000
  13. maxSessionTimeout=40000
  14. 4lw.commands.whitelist=*
  15. admin.enableServer=true
  16. server.1=192.168.19.1:2888:3888
  17. server.2=192.168.19.2:2888:3888
  18. server.3=192.168.19.3:2888:3888
  19. tcpKeepAlive=true
  20. ipReachableTimeout=0
  21. cnxTimeout=3
  22. electionAlg=3
  23. autopurge.snapRetainCount=5
  24. autopurge.purgeInterval=24
  25. #忽略ACL验证
  26. skipACL=yes
  27. forceSync=yes
  • [x]centos-hestia:/docker/zookeeper/conf/zoo.cfg
  1. tickTime=2000
  2. initLimit=100
  3. syncLimit=5
  4. dataDir=/data
  5. dataLogDir=/datalog
  6. clientPort=2181
  7. quorumListenOnAllIPs=true
  8. preAllocSize=64M
  9. globalOutstandingLimit=100000
  10. snapCount=50000
  11. maxClientCnxns=64
  12. minSessionTimeout=4000
  13. maxSessionTimeout=40000
  14. 4lw.commands.whitelist=*
  15. admin.enableServer=true
  16. server.1=192.168.19.1:2888:3888
  17. server.2=192.168.19.2:2888:3888
  18. server.3=192.168.19.3:2888:3888
  19. tcpKeepAlive=true
  20. ipReachableTimeout=0
  21. cnxTimeout=3
  22. electionAlg=3
  23. autopurge.snapRetainCount=5
  24. autopurge.purgeInterval=24
  25. #忽略ACL验证
  26. skipACL=yes
  27. forceSync=yes
  • [x]centos-hebe:/docker/zookeeper/conf/zoo.cfg
  1. tickTime=2000
  2. initLimit=100
  3. syncLimit=5
  4. dataDir=/data
  5. dataLogDir=/datalog
  6. clientPort=2181
  7. quorumListenOnAllIPs=true
  8. preAllocSize=64M
  9. globalOutstandingLimit=100000
  10. snapCount=50000
  11. maxClientCnxns=64
  12. minSessionTimeout=4000
  13. maxSessionTimeout=40000
  14. 4lw.commands.whitelist=*
  15. admin.enableServer=true
  16. server.1=192.168.19.1:2888:3888
  17. server.2=192.168.19.2:2888:3888
  18. server.3=192.168.19.3:2888:3888
  19. tcpKeepAlive=true
  20. ipReachableTimeout=0
  21. cnxTimeout=3
  22. electionAlg=3
  23. autopurge.snapRetainCount=5
  24. autopurge.purgeInterval=24
  25. #忽略ACL验证
  26. skipACL=yes
  27. forceSync=yes

⚠️ [注意事项]:如果是采用阿里云等云服务器部署,一般设置为:

  1. server.1=阿里云[外网IP OR 内网IP]:2888:3888
  2. server.2=阿里云[外网IP OR 内网IP]:2888:3888
  3. server.3=阿里云[外网IP OR 内网IP]:2888:3888

编写正式安装Dcoekr命令:

  • [x]centos-helios:
  1. docker run -itd -p 2181:2181 -p 2888:2888 -p 3888:3888 --restart always --name=zookeeper-server --hostname zookeeper-server --privileged=true \
  2. -v /docker/zookeeper/conf/zoo.cfg:/conf/zoo.cfg \
  3. -v /docker/zookeeper/data:/data \
  4. -v /docker/zookeeper/datalog:/datalog \
  5. -v /docker/zookeeper/logs:/logs \
  6. -e "TZ=Asia/Shanghai" \
  7. -e "ZOO_MY_ID=1" \
  8. -e "JAVA_OPTS=-server -Xms512m -Xmx512m -Xmn256m -Duser.home=/opt -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:+AlwaysPreTouch -XX:-UseBiasedLocking" \
  9. zookeeper:3.5.6
  • [x]centos-hestia:
  1. docker run -itd -p 2181:2181 -p 2888:2888 -p 3888:3888 --restart always --name=zookeeper-server --hostname zookeeper-server --privileged=true \
  2. -v /docker/zookeeper/conf/zoo.cfg:/conf/zoo.cfg \
  3. -v /docker/zookeeper/data:/data \
  4. -v /docker/zookeeper/datalog:/datalog \
  5. -v /docker/zookeeper/logs:/logs \
  6. -e "TZ=Asia/Shanghai" \
  7. -e "ZOO_MY_ID=2" \
  8. -e "JAVA_OPTS=-server -Xms512m -Xmx512m -Xmn256m -Duser.home=/opt -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:+AlwaysPreTouch -XX:-UseBiasedLocking" \
  9. zookeeper:3.5.6
  • [x]centos-hebe:
  1. docker run -itd -p 2181:2181 -p 2888:2888 -p 3888:3888 --restart always --name=zookeeper-server --hostname zookeeper-server --privileged=true \
  2. -v /docker/zookeeper/conf/zoo.cfg:/conf/zoo.cfg \
  3. -v /docker/zookeeper/data:/data \
  4. -v /docker/zookeeper/datalog:/datalog \
  5. -v /docker/zookeeper/logs:/logs \
  6. -e "TZ=Asia/Shanghai" \
  7. -e "ZOO_MY_ID=3" \
  8. -e "JAVA_OPTS=-server -Xms512m -Xmx512m -Xmn256m -Duser.home=/opt -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:+AlwaysPreTouch -XX:-UseBiasedLocking" \
  9. zookeeper:3.5.6

后续服务配置

1.开放端口[2181 2888 3888]

  • [1].启动防火墙:systemctl start firewalld.service
  • [2].查看防火墙状态:systemctl status firewalld.service
  • [3].开放端口:firewall-cmd --zone=public --add-port=端口号/tcp --permanent
  1. firewall-cmd --zone=public --add-port=2181/tcp --permanent
  2. firewall-cmd --zone=public --add-port=2888/tcp --permanent
  3. firewall-cmd --zone=public --add-port=3888/tcp --permanent
  • [4].加载初始化防火墙生效:firewall-cmd --reload
  • [5].停用防火墙:systemctl stop firewalld.service

⚠️ [注意事项]:

1.如果是Centos7以及以上系统,防火墙默认是firewall,对于Centos7版本请自行进行配置

2.依据实测,对于2888和3888等端口必须开放,否则在使用Zookeeper服务的时候会报连接[KeeperErrorCode = ConnectionLoss]错误

2.配置启动以及测试zookeeper服务:

  • [x]启动容器Zookeeper服务顺序:A->B->C-重启A
  • [x]进入容器输入:bin/zkServer.sh status

    centos-helios:
  1. root@zookeeper-server:/apache-zookeeper-3.5.6-bin# bin/zkServer.sh status
  2. ZooKeeper JMX enabled by default
  3. Using config: /conf/zoo.cfg
  4. Client port found: 2181. Client address: localhost.
  5. Mode: follower
  6. root@zookeeper-server:/apache-zookeeper-3.5.6-bin#

centos-hestia:

  1. root@zookeeper-server:/apache-zookeeper-3.5.6-bin# bin/zkServer.sh status
  2. ZooKeeper JMX enabled by default
  3. Using config: /conf/zoo.cfg
  4. Client port found: 2181. Client address: localhost.
  5. Mode: leader
  6. root@zookeeper-server:/apache-zookeeper-3.5.6-bin#

centos-hebe:

  1. root@zookeeper-server:/apache-zookeeper-3.5.6-bin# bin/zkServer.sh status
  2. ZooKeeper JMX enabled by default
  3. Using config: /conf/zoo.cfg
  4. Client port found: 2181. Client address: localhost.
  5. Mode: follower
  6. root@zookeeper-server:/apache-zookeeper-3.5.6-bin#

⚠️ [注意事项]:

1.Zookeeper的集群服务采用的是Leader-Follower线程模型,如上所述。

2.Zookeeper使用了ZAB(Zookeeper Atomic Broadcast)协议,保证了leader,follower的一致性,leader 负责数据的读写,而follower只负责数据的读,如果follower遇到写操作,会提交到leader。

版权声明:本文为博主原创文章,遵循相关版权协议,如若转载或者分享请附上原文出处链接和链接来源。

Linux Centos7 环境搭建Docker部署Zookeeper分布式集群服务实战的更多相关文章

  1. Linux Centos7 环境基于Docker部署Zookeeper服务搭建实战

    配置Zookeeper安装目录 在宿主机配置zookeeper安装目录:/docker/develop/zookeeper 并且在文件夹创建 data 和logs 目录: mkdir -p /dock ...

  2. 在 Linux 多节点安装配置 Apache Zookeeper 分布式集群

    规划: 三台物理服务器就形成了(法定人数).对于高可用性集群,您可以使用高于3的任何奇数.例如,如果设置5台服务器,则集群可以处理两个故障节点等. 物理服务器需要开启的端口 2888 , 3888 和 ...

  3. Ganglia环境搭建并监控Hadoop分布式集群

    简介 Ganglia可以监控分布式集群中硬件资源的使用情况,例如CPU,内存,网络等资源.通过Ganglia可以监控Hadoop集群在运行过程中对集群资源的调度,作为简单地运维参考. 环境搭建流程 1 ...

  4. (转)CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集群服务与使用

    RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python.Ruby..NET.Java.JMS.C.PHP.ActionScript.XMPP.STO ...

  5. Spark(二)CentOS7.5搭建Spark2.3.1分布式集群

    一 下载安装包 1 官方下载 官方下载地址:http://spark.apache.org/downloads.html 2  安装前提 Java8         安装成功 zookeeper  安 ...

  6. Flink(二)CentOS7.5搭建Flink1.6.1分布式集群

    一. Flink的下载 安装包下载地址:http://flink.apache.org/downloads.html  ,选择对应Hadoop的Flink版本下载 [admin@node21 soft ...

  7. Windows10+VMware Workstation Pro+Ubuntu 16.04+Hadoop-2.6.5+IDEA环境搭建(单机&伪分布式&集群)

    (注:下面出现的"czifan"为用户名,需替换成自己的用户名) 本篇博客是在实践该篇博客的过程中的一些补充和修改~ 0 - 安装VMware Workstation Pro 首先 ...

  8. CentOs7.3 搭建 Redis-4.0.1 Cluster 集群服务

    环境 VMware版本号:12.0.0 CentOS版本:CentOS 7.3.1611 三台虚拟机(IP):192.168.252.101,192.168.102..102,192.168.252. ...

  9. docker 部署 zookeeper+kafka 集群

    主机三台172.16.100.61172.16.100.62172.16.100.63Docker 版本 当前最新版 # 部署zk有2种方法 ## 注意 \后不要跟空格 一 . 端口映射 172.16 ...

随机推荐

  1. php开发微信支付获取用户地址

    http://mp.weixin.qq.com/s/uNpWE_Z5RZ48PDIWkmGBYQ 使用微信获取地址信息是和微信支付一道申请的,微信支付申请通过,就可以使用该功能. 微信商城中,使用微信 ...

  2. maven中如果使用本地jar

    1.安装到本地仓库class12.jar这个东西在中央仓库里没有,所以,cmd到oracle\product\10.2.0\db_1\jdbc\lib路径下,mvn install 就好了(发布第三方 ...

  3. dubbo开启access log步骤

    1,maven依赖 maven version由2.5.3调整为2.5.3.2 <dependency>     <groupId>com.alibaba</groupI ...

  4. Ubuntu 18.04LTS安装配置Java OpenJDK8

    安装OpenJDK8 sudo apt-get install openjdk-8-jdk 配置Java环境变量 sudo vim /etc/profile 在profile末尾添加以下内容: exp ...

  5. 系统学习前端之FormData详解

    FormData 1. 概述 FormData类型其实是在XMLHttpRequest 2级定义的,它是为序列化表以及创建与表单格式相同的数据(当然是用于XHR传输)提供便利. 2. 构造函数 创建一 ...

  6. H3C ISDN功能组和参考点

  7. php中 instanceof有什么作用

    php中 instanceof有什么作用 作用:(1)判断一个对象是否是某个类的实例,(2)判断一个对象是否实现了某个接口.

  8. ip2long与long2IP 分析

    <?php $ip='47.93.97.127'; $long=sprintf("%u",ip2long($ip));//string(9) "794648959& ...

  9. Python--day69--ORM聚合查询和分组查询

    聚合查询和分组查询 聚合 aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典. 键的名称是聚合值的标识符,值是计算出来的聚合值.键的名称是按照字段和聚合 ...

  10. hdu 1045 Fire Net(dfs)

    Fire Net Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...