sleighzy.zookeeper

Apache ZooKeeper

Lint Code Base Molecule

用于安装和配置 Apache ZooKeeper 的 Ansible 角色

此角色可用于安装和集群多个 ZooKeeper 节点,默认情况下使用清单文件中“zookeeper-nodes”组定义的所有主机。所有服务器将与领导者和选举端口一起添加到 zoo.cfg 文件中。在将 zookeeper_firewalld 变量设置为 true 后,可以打开防火墙端口。

支持的平台

  • Debian 10.x
  • RedHat 7
  • RedHat 8
  • Ubuntu 18.04.x
  • Ubuntu 20.04.x

需求

Java: Java 8 / 11

Ansible 2.9.16 或 2.10.4 是解决某些内核中 systemd 状态检查问题的最低版本。在尝试通过 Ansible 角色启动服务时,会输出错误信息“Service is in unknown state”,任务将失败。如果在物理主机上运行 systemctl start 命令,服务将如预期启动。有关更多信息,请参见 https://github.com/ansible/ansible/issues/71528

角色变量

变量 默认值 备注
zookeeper_mirror https://dlcdn.apache.org/zookeeper
zookeeper_version 3.9.1
zookeeper_package apache-zookeeper-{{ zookeeper_version }}-bin.tar.gz
zookeeper_group zookeeper
zookeeper_user zookeeper
zookeeper_root_dir /usr/share
zookeeper_install_dir '{{ zookeeper_root_dir}}/apache-zookeeper-{{zookeeper_version}}'
zookeeper_dir '{{ zookeeper_root_dir }}/zookeeper'
zookeeper_log_dir /var/log/zookeeper
zookeeper_data_dir /var/lib/zookeeper
zookeeper_data_log_dir /var/lib/zookeeper
zookeeper_client_port 2181
zookeeper_id 1 每台服务器唯一,应在清单文件中声明
zookeeper_leader_port 2888
zookeeper_election_port 3888
zookeeper_servers zookeeper-nodes 见下文
zookeeper_servers_use_inventory_hostname false 见下文
zookeeper_environment "JVMFLAGS": "-javaagent:/opt/jolokia/jolokia-jvm-1.6.0-agent.jar"
zookeeper_config_params 将被模板化到 zoo.cfg 的键值字典
zookeeper_firewalld false

清单和 zookeeper_servers 变量

上述 zookeeper_servers 变量接受一个清单主机名的列表。这些将用于 zoo.cfg 来配置多服务器集群,以便主机能够相互发现。默认情况下,zoo.cfg 中使用的主机名为服务器上 hostname 命令所报告的主机名(由 ansible_nodename 变量提供)。请看下面的示例。

假设以下清单文件,并且 hostname 命令仅返回主机名,而不包含域名。

[zookeeper-nodes]
zoo1.foo.com zookeeper_id=1       # hostname 命令返回 "zoo1"
zoo2.foo.com zookeeper_id=2       # hostname 命令返回 "zoo2"
zoo3.foo.com zookeeper_id=3       # hostname 命令返回 "zoo3"

假设以下角色变量:

---
- role: sleighzy.zookeeper
  zookeeper_servers:
    - zoo1.foo.com
    - zoo2.foo.com
    - zoo3.foo.com

模板化的 zoo.cfg 文件将包含以下条目:

server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

如果您不希望有这种行为,并希望 zoo.cfg 模板化清单主机名,请将 zookeeper_servers_use_inventory_hostname 设置为 true

默认端口

端口 描述
2181 客户端连接端口
2888 集群的法定投票端口
3888 集群的领导选举端口

默认目录和文件

描述 目录 / 文件
安装目录 /usr/share/apache-zookeeper-<version>
指向安装目录的符号链接 /usr/share/zookeeper
指向配置的符号链接 /etc/zookeeper/zoo.cfg
日志文件 /var/log/zookeeper
快照和 myid 文件的数据目录 /var/lib/zookeeper
事务日志文件的数据目录 /var/lib/zookeeper
Systemd 服务 /usr/lib/systemd/system/zookeeper.service
系统默认值 /etc/default/zookeeper

启动和停止 ZooKeeper 服务

  • ZooKeeper 服务可以通过 systemctl start zookeeper 启动
  • ZooKeeper 服务可以通过 systemctl stop zookeeper 停止

四字命令

ZooKeeper 可以使用基于四字母单词的命令,详见 https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_4lw

以下示例使用 stat 命令来找出哪个实例是领导者:

for i in 1 2 3 ; do
  echo "zookeeper0$i 是 "$(echo stat | nc zookeeper0$i 2181 | grep ^Mode | awk '{print $2}');
done

依赖

无依赖项

示例剧本

- hosts: zookeeper-nodes
  roles:
    - sleighzy.zookeeper

代码检查

代码检查应使用 ansible-lint 进行

pip3 install ansible-lint --user

ansible-lint -c ./.ansible-lint .

测试

该模块使用 Ansible Molecule 测试框架。此测试套件创建一个由三个节点组成的 ZooKeeper 集群,运行在 Docker 容器中。每个容器运行不同的操作系统,以测试对该 Ansible 角色的支持平台。

按照 [Molecule 安装指南],这应在虚拟环境中完成。以下命令将创建一个 Python 虚拟环境并安装 Molecule 及 Docker 驱动程序。

$ python3 -m venv molecule-venv
$ source molecule-venv/bin/activate
(molecule-venv) $ pip3 install ansible docker "molecule-plugins[docker]"

运行剧本和测试。必须在运行 Molecule 执行任何测试之前修正代码检查错误。将运行所有测试,然后销毁 Docker 容器。

molecule test

以下命令可用于在不进行测试的情况下运行剧本。在对角色进行更改并确保操作是幂等时,可以多次运行此命令。

molecule converge

以下命令可用于只运行测试而不销毁一切。命令 molecule verify 可以在每次测试运行时重复。

molecule create
molecule converge
molecule verify

销毁 Molecule 测试和 Docker 容器。

molecule destroy

许可证

![MIT 许可证]

关于项目

Apache ZooKeeper installation for RHEL/CentOS and Debian/Ubuntu

安装
ansible-galaxy install sleighzy.zookeeper
许可证
mit
下载
23.2k
拥有者