Str*_*rae 3 nginx fastcgi php5 cgi php-fpm
我正在构建一个环境(在 ubuntu 10.04.02 机器上)来处理具有许多(应该支持至少 1000 个)子域的网站,每个子域由不同的 FPM 池提供服务,并具有不同的用户。
所以没有什么新鲜事;我的问题是创建(并启动)一个新的 fpm 池,而不必重新加载/重新启动 FPM,这会导致(我知道,非常快)停机。
我写了一个 python 守护进程,在需要时:
我四处搜索,但没有找到使用一个池调用 fpm 的方法,这可能是一个“临时”解决方案:主 fpm 实例运行所有池,每个新实例都有自己的 fpm 实例,然后使用 cron 我停止并每周/每月/不知道重新加载 fpm
如果确实重要,服务器在 nginx 上运行,配置为使用 unix socket to fcgi,这是我的 nginx 测试配置:
server{
listen 80;
server_name ~^(?<domain>.+)\.test\.local$; # foo.test.local > myapp_foo
root /var/www/myapp/subdomains/myapp_$domain/htdocs;
location / {
index index.php;
}
location ~* \.(gif|jpg|png|ico)$ {
expires 30d;
}
location ~ \.php$ {
fastcgi_pass unix:/var/web-sock/myapp_$domain-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Run Code Online (Sandbox Code Playgroud)
..和我的子域-fpm.conf:
[myapp_foo]
listen = /var/web-sock/myapp_foo-fpm.sock
user = myapp_foo
group = myapp_foo
pm = dynamic
pm.max_children = 30
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 30
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用php5-cgi和/或使用spawn-fcgi新的子域,但是有点不稳定,并且在并发级别稍微增加时经常崩溃。
任何的想法?
我不相信有任何方法可以在不重新启动/重新加载的情况下添加池(根据this)。
我确实认为冗余是最好的方法,我相信,你可以用reload. 由于它是一个优雅的重新加载,它应该等待进程完成。
本质上,将SIGUSR2信号传递给 php-fpm,它将优雅地重新加载所有工人 + 重新加载 fpm conf/binary。
我相信这相当于
kill -USR2 `cat $php_fpm_PID`
Run Code Online (Sandbox Code Playgroud)
因此,您修改 conf - 并重新加载 - 不应导致明显的停机时间。
另一种选择是为每个用户运行一个进程 - 您可以在不终止现有进程的情况下添加新用户,但资源需求明显更高(并且,对于 1000 多个用户来说不太现实)。
另一种选择是为新用户创建一个临时的 php-cgi 进程,并将重新加载服务器延迟到稍后(即低负载期,或者当您要添加多个用户时)。这将减少停机时间,但仍会立即启动新用户的子域。
以上都不是完全理想的,没有停机时间的唯一实用解决方案是多服务器方法。
| 归档时间: |
|
| 查看次数: |
6188 次 |
| 最近记录: |