Ansible + Docker 部署 Zookeeper 集群

news/2025/9/24 12:24:29/文章来源:https://www.cnblogs.com/dataverse/p/19108953

Ansible + Docker 部署 Zookeeper 集群

1. 服务器和集群信息

1.1 主机列表

IP 主机名 内存(GB) CPU核数 磁盘 操作系统 CPU 架构 已安装软件
10.0.0.13 arc-pro-dc01 my.registry.com 8 1 500GB CentOS 7.9.2009 x86_64 ansible 2.9.27
Docker version 28.1.1
Docker Compose version v2.39.2
harbor v2.13.2
10.0.0.14 arc-pro-dc02 8 1 500GB CentOS 7.9.2009 x86_64 Docker version 28.1.1
Docker Compose version v2.39.2
10.0.0.15 arc-pro-dc03 8 1 500GB CentOS 7.9.2009 x86_64 Docker version 28.1.1
Docker Compose version v2.39.2

说明:

  • 每个服务器均存在一个管理员用户 admin,该用户可以免密码执行 sudo 命令;
  • 在 arc-pro-dc01 机器上,可以使用 admin 用户免密码 ssh 到其他机器;
  • 在 arc-pro-dc01 机器上,已经安装好了 Ansible 命令;
  • 所有操作均使用 admin 用户完成,Zookeeper 集群的所属用户为 admin;
  • 已完成集群基础配置;
  • 私有镜像仓库地址:https://my.registry.com:10443。

以上配置参考:

  • 使用 VMware Workstation 安装 CentOS-7 虚拟机
  • 用 Ansible 批量完成 CentOS 7 操作系统基础配置
  • 使用 Ansible 批量安装 Docker
  • Docker 私有镜像仓库 Harbor 安装部署带签名认证

1.2 集群规划

IP 主机名 角色
10.0.0.13 arc-pro-dc01 Zookeeper Server
10.0.0.14 arc-pro-dc02 Zookeeper Server
10.0.0.15 arc-pro-dc03 Zookeeper Server

1.3 镜像准备

找一个可以连接互联网的、已经安装了 docker 的服务器,下载镜像

docker pull zookeeper:3.6.4
docker image save zookeeper:3.6.4 -o zookeeper.3.6.4.tar.gz

将 zookeeper.3.6.4.tar.gz 上传到本集群任意一台服务器,导入镜像:

docker load -i zookeeper.3.6.4.tar.gz
docker tag zookeeper:3.6.4 my.registry.com:10443/library/zookeeper:3.6.4
# 上传到私服
docker push my.registry.com:10443/library/zookeeper:3.6.4

2. Ansible 文件

2.1 Ansible 目录结构

说明:在 arc-pro-dc01 机器上,执行 ansible 命令的基础目录为 /home/admin/ansible

$ tree /home/admin/ansible/
/home/admin/ansible/
├── ansible.cfg
├── hosts
└── zookeeper├── docker-compose.yml.j2└── start-zookeeper-container.yml

2.2 ansible.cfg

[defaults]
inventory=./hosts
host_key_checking=False

2.3 hosts

[zookeeper]
arc-pro-dc01 zk_ip=10.0.0.13
arc-pro-dc02 zk_ip=10.0.0.14
arc-pro-dc03 zk_ip=10.0.0.15

2.4 docker-compose.yml.j2

services:zoo:image: my.registry.com:10443/library/zookeeper:3.6.4restart: unless-stoppedcontainer_name: zookeeperhostname: {{ inventory_hostname }}network_mode: hostenvironment:ZOO_MY_ID: {{ zoo_id }}ZOO_SERVERS: {% for host in groups['zookeeper'] %}server.{{ loop.index }}={{ hostvars[host].zk_ip }}:2888:3888;2181 {% endfor %}ZOO_LOG4J_PROP: "INFO,ROLLINGFILE"volumes:- /etc/zookeeper:/conf- /data/zookeeper/logs:/logs- /data/zookeeper/data:/data

2.5 start-zookeeper-container.yml

---
- name: Start Zookeeper Containerhosts: zookeeperbecome: truegather_facts: truevars:zk_owner: adminzk_group: admincompose_file_dir: /opt/app/zookeeperzk_conf_dir: /etc/zookeeperzk_log_dir:  /data/zookeeper/logszk_data_dir: /data/zookeeper/datatasks:- name: Remove old Zookeeper container if existscommand: docker rm -f zookeeperignore_errors: true- name: Remove Zookeeper directories if they existfile:path: "{{ item }}"state: absentloop:- "{{ compose_file_dir }}"- "{{ zk_conf_dir }}"- "{{ zk_log_dir }}"- "{{ zk_data_dir }}"- name: Create Zookeeper directoriesfile:path: "{{ item }}"state: directoryowner: "{{ zk_owner }}"group: "{{ zk_group }}"mode: '0755'loop:- "{{ compose_file_dir }}"- "{{ zk_conf_dir }}"- "{{ zk_log_dir }}"- "{{ zk_data_dir }}"- name: Set zoo_id based on group indexset_fact:zoo_id: "{{ groups['zookeeper'].index(inventory_hostname) + 1 }}"- name: Deploy docker-compose.ymltemplate:src: docker-compose.yml.j2dest: "{{ compose_file_dir }}/docker-compose.yml"owner: "{{ zk_owner }}"group: "{{ zk_group }}"mode: '0644'- name: Start Zookeeper containercommand: docker-compose -f {{ compose_file_dir }}/docker-compose.yml up -d

3. 部署

