17周博客作業 LVS+nginx+php(nginx與php分離)

1、結合圖形描述LVS的工作原理;

blob.png

LVS是一種用軟件實現的LB集群;
作用于傳輸層;
LVS工作原理:通過Director調度把用戶請求按照分配算法分配給后端的Real server,然后由后端Real server響應客戶請求;


lvs模式分為三種。
lvs-nat:
	多目標的DNAT:通過將請求報文的目標地址和目標端口修改為挑選出某RS的RIP和PORT來實現; 
	
	(1) RIP和DIP應該使用私網地址,RS的網狀應該指向DIP;	
	(2) 請求和響應報文都要經由director轉發;極高負載的場景中,Director可能會成為系統瓶頸;	
	(3) 支持端口映射;	
	(4) VS必須為Linux,RS可以是任意的OS;
	(5) RS的RIP與Director的DIP必須在同一IP網絡;
	
lvs-dr:
    通過修改請求報文的MAC地址進行轉發;IP首部不會發生變化(源IP為CIP,目標IP始終為VIP);
    
    (1) 確保前端路由器將目標IP為VIP的請求報文一定會發送給Director;
    	解決方案:
    		靜態綁定;
    		禁止RS響應VIP的ARP請求;    			
    		        (a) arptables; 
    			(b) 修改各RS的內核參數,并把VIP配置在特定的接口上實現禁止其響應;    
    	(2) RS的RIP可以使用私有地址,也可以使用公網地址;    
    	(3) RS跟Director必須在同一物理網絡中;    
    	(4) 請求報文必須由Director調度,但響應報文必須不能經由Director;    
    	(5) 不支持端口映射;    
    	(6) 各RS可以使用大多數的OS;
    
lvs-tun
轉發方式:不修改請求報文的IP首部(源IP為CIP,目標IP為VIP),而是在原有的IP首部這外再次封裝一個IP首部(源IP為DIP,目標IP為RIP);
	
	(1) RIP,DIP,VIP全得是公網地址;	
	(2) RS的網關不能也不可能指向DIP;	
	(3) 請求報文經由Director調度,但響應報文將直接發給CIP;	
	(4) 不支持端口映射;	
	(5) RS的OS必須支持IP隧道功能;


lvs調度后端Real server方法:
		根據其調度時是否考慮后端主機的當前負載,可分為靜態方法和動態方法;
靜態方法:僅根據算法本身進行調度;
		RR:Round Robin,輪詢/論調;
		WRR:Weighted RR,加權輪詢;
		SH:Source Hashing,源地址哈希;(短鏈接,需要保持持久鏈接時使用;如電商購物;把源地址跟原來挑選車來rs綁定,使得下次能繼續訪問這臺rs)
		DH:Destination Hashing,目標地址哈希;
			正向的web代理(緩存)。負載均衡內網用戶對外部服務器的請求
			哈希目標地址;
動態方法:根據算法及各RS當前的負載狀態進行評估調度;			
			
			LC:least connections,最少鏈接;(如果沒有最少的,根據rs表至上而下輪詢)				
			OVerhead=Active*256+Inactive
			WLC:Weighted LC,加權最少鏈接;				
			OVerhead=(Active*256+Inactive)/weight			
			    SED:Shortest Expections Delay
			OVerhead=(Active+1)*256+Inactive
			NQ:Never Queue
				每個rs先分配一個,然后再SED
			LBLC:Locality-Based LC
				動態的DH算法;			
				LBLCR:LBLC with Replication,
				    帶復制功能的LBLC;

2、搭建一套LVS-DR模型的高性能集群,并實現以下功能:

(1)、wordpress程序通過nfs共享給各個realserver;

(2)、后端realserver中的nginx和php分離

準備三臺服務器,兩臺Real server(Centos 6.6)分別搭建nginx和php+nfs+wordpress,另一臺服務器搭建+Director(Centos 7.1) 所有服務器統一安裝編譯環境 yum groupinstall "Development Tools" "Server Platform Development" -y

Real server1配置:

