Linux 9 自动化部署 Kafka 集群( 三 )


创建 ~/playbooks/deploy_kafka/ 目录,在该目录下创建 download_kafka.yaml Playbook 文件:
mkdir ~/playbooks/deploy_kafka cd ~/playbooks/deploy_kafka vim download_kafka.yaml

Linux 9 自动化部署 Kafka 集群

文章插图
 
图 36.4 创建下载 Kafka 的 Playbook
download_kafka.yaml 内容如下:
--- - name: download kafka binary tarball play hosts: localhost become: false gather_facts: false vars_files: - vars.yaml roles: - role: download_binary_tarball tags: download_binary_tarball - name: create user play hosts: kafka become: true gather_facts: false vars_files: - vars.yaml roles: - role: create_user tags: create_user - name: distribute binary packages play hosts: kafka become: true gather_facts: false vars_files: - vars.yaml tasks: - name: copy the installation file task ansible.posix.synchronize: src: "{{ unarchive_path.0 }}" dest: "{{ user_dir.0 }}" - name: set the file owner task ansible.builtin.shell: "chown {{ user_name.0 }}.{{ user_name.0 }} {{ user_dir.0 }} -R" ...
download_kafka.yaml Playbook 文件中包含了三个 Play 。第一个 Play 使用 download_binary_tarball Role,将 Kafka 二进制文件下载到 localhost 主机 。第二个 Play 使用 create_user Role 在托管节点上创建运行 Kafka 服务的用户 。第三个 Play 中包含两个任务,作用是将 Kafka 文件分发到 Kafka 托管节点,并设置文件属主及数组为运行 Kafka 的用户 。
创建 vars.yaml 变量文件,在文件中定义 unarchive_path 和 package_url 变量:
mkdir vars vim vars/vars.yaml
Linux 9 自动化部署 Kafka 集群

文章插图
 
图 36.5 创建变量文件
vars.yaml 文件内容如下:
package_url: - https://downloads.apache.org/kafka/3.3.1/kafka_2.13-3.3.1.tgz unarchive_path: - ~/software/kafka_tools/kafka user_name: - sretech user_dir: - /opt/sretech user_shell: - /sbin/nologin
执行 download_kafka.yaml Playbook,下载 Kafka 软件包:
ansible-playbook download_kafka.yaml
Linux 9 自动化部署 Kafka 集群

文章插图
 
图 36.6 下载并分发 Kafka 安装文件
查看 Kafka 安装文件:
ssh kafka1.server.aiops.red sudo tree -L 1 /opt/sretech/kafka
Linux 9 自动化部署 Kafka 集群

文章插图
 
图 36.7 查看 Kafka 安装文件
36.3.3 部署 Kafka 集群
创建部署 Kafka 集群的 Ansible 角色:
ansible-galaxy role init --init-path ~/roles deploy_kafka cd ~/roles/deploy_kafka/
Linux 9 自动化部署 Kafka 集群

文章插图
 
图 36.8 创建部署 Kafka 的角色
36.3.3.1 创建日志目录
为 Kafka 服务提供日志目录 。编辑 tasks/main.yml 文件,添加以下任务:
- name: create logs directory task ansible.builtin.file: path: "{{ logs_dir }}" state: directory owner: "{{ user_name.0 }}" group: "{{ user_name.0 }}"36.3.3.2 设置 Local Facts
在 Kafka 集群配置中,需要设置 broker.id,用以区分 broker 。Kafka 在启动时会在 zookeeper 中 /brokers/ids 路径下创建一个以当前 broker.id 为名称的虚节点,Kafka 的健康状态检查就依赖于此节点 。当 broker 下线时,该虚节点会自动删除,其他 broker 或者客户端通过判断 /brokers/ids 路径下是否有此 broker 的 id 来确定该 broker 的健康状态 。
创建三个 Facts 文件:
for bid in $(seq 0 2); do echo -e "[kafka]nbroker_id=${bid}" > broker${bid}.fact; done
Linux 9 自动化部署 Kafka 集群

文章插图
 
图 36.9 创建 Local Facts 变量
在 Kafka 节点上创建 /etc/ansible/facts.d/ 目录:
ansible kafka -m file -a "path=/etc/ansible/facts.d state=directory" -b
将三个文件拷贝到对应节点的 /etc/ansible/facts.d/ 目录:
ansible kafka1.server.aiops.red -m copy -a "src=https://www.isolves.com/it/wlyx/fwq/2023-01-28/broker0.fact dest=/etc/ansible/facts.d/kf.fact" -b ansible kafka2.server.aiops.red -m copy -a "src=broker1.fact dest=/etc/ansible/facts.d/kf.fact" -b ansible kafka3.server.aiops.red -m copy -a "src=broker2.fact dest=/etc/ansible/facts.d/kf.fact" -b36.3.3.3 配置文件模板
为 Kafka 服务提供配置文件模板,在 templates/ 目录下创建 server.properties.j2 文件,内容如下:
broker.id={{ ansible_local.kf.kafka.broker_id }} log.dirs={{ logs_dir }} zookeeper.connect={% for host in groups['zookeeper'] %}{{ host }}:{{ zookeeper_port }}{% if not loop.last %},{% endif %}{% endfor %}


推荐阅读