Lvs+keepalived+lanmp搭建web框架

Lvs+keepalived+lanmp搭建web框架php

 

1、LVS-Linux Virtual Server:css

2、LVS的做用:html

3、LVS體系架構:前端

4、LVS負載均衡機制:mysql

5、項目架構圖:linux

6、 基礎準備工做nginx

7、搭建-lanmp-兩臺web服務器:web

1)Web框架:算法

2)搭建方式:sql

3)所需源碼包:

4)安裝開發環境:

5)編譯mariadb:

6)編譯apache-tomcat:

7)編譯php:

8)配置apache與php:

9)編譯nginx:

10)配置nginx:

11)編輯realserver腳本文件:

12)兩臺web服務器添加index.php用於測試:

8、配置lvs-master:

9、配置lvs-slave:

10、故障測試:

 

 

 

  

 

1、LVS-Linux Virtual Server:

wKiom1jQteDj65egAAD2STDadSY344.png

LVS是Linux Virtual Server的簡稱,也就是Linux虛擬服務器, 是一個由章文嵩博士發起的自由軟件項目,它的官方站點是www.linuxvirtualserver.org。如今LVS已是 Linux標準內核的一部分,在Linux2.4內核之前,使用LVS時必需要從新編譯內核以支持LVS功能模塊,可是從Linux2.4內核之後,已經徹底內置了LVS的各個功能模塊,無需給內核打任何補丁,能夠直接使用LVS提供的各類功能。

 

2、LVS的做用:

LVS主要用於服務器集羣的負載均衡。它工做在網絡層,能夠實現高性能高可用的服務器集羣技術。它廉價,可把許多低性能的服務器組合在一塊兒造成一個超級服務器。它易用,配置很是簡單,且有多種負載均衡的方法。它穩定可靠,即便在集羣的服務器中某臺服務器沒法正常工做,也不影響總體效果。另外可擴展性也很是好。LVS技術實現高可伸縮的、高可用的網絡服務,例如WWW服務、Cache服務、DNS服務、FTP服務、MAIL服務、視頻/音頻點播服務等等

 

3、LVS體系架構:

使用LVS架設的服務器集羣系統有三個部分組成:

1)最前端的負載均衡層,用Load Balancer表示;

2)中間的服務器集羣層,用Server Array表示;

3)最底端的數據共享存儲層,用Shared Storage表示;

wKioL1jQtbfxCDpfAAC-UDO-Xow267.png 

 

4、LVS負載均衡機制:

1)LVS是四層負載均衡,也就是說創建在OSI模型的第四層——傳輸層之上,傳輸層上有咱們熟悉的TCP/UDP,LVS支持TCP/UDP的負載均衡。由於LVS是四層負載均衡,所以它相對於其它高層負載均衡的解決辦法,好比DNS域名輪流解析、應用層負載的調度、客戶端的調度等,它的效率是很是高的。

2)LVS的轉發主要經過修改IP地址(NAT模式,分爲源地址修改SNAT和目標地址修改DNAT)、修改目標MAC(DR模式)來實現。

NAT模式:網絡地址轉換

 wKiom1jQtZ6g373HAAEsRRdJjxs853.png

 NAT(Network Address Translation)是一種外網和內網地址映射的技術。NAT模式下,網絡數據報的進出都要通過LVS的處理。LVS須要做爲RS(真實服務器)的網關。當包到達LVS時,LVS作目標地址轉換(DNAT),將目標IP改成RS的IP。RS接收到包之後,彷彿是客戶端直接發給它的同樣。RS處理完,返回響應時,源IP是RS IP,目標IP是客戶端的IP。這時RS的包經過網關(LVS)中轉,LVS會作源地址轉換(SNAT),將包的源地址改成VIP,這樣,這個包對客戶端看起來就彷彿是LVS直接返回給它的。客戶端沒法感知到後端RS的存在。

 

DR模式:直接路由

