lnmp架構-負載均衡

1、幾個基本概念php

一、pv 值html

pv 值(page views):頁面的瀏覽量前端

概念:一個網站的全部頁面,在一天內,被瀏覽的總次數。(大型網站一般是上千萬的級別)mysql

二、uv值linux

uv值(unique visitor)獨立訪客nginx

概念:一個網站,在一天內的用戶訪問數。(大型網站一般達10萬以上)web

三、獨立IPsql

概念:一個網站,在一天內,有多少個獨立的ip地址來訪問。thinkphp

鑑於一個局域網對外訪問時都是共用同一個公網IP的,所以UV值通常要略大於獨立ip值shell

十分鐘讓你學會LNMP架構負載均衡

能夠經過愛站網 來查詢這些參數值

十分鐘讓你學會LNMP架構負載均衡

2、解決高併發思路

若是一個網站的uv,pv,獨立ip變大,則會致使高的併發,這時要對網站分層佈局架構,採用負載均衡。

負載均衡

硬件:立竿見影,效果很是好,價格很是昂貴,好比F5-BIGIP

軟件:lvs(linux virtual server) ,nginx(web服務器,負載均衡)

負載均衡實現策略

(1)輪詢,

負載均衡器把請求輪流轉發給後面的web服務器。

(2)ip哈希,

同一個地址的客戶端,始終請求同一臺主機。

(3)最少鏈接

負載均衡器把請求給負載最小的哪臺服務器。

架構圖以下:

十分鐘讓你學會LNMP架構負載均衡

若是併發數繼續增大,還能夠藉助CDN來架構

十分鐘讓你學會LNMP架構負載均衡

3、nginx的介紹

一、經常使用web服務器

apache:功能完善,歷史悠久,模塊支持很是豐富,屬於重量級產品,比較耗費內存。

缺點:處理每個php比較費資源,致使若是高併發時會耗費服務器資源沒法處理更多請求。

lighttpd:內存開銷低,cpu佔用率低,效能好,模塊豐富等特色,輕量級web服務器。

nginx:省資源,省cpu,因此在高併發時可以處理更多的請求,高端能達到3萬到5萬的併發量。

IIS windows自帶的web服務器軟件

Nginx的兩大應用:

(1) http的服務器

(2)代理服務器

正向代理

十分鐘讓你學會LNMP架構負載均衡

反向代理

十分鐘讓你學會LNMP架構負載均衡

二、選擇nginx理由

(1)它能夠高併發鏈接,官方測試可以支撐5萬併發鏈接,在實際生產環境中能夠支撐2到4萬併發鏈接。

(2)內存消耗少

Nginx+php(FastCGI)服務器在3萬併發鏈接下,開啓的10個Nginx進程消耗150MB內存(15MB*10=150MB)開啓的64個php-cgi進程消耗1280MB內存(20MB*64=1280MB)

(3)成本低廉

購買F5 BIG-IP ,NetScaler等硬件負載均衡交換機須要10多萬甚至幾十萬人民幣。而Nginx爲開源軟件,能夠免費試用,而且可用於商業用途。

十分鐘讓你學會LNMP架構負載均衡

(4)配置文件很是簡單:通俗易懂,即便非專業管理員也能看懂。

(5)支持 rewrite重寫規則:能根據域名、URL的不一樣,將HTTP請求分到不一樣的後端服務器羣組。

(6)內置的健康檢查功能:若是nginx proxy後端的某臺服務器宕機了,不會影響前端訪問。

(7)節省帶寬,支持gzip壓縮。

(8)穩定性高:用於反向代理,宕機的機率微乎其微。

(9)支持熱部署。在不間斷服務的狀況下,對軟件版本升級。

十分鐘讓你學會LNMP架構負載均衡

nginx在反向代理,rewrite規則,穩定性,靜態化文件處理,內存消耗等方面,表現出了很強的優點,選用nginx取代傳統的apache 服務器,將會得到多方面的性能提高。

(8)支持的操做系統

