LVS基礎及LVS+Keepalived實現雙主高可用負載均衡

LVS基礎及LVS+Keepalived實現雙主高可用負載均衡php


LB集羣:html

   (Load  Balancing)即負載均衡集羣,其目的是爲了提升訪問的併發量及提高服務器的性能,其    實現方式分爲硬件方式和軟件方式。前端

  硬件實現方式:mysql

        經常使用的有 F5公司的BIG-IP系列、A10公司的AX系列、Citrix公司的 NetScaler系列等nginx

  軟件實現方式:算法

    LVS工做於傳輸層、nginx工做於應用層、haproxy工做於傳輸層和應用層sql

本文主要講解LVS。數據庫

 

1、什麼是LVS ?apache

 1. LVS:(Linux Virtual Server)Linux虛擬服務,工做於前端調度器內核的netfilter模塊上,根據請求報文的目標IP和目標PORT將其調度轉發至後端的某主機,其轉發是依賴於四層協議的特徵進行轉發的,所以須要在內核的TCP/IP協議棧進行過濾篩選,這樣的過濾轉發規則由系統管理員進行定義。
後端

 2. LVS兩段式組成:

   ipvsadm:用戶空間的命令行工具,用於管理集羣服務及集羣服務上的主機(RS)。

   ipvs:工做與內核上的netfilter的INPUT鉤子之上的程序,可根據用戶定義的集羣實現請求轉發。


   工做原理圖解以下:

wKioL1dEUSzz1_iYAACiXSOxsXo585.png

LVS集羣專用術語:

       CIP:發送請求的客戶端IP地址。

VIP:lvs調度器的IP地址,也是向客戶端提供服務的IP地址。

DIP:lvs調度器與後端real server之間通訊使用的IP地址。

RIP:提供真正服務的real server的IP地址。

vs:虛擬服務器,調度器,

rs: 後端提供真實服務的服務器

 

3.LVS集羣的類型:

1)lvs-nat:

   多目標的DNAT,經過將請求報文中的目標地址和目標端口修改成挑選出的某RS的RIP和PORT實現轉發

2)lvs-dr:

   經過爲請求報文的從新封閉一個MAC首部進行轉發,源MAC是DIP所在接口的MAC,目標MAC是挑選出某RS的RIP所在接口的MAC地址;IP首部不會發生變化(CIP<-->VIP)

3)lvs-tun:

    不修改請求報文的IP首部(源IP爲CIP,目標IP爲VIP),而是原IP首部以外再封裝一個IP首部(源IP爲DIP,目標IP爲挑選出的RS的RIP)

4)lvs-fullnat

   經過同時修改請求報文的源IP地址(CIP-->DIP)和目標IP地址(VIP-->RIP)進行轉發

 

4.LVS集羣的調度算法(Scheduler):

      根據其調度時是否考慮後端主機的當前負載,可分爲靜態方法和動態方法兩類

 

靜態算法:僅根據算法自身進行調度

wKiom1dEUDmCTlfUAABGUf0_J2k228.png

動態算法:根據算法及後端主機當前的負載狀態進行調度

wKiom1dEUMLAhwYtAACIy4M0xgM140.png

查看當前系統支持的算法:wKioL1dEUgmSil0NAAAu6iGwXm8791.png


5.ipvsadm管理工具用法


管理集羣:ipvsadm -A|E -t|u|f service_address [-s scheduler]

              A:增  -E:修改

-t:tcp  -u:udp  -f:firewall mark

-s scheduler:調度算法,默認爲wlc

ipvsadm -D  -t|u|f service_address  刪除集羣

管理集羣上的RS:

ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]

-a:增

-e:改

-r server-address :RS的地址;rip[:port]

-g, gateway, dr,默認

-i, ipip, tun

-m, masquerade, nat

-w weight


查看:

ipvsadm -L|l [options]

-n, --numeric:數字格式顯示IP和PORT;

--exact:精確值,不作單位換算;

-c, --connection:顯示IPVS鏈接;

--stats:統計數據;

--rate:速率;

清空: ipvsadm  -C:clear

保存和重載:

保存:

ipvsadm -S > /PATH/TO/SOME_RULE_FILE

ipvsadm-save > /PATH/TO/SOME_RULE_FILE


重載:

ipvsadm -R <  /PATH/TO/SOME_RULE_FILE

ipvsadm-restore < /PATH/TO/SOME_RULE_FILE


清空計數器:

ipvsadm -Z [-t|u|f service-address]


 

 2、LVS-NAT工做模型及原理

 

1.lvs-nat原理

   多目標的DNAT,經過將請求報文中的目標地址和目標端口修改成挑選出的某RS的RIP和PORT實現轉發;


(1)RIP和DIP必須在同一IP網絡,且應該使用私有地址;RS的網絡要指向DIP(保證響應報文必須經由VS);

(2)請求報文和響應報文都經由Director轉發,較高負載下,Director易於成爲系統性能瓶頸;

(3)支持端口映射;

(4)VS必須是Linux,RS能夠是任意OS

 

