實現分佈式其實就是通過部署多個oj在不同虛擬機上,讓多個判題機同時訪問一個數據庫。
所以就需要一個oj(A oj)貢獻它的數據庫讓其他judger輪!!
在A oj 上,進入mysql,執行如下命令,賦予judge遠程訪問jol數據庫的權限,並且設置密碼爲judge_pass
GRANT ALL PRIVILEGES ON jol.* TO 'judge'@'%' IDENTIFIED BY 'judge_pass' WITH GRANT OPTION;
flush privileges;
並且檢查/etc/mysql/my.cnf 確保
- bind-address = 0.0.0.0
- max_connections = 512
然後我們再 B 、C、D.....oj上 ,配置judge.conf
vim /home/judge/etc/judge.conf
實際情況修改前三個就行了 。分別時 Aoj 的ip 和MySQL遠程連接的賬戶和密碼,後面OJ_HTTP_USERNAME默認時IP,
如果不想ip暴露在狀態頁可以隨便起名
修改完成後我們要將A oj的測試數據傳到B、C。。。oj上
這裏要確保兩臺虛擬機上都裝了ssh
如果不確定可以 執行如下命令查看是否有ssh
沒有的話,就執行 如下命令安裝ssh
sudo apt-get install openssh-server
安裝完後啓動
service ssh start
接下來有4種方式課選,將Aoj的數據複製到其他oj上
可以在Aoj上執行如下命令任一條
scp -r /home/judge/data root@判題機ip:/home/judge/
或用同步命令。
rsync -vzrtopg --progress --delete /home/judge/data root@判題機ip:/home/judge/
或在B、C。。。oj上執行下面任意一條
scp -r root@主機ip:/home/judge/data /home/judge/
或用同步命令。
rsync -vzrtopg --progress --delete root@主機ip:/home/judge/data /home/judge/
完成後 執行命令,重啓判題機
pkill judged&&sudo judged