FreeBSD 3.x,4.x,5.x,6.x i386; FreeBSD 5.x,6.x amd64;Linux 2.2,2.4,2.6 i386; Linux 2.6 amd64;Solaris 8 i386; Solaris 9 i386 and sun4u; Solaris 10 i386;MacOS X (10.4) PPC;

4、nginx的搭建

一、安裝

安裝前注意:

模塊依賴性:Nginx的一些模塊須要其餘第三方庫的支持,例如gzip模塊須要zlib 庫,rewrite模塊須要pcre庫,ssl功能須要openssl庫等。

(1) 確保底層庫都已安裝

運行 yum install zlib* pcre* openssl*

十分鐘讓你學會LNMP架構負載均衡

(2) 建立一個用戶和用戶組

建立www組與www用戶 ,理論上來說用戶與用戶組的名稱無所謂,但儘可能要有意義

groupadd www

useradd -g www -s /usr/sbin/nologin www

(3) 編譯安裝nginx

第一步:下載nginx

wget

十分鐘讓你學會LNMP架構負載均衡

十分鐘讓你學會LNMP架構負載均衡

第二步:解壓並進入目錄

tar ….

十分鐘讓你學會LNMP架構負載均衡

Cd …

十分鐘讓你學會LNMP架構負載均衡

第三步:配置

先查看configure的配置項,並保存成一個幫助文檔

十分鐘讓你學會LNMP架構負載均衡

將經常使用的配置項保存成一個安裝腳本文件

Vim nginx_install.sh

內容以下:

./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-http_image_filter_module --with-pcre --http-client-body-temp-path=/usr/local/nginx/tmp/client_body_temp --http-fastcgi-temp-path=/usr/local/nginx/tmp/fastcgi_temp --http-proxy-temp-path=/usr/local/nginx/tmp/proxy_temp --http-uwsgi-temp-path=/usr/local/nginx/tmp/uwsgi_temp --http-scgi-temp-path=/usr/local/nginx/tmp/scgi_temp

給sh文件加上可執行的權限

十分鐘讓你學會LNMP架構負載均衡

而後執行

第四步:編譯安裝

make && make install

二、管理

(1)查看幫助文檔

Cd /usr/local/nginx/sbin

./nginx -h

十分鐘讓你學會LNMP架構負載均衡

(2)啓動nginx

直接執行安裝目錄下的sbin目錄下的nginx

十分鐘讓你學會LNMP架構負載均衡

(3)關閉nginx

能夠執行 nginx -s stop 或者 執行 pkill nginx

十分鐘讓你學會LNMP架構負載均衡

(4)熱啓動

能夠執行 nginx -s reload (前提是nginx已經在運行中)

十分鐘讓你學會LNMP架構負載均衡

擴展:若是想用service 服務名 選項來重啓或中止nginx,能夠按如下步驟操做:

知識點:service 服務名 能操做成功的前提是 /etc/rc.d/init.d目錄下要有與服務名同名的可執行文件

十分鐘讓你學會LNMP架構負載均衡

因此咱們能夠在這個目錄下新建nginx文件

vim /etc/rc.d/init.d/nginx

內容:

#!/bin/sh

# chkconfig: - 85 15

# description: nginx is a World Wide Web server. It is used to serve

start() {

echo 'Starting Nginx ...'

/usr/local/nginx/sbin/nginx > /dev/null 2>&1 &

}

stop() {

echo 'Stoping Nginx ...'

/usr/local/nginx/sbin/nginx -s stop > /dev/null 2>&1 &

}

reload() {

echo 'Reloading Nginx ...'

/usr/local/nginx/sbin/nginx -s reload

}

if [ $# -ne 1 ]

then

echo 'please input one params like start|restart|stop|reload'

exit 1

fi

case "$1" in

'start')

start

;;

'stop')

stop

;;

'restart')

stop

sleep 2

start

;;

'reload')

reload

;;

'*')

echo 'please input one params like start|restart|stop|reload'

