在 Linux 主机上以集群方式部署
本文将介绍在公共云环境中快速部署启动一个包含 3 个 CONTROLLER 节点和 2 个 BROKER 节点的 AutoMQ 集群,并测试 AutoMQ 的基本功能。
AutoMQ 支持在私有云部署,可以选择自建与 AWS EBS 和 AWS S3 兼容的存储系统,如 Ceph、CubeFS 或 MinIO。
前置条件
准备 5 台主机用于部署 AutoMQ 集群。在公共云环境建议选择 2 核 16GB 内存的网络优化型 Linux amd64 主机,并确保系统盘存储空间不低于 10GB,数据卷磁盘空间不低于 10GB。测试环境可以适当降低配置。示例如下:
角色 IP Node ID 系统卷 数据卷 CONTROLLER 192.168.0.1 0 EBS 20GB EBS 20GB CONTROLLER 192.168.0.2 1 EBS 20GB EBS 20GB CONTROLLER 192.168.0.3 2 EBS 20GB EBS 20GB BROKER 192.168.0.4 1000 EBS 20GB EBS 20GB BROKER 192.168.0.5 1001 EBS 20GB EBS 20GB 建议在购买计算资源时指定与本示例相同的网段和 IP 地址,这样可以方便直接复制操作命令。
下载二进制安装包,用于安装 AutoMQ。参考 软件制品▸。
创建两个自定义命名的对象存储桶,例如 automq-data 和 automq-ops。
创建一个 IAM 用户并为其生成 Access Key 和 Secret Key。然后,确保该 IAM 用户具有对之前创建的对象存储桶完整的读写权限。
- AWS
- Azure
- GCP
- AWS 中国
- 阿里云
- 腾讯云
- 华为云
- 百度云
- OCI
- 其他云平台
建议查阅官方网站以获取更多详细信息。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:AbortMultipartUpload",
"s3:DeleteObject"
],
"Resource": [
"arn:aws-cn:s3:::automq-data/*",
"arn:aws-cn:s3:::automq-ops/*"
]
}
]
}
由于 Azure 的对象存储与 AWS S3 在网络协议上不兼容,导致目前 AutoMQ 无法在 Azure 上运行。为解决这一问题,AutoMQ 团队正在开发 Azure 的兼容方案,并计划近期发布。
{
"title": "AutomqStorageRole",
"description": "Custom Roles for AutoMQ Store Operations",
"stage": "GA",
"includedPermissions": [
"storage.multipartUploads.create",
"storage.objects.create",
"storage.objects.delete",
"storage.objects.get"
]
}
建议查阅官方网站以获取更多详细信息。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:AbortMultipartUpload",
"s3:DeleteObject"
],
"Resource": [
"arn:aws-cn:s3:::automq-data",
"arn:aws-cn:s3:::automq-ops"
]
}
]
}
建议查阅官方网站以获取更多详细信息。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:PutObject",
"oss:AbortMultipartUpload",
"oss:GetObject",
"oss:DeleteObject"
],
"Resource": [
"acs:oss:*:*:automq-data",
"acs:oss:*:*:automq-ops"
]
}
]
}
建议查阅官方网站以获取更多详细信息。
{
"statement": [
{
"action": [
"cos:AbortMultipartUpload",
"cos:GetObject",
"cos:CompleteMultipartUpload",
"cos:InitiateMultipartUpload",
"cos:DeleteObject",
"cos:PutObject",
"cos:UploadPart"
],
"effect": "allow",
"resource": [
"qcs::cos:ap-nanjing:uid/1258965391:automq-data-1258965391/*",
"qcs::cos:ap-nanjing:uid/1258965391:automq-ops-1258965391/*"
]
}
],
"version": "2.0"
}
建议查阅官方网站以获取更多详细信息。
{
"Version": "1.1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"obs:object:GetObject",
"obs:object:AbortMultipartUpload",
"obs:object:DeleteObject",
"obs:object:PutObject"
],
"Resource": [
"OBS:*:*:object:automq-data/*",
"OBS:*:*:object:automq-ops/*"
]
}
]
}
建议查阅官方网站以获取更多详细信息。
{
"accessControlList": [
{
"service": "bce:bos",
"region": "*",
"resource": [
"*"
],
"effect": "Allow",
"permission": [
"READ",
"WRITE"
],
"resource": ["automq-data/*"],
}
]
}
建议查阅官方网站以获取更多详细信息。
Allow group 'AutoMQ PoC' to manage objects in tenancy where any {target.bucket.name='automq-data', target.bucket.name='automq-ops'}
AutoMQ 需要依赖 EBS 和 S3 服务。只要云平台支持这两种服务的标准协议,就可以在该云平台上运行。AutoMQ 团队会持续完善其他云平台的兼容性测试报告。目前已完成的兼容性测试如下:
安装并启动 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
# AWS-CN: 0@s3://xxx_bucket?region=cn-northwest-1&endpoint=https://s3.amazonaws.com.cn
# ALIYUN: 0@s3://xxx_bucket?region=oss-cn-shanghai&endpoint=https://oss-cn-shanghai.aliyuncs.com
# TENCENT: 0@s3://xxx_bucket?region=ap-beijing&endpoint=https://cos.ap-beijing.myqcloud.com
# 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
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
修改成实际的值。可额外在后面换行添加新的配置项;global.envs
:节点的环境变量,此处必须将KAFKA_S3_ACCESS_KEY
和KAFKA_S3_SECRET_KEY
的 value 替换成实际的值;controllers
:Controller 节点列表,需替换成实际的值;brokers
:Broker 节点列表,需替换成实际的值;
数据卷路径
AutoMQ 存储元数据和 WAL 数据的默认位置是在 /tmp
目录下。为了更适合生产或正式测试环境,建议在集群配置模版里面添加全局配置,将元数据目录 log.dirs
和 WAL 数据目录 s3.wal.path
的路径设置到可持久化存储的位置,配置参考如下:
global:
...
configs: |
s3.data.buckets=0@s3://xxx_bucket?region=us-east-1
s3.ops.buckets=1@s3://xxx_bucket?region=us-east-1
log.dirs=/root/kraft-logs
s3.wal.path=/root/kraft-logs/s3wal
...
第 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'
...
要启动集群,请在预先指定的 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'
运行示例程序
在启动 AutoMQ 集群后,可以运行以下示例程序来验证其功能。
停止并卸载 AutoMQ 集群
在完成测试后,可以参考以下步骤停止并卸载 AutoMQ 集群。
- 在每台节点上执行如下命令停止进程。
bin/kafka-server-stop.sh
你可以通过配置对象存储的生命周期规则来自动清空 s3-data-bucket 和 s3-ops-bucket 中的数据,然后再删除这些存储桶。
删除创建的计算实例及其对应的系统卷和数据卷。
删除测试用户及其关联的 AccessKey 和 SecretKey。