基于Docker单机部署ZooKeeper集群

本文介绍了如何使用Docker部署ZooKeeper集群,对比了Docker部署与裸机部署的区别,强调了Docker在简化网络配置和自动化部署上的优势。详细步骤包括准备docker和docker-compose,配置并启动Zookeeper集群,以及使用四字命令检查集群状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  前面的文章部署zk服务,直接在裸机上部署,较为不便,现在很多服务如果不做docker化,无论在故障恢复、运维都增加很大困难,无法做到自动化部署,这种低效率的IT运营模式是比较难接受的,对于我们开发而已,必须是一键式优雅部署,所以本篇文章采用docker方式部署zk集群,可以从中对比裸机部署过程的不同以及优势

1、部署docker和docker-compose

参考本博客文章:链接

2、部署zookeeper集群

  拉取zk镜像,可以dockerhub上面看下目前的zk官方镜像的tag有什么版本,默认是latest,接着是3.5.5以及3.4.14,这里用的stable版本3.4.14

[root@dn2 opt]# docker pull zookeeper:3.4.14

在宿主机上新建一个存放docker集群zk服务器目录(仅为了方便管理),并在该目录下新建一个compose配置文件

[root@dn2 zk_docker_cluster]# pwd
/opt/zk_docker_cluster
[root@dn2 zk_docker_cluster]# vi docker-compose.yml
version: '3.3'
services:
  zoo1:
    # 使用zookeeper:3.4.14镜像,加上tag标签
    image: zookeeper:3.4.14
    restart: always
    hostname: zoo1
    container_name: zk1
    ports:
      - 2181:2181
    volumes:
    # 宿主机目录路径无需手工创建,docker-compose有权限进行自行创建挂载的目录路径    
      - /opt/zk_docker_cluster/zoo1/data:/data
      - /opt/zk_docker_cluster/zoo1/datalog:/datalog
      - /opt/zk_docker_cluster/zoo1/logs:/logs
      
    environment:
      ZOO_MY_ID: 1
			ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

  zoo2:
    image: zookeeper
    restart: always
    hostname: zoo2
    container_name: zk2
    ports:
      - 2182:2181
    volumes:
      - /opt/zk_docker_cluster/zoo2/data:/data
      - /opt/zk_docker_cluster/zoo2/datalog:/datalog
      - /opt/zk_docker_cluster/zoo2/logs:/logs      
    environment:
      ZOO_MY_ID: 2
			ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

  zoo3:
    image: zookeeper
    restart: always
    hostname: zoo3
    container_name: zk3
    ports:
      - 2183:2181
    volumes:
      - /opt/zk_docker_cluster/zoo3/data:/data
      - /opt/zk_docker_cluster/zoo3/datalog:/datalog
      - /opt/zk_docker_cluster/zoo3/logs:/logs      
    environment:
      ZOO_MY_ID: 3
			ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

配置文件需要注意的地方

在运行前,可以用docker-compose -f docker-compose.yml config检查配置文件是否正确

1)version 版本号不能随便改,例如这里改为1.0,提示不支持

[root@dn2 zk_docker_cluster]# docker-compose -f docker-compose.yml config 
ERROR: Version in "./docker-compose.yml" is unsupported. You might be seeing this error because you're using the wrong Compose file version. Either specify a supported version (e.g "2.2" or "3.3") and place your service definitions under the `services` key, or omit the `version` key and place your service definitions at the root of the file to use version 1.

2)注意yaml语法的层次表达

例如在这里,故意把zoo1放置在service同层次上,引起解析出错,所以在编排zk的配置时,要注意这些细节

ERROR: yaml.parser.ParserError: while parsing a block mapping
  in "./docker-compose .yml", line 1, column 1
expected <block end>, but found '<block mapping start>'
  in "./docker-compose .yml", line 17, column 3

3) 注意到docker-compose yml跟裸机部署集群的不同

  • 例如hostname:

在docker中,无需要指明具体的ip地址,因为docker使用其内部私网为zk服务自动分配私网ip,而且自动DNS解析主机名,因此配置文件可以直接用zoo1这样的主机名

而在裸机部署中,裸机自己的网络设置需要指定具体IP地址,如果zoo.cfg配置用了主机名代替服务器IP,那么要求裸机网卡设定的DNS需支持zk网段的主机名解析

  • 再例如设定集群的server.n:

在docker-compose里,直接主机名,server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 ,前面已经提过,docker内部其实已经对三个zk容器都分配相应的私网地址,通过以下命令查看:

# 列出所有docker容器IP
[root@dn2 zk_docker_cluster]# docker inspect --format='{
   {.Name}} - {
   
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值