Skip to content

分布式部署方式

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端下发的任务 A机器 B机器

Clone this wiki locally