加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

如何在不重新加载/重启fpm本身的情况下将池添加到FPM(nginx)?

发布时间:2020-12-13 21:12:56 所属栏目:Nginx 来源:网络整理
导读:我正在构建一个环境(在ubuntu 10.04.02机器上)来处理一个包含许多(应该支持至少1000个)子域的网站,每个子域由不同的FPM池和不同的用户提供服务. 没什么新鲜的;我的问题是创建(并启动)一个新的fpm池而不必重新加载/重启FPM,这将导致(我知道,真的很快)停机. 我

我正在构建一个环境(在ubuntu 10.04.02机器上)来处理一个包含许多(应该支持至少1000个)子域的网站,每个子域由不同的FPM池和不同的用户提供服务.

没什么新鲜的;我的问题是创建(并启动)一个新的fpm池而不必重新加载/重启FPM,这将导致(我知道,真的很快)停机.

我写了一个python守护进程,需要时:

>创建系统用户
>设置子域的Web根目录
>在我的/etc/php5/fpm/fpm.d/文件夹中创建subdomain.conf

我google了但我没有找到一种方法来调用fpm使用一个池,这可能是一个“临时”的解决方案:主fpm实例运行所有池,evey新的一个得到他自己的fpm实例,然后与一个cron我停止和每周/每月重新加载fpm / dontknowyet

如果重要,服务器在nginx上运行,配置为使用unix socket到fcgi,这是我的nginx测试配置:

server{
    listen          80;
    server_name     ~^(?

..和我的子域-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

我已经尝试将php5-cgi和/或spawn-fcgi用于新的子域,但是有点不稳定,并且当并发级别增长时经常崩溃.

任何的想法?

最佳答案
我不相信有任何方法可以在不重新启动/重新加载的情况下添加池(根据this).

我确实认为冗余是最好的方法,我相信,你可以通过重新加载完成你想要的.由于它是graceful reload,它应该等待进程完成.

本质上,将SIGUSR2信号传递给php-fpm,它将正常地重新加载所有工作人员重新加载fpm conf / binary.

我认为相当于

kill -USR2 `cat $php_fpm_PID`

因此,您修改conf – 并重新加载 – 不应导致明显的停机时间.

另一种选择是为每个用户运行一个进程 – 您可以在不终止现有进程的情况下添加新用户,但资源要求要高得多(并且对于1000个用户来说可能不太实用).

一个more option是为新用户创建一个临时的php-cgi进程,并延迟重新加载服务器直到稍后(即低负载期,或者你有多个用户要添加).这样可以减少停机时间,但仍会立即调出新用户的子域名.

以上都不是完全理想的,没有停机的唯一实用解决方案是多服务器方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读