IP地址:192.168.10.100做nginx服務器,系統:Centos 6.6選擇nginx-1.10.1版本,從官網獲取到安裝包,放置服務器/root目錄下
安裝依賴包:
yum install -y openssl-devel pcre-devel zlib-devel

做好準備工作下面開始安裝
[root@caicai ~]# tar xf nginx-1.10.1.tar.gz [root@caicai ~]# cd nginx-1.10.1[root@caicai ~]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_gzip_static_module --with-debug --with-http_stub_status_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsg --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre
[root@caicai nginx-1.10.1]# make && make install
編譯安裝好以后創建用戶
[root@caicai ~]# groupadd -r -g 501 nginx
[root@caicai ~]# useradd -r -g nginx -u 501 nginx

接下來就可以啟動nginx了,但是為了方便我們應該把nginx腳本加入PATH中
[root@caicai ~]# vim /etc/profile.d/nginx.sh
    export PATH=/usr/local/nginx/sbin:$PATH
[root@caicai ~]# exec bash /etc/profile.d/nginx.sh (執行此命令會斷開ssh,重新連接就好)配置好以后就可以直接使用nginx命令啟動nginx服務了 Ye~!
[root@caicai ~]# nginx查看下是否正常啟動
[root@caicai ~]# ss -tnl | grep :80LISTEN     0      128                       *:80                       *:*  
[root@caicai ~]# lsof -i:80COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   6444  root    6u  IPv4  55359      0t0  TCP *:http (LISTEN)
nginx   6445 nginx    6u  IPv4  55359      0t0  TCP *:http (LISTEN)

待Real server2配置完第4部回來配置:
[root@caizhijian ~]# mkdir /www
[root@caicai ~]# chown -R nginx:nginx /www/
[root@caicai ~]# chown -R nginx:nginx /www
[root@caicai ~]# mount -t nfs 192.168.10.101:/www /www

[root@caicai ~]# vim /etc/nginx/nginx.conf
            location / {
            root   /www;
            index index.php index.html index.htm;
        }        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location ~ \.php$ {
            root           /www;
            fastcgi_pass   192.168.10.101:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /www$fastcgi_script_name;
            include        fastcgi_params;
        }
 檢查下配置語法是否有問題:       
[root@caicai ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
沒問題reload重新加載一下配置文件:
[root@caicai ~]# nginx -s reload

Real server2配置:

IP地址:192.168.10.101 做php服務器 為了方便這里就直接使用yum安裝了;

1、安裝php-fpm和一些插件
[root@caizhijian ~]# yum install -y php-fpm php-mysql php-mbstring php-gd php-xml
2、編輯配置文件
[root@caizhijian ~]# vim /etc/php-fpm.d/www.conf 
    ;listen.allowed_clients = 127.0.0.1  //注釋掉只能本地訪問,默認所有ip都可以訪問
    user = nginx    //更改使用的用戶
    user = nginx    //更改使用的組
    listen = 192.168.10.101:9000    //修改監控地址

3、開啟nfs功能(默認Centos 5以上的版本已經默認安裝了,可直接啟用)
[root@caizhijian ~]# vim /etc/exports 
    /www    *(rw)
[root@caizhijian ~]# service nfs start

4、新建用戶和共享文件
[root@caicai ~]# groupadd -r -g 501 nginx
[root@caicai ~]# useradd -r -g nginx -u 501 nginx
[root@caizhijian ~]# mkdir /www
[root@caicai ~]# chown -R nginx:nginx /www/
[root@caicai ~]# chown -R nginx:nginx /www

5、建測試頁做測試
[root@caizhijian ~]# vim /www/index.php 
    <?php        phpinfo();
    ?>
打瀏覽器訪問http://192.168.10.100測試能否訪問6、安裝wordpress程序
獲取wordpress程序程序包wordpress-4.5.3-zh_CN.tar.gz,放置/root目錄下
[root@caizhijian ~]# tar xf wordpress-4.5.3-zh_CN.tar.gz -C /www
[root@caizhijian ~]# chown -R nginx:nginx /www
訪問下http://192.168.10.100/wordpress

LVS-dr配置:

準備2張網卡配置VIP、DIP
VIP地址:192.168.10.99
DIP地址:192.168.10.98

用虛擬機克隆一臺Real server1,多裝一臺nginx服務器做驗證命名為Real server3;
設置ip地址為:192.168.10.102
[root@caicai ~]# ifconfig eth1 192.168.10.102 netmask 255.255.255.0

掛載nfs
[root@caicai ~]# mount -t nfs 192.168.10.101:/www /usr/local/nginx/html/www/
在各主機(Director,RS)均需要配置VIP;因此,要解決地址沖突問題,這里采用修改內核參數限制arp響應通告;
建立一個bash腳本分別在Real server1和Real server3上執行

#!/bin/bash

    case $1 in
    start)
     echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
     echo 2 > /proc/sys/net/ipv4/conf/all/arp_annouce
     echo 1 > /proc/sys/net/ipv4/conf/lo/arp_annouce
     echo 2 > /proc/sys/net/ipv4/conf/lo/arp_annouce
          ifconfig lo:0 192.168.10.99 netmask 255.255.255.0 broadcast 192.168.10.99 up
     route add -host 192.168.10.99 dev lo:0
    ;;
    stop)
     echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
     echo 0 > /proc/sys/net/ipv4/conf/all/arp_annouce
     echo 0 > /proc/sys/net/ipv4/conf/lo/arp_annouce
     echo 0 > /proc/sys/net/ipv4/conf/lo/arp_annouce
     ifconfig lo:0 down
     ;;
     esac
     
