改进 集群调度

This commit is contained in:
iVampireSP.com 2023-01-05 03:17:18 +08:00
parent 3d78d90540
commit ea741c8e3e
No known key found for this signature in database
GPG Key ID: 2F7B001CA27A8132
5 changed files with 64 additions and 18 deletions

View File

@ -106,6 +106,9 @@ DASHBOARD_BIRTHDAY_PATH=/birthdays
# 可信代理,用于获取真实 IP。多个 IP 用逗号分隔。
TRUSTED_PROXIES=
# Roadrunner 的版本,比如 2.12.1, 默认也是 2.12.1
ROADRUNNER_VERSION=
NODE_TYPE=master
NODE_ID=
NODE_IP=

View File

@ -31,6 +31,43 @@ class Work extends Command
*/
public function handle(): int
{
// 检测目录下是否有 rr
if (!file_exists(base_path('rr'))) {
$this->warn('未找到 rr 文件,将自动下载。');
// 获取操作系统是 darwin 还是 linux
$os = Str::contains(PHP_OS, 'Darwin') ? 'darwin' : 'linux';
// 获取操作系统是 arm64 还是 amd64
$arch = Str::contains(php_uname('m'), ['aarch64', 'arm64']) ? 'arm64' : 'amd64';
// 下载 rr
$this->info('正在下载 rr。');
$version = config('settings.roadrunner.version');
$download_link = "https://github.sakurapuare.com/roadrunner-server/roadrunner/releases/download/v{$version}/roadrunner-{$version}-{$os}-{$arch}.tar.gz";
$save_name = 'rr_download.tar.gz';
// 下载wget
exec("wget {$download_link} -O {$save_name}");
exec("tar -zxvf {$save_name}");
// 删除下载的压缩包
exec("rm {$save_name}");
// 提取解压目录下的 rr 文件
exec("mv roadrunner-{$version}-{$os}-$arch/rr rr");
// 删除解压目录
exec("rm -rf roadrunner-{$version}-{$os}-$arch");
// 设置 rr 可执行权限
exec("chmod +x rr");
}
Artisan::call('config:cache');
if (!config('settings.node.ip')) {
@ -66,13 +103,29 @@ public function handle(): int
$this->info('初始化完成。');
$this->info('正在启动集群协调任务。');
$pid = pcntl_fork();
if ($pid === -1) {
$this->error('无法创建子进程。');
return CommandAlias::FAILURE;
} else if ($pid === 0) {
// 子进程
$this->report();
// 再打开一个,负责 octane
$pid = pcntl_fork();
if ($pid === -1) {
$this->error('无法创建子进程。');
return CommandAlias::FAILURE;
} else if ($pid === 0) {
// 子进程
$this->info('正在启动 Web。');
$command = 'php artisan octane:start --host=0.0.0.0 --rpc-port=6001 --port=8000';
exec($command);
} else {
// 子进程
$this->report();
}
} else {
// 父进程
$this->work();

View File

@ -19,5 +19,8 @@
'type' => env('NODE_TYPE', 'master'),
'id' => env('NODE_ID'),
'ip' => env('NODE_IP'),
]
],
'roadrunner' => [
'version' => env('ROADRUNNER_VERSION', '2.12.1'),
],
];

View File

@ -1,13 +0,0 @@
[program:lae-worker]
process_name=%(program_name)s_%(process_num)02d
directory=/opt/lae
command=php artisan cluster:work
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www
numprocs=1
redirect_stderr=true
stdout_logfile=/var/log/lae-cluster.log
stopwaitsecs=3600

View File

@ -1,12 +1,12 @@
[program:lae-web]
process_name=%(program_name)s_%(process_num)02d
directory=/opt/lae
command=php artisan octane:start --host=0.0.0.0 --rpc-port=6001 --port=8000
command=php artisan cluster:work
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www
user=root
numprocs=1
redirect_stderr=true
stdout_logfile=/var/log/lae-web.log