2.lvs-nat測試

 

  測試環境:3臺虛擬機

Director主機(兩張網卡)IP:

         外網:172.18.123.14

         內網:192.168.100.254

       RS1主機IP:192.168.100.20

RS2主機IP:192.168.100.21

      注:Director內網ip及RS主機網卡均設置爲僅主機模式,RS主機的網關需指向192.168.100.254,安裝apache服務且處於開啓狀態。

1).在Director主機上安裝ipvsadm並配置集羣服務。

wKioL1dEUpXw-6DzAAA6hNDtHVo761.png

 2).測試

wKioL1dEUpaQkr6VAAAdlzLQHe0101.png

wKiom1dEUaOhBzIhAAAOQwVLM-w697.pngwKioL1dEUpfiveZKAAAPANQzoMk016.png


3、LVS-DR工做模型及原理

 

1.lvs-dr

      Direct Routing:經過爲請求報文的從新封閉一個MAC首部進行轉發,源MAC是DIP所在接口的MAC,目標MAC是挑選出某RS的RIP所在接口的MAC地址;IP首部不會發生變化(CIP<-->VIP);


1)確保前端路徑器將目標IP爲VIP的請求報文發往Director:

     解決方案:

    在路由器上靜態綁定VIP和Director的MAC地址;

    禁止RS響應VIP的ARP請求,禁止RS的VIP進行通告

                 (a) arptables

          (b) 修改RS的內核參數,並把VIP綁定lo的別名上;

              arp_ignore, arp_announce

2)RS的RIP可使用私有地址,也可使用公網地址;

3)RS跟Director必須在同一物理網絡;RS的網關必須不能指向DIP;

4)請求報文必須由Directory調度,但響應報文必須不能經由Director;

5)不支持端口映射;

6)RS可使用大多的OS;

wKiom1dEVF3C_5KbAAGk2w5pzY4049.png

2.lvs-dr測試

 

  測試環境(CentOS 7)在director上安裝ipvsadm

 

   Director

        DIP172.18.123.14

 VIP172.18.123.15

   RS1:

 RIP172.18.123.50

 VIP172.18.123.15

   RS2:

 RIP172.18.123.51

        VIP172.18.123.15


 

1.關閉RS1RS2arp響應:分別在RS1RS2主機上執行如下命令

wKioL1dEVabjv5PUAAAdCDAjZ2s828.png

2.分別在三臺主機上配置VIP

在DirectorwKiom1dEVNaA9i6JAABWg15KySk822.png

分別在RS1及RS2上設置VIP

wKiom1dEVUuhj3AgAAB50qPaIV0001.png

3.增長路由

在Director

wKioL1dEVm2QsIOdAAAkmHGwHog296.png

RS1及RS2:

wKiom1dEVabxXZJZAAAjFQe-YCw189.png

4.Director上添加集羣列表

wKioL1dEVs-BmgrgAAA2OxDwxG4023.png

5.測試

wKiom1dEVhKQwUFSAAAqhhgRYHU043.pngwKioL1dEVwWxisw-AAAquRQPTT0743.png

注:arp響應限制

1arp_ignore:

定義對目標地址爲本地IPARP詢問不一樣的應答模式0

0 - (默認值): 迴應任何網絡接口上對任何本地IP地址的arp查詢請求

1 - 只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求

2 -只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求,且來訪IP必須在該網絡接口的子網段內

3 - 不迴應該網絡界面的arp請求,而只對設置的惟一和鏈接地址作出迴應

4-7 - 保留未使用

8 -不迴應全部(本地地址)的arp查詢

 

2arp_announce:

對網絡接口上,本地IP地址的發出的,ARP迴應,做出相應級別的限制肯定不一樣程度的限制,宣佈對來自本地源IP地址發出Arp請求的接口

0 - (默認在任意網絡接口(eth0,eth1lo)上的任何本地地址

1 -儘可能避免不在該網絡接口子網段的本地地址作出arp迴應當發起ARP請求的源IP地址是被設置應該經由路由達到此網絡接口的時候頗有用.此時會檢查來訪IP是否爲全部接口上的子網段內ip之一.若是改來訪IP不屬於各個網絡接口上的子網段內,那麼將採用級別2的方式來進行處理.

2 - 對查詢目標使用最適當的本地地址.在此模式下將忽略這個IP數據包的源地址並嘗試選擇與能與該地址通訊的本地地址.首要是選擇全部的網絡接口的子網中外出訪問子網中包含該目標IP地址的本地地址若是沒有合適的地址被發現,將選擇當前的發送網絡接口或其餘的有可能接受到該ARP迴應的網絡接口來進行發送.


4、基於Keepalived實現lvs雙主高可用集羣及部署應用

 

1.實驗拓撲結構圖

wKioL1dEZOnguo7HAADtsl8AKaM048.png

 

2.部署環境

wKiom1dEV6uihMMbAAA-loZf2X4450.png

3.安裝軟件

 1)保證LVS1LVS2時間同步,並可以通訊,並在兩臺主機上安裝keepalivedipvsadm

