Skip to content

Commit 8568b1f

Browse files
committed
chore: provide a more practical quick start for three nodes setup
1 parent 9c66bc8 commit 8568b1f

File tree

2 files changed

+76
-159
lines changed

2 files changed

+76
-159
lines changed

docker/README.md

+2-5
Original file line numberDiff line numberDiff line change
@@ -268,11 +268,10 @@ docker-compose -f docker/docker-compose-cluster.yaml up -d
268268
```
269269

270270
This configuration:
271-
- Deploys a 3-controller + 3-broker cluster
271+
- Deploys a 3-server cluster
272272
- Includes MinIO for S3 storage
273273
- Uses the latest bucket URI pattern (s3.data.buckets, s3.ops.buckets, s3.wal.path)
274-
- Provides proper redundancy for both controller and broker services
275-
- Port forwarding is configured to allow access to all services from the host
274+
- All services run in a single Docker network
276275

277276
Configuration Notes
278277
-------------------
@@ -283,7 +282,5 @@ Both configurations use the new bucket URI pattern as recommended in the AutoMQ
283282
- `s3.ops.buckets` for logs and metrics storage
284283
- `s3.wal.path` for S3 WAL
285284

286-
The older `storage.mode=s3wal` parameter is deprecated and no longer used.
287-
288285
For more details, see the [AutoMQ documentation](https://www.automq.com/docs/automq/getting-started/cluster-deployment-on-linux#step-2-edit-the-cluster-configuration-template).
289286

docker/docker-compose-cluster.yaml

+74-154
Original file line numberDiff line numberDiff line change
@@ -13,216 +13,136 @@
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
1515

16-
# Three-node AutoMQ cluster setup with MinIO for production-like environments
16+
# Single-node AutoMQ setup with MinIO for quick starts
1717
version: "3.8"
1818

19+
x-common-variables: &common-env
20+
KAFKA_S3_ACCESS_KEY: minioadmin
21+
KAFKA_S3_SECRET_KEY: minioadmin
22+
KAFKA_HEAP_OPTS: -Xms1g -Xmx4g -XX:MetaspaceSize=96m -XX:MaxDirectMemorySize=1G
23+
# Replace CLUSTER_ID with a unique base64 UUID using "bin/kafka-storage.sh random-uuid"
24+
CLUSTER_ID: 5XF4fHIOTfSIqkmje2KFlg
25+
1926
services:
2027
# MinIO service for S3 storage
2128
minio:
22-
container_name: "${MINIO_DOCKER_NAME-minio}"
23-
hostname: "${MINIO_DOCKER_NAME-minio}"
24-
image: minio/minio:RELEASE.2023-09-04T19-57-37Z
29+
container_name: "minio"
30+
image: minio/minio
31+
environment:
32+
MINIO_ROOT_USER: minioadmin
33+
MINIO_ROOT_PASSWORD: minioadmin
34+
MINIO_DOMAIN: minio
2535
ports:
2636
- "9000:9000" # MinIO API
2737
- "9001:9001" # MinIO Console
28-
environment:
29-
- MINIO_ROOT_USER=minioadmin
30-
- MINIO_ROOT_PASSWORD=minioadmin
31-
command: server /data --console-address ":9001"
32-
volumes:
33-
- minio_data:/data
38+
command: [ "server", "/data", "--console-address", ":9001" ]
3439
networks:
3540
automq_net:
36-
ipv4_address: 10.6.0.2
3741
healthcheck:
38-
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
42+
test: [ "CMD", "curl", "-f", "http://minio:9000/minio/health/live" ]
3943
interval: 5s
4044
timeout: 5s
4145
retries: 3
4246

4347
# Create needed buckets
4448
mc:
45-
container_name: "${MC_DOCKER_NAME-mc}"
46-
hostname: "${MC_DOCKER_NAME-mc}"
47-
image: minio/mc:RELEASE.2023-09-07T22-48-55Z
49+
container_name: "mc"
50+
image: minio/mc
4851
depends_on:
4952
minio:
5053
condition: service_healthy
5154
entrypoint: >
5255
/bin/sh -c "
53-
/usr/bin/mc config host add myminio http://minio:9000 minioadmin minioadmin;
54-
/usr/bin/mc mb myminio/automq-data;
55-
/usr/bin/mc policy set public myminio/automq-data;
56-
exit 0;
56+
until (/usr/bin/mc config host add minio http://minio:9000 minioadmin minioadmin) do echo '...waiting...' && sleep 1; done;
57+
/usr/bin/mc rm -r --force minio/automq-data;
58+
/usr/bin/mc rm -r --force minio/automq-ops;
59+
/usr/bin/mc mb minio/automq-data;
60+
/usr/bin/mc mb minio/automq-ops;
61+
/usr/bin/mc policy set public minio/automq-data;
62+
/usr/bin/mc policy set public minio/automq-ops;
63+
tail -f /dev/null
5764
"
5865
networks:
5966
- automq_net
6067

61-
# Controller node 1 (first controller in the cluster)
62-
controller1:
63-
container_name: "${CONTROLLER1_DOCKER_NAME-controller1}"
64-
hostname: "${CONTROLLER1_DOCKER_NAME-controller1}"
65-
stop_grace_period: 2m
68+
# Three nodes for AutoMQ cluster
69+
server1:
70+
container_name: "automq-server1"
6671
image: automqinc/automq:latest
67-
ports:
68-
- "9093:9093" # Controller API
72+
stop_grace_period: 1m
6973
environment:
70-
- KAFKA_S3_ACCESS_KEY=minioadmin
71-
- KAFKA_S3_SECRET_KEY=minioadmin
72-
- KAFKA_HEAP_OPTS=-Xms1g -Xmx1g -XX:MetaspaceSize=96m -XX:MaxDirectMemorySize=1G
73-
- KAFKA_CFG_LISTENERS=CONTROLLER://:9093
74-
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT
74+
<<: *common-env
7575
command:
7676
- bash
7777
- -c
7878
- |
79-
/opt/kafka/scripts/start.sh up --process.roles controller --node.id 0 --controller.quorum.voters 0@controller1:9093,1@controller2:9093,2@controller3:9093 --s3.data.buckets 0@s3://automq-data?region=us-east-1 --s3.ops.buckets 1@s3://automq-data?region=us-east-1 --s3.wal.path 0@s3://automq-data?region=us-east-1 --s3.endpoint http://10.6.0.2:9000 --s3.path-style-access true
79+
/opt/automq/kafka/bin/kafka-server-start.sh \
80+
/opt/automq/kafka/config/kraft/server.properties \
81+
--override cluster.id=$$CLUSTER_ID \
82+
--override node.id=0 \
83+
--override controller.quorum.voters=0@server1:9093,1@server2:9093,2@server3:9093 \
84+
--override controller.quorum.bootstrap.servers=server1:9093,server2:9093,server3:9093 \
85+
--override advertised.listeners=PLAINTEXT://server1:9092 \
86+
--override s3.data.buckets='0@s3://automq-data?region=us-east-1&endpoint=http://minio:9000&pathStyle=true' \
87+
--override s3.ops.buckets='1@s3://automq-ops?region=us-east-1&endpoint=http://minio:9000&pathStyle=true' \
88+
--override s3.wal.path='0@s3://automq-data?region=us-east-1&endpoint=http://minio:9000&pathStyle=true'
8089
networks:
8190
automq_net:
82-
ipv4_address: 10.6.0.3
8391
depends_on:
8492
- minio
8593
- mc
8694

87-
# Controller node 2
88-
controller2:
89-
container_name: "${CONTROLLER2_DOCKER_NAME-controller2}"
90-
hostname: "${CONTROLLER2_DOCKER_NAME-controller2}"
91-
stop_grace_period: 2m
92-
image: automqinc/automq:latest
93-
ports:
94-
- "9094:9093" # Controller API (mapped to different port on host)
95-
environment:
96-
- KAFKA_S3_ACCESS_KEY=minioadmin
97-
- KAFKA_S3_SECRET_KEY=minioadmin
98-
- KAFKA_HEAP_OPTS=-Xms1g -Xmx1g -XX:MetaspaceSize=96m -XX:MaxDirectMemorySize=1G
99-
- KAFKA_CFG_LISTENERS=CONTROLLER://:9093
100-
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT
101-
command:
102-
- bash
103-
- -c
104-
- |
105-
/opt/kafka/scripts/start.sh up --process.roles controller --node.id 1 --controller.quorum.voters 0@controller1:9093,1@controller2:9093,2@controller3:9093 --s3.data.buckets 0@s3://automq-data?region=us-east-1 --s3.ops.buckets 1@s3://automq-data?region=us-east-1 --s3.wal.path 0@s3://automq-data?region=us-east-1 --s3.endpoint http://10.6.0.2:9000 --s3.path-style-access true
106-
networks:
107-
automq_net:
108-
ipv4_address: 10.6.0.4
109-
depends_on:
110-
- controller1
111-
112-
# Controller node 3
113-
controller3:
114-
container_name: "${CONTROLLER3_DOCKER_NAME-controller3}"
115-
hostname: "${CONTROLLER3_DOCKER_NAME-controller3}"
116-
stop_grace_period: 2m
117-
image: automqinc/automq:latest
118-
ports:
119-
- "9095:9093" # Controller API (mapped to different port on host)
120-
environment:
121-
- KAFKA_S3_ACCESS_KEY=minioadmin
122-
- KAFKA_S3_SECRET_KEY=minioadmin
123-
- KAFKA_HEAP_OPTS=-Xms1g -Xmx1g -XX:MetaspaceSize=96m -XX:MaxDirectMemorySize=1G
124-
- KAFKA_CFG_LISTENERS=CONTROLLER://:9093
125-
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT
126-
command:
127-
- bash
128-
- -c
129-
- |
130-
/opt/kafka/scripts/start.sh up --process.roles controller --node.id 2 --controller.quorum.voters 0@controller1:9093,1@controller2:9093,2@controller3:9093 --s3.data.buckets 0@s3://automq-data?region=us-east-1 --s3.ops.buckets 1@s3://automq-data?region=us-east-1 --s3.wal.path 0@s3://automq-data?region=us-east-1 --s3.endpoint http://10.6.0.2:9000 --s3.path-style-access true
131-
networks:
132-
automq_net:
133-
ipv4_address: 10.6.0.5
134-
depends_on:
135-
- controller2
136-
137-
# Broker node 1
138-
broker1:
139-
container_name: "${BROKER1_DOCKER_NAME-broker1}"
140-
hostname: "${BROKER1_DOCKER_NAME-broker1}"
141-
stop_grace_period: 2m
142-
image: automqinc/automq:latest
143-
ports:
144-
- "9092:9092" # Kafka API
145-
environment:
146-
- KAFKA_S3_ACCESS_KEY=minioadmin
147-
- KAFKA_S3_SECRET_KEY=minioadmin
148-
- KAFKA_HEAP_OPTS=-Xms1g -Xmx1g -XX:MetaspaceSize=96m -XX:MaxDirectMemorySize=1G
149-
- KAFKA_CFG_AUTOBALANCER_REPORTER_NETWORK_IN_CAPACITY=5120
150-
- KAFKA_CFG_AUTOBALANCER_REPORTER_NETWORK_OUT_CAPACITY=5120
151-
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
152-
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092
153-
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT
154-
command:
155-
- bash
156-
- -c
157-
- |
158-
/opt/kafka/scripts/start.sh up --process.roles broker --node.id 3 --controller.quorum.voters 0@controller1:9093,1@controller2:9093,2@controller3:9093 --s3.data.buckets 0@s3://automq-data?region=us-east-1 --s3.ops.buckets 1@s3://automq-data?region=us-east-1 --s3.wal.path 0@s3://automq-data?region=us-east-1 --s3.endpoint http://10.6.0.2:9000 --s3.path-style-access true
159-
networks:
160-
automq_net:
161-
ipv4_address: 10.6.0.6
162-
depends_on:
163-
- controller1
164-
- controller2
165-
- controller3
166-
167-
# Broker node 2
168-
broker2:
169-
container_name: "${BROKER2_DOCKER_NAME-broker2}"
170-
hostname: "${BROKER2_DOCKER_NAME-broker2}"
171-
stop_grace_period: 2m
95+
server2:
96+
container_name: "automq-server2"
17297
image: automqinc/automq:latest
173-
ports:
174-
- "9096:9092" # Kafka API (mapped to different port on host)
98+
stop_grace_period: 1m
17599
environment:
176-
- KAFKA_S3_ACCESS_KEY=minioadmin
177-
- KAFKA_S3_SECRET_KEY=minioadmin
178-
- KAFKA_HEAP_OPTS=-Xms1g -Xmx1g -XX:MetaspaceSize=96m -XX:MaxDirectMemorySize=1G
179-
- KAFKA_CFG_AUTOBALANCER_REPORTER_NETWORK_IN_CAPACITY=5120
180-
- KAFKA_CFG_AUTOBALANCER_REPORTER_NETWORK_OUT_CAPACITY=5120
181-
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
182-
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9096
183-
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT
100+
<<: *common-env
184101
command:
185102
- bash
186103
- -c
187104
- |
188-
/opt/kafka/scripts/start.sh up --process.roles broker --node.id 4 --controller.quorum.voters 0@controller1:9093,1@controller2:9093,2@controller3:9093 --s3.data.buckets 0@s3://automq-data?region=us-east-1 --s3.ops.buckets 1@s3://automq-data?region=us-east-1 --s3.wal.path 0@s3://automq-data?region=us-east-1 --s3.endpoint http://10.6.0.2:9000 --s3.path-style-access true
105+
/opt/automq/kafka/bin/kafka-server-start.sh \
106+
/opt/automq/kafka/config/kraft/server.properties \
107+
--override cluster.id=$$CLUSTER_ID \
108+
--override node.id=1 \
109+
--override controller.quorum.voters=0@server1:9093,1@server2:9093,2@server3:9093 \
110+
--override controller.quorum.bootstrap.servers=server1:9093,server2:9093,server3:9093 \
111+
--override advertised.listeners=PLAINTEXT://server2:9092 \
112+
--override s3.data.buckets='0@s3://automq-data?region=us-east-1&endpoint=http://minio:9000&pathStyle=true' \
113+
--override s3.ops.buckets='1@s3://automq-ops?region=us-east-1&endpoint=http://minio:9000&pathStyle=true' \
114+
--override s3.wal.path='0@s3://automq-data?region=us-east-1&endpoint=http://minio:9000&pathStyle=true'
189115
networks:
190116
automq_net:
191-
ipv4_address: 10.6.0.7
192117
depends_on:
193-
- broker1
118+
- minio
119+
- mc
194120

195-
# Broker node 3
196-
broker3:
197-
container_name: "${BROKER3_DOCKER_NAME-broker3}"
198-
hostname: "${BROKER3_DOCKER_NAME-broker3}"
199-
stop_grace_period: 2m
121+
server3:
122+
container_name: "automq-server3"
200123
image: automqinc/automq:latest
201-
ports:
202-
- "9097:9092" # Kafka API (mapped to different port on host)
124+
stop_grace_period: 1m
203125
environment:
204-
- KAFKA_S3_ACCESS_KEY=minioadmin
205-
- KAFKA_S3_SECRET_KEY=minioadmin
206-
- KAFKA_HEAP_OPTS=-Xms1g -Xmx1g -XX:MetaspaceSize=96m -XX:MaxDirectMemorySize=1G
207-
- KAFKA_CFG_AUTOBALANCER_REPORTER_NETWORK_IN_CAPACITY=5120
208-
- KAFKA_CFG_AUTOBALANCER_REPORTER_NETWORK_OUT_CAPACITY=5120
209-
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
210-
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9097
211-
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT
126+
<<: *common-env
212127
command:
213128
- bash
214129
- -c
215130
- |
216-
/opt/kafka/scripts/start.sh up --process.roles broker --node.id 5 --controller.quorum.voters 0@controller1:9093,1@controller2:9093,2@controller3:9093 --s3.data.buckets 0@s3://automq-data?region=us-east-1 --s3.ops.buckets 1@s3://automq-data?region=us-east-1 --s3.wal.path 0@s3://automq-data?region=us-east-1 --s3.endpoint http://10.6.0.2:9000 --s3.path-style-access true
131+
/opt/automq/kafka/bin/kafka-server-start.sh \
132+
/opt/automq/kafka/config/kraft/server.properties \
133+
--override cluster.id=$$CLUSTER_ID \
134+
--override node.id=2 \
135+
--override controller.quorum.voters=0@server1:9093,1@server2:9093,2@server3:9093 \
136+
--override controller.quorum.bootstrap.servers=server1:9093,server2:9093,server3:9093 \
137+
--override advertised.listeners=PLAINTEXT://server3:9092 \
138+
--override s3.data.buckets='0@s3://automq-data?region=us-east-1&endpoint=http://minio:9000&pathStyle=true' \
139+
--override s3.ops.buckets='1@s3://automq-ops?region=us-east-1&endpoint=http://minio:9000&pathStyle=true' \
140+
--override s3.wal.path='0@s3://automq-data?region=us-east-1&endpoint=http://minio:9000&pathStyle=true'
217141
networks:
218142
automq_net:
219-
ipv4_address: 10.6.0.8
220143
depends_on:
221-
- broker2
222-
223-
volumes:
224-
minio_data:
225-
driver: local
144+
- minio
145+
- mc
226146

227147
networks:
228148
automq_net:
@@ -232,4 +152,4 @@ networks:
232152
driver: default
233153
config:
234154
- subnet: "10.6.0.0/16"
235-
gateway: "10.6.0.1"
155+
gateway: "10.6.0.1"

0 commit comments

Comments
 (0)