LVS負載均衡WordPress

LVS:

       LVS是四層協議的開源負載均衡器,工作在netfilter框架INPUT鏈中,它根據不同的算

       法將用戶的請求調度給后端服務器,它不受sockt套接字文件限制,性能比nginx七層   

        負載均衡器性能高很多。

    

        類型:

                lvs-nat:多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑出的RS的RIP和PORT實現轉發

                lvs-dr:通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,

                          目標MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變;

                lvs-tun:在請求原報文的首部再次封裝一個IP首部

                lvs-fullnat:修改請求報文的源和目標IP

           相關術語:

                    DS: Director Server,指的是前端負載均衡器節點。

                    RS:Real Server。后端提供服務的服務器。

                    VIP: 作為用戶請求的目標的IP地址

                    DIP :DS與RS之間相互通訊

                     RIP: 后端服務器IP

                     CIP: Client IP 客戶端IP


                     CIP <–> VIP == DIP <–> RIP 

LVS-NAT 類型的工作原理:

                   

  • 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP
  • PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
  • IPVS比對數據包請求的服務是否為集群服務,若是,根據調度算法修改數據包的目標IP地址為后端某一服務器IP,然后將數據包發至POSTROUTING鏈。 此時報文的源IP為CIP,目標IP為RIP
  • POSTROUTING鏈通過選路,將數據包發送給Real Server
  • Real Server比對發現目標為自己的IP,開始構建響應報文發回給Director Server。 此時報文的源IP為RIP,目標IP為CIP
  • Director Server在響應客戶端前,此時會將源IP地址修改為自己的VIP地址,然后響應給客戶端。 此時報文的源IP為VIP,目標IP為CIP

環境部署:

         1 準備三臺主機    A    B    C    D

         2 主機A作為DS服務器,配置VIP:172.18.0.9 ,DIP為:192.168.10.254

         3 主機B C作為RS服務器 ,配置IP時網關指向DS服務器的192.168.10.254

            B主機IP:192.168.10.3/24 網關:192.168.10.254

            C主機IP:192.168.10.4/24 網關:192.168.10.254

            (備注:centos7用nmtui命令,centos6用setup命令)

          D主機IP:192.168.10.5(提供wordpress等)

D主機配置:(centos6)

    

            [root@node1 ~]# yum install -y nfs-utils rpcbind mysql-server nginx

                                  # service mysqld start
            [root@node1 ~]# mysql 
## 創建數據庫和授權用戶
            mysql> create database wpdb;
            mysql> grant all on wpdb.* to 
‘wpuser’@’192.168.10.%’ identified by ‘wppass’
            mysql> exit
            [root@node1 ~]# mkdir /data/
            [root@node1 ~]# cd /data/
            wget 
ftp://172.18.0.1/pub/Sources/sources/httpd/wordpress-4.3.1-zh_CN.zip
            [root@node1 data]# unzip wordpress-4.3.1-zh_CN.zip
            [root@node1 data]# chown -R nginx.nginx /data/wordpress
            [root@node1 data]# vim /etc/exports
            /data/wordpress 192.168.10.[34](rw)
            [root@node1 ~]# service nfs start
            [root@node1 ~]# showmount -e 172.18.99.7 
## 查看 nfs 共享目錄 

B  C兩臺主機配置:

   [root@centos7 ~]# yum install -y nginx php-fpm php-mysql nfs-utils
            [root@centos7 ~]# mkdir -p /data/wordpress
                                    #vim /etc/nginx/conf.d/wps/conf
            server {
                        listen  80 default_server;
                        server_name www.magedu.com;
                        root  /data/wordpress/;
                        index index.php index.html index.html;
            location / {

            location ~ \.php$ {
                        fastcgi_pass 127.0.0.1:9000;
                        fastcgi_index index.php;
                        fastcgi_param SCRIPT_FILENAME
                        /data/wordpress/$fastcgi_script_name;
                        include fastcgi_params;
            }
}

               root@centos7 nginx]# vim nginx.conf
                # default server 
##注釋或刪除主配置文件里的 default server 
                [root@centos7 conf.d]# nginx
                [root@centos7 conf.d]# systemctl start php-fpm
                [root@centos7 conf.d]# mount 172.18.99.7:/data/wordpress /data/wordpress
 
                

             