$ pwd
/home/admin/ansible$ ansible-playbook zookeeper/start-zookeeper-container.yml# 验证
$ ansible zookeeper -a "docker exec zookeeper zkServer.sh status"
arc-pro-dc01 | CHANGED | rc=0 >>
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: followerZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
arc-pro-dc03 | CHANGED | rc=0 >>
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leaderZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
arc-pro-dc02 | CHANGED | rc=0 >>
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: followerZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/915702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

幂运算与航班中转的奇妙旅行:探索算法世界的两极 - 实践

幂运算与航班中转的奇妙旅行:探索算法世界的两极 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas…

Gemini CLI 配置问题

我是 Windows 环境,代理和CLI 配置完成,终端输入 gemini,可以正常进入,但是提问是,显示报错信息: [API Error: exception TypeError: fetch failed sending request]后来发现是power shell需要做以下设置,敲入…

本土化与全球化博弈下的项目管理工具选型:Gitee如何为中国企业破局?

本土化与全球化博弈下的项目管理工具选型:Gitee如何为中国企业破局? 在数字化转型浪潮席卷全球的当下,项目管理工具市场正迎来爆发式增长。国际数据公司(IDC)最新报告显示,2023年全球项目管理软件市场规模预计突…

论Linux安装后需要进行的配置

先别急,容我吃个饭再说。文章中涉及的敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打码处理。传播、利用本文章所提供的信息而造成的任何直接或者间…

购物网站开发的背景与意义手机网站和网站一体

最近搞图片上传,折腾了一个星期终于做出来了,网上搜出来的方法几乎都是好几年前的,试了好多都不能用,此次把代码公布出来供大家参考。注:部分代码是后台写的,此方法没用到第三方库。1.图片保存到本地同时上…

网站被采集了 一个栏目不收录软件学校网站模板下载

parent.location.reload(); window.opener.location.hrefwindow.opener.location.href; 转载于:https://www.cnblogs.com/xbding/archive/2012/07/03/2574660.html

完整教程:嵌入式数据结构笔记七——二叉树

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

51单片机-驱动DS1302时钟芯片模块教程 - 实践

51单片机-驱动DS1302时钟芯片模块教程 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &qu…

JVM 类加载器详解 - 实践

JVM 类加载器详解 - 实践2025-09-24 12:16 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; fo…

石碣做网站优化偷wordpress模板

wildfly管理控制台红帽JBoss企业应用程序平台(EAP)和WildFly具有共生关系 。 简而言之,红帽JBoss企业应用程序平台(JBoss EAP)保留了WildFly社区项目(以前称为JBoss Application Server)的所有创…

音乐网站制作教程步骤wordpress登陆后查看

李宗盛有首歌的歌词里写到:「工作是容易的,赚钱是困难的」。乍一听感觉有点矛盾,工作的一个重要结果不就是赚钱么,为什么工作容易赚钱却难?但仔细一想就恍然其中想表达的意思了。 工作的本质是出售劳动价值&#xff0c…

网站域名备案需要什么罗湖营销型网站建设

RPC和 HTTP是两种常见的通信方式,它们在设计目标、使用场景和技术实现上有显著区别。以下是它们的详细对比: 1. 定义与核心思想 特性RPCHTTPRemote Procedure Call远程过程调用HyperText Transfer Protocol超文本传输协议定义一种协议或框架&#xff0…

昌平哪有做网站的公司比较大网站建设公司

🛫更多ssm知识见SSM_面向CRUD编程专栏 🚕本博客总结自黑马程序员的ssm框架视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客主页🚀🚀 目…

网站建设推广安徽国内专业网站设计

删除的场景: 解决思路: 1、计算操作后的总页数 2、删除成功之后的总页数与当前总页数进行比较 3、如果删除成功之后的总页数比小于当前总页数,需要把当前页码减去1;否则,直接进行列表数据的请求 代码实现 /*总条数…

中国做网站的公司新手网页制作

2022-01-25 更新:博客新地址:https://www.itbob.cn/,文章距上次编辑时间较远,部分内容可能已经过时! 文章目录● 前言● 注册 Cloudflare● 添加站点● 修改DNS● 开启 HTTPS● 重定向强制 HTTPSHTTP(超文本…

Unity小游戏接入抖音敏感词检测 - 指南

Unity小游戏接入抖音敏感词检测 - 指南2025-09-24 12:04 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !…

SQLite的并发问题

转载自:C# 下 SQLite 并发操作与锁库问题的 5 种解决方案_51CTO博客_sqlcipher c# SQLite是轻量级的数据库,可用于嵌入式设备,仅需几百KB的内存即可工作,整个数据库存储在单一文件中,便于管理,迁移,备份。无需繁…

域渗透靶场-vulntarget-a综合靶场

nmap发现开放80端口浏览器访问,是通达oa可以搜索poc或者使用oa利用工具拿到shell 通过账号admin 密码滞空,进入后台我们这里使用通达OA 11.2 后台getshell 点击系统管理 -> 系统参数设置 -> OA服务设置 找到We…

在线设计logo的网站小程序开发和app开发差别

1、读取哈使用方法不同SAP内存使用SET/GET parameters方法;ABAP内存使用 EXPORT 和 IMPORT 方法;2、共享范围不同SAP内存可以被所有的主session访问,内存数据可以同一个session中不同程序之间,或者不同session之间;AB…

现在的网站开发用什么技术南宁百度seo

简介: MaxCompute 是面向分析的企业级 SaaS 模式云数据仓库,以 Serverless 架构提供快速、全托管的在线数据仓库服务,消除了传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您可以经济并高效的分析处…