mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-10-13 01:28:37 +02:00
working worker and admin. Task detection is not working yet.
This commit is contained in:
1 parent
f10c6305dc
commit
a1966e9692
23 files changed
+537
-3400
No files matched your search
@@ -1,395 +1,216 @@
|
||||
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"
|
||||
- "9901:9901"
|
||||
environment:
|
||||
- MASTER_ADDRESS=master:9333
|
||||
- ADMIN_PORT=9900
|
||||
- GRPC_PORT=9901
|
||||
- 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_GRPC_ADDRESS=admin:9901
|
||||
- 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_GRPC_ADDRESS=admin:9901
|
||||
- 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_GRPC_ADDRESS=admin:9901
|
||||
- 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:
|
||||
version: '3.8'
|
||||
name: admin_integration
|
||||
|
||||
networks:
|
||||
seaweed_net:
|
||||
driver: bridge
|
||||
ipam:
|
||||
config:
|
||||
- subnet: 172.20.0.0/16
|
||||
|
||||
services:
|
||||
master:
|
||||
image: chrislusf/seaweedfs:local
|
||||
ports:
|
||||
- "9333:9333"
|
||||
- "19333:19333"
|
||||
command: "master -ip=master -mdir=/data -volumeSizeLimitMB=50"
|
||||
environment:
|
||||
- WEED_MASTER_VOLUME_GROWTH_COPY_1=1
|
||||
- WEED_MASTER_VOLUME_GROWTH_COPY_2=2
|
||||
- WEED_MASTER_VOLUME_GROWTH_COPY_OTHER=1
|
||||
volumes:
|
||||
- ./data/master:/data
|
||||
networks:
|
||||
- seaweed_net
|
||||
|
||||
volume1:
|
||||
image: chrislusf/seaweedfs:local
|
||||
ports:
|
||||
- "8080:8080"
|
||||
- "18080:18080"
|
||||
command: "volume -mserver=master:9333 -ip=volume1 -dir=/data -max=10"
|
||||
depends_on:
|
||||
- master
|
||||
volumes:
|
||||
- ./data/volume1:/data
|
||||
networks:
|
||||
- seaweed_net
|
||||
|
||||
volume2:
|
||||
image: chrislusf/seaweedfs:local
|
||||
ports:
|
||||
- "8081:8080"
|
||||
- "18081:18080"
|
||||
command: "volume -mserver=master:9333 -ip=volume2 -dir=/data -max=10"
|
||||
depends_on:
|
||||
- master
|
||||
volumes:
|
||||
- ./data/volume2:/data
|
||||
networks:
|
||||
- seaweed_net
|
||||
|
||||
volume3:
|
||||
image: chrislusf/seaweedfs:local
|
||||
ports:
|
||||
- "8082:8080"
|
||||
- "18082:18080"
|
||||
command: "volume -mserver=master:9333 -ip=volume3 -dir=/data -max=10"
|
||||
depends_on:
|
||||
- master
|
||||
volumes:
|
||||
- ./data/volume3:/data
|
||||
networks:
|
||||
- seaweed_net
|
||||
|
||||
volume4:
|
||||
image: chrislusf/seaweedfs:local
|
||||
ports:
|
||||
- "8083:8080"
|
||||
- "18083:18080"
|
||||
command: "volume -mserver=master:9333 -ip=volume4 -dir=/data -max=10"
|
||||
depends_on:
|
||||
- master
|
||||
volumes:
|
||||
- ./data/volume4:/data
|
||||
networks:
|
||||
- seaweed_net
|
||||
|
||||
volume5:
|
||||
image: chrislusf/seaweedfs:local
|
||||
ports:
|
||||
- "8084:8080"
|
||||
- "18084:18080"
|
||||
command: "volume -mserver=master:9333 -ip=volume5 -dir=/data -max=10"
|
||||
depends_on:
|
||||
- master
|
||||
volumes:
|
||||
- ./data/volume5:/data
|
||||
networks:
|
||||
- seaweed_net
|
||||
|
||||
volume6:
|
||||
image: chrislusf/seaweedfs:local
|
||||
ports:
|
||||
- "8085:8080"
|
||||
- "18085:18080"
|
||||
command: "volume -mserver=master:9333 -ip=volume6 -dir=/data -max=10"
|
||||
depends_on:
|
||||
- master
|
||||
volumes:
|
||||
- ./data/volume6:/data
|
||||
networks:
|
||||
- seaweed_net
|
||||
|
||||
filer:
|
||||
image: chrislusf/seaweedfs:local
|
||||
ports:
|
||||
- "8888:8888"
|
||||
- "18888:18888"
|
||||
command: "filer -master=master:9333 -ip=filer"
|
||||
depends_on:
|
||||
- master
|
||||
volumes:
|
||||
- ./data/filer:/data
|
||||
networks:
|
||||
- seaweed_net
|
||||
|
||||
admin:
|
||||
image: chrislusf/seaweedfs:local
|
||||
ports:
|
||||
- "23646:23646" # HTTP admin interface (default port)
|
||||
- "33646:33646" # gRPC worker communication (23646 + 10000)
|
||||
command: "admin -port=23646 -masters=master:9333 -dataDir=/data"
|
||||
depends_on:
|
||||
- master
|
||||
- filer
|
||||
volumes:
|
||||
- ./data/admin:/data
|
||||
networks:
|
||||
- seaweed_net
|
||||
|
||||
worker1:
|
||||
image: chrislusf/seaweedfs:local
|
||||
command: "worker -admin=admin:23646 -capabilities=ec,vacuum -maxConcurrent=2"
|
||||
depends_on:
|
||||
- admin
|
||||
volumes:
|
||||
- ./data/worker1:/data
|
||||
networks:
|
||||
- seaweed_net
|
||||
environment:
|
||||
- WORKER_ID=worker-1
|
||||
|
||||
worker2:
|
||||
image: chrislusf/seaweedfs:local
|
||||
command: "worker -admin=admin:23646 -capabilities=ec,vacuum -maxConcurrent=2"
|
||||
depends_on:
|
||||
- admin
|
||||
volumes:
|
||||
- ./data/worker2:/data
|
||||
networks:
|
||||
- seaweed_net
|
||||
environment:
|
||||
- WORKER_ID=worker-2
|
||||
|
||||
worker3:
|
||||
image: chrislusf/seaweedfs:local
|
||||
command: "worker -admin=admin:23646 -capabilities=ec,vacuum -maxConcurrent=2"
|
||||
depends_on:
|
||||
- admin
|
||||
volumes:
|
||||
- ./data/worker3:/data
|
||||
networks:
|
||||
- seaweed_net
|
||||
environment:
|
||||
- WORKER_ID=worker-3
|
||||
|
||||
load_generator:
|
||||
image: chrislusf/seaweedfs:local
|
||||
entrypoint: ["/bin/sh"]
|
||||
command: >
|
||||
-c "
|
||||
echo 'Starting load generator...';
|
||||
sleep 30;
|
||||
echo 'Generating continuous load with 50MB volume limit...';
|
||||
while true; do
|
||||
echo 'Writing test files...';
|
||||
echo 'Test file content at $(date)' | /usr/bin/weed upload -server=master:9333;
|
||||
sleep 5;
|
||||
echo 'Deleting some files...';
|
||||
/usr/bin/weed shell -master=master:9333 <<< 'fs.rm /test_file_*' || true;
|
||||
sleep 10;
|
||||
done
|
||||
"
|
||||
depends_on:
|
||||
- master
|
||||
- filer
|
||||
- admin
|
||||
networks:
|
||||
- seaweed_net
|
||||
|
||||
monitor:
|
||||
image: alpine:latest
|
||||
entrypoint: ["/bin/sh"]
|
||||
command: >
|
||||
-c "
|
||||
apk add --no-cache curl jq;
|
||||
echo 'Starting cluster monitor...';
|
||||
sleep 30;
|
||||
while true; do
|
||||
echo '=== Cluster Status $(date) ===';
|
||||
echo 'Master status:';
|
||||
curl -s http://master:9333/cluster/status | jq '.IsLeader, .Peers' || echo 'Master not ready';
|
||||
echo;
|
||||
echo 'Admin status:';
|
||||
curl -s http://admin:23646/ | grep -o 'Admin.*Interface' || echo 'Admin not ready';
|
||||
echo;
|
||||
echo 'Volume count by server:';
|
||||
curl -s http://master:9333/vol/status | jq '.Volumes | length' || echo 'Volumes not ready';
|
||||
echo;
|
||||
sleep 60;
|
||||
done
|
||||
"
|
||||
depends_on:
|
||||
- master
|
||||
- admin
|
||||
- filer
|
||||
networks:
|
||||
- seaweed_net
|
||||
Reference in new issue
Block a user