36.2.1 节点信息
四个节点分别为 2 核 CPU、2 GB 内存的虚拟机 。
节点信息:
# 系统版本:Rocky linux release 9.1
ansible Inventory hosts:
[zookeeper] zk1.server.aiops.red zk2.server.aiops.red zk3.server.aiops.red [kafka] kafka1.server.aiops.red kafka2.server.aiops.red kafka3.server.aiops.red
36.2.2 节点要求
为使安装过程顺利进行,节点应满足以下要求 。
36.2.2.1 时钟同步
Zookeeper、Kafka 集群节点时钟须保持同步 。
要自动化实现时钟同步,可以参考 “Linux 9 自动化部署 NTP 服务” 。
36.2.2.2 主机名解析
Ansible 控制节点能够解析 Zookeeper、Kafka 节点的主机名,通过主机名访问节点 。
要实现主机名称解析,可以在 Ansible 控制节点的 /etc/hosts 文件中指定节点的 IP、主机名条目,或者参考 “Linux 9 自动化部署 DNS 服务” 一文配置 DNS 服务 。
36.2.2.3 主机名解析
Ansible 控制节点可以免密登录各节点,并能够免密执行sudo 。可以参考 “Linux 9 自动化部署 NTP 服务” 中的 “部署环境要求” 一节实现 。
36.2.2.4 依赖的服务及组件
Zookeeper、Kafka 集群的安装依赖 JDK 。JDK 的自动化安装可以参考 ”Linux 9 自动化部署 JDK“ 。
Zookeeper 集群的自动化安装请参考 “Linux 9 自动化部署 Zookeeper 集群” 。
36.3 自动化部署 Kafka
自动化部署 Kafka 集群通过两个 Ansible Role 实现:一个用于下载、分发 Kafka 安装包,一个用于部署 Kafka 集群 。
使用独立的用户运行应用程序,能够起到一定程度的隔离性与安全性 。因此,首先创建运行 Kafka 服务的用户 。
36.3.1 创建用户
创建用户是一个常见的操作,因此为创建用户编写一个独立的 Ansible Role 。
创建 create_user Role:
ansible-galaxy role init --init-path ~/roles create_user cd ~/roles/create_user/
文章插图
图 36.2 提供创建用户的角色
编辑 tasks/main.yml 文件,内容如下:
--- # tasks file for create_user - name: create user task ansible.builtin.user: name: "{{ item.0 }}" home: "{{ item.1 }}" shell: "{{ item.2 }}" with_together: - "{{ user_name }}" - "{{ user_dir }}" - "{{ user_shell }}"
在ansible.builtin.user任务中包含了三个列表类型的变量,user_name 定义创建的用户名称,user_dir 定义创建的用户家目录,user_shell 定义创建的用户 Shell 。之所以使用列表类型的变量,是为了满足一次性创建多个用户的需求 。可以为变量指定一个或多个值,对应创建一个或多个用户 。在指定多个值时,要注意三个变量的顺序要一致 。这三个变量,将在 Playbook 中提供 。
36.3.2 下载并分发 Kafka 软件包
Kafka 下载地址:https://kafka.apache.org/downloads,当前稳定版是 3.3.1 。
创建下载 Kafka 软件包的 Ansible Role 。可以把该角色抽象为下载所有二进制 tarball,而不是只针对 Kafka:
ansible-galaxy role init --init-path ~/roles download_binary_tarball cd ~/roles/download_binary_tarball/
文章插图
图 36.3 创建下载二进制包的角色
编辑 download_binary_tarball 角色的 tasks/main.yml 文件,添加下载软件包的任务,内容如下:
--- # tasks file for download_binary_tarball - name: create download and unarchive directory task ansible.builtin.file: path: "{{ item }}" state: directory with_items: "{{ unarchive_path }}" - name: download and unarchive tarball task ansible.builtin.unarchive: src: "{{ item.0 }}" dest: "{{ item.1 }}" remote_src: true extra_opts: - --strip-components=1 with_together: - "{{ package_url }}" - "{{ unarchive_path }}"
在任务的主配置文件中添加了两个任务:ansible.builtin.file任务创建存储下载软件包的目录;ansible.builtin.unarchive任务将软件包解压到ansible.builtin.file创建的对应目录中 。
任务使用了两个列表类型的变量:unarchive_path 和 package_url,这样既可以解压单个软件包,也可以同时解压多个软件包 。下载、解压多个软件包时,为这两个变量定义多个值,但它们之前的顺序要对应 。也就是说,package_url 第一个值指定的软件包将被解压到 unarchive_path 第一个值指定的目录中 。
这两个变量在具体的 Playbook 中定义,这样在部署任何二进制 tarball 时,都可以使用 download_binary_tarball 角色下载软件包 。
推荐阅读
- Linux内核也将取消软盘驱动器的支持 软驱驱动
- 虚拟机中的Linux怎么配置上网 虚拟机上网设置
- mysql安装图解(Linux学习笔记
- Linux文件管理 linux课程
- netsarang是什么?linux远程连接工具?
- linux删除文件夹指令……linux删除文件夹?
- 新手必看linux知识大全 linux必学的60个命令解释
- putty软件怎么用?如何使用PuTTY工具远程连接Linux服务器?
- qos是什么(DHCP要开吗)
- 部署是什么意思(部署已定是什么意思)