Linux 主机部署多节点集群
本文档介绍如何在Linux 主机上部署多节点的 AutoMQ集群(由云厂商提供对象存储服务、或 S3 兼容的存储软件),用户可在该开发环境中验证例如分区迁移、数据自动均衡等集群相关的功能特性。
除了 Linux 主机部署方案,用户可参考以下文档体验其他部署方案:
面向生产环境负载的 AutoMQ 部署和参数调优相对复杂,您可以通过此处表单联系 AutoMQ 团队获取必要的协助和最佳实践。
此外,如果您期望完全避免安装部署的工作负担,可以通过以下链接体验 AutoMQ 团队提供的全托管云服务,当前各云市场均提供了免费 2 周的试用体验。
前置条件
本文档示例用于部署一个 5 节点的 AutoMQ 集群,其中 3 个节点运行 Controller 和 Broker,剩余 2 个节点仅运行 Broker。
需要提前检查如下条件:
-
Linux 主机 5 台,推荐 4 核 16GB 内存的网络优化型虚拟机,用于部署 AutoMQ 集群。确保系统盘存储空间不低于 20GB,数据卷磁盘空间不低于 20GB(仅部署 Controller 节点需要)。示例如下:
角色 IP Node ID 系统卷 元数据卷 Controller + Broker 192.168.0.1 0 EBS 20GB EBS 20GB Controller + Broker 192.168.0.2 1 EBS 20GB EBS 20GB Controller + Broker 192.168.0.3 2 EBS 20GB EBS 20GB Broker 192.168.0.4 1000 EBS 20GB 不涉及 Broker 192.168.0.5 1001 EBS 20GB 不涉及 -
下载二进制安装包,用于安装 AutoMQ。参考 软件制品▸。
-
创建两个自定义命名的对象存储 Bucket,本文档以 automq-data 和 automq-ops 作为示例。
-
创建一个 IAM 用户并为其生成 Access Key ID 和 Access Key Secret。然后,确保该 IAM 用户具有对之前创建的对象存储桶完整的读写权限。
-
安装jemalloc,优化内存分配。参考 Getting-started 。
AutoMQ 依赖 Kafka KRaft 组件维护集群元数据,因此生产场景中每个集群至少需要部署 3 个节点(同时运行 Controller 和 Broker)。
安装并启动 AutoMQ 集群
第 1 步:创建集群部署工程
AutoMQ 提供了 automq-cli.sh 工具,用于 AutoMQ 集群运维。 automq-cli.sh cluster create [project]
命令会自动在当前目录下创建集群配置模版 clusters/[project]/topo.yaml
。
bin/automq-cli.sh cluster create poc
执行结果示例如下:
Success create AutoMQ cluster project: poc
========================================================
Please follow the steps to deploy AutoMQ cluster:
1. Modify the cluster topology config clusters/poc/topo.yaml to fit your needs
2. Run ./bin/automq-cli.sh cluster deploy --dry-run clusters/poc , to deploy the AutoMQ cluster
第 2 步:编辑集群配置模版
编辑集群第 1 步生成的配置模版,配置模版示例如下:
global:
clusterId: ''
# bucket URI pattern: 0@s3://$bucket?region=$region&endpoint=$endpoint
# bucket URI example:
# AWS : 0@s3://xxx_bucket?region=us-east-1
# OCI: 0@s3://xxx_bucket?region=us-ashburn-1&endpoint=https://xxx_namespace.compat.objectstorage.us-ashburn-1.oraclecloud.com&pathStyle=true
config: |
s3.data.buckets=0@s3://xxx_bucket?region=us-east-1
s3.ops.buckets=1@s3://xxx_bucket?region=us-east-1
s3.wal.path=0@s3://xxx_bucket?region=us-east-1
log.dirs=/root/kraft-logs
envs:
- name: KAFKA_S3_ACCESS_KEY
value: 'xxxxx'
- name: KAFKA_S3_SECRET_KEY
value: 'xxxxx'
controllers:
# The controllers default are combined nodes which roles are controller and broker.
# The default controller port is 9093 and the default broker port is 9092
- host: 192.168.0.1
nodeId: 0
- host: 192.168.0.2
nodeId: 1
- host: 192.168.0.3
nodeId: 2
brokers:
- host: 192.168.0.5
nodeId: 1000
- host: 192.168.0.6
nodeId: 1001
-
global.clusterId
:随机生成的唯一 ID,无需修改。 -
global.config
:集群所有节点的自定义增量配置,此处必须将s3.data.buckets
、s3.ops.buckets
和s3.wal.path
修改成实际的值,可额外在后面换行添加 新的配置项。不同云厂商对应对象存储参数设置方式详情请参见 对象存储配置▸ 。 -
global.envs
:节点的环境变量,此处必须将KAFKA_S3_ACCESS_KEY
和KAFKA_S3_SECRET_KEY
的 value 替换成实际的值。 -
controllers
:Controller 节点列表,需替换成实际的值。 -
brokers
:Broker 节点列表,需替换成实际的值。
第 3 步:启动 AutoMQ
执行下方集群预检命令,生成最终的启动命令。
bin/automq-cli.sh cluster deploy --dry-run clusters/poc
该命令首先会检查 S3 配置的正确性,确认 S3 能成功访问,最后输出各个节点的启动命令,输出示例如下:
Host: 192.168.0.1
KAFKA_S3_ACCESS_KEY=xxxx KAFKA_S3_SECRET_KEY=xxxx ./bin/kafka-server-start.sh -daemon config/kraft/server.properties --override cluster.id=JN1cUcdPSeGVnzGyNwF1Rg --override node.id=0 --override controller.quorum.voters=0@192.168.0.1:9093,1@192.168.0.2:9093,2@192.168.0.3:9093 --override advertised.listener=192.168.0.1:9092 --override s3.data.buckets='0@s3://xxx_bucket?region=us-east-1' --override s3.ops.buckets='1@s3://xxx_bucket?region=us-east-1' --override s3.wal.path='0@s3://xxx_bucket?region=us-east-1' --override log.dirs='/root/kraft-logs'
...
要启动集群,请在预先指定的 CONTROLLER 或 BROKER 主机上依次执行上一步命令中的命令列表。例如,在 192.168.0.1 上启动第一个 CONTROLLER 进程,执行生成的启动命令列表中对应 Host 的命令。
KAFKA_S3_ACCESS_KEY=xxxx KAFKA_S3_SECRET_KEY=xxxx ./bin/kafka-server-start.sh -daemon config/kraft/server.properties --override cluster.id=JN1cUcdPSeGVnzGyNwF1Rg --override node.id=0 --override controller.quorum.voters=0@192.168.0.1:9093,1@192.168.0.2:9093,2@192.168.0.3:9093 --override advertised.listeners=PLAINTEXT://192.168.0.1:9092 --override s3.data.buckets='0@s3://xxx_bucket?region=us-east-1' --override s3.ops.buckets='1@s3://xxx_bucket?region=us-east-1' --override s3.wal.path='0@s3://xxx_bucket?region=us-east-1' --override log.dirs='/root/kraft-logs'
测试消息收发
在安装启动 AutoMQ 集群后,可以通过执行安装包 bin 目录下的 Kafka CLI 命令,测试消息发送、消费等功能。
- 运行以下命令,调用 kafka-topics.sh 创建 Topic。
bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server 192.168.0.1:9092,192.168.0.2:9092,192.168.0.3:9092
- 运行以下命令,调用 kafka-console-producer.sh 发送测试消息。
bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server 192.168.0.1:9092,192.168.0.2:9092,192.168.0.3:9092
- 运行以下命令,调用 kafka-console-consumer.sh 消费测试消息。
bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server 192.168.0.1:9092,192.168.0.2:9092,192.168.0.3:9092
停止并卸载 AutoMQ 集群
在完成测试后,可以参考以下步骤停止并卸载 AutoMQ 集群。
- 在每台节点上执行如下命令停止进程。
bin/kafka-server-stop.sh
-
你可以通过配置对象存储的生命周期规则来自动清空 s3-data-bucket 和 s3-ops-bucket 中的数据,然后再删除这些存储桶。
-
删除创建的计算实例及其对应的系统卷和数据卷。
-
删除测试 的 IAM 用户及其关联的 Access Key Id和 Access Key Secret。
Table Topic 是 AutoMQ 面向现代数据湖架构设计的核心功能,其核心作用在于实现流式数据与静态数据湖的无缝集成,通过架构创新解决传统流批分离、ETL 复杂、成本高昂等问题。集群中开启 Table Topic 的功能请参见 概述▸ 。