配置HAProxy + nginx + PHP-FPM以执行Apache + mod_php

时间:2012-08-21 14:16:29

标签: apache nginx haproxy php

修改

在VirtualBox上运行我的操作系统是个问题。一旦我将我的操作系统作为磁盘上的本机操作系统,我就能看到性能提升。

原始

我读过很多人建议为HAProxy + nginx + PHP-FPM抛弃Apache + mod_php。我正在尝试验证它是一个更有效的设置,但我没有看到人们描述的结果。 siege和ab(Apache Benchmark)都表明Apache在任何数量的并发连接中每秒都能提供更好的响应,并且可以支持更多的连接。

我在VirtualBox上运行Ubuntu 11.04服务器。它有10演出空间和1,344兆内存。我使用apt-get来安装上面提到的程序。以下是相关配置文件,其中仅包含重要部分。

haproxy.cfg

global
        maxconn 4096
        user haproxy
        group haproxy
        daemon
        stats socket /var/run/haproxy.sock mode 0600 level admin

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option  redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

listen tcpcluster *:80
        mode tcp
        option tcplog
        balance roundrobin

        server tcp01 192.168.1.199:8080 check

nginx.conf

worker_processes 2;

events {
        worker_connections 768;
}

www.conf

pm = dynamic
pm.max_children = 10
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 500

的apache.conf

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients           10
    MaxRequestsPerChild   0
</IfModule>
<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients           10
    MaxRequestsPerChild   0
</IfModule>
<IfModule mpm_event_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients           10
    MaxRequestsPerChild   0
</IfModule>

鉴于PHP-FPM和Apache最多只有10个孩子,我希望任何速度优势都可见。在我运行的每个测试中(在运行测试之前总是等到负载为0.01),Apache总是能够更有效地处理更多请求。

是否还可以进行其他一些优化,以便最适合扩展的设置优于不应该更高效的设置?

1 个答案:

答案 0 :(得分:2)

使用haproxy作为连接集中器:使用“mode http”而不是“mode tcp”,使用“option http-server-close”并将服务器maxconn值设置为远低于worker连接值。您应该跨越这样一个点,即较低的并发性带来更多的性能,同时整个链中的RAM使用率更低,缓存效率更高。

顺便说一句,我们谈论的数字是多少?他们每秒测量数百或数千个请求吗?因为很明显,应用服务器只会在较高负载下产生真正的差异。显然,如果应用程序运行速度非常慢,则在更换服务器时没有理由看到差异。