目前只有2台云服务器不够,搭建3个虚拟机来玩玩zookeeper

先拉zookeeper镜像,建议配置阿里云加速器,国外docker官网很慢的   https://blog.csdn.net/ypp91zr/article/details/88607254

环境,3台虚拟机 192.168.13.111    192.168.13.222   192.168.13.233  都是linux7  内核3.10

docker以及jdk等安装请自行百度、google安装或者本人其他文章也有   https://blog.csdn.net/ypp91zr/article/details/88606662

 

创建挂载目录

用于存储配置文件和数据。使用docker数据和配置文件等肯定是要放在自己宿主机,不是容器内,特别是数据

mkdir -p zookeeper/conf

mkdir -p zookeeper/data

至于放在什么地方,随意。我是放在ypp这个总目录下的,这里面包括了很多其他东西,zookeeper只是一部分,3台机器都各自建立对应的目录。

在conf创建配置文件:

touch zoo.cfg:

clientPort=2181 
dataDir=/data 
dataLogDir=/data/log 
tickTime=2000 
initLimit=5 
syncLimit=2 
autopurge.snapRetainCount=3 
autopurge.purgeInterval=0 
maxClientCnxns=60 
server.111=192.168.13.111:2888:3888 
server.222=192.168.13.222:2888:3888 
server.233=192.168.13.233:2888:3888

3台机器分别配置一样的

clientPort:客户端连接端口,监听客户端连接的端口

dataDir:数据文件目录+数据持久化路径

dataLogDir:日志文件目录

tickTime通信心跳数Zookeeper服务器心跳时间,单位毫秒

                 Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会               发送一个心跳时间单位为毫秒。

                 它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间(session的最小超时时间是2*tickTime)

initLimit:leader(L)-follower(F)初始通信时限

                集群中的follower跟随者服务器(F)与leader领导者服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量),             用它来限定集群中的Zookeeper服务器连接到Leader的时限。

                投票选举新leader的初始化时间

                Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。

                Leader允许F在initLimit时间内完成这个工作。

syncLimit:leader(L)-follower(F)同步通信时限

                   集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime,

                   Leader认为Follwer死掉,从服务器列表中删除Follwer。

                   在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。

                   如果L发出心跳包在syncLimit之后,还没有从F那收到响应,那么就认为这个F已经不在线了。

具体的配置项请参照:https://www.cnblogs.com/smail-bao/p/7009633.html

配置myid:

在zookeeper/data目录下创建myid,并配置id,里面的id一定要和上面配置的server.id一致,比如我111的服务器,id就是111,就是server.后面的111 server.111(server.id)

先查询是否有镜像,docker search zookeeper:3.14.13  否则拉镜像会失败,一般都会有.  这里使用3.4.13的

拉镜像到本地  docker pull zookeeper:3.4.13    3台机器一样的

所有的pull complete才是拉取成功

3台主机运行zookeeper镜像,启动容器

docker run  --network host -v /ypp/zookeeper/data:/data -v /ypp/zookeeper/conf:/conf --name zookeeper-2181 -d zookeeper:3.4.13

运行启动容器成功,如果docker关了,下次也可以继续使用,启动容器(name)就是了  docker start zookeeper-2181 或者用容器id启动也可以 docker start  e1a0ac9fc80f

命令说明:

  • --network host: 使用主机上的网络配置,如果不用这种模式,而用默认的bridge模式,会导致容器跨主机间通信失败
  • -v /ypp/zookeeper/data:/data:主机的数据目录挂载到容器/data下
  • -v /ypp/zookeeper/conf:/conf: 主机的配置目录挂载到容器的/conf下,容器内的zkServer.sh默认会读取/conf/zoo.cfg下的配置

都启动完成后,每台主机的2181/2888/3888端口都会开放出来了.如果使用的阿里云、腾讯云等服务器,注意安全组放行端口,不然找半天问题没找到问题,忘了放端口给外部,本人之前忘了一次,找了足足3个小时没找到原因才想起。

 

检查zookeeper运行情况,进入容器  docker exec -it  zookeeper-2181 /bin

192.168.13.222这台机器是leader领导者,其他2台是follower跟随者。运行期中leader故障后可以用客户端连接写自己的算法来进行leader选举

集群搭建成功

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