wKioL1jQtXOhX4dqAAEjjHYWWvM318.png 

  DR模式下須要LVS和RS集羣綁定同一個VIP(RS經過將VIP綁定在loopback實現),但與NAT的不一樣點在於:請求由LVS接受,由真實提供服務的服務器(RealServer, RS)直接返回給用戶,返回的時候不通過LVS。詳細來看,一個請求過來時,LVS只須要將網絡幀的MAC地址修改成某一臺RS的MAC,該包就會被轉發到相應的RS處理,注意此時的源IP和目標IP都沒變,LVS只是作了一下移花接木。RS收到LVS轉發來的包時,鏈路層發現MAC是本身的,到上面的網絡層,發現IP也是本身的,因而這個包被合法地接受,RS感知不到前面有LVS的存在。而當RS返回響應時,只要直接向源IP(即用戶的IP)返回便可,再也不通過LVS。

 

3)DR負載均衡模式數據分發過程當中不修改IP地址,只修改mac地址,因爲實際處理請求的真實物理IP地址和數據請求目的IP地址一致,因此不須要經過負載均衡服務器進行地址轉換,可將響應數據包直接返回給用戶瀏覽器,避免負載均衡服務器網卡帶寬成爲瓶頸。所以,DR模式具備較好的性能,也是目前大型網站使用最普遍的一種負載均衡手段。

 

5、項目架構圖:

 wKiom1jQtQzxZGoFAAFzFuTPuJ0291.png

  (1)搭建一個四臺Linux(CentOS 6.4)系統所構成的一個服務器集羣,其中兩臺負載均衡服務器(一臺爲主機,另外一臺爲備機),另外兩臺做爲Web服務器(向外部提供http服務,這裏使用lanmp架構)。

  (2)本次基於DR負載均衡模式,設置了一個VIP(Virtual IP)爲192.168.80.200,用戶只須要訪問這個IP地址便可得到網頁服務。其中,負載均衡主機爲192.168.80.100,備機爲192.168.80.101。Web服務器A爲192.168.80.102,Web服務器B爲192.168.80.103。

 

6、 基礎準備工做

1)綁定靜態IP地址

  命令模式下能夠執行setup命令進入設置界面配置靜態IP地址;x-window界面下能夠右擊網絡圖標配置;配置完成後執行service network restart從新啓動網絡服務;

  驗證:執行命令ifconfig

2)設定主機名

  ①修改當前會話中的主機名,執行命令hostname xxxx (這裏xxxx爲你想要改成的名字)

  ②修改配置文件中的主機名,執行命令vi /etc/sysconfig/network (√通常須要進行此步湊才能永久更改主機名)

  驗證:重啓系統reboot

3)IP地址與主機名的綁定

  執行命令vi /etc/hosts,增長一行內容,以下(下面的從節點以你本身的爲主,本實驗搭建了兩個從節點):

  192.168.80.100 lvs-master

  192.168.80.101 lvs-slave

  #下面是本次試驗的兩個真實服務器節點

  192.168.80.102 lvs-webserver1

  192.168.80.103 lvs-webserver2

  保存後退出

  驗證:ping lvs-master

  (4)關閉防火牆

  ①執行關閉防火牆命令:service iptables stop

      驗證:service iptables stauts

  ②執行關閉防火牆自動運行命令:chkconfig iptables off

  驗證:chkconfig --list | grep iptables

 

7、搭建-lanmp-兩臺web服務器:

1)Web框架:

LANMP:將動態頁面交給Apache解析,靜態頁面交給Nginx解析,提升解析速率。

 

2)搭建方式:

源碼編譯

 

3)所需源碼包:

mariadb-5.5.46-linux-x86_64.tar.gz

httpd:httpd-2.4.9.tar.bz2

php-5.4.26.tar.bz2

nginx-1.8.1.tar.gz

 

4)安裝開發環境:

由於採用的搭建方式爲源碼編譯方式,因此須要安裝開發環境。

yum -y groupinstall "Development Tools" "Server Platform Development"

yum -y install pcre-devel openssl-devel zlib-devel apr-devel apr-util-devel libxml2-devel libmcrypt-devel bzip2-devel

 

5)編譯mariadb:

