-
Notifications
You must be signed in to change notification settings - Fork 80
分布式部署方式
ice-doom edited this page May 9, 2021
·
3 revisions
web端、MySQL、Redis部署在一台,其余执行任务的worker部署在其他机器上,任务随机下发到其中一个worker去执行,最后结果通过web端展示
本例中web端、MySQL、Redis、一个worker部署在A机器上,另一个worker部署在B机器上。
A机器:
修改docker-compose.yml
文件,添加redis、mysql的侦听端口保证另一个worker可以连接,注:需要使用强密码
version: '3'
services:
ubuntu:
image: mirchdocker/eyejo:latest
container_name: eyejo_ubuntu
ports:
- 6103:443
restart: on-failure
depends_on:
- database
working_dir: /root/eyejo/
volumes:
- ./eyejo_config.yaml:/root/eyejo/config.yaml
entrypoint: ["sh", "-c", "python3 manage.py initadmin --user admin --password eyejo@666 --email eyejo@admin.com; nginx; supervisord -c ./supervisord.conf; tail -f /var/log/lastlog"]
worker:
image: mirchdocker/eyejo:latest
container_name: eyejo_worker
restart: on-failure
working_dir: /root/eyejo/
volumes:
- ./eyejo_config.yaml:/root/eyejo/config.yaml
entrypoint: ["sh", "-c", "celery -A EyeJo.celery:app worker --loglevel=info -c 2 -O fair -f celery.log"]
redis:
ports:
- 16379:6379
image: redis:latest
container_name: eyejo_redis
command: redis-server --appendonly yes --requirepass eyejoPass
database:
ports:
- 13306:3306
image: mariadb:10.5
container_name: eyejo_mariadb
command: --init-file /init.sql --max_allowed_packet=52428800 --max_connections=1000
volumes:
- ./EyeJo.sql:/init.sql
environment:
- MYSQL_ROOT_PASSWORD=eyejo@pass
- MYSQL_DATABASE=EyeJo
eyejo_config.yaml
由于位于同一台机器上,可以不修改HOST和PORT
MYSQL:
NAME: 'EyeJo'
USER: 'root'
PASSWORD: 'eyejo@pass'
HOST: 'eyejo_mariadb'
PORT: '3306'
REDIS:
HOST: 'eyejo_redis'
PORT: '6379'
PASSWORD: 'eyejoPass'
B机器:
修改docker-compose.yml
文件,如下:
version: '3'
services:
worker2:
image: mirchdocker/eyejo:latest
container_name: eyejo_worker
restart: on-failure
working_dir: /root/eyejo/
volumes:
- ./eyejo_config.yaml:/root/eyejo/config.yaml
entrypoint: ["sh", "-c", "celery -A EyeJo.celery:app worker --loglevel=info -c 2 -O fair -f celery.log"]
eyejo_config.yaml
需要修改HOST和PORT为web端,即这里的A机器
MYSQL:
NAME: 'EyeJo'
USER: 'root'
PASSWORD: 'eyejo@pass'
HOST: 'x.x.x.x'
PORT: '13306'
REDIS:
HOST: 'x.x.x.x'
PORT: '16379'
PASSWORD: 'eyejoPass'
通过查看worker的celery日志信息,可以看到2个worker都执行了web端下发的任务