;;

esac

記得給這個文件添加可執行權限

chmod +x /etc/rc.d/init.d/nginx

加入到開機自啓動:

chkconfig --add nginx

chkconfig --level 345 nginx on

5、虛擬主機配置

一、配置文件介紹

Nginx的配置文件位於安裝目錄下的conf目錄下

能夠用如下命令查看非註釋部分的內容

egrep -v '#|^$' nginx.conf

-v 表明取反(去掉匹配到的內容)

十分鐘讓你學會LNMP架構負載均衡

在配置文件中,http段裏面的server段是配置虛擬主機使用的。若是想要配置多個虛擬主機,則就在http段裏面建立多個 server段便可。

注意配置文件中,每一行要使用分號結束,指令與{之間有空格。

Listen 後面能夠是端口號,也能夠是IP:端口號

Server_name 後面能夠是域名,多個域名之間空格隔開,也能夠是IP地址

在 http{}代碼段裏添加 client_max_body_size 200m; 以支持 php 上傳大文件。(請根據本身項目需求來定值)

十分鐘讓你學會LNMP架構負載均衡

6、編譯 php與nginx整合

一、編譯安裝php

(1) 第一步:安裝PHP

1) 下載php

shell># cd ~

shell># wget

2) 解壓並進入目錄

shell># tar zxf php-5.6.24.tar.gz

shell># cd php-5.6.24

3) 將configure參數及詳情解析另存爲一個文件,以供學習參考用:

shell># ./configure --help > php_configure.txt

4) 編寫一個輔助shell文件,幫咱們配置php

shell># vim php_install.sh

爲了不寫錯,建議你們直接複製如下內容(都寫在一行上,不要換行):

./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --enable-opcache --with-zlib-dir --with-bz2 --with-libxml-dir=/usr --with-gd --with-freetype-dir --with-jpeg-dir --with-png-dir --enable-mbstring --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql --with-iconv --disable-ipv6 --enable-static --enable-inline-optimization --enable-sockets --enable-soap --with-openssl --with-curl

以上內容的解釋如圖

十分鐘讓你學會LNMP架構負載均衡

把剛剛的shell文件加上可執行權限:

shell># chmod +x ./php_install.sh

5) 執行shell文件進行軟件的配置和環境檢測

shell># ./php_install.sh

6) 編譯軟件而且進行安裝

shell># make && make install

(2) 第二步:配置

1) 複製配置文件

shell># cp php.ini-production /usr/local/php/etc/php.ini

shell># cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm

賦予其可執行權限

shell># chmod +x /etc/rc.d/init.d/php-fpm

拷貝產生php-fpm的配置文件

shell># cd /usr/local/php/etc

shell># cp php-fpm.conf.default php-fpm.conf

2) 配置php.ini

shell># vim php.ini

· 找到;date.timezone = 修改成 date.timezone = Asia/Shanghai

· 根據本身的需求調整如下選項的值

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED

display_errors = On

max_execution_time = 60

max_input_time = 60

memory_limit = 256M

post_max_size = 256M

upload_max_filesize = 256M

3) 配置php-fpm.conf

shell># vim php-fpm.conf

· 找到user = nobody 和 group = nobody,將nobody改爲www

· 找到listen.owner=nobody和listen.group= nobody,將nobody改爲www

4) 將php-fpm加入服務並自動啓動

shell># service php-fpm start

shell># chkconfig --add php-fpm

shell># chkconfig --level 345 php-fpm on

二、配置nginx支持php

第一步:在nginx.conf中找到location ~ .php$

十分鐘讓你學會LNMP架構負載均衡

複製並去掉註釋,將root改爲你的虛擬主機的路徑

保存並重載配置文件,

shell># /usr/local/nginx/sbin/nginx -s reload

在html目錄下新建一個PHP文件,代碼以下:

十分鐘讓你學會LNMP架構負載均衡

在瀏覽器輸入php頁面的網址,能夠發現並不能訪問