A主機配置:

  ipvsadm -A -t 172.18.0.9 -s rr

  ipvsadm -a -t 172.18.0.9:80 -r 192.168.10.3 -m -w 2

  ipvsadm -a -t 172.18.0.9:80 -r 192.168.10.4 -m -w 1

   sysctl -w net.ipv4.ip_forward=1(打開核心轉發功能)

LVS-dr模型工原理:

(1)每一個服務器都配有VIP

(2)Ditector轉發數據包給后端RealServer時,在原有數據包上再封裝一層RealServer的真是IP的mac到達。

(3)RS通過VIP回數據包時,數據必須從lo:0轉發給本機的ethX物理端口后,再由本機的ethX的物理端口轉發給客戶端

(4)RIP和VIP不一定在哦同一個網段(不在同一網段的可能性非常大,這樣可以起到隱藏后端RS的作用)

LVS-dr:

環境部署:

            1準備四臺主機 A B C D

            2 A主機是DS服務器:172.18.0.9

            3 B C 主機是RS服務器

               B主機IP:172.18.0.3    C主機IP:172.18.0.4

            4 D主機提供wordpress等  IP:172.18.0.5

配置D 主機:(centos6)

            [root@node1 ~]# yum install -y nfs-utils rpcbind mysql-server nginx

                                  # service mysqld start
            [root@node1 ~]# mysql
## 創建數據庫和授權用戶
            mysql> create database wpdb;
            mysql> grant all on wpdb.* to
‘wpuser’@’172.18.99.%’ identified by ‘wppass’
            mysql> exit
            [root@node1 ~]# mkdir /data/
            [root@node1 ~]# cd /data/
            wget
ftp://172.18.0.1/pub/Sources/sources/httpd/wordpress-4.3.1-zh_CN.zip
            [root@node1 data]# unzip wordpress-4.3.1-zh_CN.zip
            [root@node1 data]# chown -R nginx.nginx /data/wordpress
            [root@node1 data]# vim /etc/exports
            /data/wordpress 172.18.99.1[01](rw)
            [root@node1 ~]# service nfs start
            [root@node1 ~]# showmount -e 172.18.99.7
## 查看 nfs 共享目錄 

配置B主機:(centos7)
            

            [root@centos7 ~]# yum install -y nginx php-fpm php-mysql nfs-utils
            [root@centos7 ~]# mkdir -p /data/wordpress
                                    #vim /etc/nginx/conf.d/wps/conf
            server {
                        listen  80 default_server;
                        server_name www.magedu.com;
                        root  /data/wordpress/;
                        index index.php index.html index.html;
            location / {

            location ~ \.php$ {
                        fastcgi_pass 127.0.0.1:9000;
                        fastcgi_index index.php;
                        fastcgi_param SCRIPT_FILENAME
                        /data/wordpress/$fastcgi_script_name;
                        include fastcgi_params;
            }
}

               root@centos7 nginx]# vim nginx.conf
                # default server
##注釋或刪除主配置文件里的 default server
                [root@centos7 conf.d]# nginx
                [root@centos7 conf.d]# systemctl start php-fpm
                [root@centos7 conf.d]# mount 172.18.99.7:/data/wordpress /data/wordpress

                

                [root@centos7 ~]# vim dr.sh ## real-server 配置 vip
                #!/bin/bash
                 VIP=172.18.0.24
                case “$1” in
                    start)
                            echo “
配置 lvs Real Server 開始…”
                            ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
## 配置 VIP
                            route add -host $VIP dev lo:0 ## 添加主機路由
                            ## 限制響應和通告級別
                            echo “1” >/proc/sys/net/ipv4/conf/lo/arp_ignore
                            echo “1” >/proc/sys/net/ipv4/conf/all/arp_ignore
                            echo “2” >/proc/sys/net/ipv4/conf/lo/arp_announce
                            echo “2” >/proc/sys/net/ipv4/conf/all/arp_announce
                            ;;
                    stop)
                            echo “
正在關閉 lvs Real server”
                            ifconfig lo:0 down
                            echo “0” >/proc/sys/net/ipv4/conf/lo/arp_ignore
                            echo “0” >/proc/sys/net/ipv4/conf/all/arp_ignore
                            echo “0” >/proc/sys/net/ipv4/conf/lo/arp_announce
                            echo “0” >/proc/sys/net/ipv4/conf/all/arp_announce
                            ;;
                    *)
                            echo “
用法: $0 {start|stop}”
                            exit 1
                   esac
            [root@centos7 ~]# bash dr.sh start
            配置 lvs Real Server 開始

