nginx+php-fpm負載均衡和性能測試

一直知道nginx自己能進行負載均衡,但沒有測試過,今天實驗了下,如下是筆記記錄php

ha-diagram-animated.gif

0.準備工做

  • vagrant+centos6.7 vboxnginx

1.搭建和配置

規劃3臺web服務器,作負載均衡,因爲以前已經有一臺虛擬機,所以我如今增長2臺.web

依次進行如下操做shell

1.E盤創建一個servers目錄初始化vagrant initvim

2.配置文件vagrantfile,增長了2臺虛擬機分別在192.168.33.11,192.168.33.12與以前的192.168.33.10組成3臺集羣centos

Vagrant.configure(2) do |config|
  config.vm.define "web_1" do |web_1|
    web_1.vm.box = "centos67"
    web_1.vm.network "private_network", ip: "192.168.33.11"
  web_1.vm.provider "virtualbox" do |v|
    v.memory = "1024"
  end
  end
   
  config.vm.define "web_2" do |web_2|
    web_2.vm.box = "centos67"
    web_2.vm.network "private_network", ip: "192.168.33.12"
  web_2.vm.provider "virtualbox" do |v|
    v.memory = "1024"
  end
  end
end

3.爲新增的2臺服務器安裝php和一些必要的軟件,爲了提升效率,隨意寫了個腳本2臺機器上運行瀏覽器

yum install -y gcc vim
su -c 'rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm'
rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm
yum install -y nginx
yum install -y php71w-* --skip-broken

groupadd dev
useradd -s /bin/bash -g dev vison

本實驗中web_1和web_2 2臺服務器其實只用到php-fpm,以前的一臺host_1(192.168.33.10)會用到nginx和php-fpmruby

4.配置web_1和web_2的php-fpm 的www.conf配置文件bash

主要涉及到的配置是listen 和 listen.allowed_clients
前者表示php-fpm 監聽的ip 和端口,因爲要讓host_1的nginx反向代理到,因此應該使用局域網ip,而不是默認的127.0.0.1.服務器

#192.168.33.11的www.conf
listen = 192.168.33.11:9000
listen.allowed_clients = 192.168.33.10

#192.168.33.11的www.conf
listen = 192.168.33.12:9000
listen.allowed_clients = 192.168.33.10

配置好後注意重載配置 service php-fpm reload

5.配置host_1 的nginx 進行負載均衡

#nginx.conf
    #配置均衡日誌 能夠看到具體代理到了哪臺機器的fpm
     log_format upstreamlog '[$time_local] $remote_addr - $remote_user - $server_name  to: $upstream_addr: $request upstream_response_time $upstream_response_time msec $msec request_time $request_time';

    access_log  /var/log/nginx/$host.access.log  upstreamlog;
    upstream php-fpm-backend {
        #輪叫調度(Round-RobinScheduling)模式
        server 127.0.0.1:9000;
        server 192.168.33.11:9000;
        server 192.168.33.12:9000;
    }
    #test-dev.conf  vhost 配置
    server_name  test.dev;
    root         /home/vison/www/demaya/webroot;

    location ~ \.php$ {
            fastcgi_pass   php-fpm-backend;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
    }

6.同步php文件

因爲不一樣的fpm都會找本機的root目錄即以前配置的/home/vison/www/demaya/webroot,因此需在192.168.33.10-12 3臺機器上都有相同的代碼. 爲了方便測試,我這裏故意更改了3臺機器的index.php文件代碼.host_1 輸出hello,host_1,web_1輸出hello,web_1依次類推。

2.測試

瀏覽器訪問test.dev

結果:

第一次 hello,host_1

第二次 hello,web_1

第三次 hello,web_2

...依次

說明:nginx已經按照輪流模式代理到了host_1 web_1 web_2,查看host_1的access.log也一樣會發現

3.性能測試

多臺服務器代理就必定會提高性能嗎?

筆者用ab在負載均衡以前和以後都測試過,答案倒是否認的

在多服務器以前,單核cpu 1G內存 nginx和php-fpm 都按默認配置RPS能達到900+,然而增長了2臺一樣配置的虛擬機代理卻只能達到800+了。
php-fpm 進程數auto的配置會奏效,會自動增長php-fpm數.可是性能提高效果並不明顯,然而nginx 的auto 並沒奏效,仍然只有一個.經過手動增長nginx配置,發現rps有所提高,但效果很不明顯。

運用vmstat查看分析性能瓶頸時,感受上是CPU上到了瓶頸,vmstat顯示r挺多說明CPU處理不過來。因而我更改了host_1的cpus 配置改成2.再次ab,結果RPS能達到1500左右,差很少翻倍了!

4.結論

性能問題並不那麼容易解決,須要耐心的排查緣由.

相關文章
相關標籤/搜索