[root@lvs-webserver ~]# yum -y remove mariadb*   

[root@lvs-webserver ~]# tar xf mariadb-5.5.46-linux-x86_64.tar.gz -C /usr/local/

[root@lvs-webserver ~]# cd /usr/local/

[root@lvs-webserver local]# ln -sv mariadb-5.5.46-linux-x86_64 mysql ‘mysql’ -> ‘mariadb-5.5.46-linux-x86_64’

[root@lvs-webserver local]# id mysql

uid=27(mysql) gid=27(mysql) groups=27(mysql)

[root@lvs-webserver local]# cd mysql/

[root@lvs-webserver mysql]# chown -R root:mysql ./*       ——連接文件賦權規則

[root@lvs-webserver mysql]# mkdir /mydata/data -p

[root@lvs-webserver mysql]# chown -R mysql.mysql /mydata/data/

[root@lvs-webserver mysql]# cp support-files/my-large.cnf  /etc/my.cnf

[root@lvs-webserver mysql]# vim /etc/my.cnf        ——添加下三行

添加:

datadir = /mydata/data

skip_name_resolve = ON

innodb_file_per_table = ON

[root@lvs-webserver mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld

[root@lvs-webserver mysql]# chkconfig --add mysqld

[root@lvs-webserver mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data

[root@lvs-webserver mysql]# ls /mydata/data/

aria_log.00000001 mysqlmysql-bin.000002 performance_schema

aria_log_control mysql-bin.000001 mysql-bin.index test

[root@lvs-webserver mysql]# service mysqld start

Starting MySQL.. SUCCESS!

[root@lvs-webserver mysql]# ss -tnl

State       Recv-Q Send-Q Local Address:Port               Peer Address:Port              

LISTEN      0      50              *:3306                        *:*                  

LISTEN      0      128             *:80                          *:*                  

LISTEN      0      128             *:22                          *:*                  

LISTEN      0      128             *:808                         *:*  

[root@lvs-webserver mysql]# vim /etc/profile.d/mysql.sh                              ——命令調用

export PATH=/usr/local/mysql/bin:$PATH

[root@lvs-webserver mysql]# . /etc/profile.d/mysql.sh  

 

6)編譯apache-tomcat:

[root@lvs-webserver ~]# yum groupinstall "Development Tools" "Server Platform Development" -y

[root@lvs-webserver ~]# yum -y install pcre-devel openssl-devel zlib-devel

[root@lvs-webserver ~]# tar xf httpd-2.4.9.tar.bz2

[root@lvs-webserver ~]# cd httpd-2.4.9/

[root@lvs-webserver httpd-2.4.9]# yum -y install apr-devel apr-util-devel

[root@lvs-webserver httpd-2.4.9]# ./configure --prefix=/usr/local/apache24 --sysconfdir=/etc/httpd24--enable-so --enable-ssl -- enable-rewrite --with-zlib --with-pcre --with-apr=/usr --with-apr-util=/usr --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork

[root@lvs-webserver httpd-2.4.9]# make -j 4 && make install

[root@lvs-webserver profile.d]# cat /etc/profile.d/http24.sh

export PATH=/usr/local/apache24/bin:$PATH

[root@lvs-webserver apache24]# . /etc/profile.d/httpd24.sh

 

7)編譯php:

[root@lvs-webserver ~]# yum -y install libxml2-devel libmcrypt-devel bzip2-devel [root@lvs-webserver ~]# tar xf php-5.4.26.tar.bz2

[root@lvs-webserver ~]# cd php-5.4.26/

[root@lvs-webserver php-5.4.26]# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-png-dir --with-jpeg-dir --with-freetype-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/usr/local/apache24/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2

[root@lvs-webserver php-5.4.26]# make && make install

 

8)配置apache與php映射:

[root@lvs-webserver php-5.4.26]# cp /root/php-5.4.26/php.ini-production /etc/php.ini [root@lvs-webserver php-5.4.26]# cd /etc/httpd24/

[root@lvs-webserver httpd24]# cp httpd.conf{,.backup}