wKiom1dEWAmRf3VpAAASoXeXvtg027.png

2)配置LVS1keepalived.conf

! Configuration File for keepalived

 

global_defs {

   notification_email {

               root@localhost

   }

   notification_email_from zzpp@zp.com

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id MY_LVS

}

 

vrrp_instance VI_1 {

    state MASTER

    interface eno16777736

    virtual_router_id 123

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass abcdef

    }

    virtual_ipaddress {

        172.18.123.22

    }

}

 

vrrp_instance VI_2 {

    state BACKUP

    interface eno16777736

    virtual_router_id 223

    priority 98

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass abcdef

    }

    virtual_ipaddress {

        172.18.123.23

    }

}

 

virtual_server 172.18.123.22 80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    protocol TCP

 

    real_server 172.18.123.50 80 {

        weight 1

        HTTP_GET {

            url {

              path /

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

 

    real_server 172.18.123.51 80 {

        weight 1

        HTTP_GET {

            url {

              path /

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}

 

virtual_server 172.18.123.23 80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    protocol TCP

 

    real_server 172.18.123.50 80 {

        weight 1

        HTTP_GET {

            url {

              path /

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

 

    real_server 172.18.123.51 80 {

        weight 1

        HTTP_GET {

            url {

              path /

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}


3) scp LVS1的keepalived.conf到LVS2的/etc/keepalived/下,並修改下述標識內容,其餘內容不變。

 

vrrp_instance VI_1 {

    state BACKUP

    interface eno16777736

    virtual_router_id 123

    priority 98

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass abcdef

    }

    virtual_ipaddress {

        172.18.123.22

    }

}

 

vrrp_instance VI_2 {

    state MASTER

    interface eno16777736

    virtual_router_id 223

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass abcdef

    }

    virtual_ipaddress {

        172.18.123.23

    }

}

 

4)在RS1及RS2上安裝httpd、php及php-mysql

wKioL1dEWf6gDCxWAAAVU1DAS9Y829.png

準備測試頁

wKiom1dEWQyy5yEzAAAmnDEFejk045.png

配置內核及VIP,運行下面腳本:bash

#!/bin/bash

#

VIP1=172.18.123.22

VIP2=172.18.123.23

interface1="lo:0"

interface2="lo:1"

 

case $1 in

start)

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

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

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

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


ifconfig $interface1 $VIP1 broadcast $VIP1 netmask 255.255.255.255 up

route add -host $VIP1 dev $interface1

ifconfig $interface2 $VIP2 broadcast $VIP2 netmask 255.255.255.255 up

route add -host $VIP2 dev $interface2

;;

stop)


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

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

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

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

ifconfig $interface1 down

ifconfig $interface2 down

;;

status)

if  ifconfig lo:0 | grep $VIP1 &> /dev/null && ifconfig lo:1 | grep $VIP2  &> /dev/null;then

echo "ipvs is running"

else

echo "ipvs is stopped"

    fi

;;

*)

echo "Usage: `basename $0` {start|stop|status}"

exit 1

esac

查看Rs主機的ip信息:

wKioL1dEWmKSVWCCAABA3EEm_Hg045.png

5)測試,啓動LVS1LVS2主機上的keepalived服務,查看兩節點的ip信息及ipvs規則

wKioL1dEWpvAND_vAABb8SG4TdA493.png

wKioL1dEWxmglLdGAABalGxXwX0238.png

經過瀏覽器訪問172.18.123.22172.18.123.23

wKioL1dEW2aSsbebAAA-jHBM0TY725.pngwKiom1dEWnSz-bdGAAA9rE9W-Vk163.png

wKiom1dEWnTjsJulAAA-6u-6YlQ909.pngwKioL1dEW2eyo9P9AAA_qJgEaEM719.png

停掉LVS2keepalived服務,查看LVS1ip及測試訪問均正常。

wKioL1dEW7rhCo_yAABl1GYOYOk755.png

6)在SQL1主機上安裝Mariadb數據庫,並受權用戶

wKiom1dEWvSxWMBiAAAjC0ctcLM195.png

在兩臺RS上配置測試是否連通Mariadb

wKioL1dEXBCgDRw8AAAdyFxDieo862.png

wKiom1dEW0-hPN-cAAA6HVjH3Nk407.png

4、部署phpwind

1.RS1RS2主機上下載phpwind_v9.0.1.141223_utf8.zip,解壓到/var/www/html目錄下,更改解壓後目錄的屬主屬組爲apache用戶

wKioL1dEXGzDSJrRAAAyIvcMVck313.png


出現下述錯誤,安裝php-xml便可

wKiom1dEXHbimrqvAABIXirU5NI173.png


安裝成功

wKiom1dEXJfjm5uyAABZN_dNE7g446.png

測試OK

wKiom1dEXBXzF9CTAAA8GQAiotY039.png

wKioL1dEXQnDNZS7AAA6waR8kNk763.png

相關文章
相關標籤/搜索