配置C主機:(centos7)

                

                [root@centos7 ~]# yum install -y nginx php-fpm php-mysql nfs-utils
                [root@centos7 ~]# mkdir -p /data/wordpress
                [root@centos7 ~]# mount 172.18.99.7:/data/wordpress /data/wordpress

                                        #systemctl start php-fpm

                    #vim /etc/nginx/conf.d/wps/conf
            server {
                        listen  80 default_server;
                        server_name www.magedu.com;
                        root  /data/wordpress/;
                        index index.php index.html index.html;
            location / {

            location ~ \.php$ {
                        fastcgi_pass 127.0.0.1:9000;
                        fastcgi_index index.php;
                        fastcgi_param SCRIPT_FILENAME
                        /data/wordpress/$fastcgi_script_name;
                        include fastcgi_params;
            }
}

            
               root@centos7 nginx]# vim nginx.conf
                # default server 
##注釋或刪除主配置文件里的 default server         

                 [root@centos7 ~]# bash dr.sh start
                 配置 lvs Real Server 開始

配置A主機:

                [root@node2 ~]# yum install ipvsadm -y
                                      #ifconfig eth1 192.18.0.24 netmask 255.255.255.255 broadcast 172.18.0.24 up
                                      #ifconfig
                [root@node2 ~]# ipvsadm -A -t 172.18.0.24:80 -s rr
##新增一個集群服務
                [root@node2 ~]# ipvsadm -a -t 172.18.0.24:80 -r 172.18.99.10:80 -g
                ## 為集群添加 real-server
                [root@node2 ~]# ipvsadm -a -t 172.18.0.24:80 -r 172.18.99.11:80 -g
                [root@node2 ~]# ipvsadm -Ln
## 查看集群規則
備注:route add -host 172.18.0.24 dev lo:0(可以在倆臺RS主機上設置,目的是為了讓響應報文從lo出去,但這不是必須的。

 

                

原創文章,作者:m22shanyongguo,如若轉載,請注明出處:http://www.www58058.com/75103

(1)
m22shanyongguom22shanyongguo
上一篇 2017-05-17
下一篇 2017-05-18

相關推薦

  • Linux網絡屬性配置—ifcfg命令家族

    ifcfg命令家族:ifconfig,route,netstat 1、NAME               ifconfig – configure a network interface       SYNOPSIS   &n…

    Linux干貨 2016-11-27
  • Nginx 代理和緩存

    一 實驗環境 Nginx 版本:nginx-1.8.1 Nginx代理服務器WAN:192.168.1.5 LAN:172.16.2.1 Web1:172.16.2.2 Web2:172.16.2.3 1.  配置好IP、DNS 、網關,確保使用遠程連接工具能夠連接服務器 2.      …

    Linux干貨 2016-12-05
  • 文件的權限小結

    主要是setfacl 和chown的總結

    Linux干貨 2017-11-27
  • LAMP基于rsyslog+loganalyzer實現日志集中管理及分析

    前言 作為一名運維工程師,查看分析系統日志是每天必做的功課,但每次查看日志都得一臺服務器一臺服務器的看,幾臺服務器還可以這么對付,但如果管理成百上千臺線上服務器,這種方法就捉襟見肘了。于是我們就需要用到日志服務器了,但是如何能讓它更直觀的顯示呢?loganalyzer是一個不錯的選擇,本文將講解如何使用rsyslog+loganalyze實現日志統一管理及分…

    Linux干貨 2015-04-27
  • 網絡班27期第五周作業

    N27_網絡班 第五周作業 1、 顯示當前系統上root、fedora或user1用戶的默認shell [root@localhost ~]# grep -E ‘^(root|fedora|user1)’ /etc/passwd | cut -d: -f1,7 2、 找出/etc/rc.d/init.d/function文件中某單詞后面跟一組小括號的行,形如…

    Linux干貨 2017-08-28
  • 測試so接口函數的腳本 [python]

    下面是一個測試solib庫中調用函數的測試腳本,但該腳本還存在這一些問題,我目前無法理解和解決; 問題: 1.我定義了logging采用日志滾動的方式,寫日志,并且每個日志的大小是20M,但測試結果發現日志連1M都沒到就開始輪轉了,并且在輪轉過程中,還出現logging寫日志,卻發現,日志輪轉了,結果竟然報了,輪轉日志不存在。 Traceback (most…

    Linux干貨 2016-01-05
欧美性久久久久