[root@lvs-webserver httpd24]# vim httpd.conf

添加:

AddType application/x-httpd-php .php

DirectoryIndex index.php index.html

Listen  808                 ——修改協議端口(由於這是本身編譯的apache)

[root@lvs-webserver httpd24]# apachectl stop

[root@lvs-webserver httpd24]# apachectl start

[root@lvs-webserver httpd24]# vim /usr/local/apache24/htdocs/index.php [root@lvs-webserver httpd24]# rm /usr/local/apache24/htdocs/index.html

[root@lvs-webserver httpd24]# firefox http://localhost:808

 

9)編譯nginx:

[root@lvs-webserver ~]# tar xf nginx-1.8.1.tar.gz

 

[root@lvs-webserver nginx-1.8.1]# ./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.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_gzip_static_module --with-debug --with-http_stub_status_module

 

[root@lvs-webserver nginx-1.8.1]# make && make install

[root@lvs-webserver nginx-1.8.1]# useradd nginx

root@server nginx]# vim /etc/profile.d/nginx.sh

export PATH=/usr/local/nginx/sbin:$PATH

[root@lvs-webserver nginx]# .  /etc/profile.d/nginx.sh

[root@lvs-webserver nginx]# nginx -t

 

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

 

nginx: configuration file /etc/nginx/nginx.conf test is successful

[root@lvs-webserver nginx]# nginx -h

nginx version: nginx/1.8.1

 

Usage: nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]

 

Options:

 

-?,-h: this help

 

-v: show version and exit

 

-V: show version and configure options then exit

 

-t: test configuration and exit

 

-q: suppress non-error messages during configuration testing

 

-s signal: send signal to a master process: stop, quit, reopen, reload

-p prefix  : set prefix path (default: /usr/local/nginx/)

-c filename : set configuration file (default: /etc/nginx/nginx.conf)

-g directives : set global directives out of configuration file

[root@lvs-webserver html]# nginx      ——啓動nginx

 

10)配置nginx:

[root@lvs-webserver html]# vim /etc/nginx/nginx.conf

添加:

upstream lamp {——虛擬主機,作反向代理

server 127.0.0.1:808 weight=1 max_fails=2 fail_timeout=30s;
}

        location / {

           root  /usr/local/apache24/htdocs ;

           index  index.html index.htm index.php;

       }

 

location ~.*\.(php|jsp|cgi)?$——動態頁面給lamp執行
{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://lamp;
}

 

location ~.*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ ——靜態頁面本身執行
{
root /usr/local/apache24/htdocs;
expires 3d;
}

11)編輯realserver腳本文件

[root@lvs-webserver ~]# vim  /etc/init.d/realserver

SNS_VIP=192.168.80.200#這裏咱們設置虛擬IP爲:192.168.80.200

/etc/rc.d/init.d/functionscase "$1" in

start)

       ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP

       /sbin/route add -host $SNS_VIP dev lo:0

       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

       sysctl -p >/dev/null 2>&1

       echo "RealServer Start OK"

       ;;

stop)

       ifconfig lo:0 down

       route del $SNS_VIP >/dev/null 2>&1

       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore

       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce

       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore

       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce

       echo "RealServer Stoped"

       ;;*)

       echo "Usage: $0 {start|stop}"

       exit 1esac

exit 0

[root@lvs-webserver ~]# chmod 755 realserver             #保存腳本文件後更改該文件權限:

[root@lvs-webserver ~]# service realserver start     #開啓realserver服務:

 

12)兩臺web服務器添加index.php用於測試:

192.168.80.102:vim /usr/local/apache24/htdocs/index.php

From 192.168.80.102

 

192.168.80.103:vim /usr/local/apache24/htdocs/index.php

From 192.168.80.103

 

8、配置lvs-master:

[root@lvs-master ~]# yum install -y keepalived

[root@lvs-master ~]# vim /etc/keepalived/keepalived.conf