接下來配置Director主機
[root@localhost ~]# yum install ipvsadm -y添加規則
[root@localhost ~]# ipvsadm -A -t 192.168.10.99:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.10.99:80 -r 192.168.10.100 -g -w 1
[root@localhost ~]# ipvsadm -a -t 192.168.10.99:80 -r 192.168.10.102 -g -w 2
到這就配置完了,還有很多東西需要改進(例如數據庫等)

原創文章,作者:N21_志建,如若轉載,請注明出處:http://www.www58058.com/56462

(0)
N21_志建N21_志建
上一篇 2016-11-07
下一篇 2016-11-07

相關推薦

  • linux echo命令用法實例

           對于初學者來說,掌握一些基本命令的常用用法是必須的。本文列舉了echo命令的幾個常用用法并加以實例說明,以作回顧、參考。       echo命令常用作打印輸出字符串,根據echo幫助文件可以獲得以下信息:        語法 echo…

    2017-05-20
  • Nginx的編譯安裝

    nginx.html Nginx的編譯安裝 一、Nginx的特點 二、獲取并編譯Nginx 三、配置主頁面 四、配置編譯文件時的選項及模塊 一、Nginx的特點 1、Nginx 專為性能優化而開發,性能是其最重要的考量,實現上非常注重效率 。它支持內核 Poll 模型,能經受高負載的考驗,有報告表明能支持高達 50,000 個并發連接數。 2、Nginx 具…

    Linux干貨 2016-03-20
  • Linux中的用戶、組和權限的管理

    一、Linux的安全模型     在Linux中用戶登陸時必須提供用戶名和密碼(用戶是由root用戶創建的,最初的密碼也是root用戶設定的)。系統使用用戶和群組來控制使用者訪問文件和其他資源的權限。每一個文件都一定屬于一個用戶(一般該用戶就是文件的創造者)并與一個群組相關。每一個進程(處理程序)都會與一個用戶和群組關…

    Linux干貨 2016-08-07
  • 第一天,學習

    好好學習,天天向上

    Linux干貨 2016-08-08
  • Linux百科

    百度百科摘

    Linux干貨 2018-03-26
  • 軟件包管理

    1.程序包管理器 源代碼–>目標二進制格式–>組織稱為一個或有限幾個“包”文件;     安裝、升級、卸載、查詢、校驗 程序包管理器: debian(Ubuntu):dpt,工具:dpkg,程序包以“.deb”結尾 redhat:redhat package manager&nbsp…

    Linux干貨 2016-08-21

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-11-10 15:29

    贊,又是一位比較超前的。LVS現在的話應該說是四種,課程里面也講解了這四種的區別和使用場景,建議再細化下~~繼續加油~

欧美性久久久久