天天看點

HUSTOJ随筆4-建立分布式判題系統

HUSTOJ 支援一台資料庫伺服器,多台web伺服器和多台判題伺服器,以承擔較高的通路負荷。

首先,需要建立用于從遠端連接配接資料庫的帳号。

  1. GRANT ALL PRIVILEGES ON jol.* TO 'judge'@'%'
  2. IDENTIFIED BY 'judge_pass' WITHOUT GRANT OPTION;
  3. flush privileges

複制代碼

其中jol為資料庫,judge為帳号,judge_pass為密碼。

注意:

檢查/etc/mysql/my.cnf 確定

  1. bind-address        = 0.0.0.0

複制代碼

高負載的情況下最好設定更多的連接配接數。

max_connections = 512

其次,配置各web程式連接配接到資料庫。

修改include/db_info.inc.php

  1. static  $DB_HOST="資料庫伺服器ip";
  2. static  $DB_NAME="jol";
  3. static  $DB_USER="judge";
  4. static  $DB_PASS="judge_pass";

複制代碼

第三,配置各判題程式連接配接到資料庫,配置設定任務。

  1. OJ_HOST_NAME=資料庫伺服器ip
  2. OJ_USER_NAME=judge
  3. OJ_PASSWORD=judge_pass
  4. OJ_DB_NAME=jol
  5. ...
  6. OJ_TOTAL=判題機總數
  7. OJ_MOD=本機編号,從0開始
  8. ...

複制代碼

其中 OJ_TOTAL=判題機總數, OJ_MOD=本機編号,從0開始,例如

有3台機器判題,分别編号0,1,2

OJ_TOTAL都設為3,OJ_MOD分别設為0,1,2

* 自R784版本開始,不再需要分别配置OJ_TOTAL和OJ_MOD,全部設為1和0即可,所有正常工作的judge節點将自動配置設定目前任務。

第四,複制測試資料目錄到各判題機。

先要準備好遠端通路,在主伺服器執行:

       sudo apt-get install openssh-server

從主機向判題機複制

  1. scp -r /home/judge/data  root@判題機ip:/home/judge/

複制代碼 或用同步指令。

  1. rsync -vzrtopg --progress --delete /home/judge/data root@判題機ip:/home/judge/

複制代碼 判題機從主機複制

  1. scp -r root@主機ip:/home/judge/data  /home/judge/

複制代碼 或用同步指令。

  1. rsync -vzrtopg --progress --delete root@主機ip:/home/judge/data /home/judge/

複制代碼 最後,在各判題機重新開機判題程式。

  1. sudo pkill judged&&sudo judged

複制代碼

HUSTOJ随筆4-建立分布式判題系統

虛拟機測試,用3台虛拟機+1台真機,4機同步判題