十分鐘讓你學會LNMP架構負載均衡

緣由是官方給的默認配置文件中,

十分鐘讓你學會LNMP架構負載均衡

要求要把php文件放到/scripts目錄下。其實這個要求咱們不必定要聽從。

改進的方案以下:

十分鐘讓你學會LNMP架構負載均衡

保存並重載

十分鐘讓你學會LNMP架構負載均衡

就可讓nginx支持訪問相似http://www.a.com/index.php以及http://www.a.com/index.php?id=5這樣的頁面了。

三、優化nginx配置文件

第二步:優化

若是把全部的server代碼段都放在nginx.conf裏面的話,會讓nginx.conf顯得又臃腫又亂。建議把它們分離去。

例如,直接把全部的server代碼段都剪切到/usr/local/nginx/conf/vhost.conf裏面

而後在nginx.conf裏面換成

include vhost.conf

十分鐘讓你學會LNMP架構負載均衡

虛擬主機的代碼都移到了vhost.conf裏面了

十分鐘讓你學會LNMP架構負載均衡

至此,nginx.conf已經很優化了,咱們再來優化vhost.conf

第三步:優化vhost.conf

將root語句和 index語句都提取到location外面

十分鐘讓你學會LNMP架構負載均衡

第四步:再一次優化vhost.conf

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

這兩個語句都剪切到fastcgi.conf裏面去

只留下include fastcgi.conf;

十分鐘讓你學會LNMP架構負載均衡

fastcgi.conf文件中新增瞭如下兩句:

十分鐘讓你學會LNMP架構負載均衡

至此,nginx已經支持訪問php頁面,而且nginx.conf和vhost.conf已經很優化了。

只是還沒法支持像thinkphp的pathinfo形式的訪問

http://www.a.com/index.php/Admin/public/login

四、與ThinkPHP整合

第一步:將vhost.conf的location ~ .php$ { 的$去掉

十分鐘讓你學會LNMP架構負載均衡

能夠發現能支持pathinfo的訪問方式,可是沒法識別出模塊、控制器和方法

十分鐘讓你學會LNMP架構負載均衡

而後將location代碼段寫成

location ~ .php {

fastcgi_split_path_info ^(.+.php)(/.*)$;

fastcgi_param PATH_INFO $fastcgi_path_info;

include fastcgi.conf;

十分鐘讓你學會LNMP架構負載均衡

保存並重載nginx

就能夠支持thinkphp的pathinfo形式的訪問

十分鐘讓你學會LNMP架構負載均衡

第二步:優化vhost.conf

將這兩句

fastcgi_split_path_info ^(.+.php)(/.*)$;

fastcgi_param PATH_INFO $fastcgi_path_info;

都剪切到 fastcgi.conf裏面,只留下include fastcgi.conf; 語句便可

十分鐘讓你學會LNMP架構負載均衡

第三步:開啓僞靜態功能

在server裏面的location / { 代碼段裏,寫上

try_files $uri /index.php$uri;

保存並重載nginx

就能夠支持thinkphp的rewrite訪問

http://www.a.com/Admin/public/login

7、負載均衡

一、負載均衡原理圖

十分鐘讓你學會LNMP架構負載均衡

二、實現一個簡單的負載均衡

服務器列表

本機 192.168.81.1

VM 192.168.81.6

騰訊雲 123.207.231.180

負載均衡器的配置

upstream demo {

server 192.168.81.1;

server 123.207.231.180;

}

server {

listen 80;

server_name fzjh.com;

location / {

proxy_pass http://demo;

proxy_set_header Host $host;

proxy_set_header X-Peal-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}}十分鐘讓你學會LNMP架構負載均衡

而且要確保 fzjh.com要解析到負載均衡器的IP地址

十分鐘讓你學會LNMP架構負載均衡

保存配置文件,而且重載

訪問效果:

十分鐘讓你學會LNMP架構負載均衡

十分鐘讓你學會LNMP架構負載均衡

相關文章
相關標籤/搜索