zookeeper的踩坑之路(三)——用容器的方式部署

容器化部署服务有很多优点,在实际工作中,zookeeper又是分布式系统必不可少的工具,下面根据实际情况介绍一下容器化部署zookeeper集群的方法。

环境介绍:

  • 镜像:镜像是自己制作的,CentOS Linux release 7.6.1810 (Core)+JDK1.8.0_212
  • 宿主机环境:CentOS Linux release 7.4.1708 (Core)
  • zookeeper版本:3.6
  • 容器环境:docker或podman,但是podman环境中的host网络模型并未进行测试。

单机集群搭建

zoo.cfg配置文件内容为:

tickTime=2000

initLimit=10

syncLimit=5

dataDir=data

clientPort=2181

server.1=10.88.0.11:2888:3888
server.2=10.88.0.12:2888:3888
server.3=10.88.0.13:2888:3888
#3.5.5版本以后zookeeper内置了jetty服务器,默认使用8080端口,该配置用于禁用该服务
admin.enableServer=false

在单机模式下,推荐绑定容器环境自身的网络,或者也可以采用host网络模型(后面会说明),不推荐绑定127.0.0.1、localhost、本机IP。
server.id配置项中的IP可以自定义,或0.0.0.0。
容器创建命令:

docker run -d -v /root/zookeeper_cluster/zookeeper01:/workdir -p 2181:2181 --ip 10.88.0.11 --name zookeeper01 {镜像名称}

在docker环境下,由于可以自定义网络模型,-ip配置项可以自定义。但是podman环境中并未找到网络模型的设置项(未注册),其默认的网络模式网关为10.88.0.1,当然,这个也只是我这边机器的情况,不保证所有设备中的均是如此。

多机集群搭建

使用host网络模型

zoo.cfg配置如下:

tickTime=2000

initLimit=10

syncLimit=5

dataDir=data

clientPort=2181

admin.enableServer=false

server.1={节点1IP}:2888:3888
server.2={节点2IP}:2888:3888
server.3={节点3IP}:2888:3888

该情况下,server.id配置项中请填入各节点实际IP。
容器创建命令:

docker run -d -v /root/dockerContainer/zookeeper:/workdir --net host --name zookeeper {镜像名称}

从创建命令中可以看出,使用host网络模型,不需要再命令中指定端口映射,容器使用的端口与主机一致。
该模式介绍如下:

  • 容器与主机在相同的网络命名空间下面,使用相同的网络协议栈,容器可以直接使用主机的所有网络接口。
  • host 模式 不能使用端口映射和自定义路由规则,这些都与主机一致,-p 与-icc 参数是无效的。
  • host 模式下面的网络模型是最简单和最低延迟的模式,容器进程直接与主机网络接口通信,与物理机性能一致。
    其特点如下:
  • host 模式简单并且性能高。
  • host 不利于网络自定配置和管理,并且所有主机的容器使用相同的IP。也不利于主机资源的利用。
  • 对网络性能要求比较高,可以使用该模式。否则应该使用其他模式。
    具体请参考docker 网络-host

其它网络模式

节点1中的zoo.cfg配置如下,其余节点依此类推:

tickTime=2000

initLimit=10

syncLimit=5

dataDir=data

clientPort=2181

admin.enableServer=false

server.1=0.0.0.0:2888:3888
server.2={节点2IP}:2888:3888
server.3={节点3IP}:2888:3888

容器创建命令如下:

docker run -d -v /root/dockerContainer/zookeeper:/workdir -p 2181:2181 -p 2888:2888 -p 3888:3888 --name zookeeper {镜像名称}

你可能感兴趣的:(zookeeper)