global_defs {  

   notification_email {  

         edisonchou@hotmail.com  

   }  

   notification_email_from sns-lvs@gmail.com  

   smtp_server 192.168.80.1  

   smtp_connection_timeout 30

   router_id LVS_MASTER  # 設置lvsid,在一個網絡內應該是惟一的

}  

vrrp_instance VI_1 {  

    state MASTER   #指定Keepalived的角色,MASTER爲主,BACKUP爲備          

    interface eth1  #指定Keepalived的角色,MASTER爲主,BACKUP爲備

    virtual_router_id 51 #虛擬路由編號,主備要一致

    priority 100  #定義優先級,數字越大,優先級越高,主DR必須大於備用DR    

    advert_int 1  #檢查間隔,默認爲1s

    authentication {  

        auth_type PASS  

        auth_pass 1111  

    }  

    virtual_ipaddress {  

        192.168.80.200  #定義虛擬IP(VIP)192.168.2.33,可多設,每行一個

    }  

}  

# 定義對外提供服務的LVSVIP以及port

virtual_server 192.168.80.200 80 {  

    delay_loop 6 # 設置健康檢查時間,單位是秒                    

    lb_algo wrr # 設置負載調度的算法爲wlc                   

    lb_kind DR # 設置LVS實現負載的機制,有NATTUNDR三個模式   

    nat_mask 255.255.255.0                

    persistence_timeout 0          

    protocol TCP                  

    real_server 192.168.80.102 80 {  # 指定real server1IP地址

        weight 3   # 配置節點權值,數字越大權重越高              

        TCP_CHECK {  

        connect_timeout 10         

        nb_get_retry 3  

        delay_before_retry 3  

        connect_port 80  

        }  

    }  

    real_server 192.168.80.103 80 {   # 指定real server2IP地址

        weight 3  # 配置節點權值,數字越大權重越高  

        TCP_CHECK {  

        connect_timeout 10  

        nb_get_retry 3  

        delay_before_retry 3  

        connect_port 80  

        }  

     }  

}

[root@lvs-master ~]#service keepalived start   #開啓keepalived服務

 

9、配置lvs-slave:

從負載服務器與主負載服務器大體相同,只是在keepalived的配置文件中須要改如下兩處:

  (1)將route_id由MASTER改成BACKUP

  (2)將state由MASTER改成BACKUP

  (3)將priority由100改成99

global_defs {  

   notification_email {  

         edisonchou@hotmail.com  

   }  

   notification_email_from sns-lvs@gmail.com  

   smtp_server 192.168.80.1  

   smtp_connection_timeout 30

   router_id LVS_BACKUP  # 設置lvsid,在一個網絡內應該是惟一的

}  

vrrp_instance VI_1 {  

    state BACKUP # 這裏改成BACKUP

    interface eth1  

    virtual_router_id 51  

    priority 99 # 這裏改成99master優先級是100

    advert_int 1  

    authentication {  

        auth_type PASS  

        auth_pass 1111  

    }  

    virtual_ipaddress {  

        192.168.80.200  

    }  

}  

 

10、故障測試:

1、指定請求的均衡轉發:由於兩個Web服務器的權重同樣,因此會依次轉發給兩個Web服務器;

訪問網站:http://192.168.80.200

效果:刷新交替出現from 192.168.80.102from 192.168.0.103

 

二、模擬lvs-master故障,lvs-masterservice keepalived stop

訪問網站http://192.168.80.200
效果:刷新交替出現from 192.168.80.102from 192.168.0.103

 

三、模擬lvs-webserver1故障,lvs-webserver1nginx -s stop

訪問網站http://192.168.80.200
效果:只出現from 192.168.80.103

恢復webserver1lvs-webserver1nginx

訪問網站http://192.168.80.200
效果:刷新交替出現from 192.168.80.102from 192.168.0.103

 

四、模擬lvs-webserver2故障,lvs-webserver2nginx -s stop

訪問網站http://192.168.80.200
效果:只出現from 192.168.80.102

恢復webserver2lvs-webserver2nginx

訪問網站http://192.168.80.200
效果:刷新交替出現from 192.168.80.102from 192.168.0.103

相關文章
相關標籤/搜索