Skip to main content

Linux 主机部署多节点集群

本文档介绍如何在公有云环境 Linux 主机上部署多节点的 AutoMQ集群(由云厂商提供对象存储服务),用户可在该开发环境中验证例如分区迁移、数据自动均衡等集群相关的功能特性。

tip

如果您期望在私有数据中心部署 AutoMQ,则可以参考概述▸ 通过 MinIO、Ceph、CubeFS 等存储软件提供对象存储服务。

除了 Linux 主机部署方案,用户可参考以下文档体验其他部署方案,用于验证集群相关的功能特性:

tip

面向生产环境负载的 AutoMQ 部署和参数调优相对复杂,您可以通过此处表单联系 AutoMQ 团队获取必要的协助和最佳实践。

此外,如果您期望完全避免安装部署的工作负担,可以通过以下链接体验 AutoMQ 团队提供的全托管云服务,当前各云市场均提供了免费 2 周的试用体验。

前置条件

本文档示例用于部署一个 5 节点的 AutoMQ 集群,其中 3 个节点运行 Controller 和 Broker,剩余 2 个节点仅运行 Broker。

需要提前检查如下条件:

  • Linux 主机 5 台,推荐至少 2 核 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 用户具有对之前创建的对象存储桶完整的读写权限。

tip

AutoMQ 依赖 Kafka KRaft 组件维护集群元数据,因此生产场景中每个集群至少需要部署 3 个节点(同时运行 Controller 和 Broker)。

建议参考 PolicyEndpoint & Region 链接,查阅 AWS 文档,获取更多 IAM 和 S3 的详细配置说明。

info

生产环境中,建议 IAM Policy 授权范围精确到具体的 Bucket,以避免预期之外的授权。


{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:ListBucket"
],
"Resource": [
"*"
]
}
]
}

安装并启动 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.bucketss3.ops.bucketss3.wal.path 修改成实际的值,可额外在后面换行添加新的配置项。

  • global.envs :节点的环境变量,此处必须将 KAFKA_S3_ACCESS_KEYKAFKA_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 命令,测试消息发送、消费等功能。

  1. 运行以下命令,调用 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

  1. 运行以下命令,调用 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

  1. 运行以下命令,调用 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 支持秒级分区迁移、自动数据重平衡等能力,解决了 Apache Kafka 无法快速迁移、扩缩容等问题。可以参考如下文档进行测试验证:

停止并卸载 AutoMQ 集群

在完成测试后,可以参考以下步骤停止并卸载 AutoMQ 集群。

  1. 在每台节点上执行如下命令停止进程。

bin/kafka-server-stop.sh

  1. 你可以通过配置对象存储的生命周期规则来自动清空 s3-data-bucket 和 s3-ops-bucket 中的数据,然后再删除这些存储桶。

  2. 删除创建的计算实例及其对应的系统卷和数据卷。

  3. 删除测试 的 IAM 用户及其关联的 Access Key Id和 Access Key Secret。