改进 集群调度
This commit is contained in:
parent
3d78d90540
commit
ea741c8e3e
@ -106,6 +106,9 @@ DASHBOARD_BIRTHDAY_PATH=/birthdays
|
|||||||
# 可信代理,用于获取真实 IP。多个 IP 用逗号分隔。
|
# 可信代理,用于获取真实 IP。多个 IP 用逗号分隔。
|
||||||
TRUSTED_PROXIES=
|
TRUSTED_PROXIES=
|
||||||
|
|
||||||
|
# Roadrunner 的版本,比如 2.12.1, 默认也是 2.12.1
|
||||||
|
ROADRUNNER_VERSION=
|
||||||
|
|
||||||
NODE_TYPE=master
|
NODE_TYPE=master
|
||||||
NODE_ID=
|
NODE_ID=
|
||||||
NODE_IP=
|
NODE_IP=
|
||||||
|
@ -31,6 +31,43 @@ class Work extends Command
|
|||||||
*/
|
*/
|
||||||
public function handle(): int
|
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');
|
Artisan::call('config:cache');
|
||||||
|
|
||||||
if (!config('settings.node.ip')) {
|
if (!config('settings.node.ip')) {
|
||||||
@ -66,13 +103,29 @@ public function handle(): int
|
|||||||
$this->info('初始化完成。');
|
$this->info('初始化完成。');
|
||||||
|
|
||||||
$this->info('正在启动集群协调任务。');
|
$this->info('正在启动集群协调任务。');
|
||||||
|
|
||||||
$pid = pcntl_fork();
|
$pid = pcntl_fork();
|
||||||
if ($pid === -1) {
|
if ($pid === -1) {
|
||||||
$this->error('无法创建子进程。');
|
$this->error('无法创建子进程。');
|
||||||
return CommandAlias::FAILURE;
|
return CommandAlias::FAILURE;
|
||||||
} else if ($pid === 0) {
|
} else if ($pid === 0) {
|
||||||
// 子进程
|
// 再打开一个,负责 octane
|
||||||
$this->report();
|
$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 {
|
} else {
|
||||||
// 父进程
|
// 父进程
|
||||||
$this->work();
|
$this->work();
|
||||||
|
@ -19,5 +19,8 @@
|
|||||||
'type' => env('NODE_TYPE', 'master'),
|
'type' => env('NODE_TYPE', 'master'),
|
||||||
'id' => env('NODE_ID'),
|
'id' => env('NODE_ID'),
|
||||||
'ip' => env('NODE_IP'),
|
'ip' => env('NODE_IP'),
|
||||||
]
|
],
|
||||||
|
'roadrunner' => [
|
||||||
|
'version' => env('ROADRUNNER_VERSION', '2.12.1'),
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
@ -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
|
|
@ -1,12 +1,12 @@
|
|||||||
[program:lae-web]
|
[program:lae-web]
|
||||||
process_name=%(program_name)s_%(process_num)02d
|
process_name=%(program_name)s_%(process_num)02d
|
||||||
directory=/opt/lae
|
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
|
autostart=true
|
||||||
autorestart=true
|
autorestart=true
|
||||||
stopasgroup=true
|
stopasgroup=true
|
||||||
killasgroup=true
|
killasgroup=true
|
||||||
user=www
|
user=root
|
||||||
numprocs=1
|
numprocs=1
|
||||||
redirect_stderr=true
|
redirect_stderr=true
|
||||||
stdout_logfile=/var/log/lae-web.log
|
stdout_logfile=/var/log/lae-web.log
|
||||||
|
Loading…
Reference in New Issue
Block a user