You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
393 lines
8.5 KiB
393 lines
8.5 KiB
services:
|
|
# Master server - coordinates the cluster
|
|
master:
|
|
image: chrislusf/seaweedfs:latest
|
|
container_name: seaweed-master
|
|
ports:
|
|
- "9333:9333"
|
|
- "19333:19333"
|
|
command: >
|
|
master
|
|
-ip=master
|
|
-port=9333
|
|
-volumeSizeLimitMB=50
|
|
-defaultReplication=001
|
|
volumes:
|
|
- master_data:/data
|
|
networks:
|
|
- seaweed_net
|
|
healthcheck:
|
|
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://master:9333/cluster/status"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
# Volume Server 1
|
|
volume1:
|
|
image: chrislusf/seaweedfs:latest
|
|
container_name: seaweed-volume1
|
|
ports:
|
|
- "8080:8080"
|
|
- "18080:18080"
|
|
command: >
|
|
volume
|
|
-mserver=master:9333
|
|
-ip=volume1
|
|
-port=8080
|
|
-dir=/data
|
|
-max=100
|
|
-dataCenter=dc1
|
|
-rack=rack1
|
|
volumes:
|
|
- volume1_data:/data
|
|
depends_on:
|
|
master:
|
|
condition: service_healthy
|
|
networks:
|
|
- seaweed_net
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:8080/status"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
# Volume Server 2
|
|
volume2:
|
|
image: chrislusf/seaweedfs:latest
|
|
container_name: seaweed-volume2
|
|
ports:
|
|
- "8081:8080"
|
|
- "18081:18080"
|
|
command: >
|
|
volume
|
|
-mserver=master:9333
|
|
-ip=volume2
|
|
-port=8080
|
|
-dir=/data
|
|
-max=100
|
|
-dataCenter=dc1
|
|
-rack=rack1
|
|
volumes:
|
|
- volume2_data:/data
|
|
depends_on:
|
|
master:
|
|
condition: service_healthy
|
|
networks:
|
|
- seaweed_net
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:8080/status"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
# Volume Server 3
|
|
volume3:
|
|
image: chrislusf/seaweedfs:latest
|
|
container_name: seaweed-volume3
|
|
ports:
|
|
- "8082:8080"
|
|
- "18082:18080"
|
|
command: >
|
|
volume
|
|
-mserver=master:9333
|
|
-ip=volume3
|
|
-port=8080
|
|
-dir=/data
|
|
-max=100
|
|
-dataCenter=dc1
|
|
-rack=rack2
|
|
volumes:
|
|
- volume3_data:/data
|
|
depends_on:
|
|
master:
|
|
condition: service_healthy
|
|
networks:
|
|
- seaweed_net
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:8080/status"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
# Volume Server 4
|
|
volume4:
|
|
image: chrislusf/seaweedfs:latest
|
|
container_name: seaweed-volume4
|
|
ports:
|
|
- "8083:8080"
|
|
- "18083:18080"
|
|
command: >
|
|
volume
|
|
-mserver=master:9333
|
|
-ip=volume4
|
|
-port=8080
|
|
-dir=/data
|
|
-max=100
|
|
-dataCenter=dc2
|
|
-rack=rack1
|
|
volumes:
|
|
- volume4_data:/data
|
|
depends_on:
|
|
master:
|
|
condition: service_healthy
|
|
networks:
|
|
- seaweed_net
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:8080/status"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
# Volume Server 5
|
|
volume5:
|
|
image: chrislusf/seaweedfs:latest
|
|
container_name: seaweed-volume5
|
|
ports:
|
|
- "8084:8080"
|
|
- "18084:18080"
|
|
command: >
|
|
volume
|
|
-mserver=master:9333
|
|
-ip=volume5
|
|
-port=8080
|
|
-dir=/data
|
|
-max=100
|
|
-dataCenter=dc2
|
|
-rack=rack2
|
|
volumes:
|
|
- volume5_data:/data
|
|
depends_on:
|
|
master:
|
|
condition: service_healthy
|
|
networks:
|
|
- seaweed_net
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:8080/status"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
# Volume Server 6
|
|
volume6:
|
|
image: chrislusf/seaweedfs:latest
|
|
container_name: seaweed-volume6
|
|
ports:
|
|
- "8085:8080"
|
|
- "18085:18080"
|
|
command: >
|
|
volume
|
|
-mserver=master:9333
|
|
-ip=volume6
|
|
-port=8080
|
|
-dir=/data
|
|
-max=100
|
|
-dataCenter=dc2
|
|
-rack=rack3
|
|
volumes:
|
|
- volume6_data:/data
|
|
depends_on:
|
|
master:
|
|
condition: service_healthy
|
|
networks:
|
|
- seaweed_net
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:8080/status"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
# Filer for easier data access
|
|
filer:
|
|
image: chrislusf/seaweedfs:latest
|
|
container_name: seaweed-filer
|
|
ports:
|
|
- "8888:8888"
|
|
- "18888:18888"
|
|
command: >
|
|
filer
|
|
-master=master:9333
|
|
-ip=filer
|
|
-port=8888
|
|
depends_on:
|
|
master:
|
|
condition: service_healthy
|
|
networks:
|
|
- seaweed_net
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:8888/"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
# Admin Server - manages EC tasks
|
|
admin:
|
|
build:
|
|
context: ../../
|
|
dockerfile: docker/admin_integration/Dockerfile.admin
|
|
container_name: seaweed-admin
|
|
ports:
|
|
- "9900:9900"
|
|
environment:
|
|
- MASTER_ADDRESS=master:9333
|
|
- ADMIN_PORT=9900
|
|
- SCAN_INTERVAL=30s
|
|
- WORKER_TIMEOUT=5m
|
|
- TASK_TIMEOUT=30m
|
|
- MAX_RETRIES=3
|
|
- MAX_CONCURRENT_TASKS=5
|
|
volumes:
|
|
- admin_data:/data
|
|
- ./admin-config:/config
|
|
depends_on:
|
|
master:
|
|
condition: service_healthy
|
|
filer:
|
|
condition: service_healthy
|
|
networks:
|
|
- seaweed_net
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:9900/health"]
|
|
interval: 15s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
# EC Worker 1
|
|
worker1:
|
|
build:
|
|
context: ../../
|
|
dockerfile: docker/admin_integration/Dockerfile.worker
|
|
container_name: seaweed-worker1
|
|
environment:
|
|
- ADMIN_ADDRESS=admin:9900
|
|
- WORKER_ID=worker-1
|
|
- WORKER_ADDRESS=worker1:9001
|
|
- CAPABILITIES=erasure_coding
|
|
- MAX_CONCURRENT=2
|
|
- WORK_DIR=/work
|
|
volumes:
|
|
- worker1_data:/work
|
|
depends_on:
|
|
admin:
|
|
condition: service_healthy
|
|
networks:
|
|
- seaweed_net
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:9001/health"]
|
|
interval: 15s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
# EC Worker 2
|
|
worker2:
|
|
build:
|
|
context: ../../
|
|
dockerfile: docker/admin_integration/Dockerfile.worker
|
|
container_name: seaweed-worker2
|
|
environment:
|
|
- ADMIN_ADDRESS=admin:9900
|
|
- WORKER_ID=worker-2
|
|
- WORKER_ADDRESS=worker2:9001
|
|
- CAPABILITIES=erasure_coding,vacuum
|
|
- MAX_CONCURRENT=2
|
|
- WORK_DIR=/work
|
|
volumes:
|
|
- worker2_data:/work
|
|
depends_on:
|
|
admin:
|
|
condition: service_healthy
|
|
networks:
|
|
- seaweed_net
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:9001/health"]
|
|
interval: 15s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
# EC Worker 3
|
|
worker3:
|
|
build:
|
|
context: ../../
|
|
dockerfile: docker/admin_integration/Dockerfile.worker
|
|
container_name: seaweed-worker3
|
|
environment:
|
|
- ADMIN_ADDRESS=admin:9900
|
|
- WORKER_ID=worker-3
|
|
- WORKER_ADDRESS=worker3:9001
|
|
- CAPABILITIES=erasure_coding,vacuum
|
|
- MAX_CONCURRENT=1
|
|
- WORK_DIR=/work
|
|
volumes:
|
|
- worker3_data:/work
|
|
depends_on:
|
|
admin:
|
|
condition: service_healthy
|
|
networks:
|
|
- seaweed_net
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:9001/health"]
|
|
interval: 15s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
# Continuous Load Generator
|
|
load_generator:
|
|
build:
|
|
context: ../../
|
|
dockerfile: docker/admin_integration/Dockerfile.load
|
|
container_name: seaweed-load
|
|
environment:
|
|
- FILER_ADDRESS=filer:8888
|
|
- MASTER_ADDRESS=master:9333
|
|
- WRITE_RATE=10 # files per second
|
|
- DELETE_RATE=2 # files per second
|
|
- FILE_SIZE_MIN=1MB
|
|
- FILE_SIZE_MAX=5MB
|
|
- TEST_DURATION=3600 # 1 hour
|
|
depends_on:
|
|
filer:
|
|
condition: service_healthy
|
|
admin:
|
|
condition: service_healthy
|
|
networks:
|
|
- seaweed_net
|
|
|
|
# Monitoring and Health Check
|
|
monitor:
|
|
build:
|
|
context: ../../
|
|
dockerfile: docker/admin_integration/Dockerfile.monitor
|
|
container_name: seaweed-monitor
|
|
ports:
|
|
- "9999:9999"
|
|
environment:
|
|
- MASTER_ADDRESS=master:9333
|
|
- ADMIN_ADDRESS=admin:9900
|
|
- FILER_ADDRESS=filer:8888
|
|
- MONITOR_INTERVAL=10s
|
|
depends_on:
|
|
admin:
|
|
condition: service_healthy
|
|
networks:
|
|
- seaweed_net
|
|
volumes:
|
|
- ./monitor-data:/monitor-data
|
|
|
|
volumes:
|
|
master_data:
|
|
volume1_data:
|
|
volume2_data:
|
|
volume3_data:
|
|
volume4_data:
|
|
volume5_data:
|
|
volume6_data:
|
|
admin_data:
|
|
worker1_data:
|
|
worker2_data:
|
|
worker3_data:
|
|
|
|
networks:
|
|
seaweed_net:
|
|
driver: bridge
|
|
ipam:
|
|
config:
|
|
- subnet: 172.20.0.0/16
|