Skip to content

multi judger

simplefanC edited this page Apr 7, 2023 · 1 revision

多个判题机

前言

不同判题机之间是通过rsync进行数据同步的,所以需要配置相应的rsync服务。

同时注意以下两点:

  1. 保证rsync-slave服务的密码与主服务rsync-master的数据同步密码一致
  2. rsync-slave服务(判题机服务器)拉取主服务rsync-master的评测数据是每100s一次,所以后台上传评测数据后,需等待大概100s才能正常判题。

单体部署

如果之前是选择了单体部署,也就是主服务器既有backend和judger服务,那么部署更多不同服务器的判题机应该如下修改:

  1. 在原先运行的服务器上,修改voj-deploy/standAlone文件夹里面的docker-compose.yml添加以下rsync-master服务,数据同步密码请自行修改,如下:

    (注意:如果云服务器有防火墙请开启8848,3306,873端口)

    voj-rsync-master:
        image: registry.cn-shanghai.aliyuncs.com/simplefanc/voj_rsync:1.0
        container_name: voj-rsync-master
        volumes:
          - ./voj/testcase:/voj/testcase:ro
        environment:
          - RSYNC_MODE=master
          - RSYNC_USER=vojrsync 
          - RSYNC_PASSWORD=voj123456 # 请修改数据同步密码
        ports:
          - "0.0.0.0:873:873"

    同时,需要将MySQL的配置MYSQL_PUBLIC_HOST改成当前服务器的公网IP

    vim .env  # 修改与docker-compose.yml同目录下的配置文件
    # MySQL的配置
    MYSQL_HOST=172.20.0.3
    # 请提供当前mysql所在服务器的公网ip
    MYSQL_PUBLIC_HOST=***
    MYSQL_PUBLIC_PORT=3306
    MYSQL_ROOT_PASSWORD=voj123456

    修改完保存,然后重启 Docker 即可生效

    docker-compose down
    docker-compose up -d
  2. 在其它服务器(判题服务器)中使用 Docker-Compose运行voj-judger服务,具体操作如下:

    (注意:服务器请开启8088端口号,需要将判题服务暴露出去)

    1. 下载文件,进入到指定文件夹

      git clone https://github.com/simplefanc/voj-deploy.git && cd voj-deploy/distributed/judger
    2. 修改配置.env文件

      # Nacos的配置
      # 修改为Nacos所在服务的ip
      NACOS_HOST=
      # 修改为nacos启动端口号,默认为8848
      NACOS_PORT=8848
      # 修改为nacos的管理员账号
      NACOS_USERNAME=root
      # 修改为nacos的管理员密码
      NACOS_PASSWORD=voj123456
      
      # judgeserver的配置
      # 修改为当前服务器公网ip
      JUDGE_SERVER_IP=
      JUDGE_SERVER_PORT=8088
      JUDGE_SERVER_NAME=judger-1
      # -1表示可接收最大判题任务数为:cpu核心数+1
      MAX_TASK_NUM=-1
      # 当前判题服务器是否开启远程虚拟判题功能
      REMOTE_JUDGE_OPEN=true
      # -1表示可接收最大远程判题任务数为:cpu核心数*2+1
      REMOTE_JUDGE_MAX_TASK_NUM=-1
      # 默认沙盒并行判题程序数为cpu核心数
      PARALLEL_TASK=default
      
      # rsync评测数据同步的配置
      # 写入主服务器ip
      RSYNC_MASTER_ADDR=
      # 与主服务器的rsync密码一致
      RSYNC_PASSWORD=voj123456
    3. 启动即可

      docker-compose up -d
    4. 验证:

      访问 http://ip:8088/version 如果返回信息正常即启动成功!

分布式部署

  1. 如果之前已经选择了分布式部署,那么增加判题机,则与原先启动判题机的操作一样即可,在新的服务器上操作如下:

    git clone https://github.com/simplefanc/voj-deploy.git && cd voj-deploy/distributed/judger
    vim .env
  2. 修改.env文件的配置

    # voj全部数据存储的文件夹位置(默认当前路径生成judge文件夹)
    VOJ_JUDGESERVER_DATA_DIRECTORY=./judge
    
    # Nacos的配置
    # 修改为Nacos所在服务的ip
    NACOS_HOST=
    # 修改为Nacos启动端口号,默认为8848
    NACOS_PORT=8848
    # 修改为Nacos的管理员账号
    NACOS_USERNAME=root
    # 修改为Nacos的管理员密码
    NACOS_PASSWORD=voj123456
    
    # judgeserver的配置
    # 修改本服务器公网ip
    JUDGE_SERVER_IP=
    JUDGE_SERVER_PORT=8088
    JUDGE_SERVER_NAME=judger-1
    # -1表示可接收最大判题任务数为:cpu核心数+1
    MAX_TASK_NUM=-1
    # 当前判题服务器是否开启远程虚拟判题功能
    REMOTE_JUDGE_OPEN=true
    # -1表示可接收最大远程判题任务数为:cpu核心数*2+1
    REMOTE_JUDGE_MAX_TASK_NUM=-1
    # 默认沙盒并行判题程序数为cpu核心数
    PARALLEL_TASK=default
    
    # rsync评测数据同步的配置
    # 写入主服务器ip
    RSYNC_MASTER_ADDR=
    # 与主服务器的rsync密码一致
    RSYNC_PASSWORD=voj123456
  3. 修改完保存,启动即可。

    docker-compose up -d

Clone this wiki locally