> ## Documentation Index
> Fetch the complete documentation index at: https://docs.automq.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Linux 主机部署多节点集群

> 在 Linux 主机上部署多节点 AutoMQ 集群，兼容 Kafka API，支持对象存储集成和云原生性能。

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

除了 Linux 主机部署方案，用户可参考以下文档体验其他部署方案：

* [Kubernetes 部署多节点集群▸](/zh/automq/deployment/deploy-multi-nodes-cluster-on-kubernetes)

<Tip>
  面向生产环境负载的 AutoMQ 部署和参数调优相对复杂，您可以通过[此处表单](https://www.automq.com/contact)联系 AutoMQ 团队获取必要的协助和最佳实践。
</Tip>

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

* [从 AWS Marketplace 免费体验 AutoMQ Cloud](https://docs.automq.com/automq-cloud/getting-started/install-byoc-environment/aws/install-automq-on-aws)。

* [从阿里云云市场体验 AutoMQ Cloud](https://docs.automq.com/zh/automq-cloud/getting-started/install-byoc-environment/alibaba-cloud)。

## 前置条件

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

需要提前检查如下条件：

* Linux 主机 5 台，推荐 4 核 16GB 内存的网络优化型虚拟机，用于部署 AutoMQ 集群。确保系统盘存储空间不低于 20GB，数据卷磁盘空间不低于 20GB（仅部署 Controller 节点需要）。示例如下：

  | 角色<br />                  | IP<br />          | Node ID<br /> | 系统卷<br />      | 元数据卷<br />     |
  | ------------------------- | ----------------- | ------------- | -------------- | -------------- |
  | Controller + Broker<br /> | 192.168.0.1<br /> | 0<br />       | EBS 20GB<br /> | EBS 20GB<br /> |
  | Controller + Broker<br /> | 192.168.0.2<br /> | 1<br />       | EBS 20GB<br /> | EBS 20GB<br /> |
  | Controller + Broker<br /> | 192.168.0.3<br /> | 2<br />       | EBS 20GB<br /> | EBS 20GB<br /> |
  | Broker<br />              | 192.168.0.4<br /> | 1000<br />    | EBS 20GB<br /> | 不涉及<br />      |
  | Broker<br />              | 192.168.0.5<br /> | 1001<br />    | EBS 20GB<br /> | 不涉及<br />      |

* 下载二进制安装包，用于安装 AutoMQ。参考 [软件制品▸](/zh/automq/releases/software-artifact)。

* 创建两个自定义命名的对象存储 Bucket，本文档以 automq-data 和 automq-ops 作为示例。

* 创建一个 IAM 用户并为其生成 Access Key ID 和 Access Key Secret。然后，确保该 IAM 用户具有对之前创建的对象存储桶完整的读写权限。

* 安装jemalloc，优化内存分配。参考 [G](https://github.com/jemalloc/jemalloc/wiki/getting-started)[etting-started](https://github.com/jemalloc/jemalloc/wiki/getting-started) 。

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

## 安装并启动 AutoMQ 集群

### 第 1 步：创建集群部署工程

AutoMQ 提供了 automq-cli.sh 工具，用于 AutoMQ 集群运维。 `automq-cli.sh cluster create [project]`  命令会自动在当前目录下创建集群配置模版  `clusters/[project]/topo.yaml ` 。

```bash theme={null}

bin/automq-cli.sh cluster create poc

```

执行结果示例如下：

```text theme={null}

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 步生成的配置模版，配置模版示例如下：

```yaml theme={null}

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` 修改成实际的值，可额外在后面换行添加新的配置项。不同云厂商对应对象存储参数设置方式详情请参见 [对象存储配置▸](/zh/automq/configuration/object-storage-configuration) 。

* `global.envs` ：节点的环境变量，此处必须将  `KAFKA_S3_ACCESS_KEY`  和  `KAFKA_S3_SECRET_KEY`  的 value 替换成实际的值。

* `controllers`  ：Controller 节点列表，需替换成实际的值。

* `brokers` ：Broker 节点列表，需替换成实际的值。

### 第 3 步：启动 AutoMQ

执行下方集群预检命令，生成最终的启动命令。

```bash theme={null}

bin/automq-cli.sh cluster deploy --dry-run clusters/poc

```

该命令首先会检查 S3 配置的正确性，确认 S3 能成功访问，最后输出各个节点的启动命令，输出示例如下：

```text theme={null}

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.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'

...

```

要启动集群，请在预先指定的 CONTROLLER 或 BROKER 主机上依次执行上一步命令中的命令列表。例如，在 192.168.0.1 上启动第一个 CONTROLLER 进程，执行生成的启动命令列表中对应 Host 的命令。

```bash theme={null}

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。

```bash theme={null}

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 发送测试消息。

```bash theme={null}

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 消费测试消息。

```bash theme={null}

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 集群。

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

```bash theme={null}

bin/kafka-server-stop.sh

```

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

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

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

<Tip>
  Table Topic 是 AutoMQ 面向现代数据湖架构设计的核心功能，其核心作用在于实现流式数据与静态数据湖的无缝集成，通过架构创新解决传统流批分离、ETL 复杂、成本高昂等问题。集群中开启 Table Topic 的功能请参见 [概述▸](/zh/automq/table-topic/overview) 。
</Tip>
