LVS安裝配置和實現負載均衡

LVS是 Linux Virtual Server 的簡稱,也就是Linux虛擬服務器。

 

官網:http://www.linuxvirtualserver.org

 

LVS已經是Linux內核標準的一部分,通過LVS 達到的負載均衡技術和 Linux 操作系統實現一個高性能高可用的 Linux 服務器集羣,它具有良好的可靠性、可擴展性和可操作性

 

LVS是一個實現負載均衡集羣的開源軟件項目,LVS架構從邏輯上可分爲調度層、Server集羣層和共享存儲

 

LVS的基本工作原理:

 

LVS由2部分軟件組成: ipvs和ipvsadm

ipvs(ip virtual server):一段代碼工作在內核空間,叫ipvs,是真正生效實現調度的代碼

ipvsadm:另外一段是工作在用戶空間,叫ipvsadm,負責爲ipvs內核框架編寫規則,定義誰是集羣服務,而誰是後端真實的服務器(Real Server)

 

LVS相關術語(名詞)及解釋:

  DS:Director Server。指的是前端負載均衡器節點
  RS:Real Server。後端真實的工作服務器
  VIP:向外部直接面向用戶請求,作爲用戶請求的目標的IP地址
  DIP:Director Server IP,主要用於和內部主機通訊的IP地址
  RIP:Real Server IP,後端服務器的IP地址
  CIP:Client IP,訪問客戶端的IP地址

 

 

 

 

 

 

 

 

 

LVS/NAT原理和特點:

  理解NAT方式的實現原理和數據包的改變:

 

(a). 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP
(b). PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
(c). IPVS比對數據包請求的服務是否爲集羣服務,若是,修改數據包的目標IP地址爲後端服務器IP,然後將數據包發至POSTROUTING鏈。 此時報文的源IP爲CIP,目標IP爲RIP
(d). POSTROUTING鏈通過選路,將數據包發送給Real Server
(e). Real Server比對發現目標爲自己的IP,開始構建響應報文發回給Director Server。 此時報文的源IP爲RIP,目標IP爲CIP
(f). Director Server在響應客戶端前,此時會將源IP地址修改爲自己的VIP地址,然後響應給客戶端。 此時報文的源IP爲VIP,目標IP爲CIP

 

LVS-NAT模型的特性:

RS應該使用私有地址,RS的網關必須指向DIP

DIP和RIP必須在同一個網段內

請求和響應報文都需要經過Director Server,高負載場景中,Director Server易成爲性能瓶頸

支持端口映射

RS可以使用任意操作系統

缺陷:對Director Server壓力會比較大,請求和響應都需經過director server

 

 

 

 

 

 

 

 

 

 

LVS/DR的原理和特點:

重將請求報文的目標MAC地址設定爲挑選出的RS的MAC地址

 

(a) 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP
(b) PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
(c) IPVS比對數據包請求的服務是否爲集羣服務,若是,將請求報文中的源MAC地址修改爲DIP的MAC地址,將目標MAC地址修改RIP的MAC地址,然後將數據包發至POSTROUTING鏈。 此時的源IP和目的IP均未修改,僅修改了源MAC地址爲DIP的MAC地址,目標MAC地址爲RIP的MAC地址
(d) 由於DS和RS在同一個網絡中,所以是通過二層來傳輸。POSTROUTING鏈檢查目標MAC地址爲RIP的MAC地址,那麼此時數據包將會發至Real Server。
(e) RS發現請求報文的MAC地址是自己的MAC地址,就接收此報文。處理完成之後,將響應報文通過lo接口傳送給eth0網卡然後向外發出。 此時的源IP地址爲VIP,目標IP爲CIP
(f) 響應報文最終送達至客戶端

 

 

LVS-DR模型的特性(企業目前最常用的):

特點1:保證前端路由將目標地址爲VIP報文統統發給Director Server,而不是RS

RS可以使用私有地址;也可以是公網地址,如果使用公網地址,此時可以通過互聯網對RIP進行直接訪問

RS跟Director Server必須在同一個物理網絡中

所有的請求報文經由Director Server,但響應報文必須不能經過Director Server

不支持地址轉換,也不支持端口映射

RS可以是大多數常見的操作系統

RS的網關絕不允許指向DIP(因爲我們不允許他經過director)

RS上的lo接口配置VIP的IP地址

缺陷:RS和DS必須在同一機房中

 

特點1的解決方案:

在前端路由器做靜態地址路由綁定,將對於VIP的地址僅路由到Director Server

存在問題:用戶未必有路由操作權限,因爲有可能是運營商提供的,所以此方法未必實用

arptables:在arp的層次上實現在ARP解析時做防火牆規則,過濾RS響應ARP請求。這是由iptables提供的

修改RS上內核參數(arp_ignore和arp_announce)將RS上的VIP配置在lo接口的別名上,並限制其不能響應對VIP地址解析請求。

LVS/Tun原理和特點:

  在原有的IP報文外再次封裝多一層IP首部,內部IP首部(源地址爲CIP,目標IIP爲VIP),外層IP首部(源地址爲DIP,目標IP爲RIP)

 

(a) 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時

報文的源IP爲CIP,目標IP爲VIP 。

(b) PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
(c) IPVS比對數據包請求的服務是否爲集羣服務,若是,在請求報文的首部再次封裝一層IP報文,封

裝源IP爲爲DIP,目標IP爲RIP。然後發至POSTROUTING鏈。 此時源IP爲DIP,目標IP爲RIP
(d) POSTROUTING鏈根據最新封裝的IP報文,將數據包發至RS(因爲在外層封裝多了一層IP首部,所

以可以理解爲此時通過隧道傳輸)。 此時源IP爲DIP,目標IP爲RIP
(e)  RS接收到報文後發現是自己的IP地址,就將報文接收下來,拆除掉最外層的IP後,會發現裏面

還有一層IP首部,而且目標是自己的lo接口VIP,那麼此時RS開始處理此請求,處理完成之後,通過lo接口送給eth0網卡,然後向外傳遞。 此時的源IP地址爲VIP,目標IP爲CIP

(f) 響應報文最終送達至客戶端

 

 

LVS/Tun模型特點:

RIP、VIP、DIP全是公網地址

RS的網關不會也不可能指向DIP

所有的請求報文經由Director Server,但響應報文必須不能經過Director Server

不支持端口映射

RS的系統必須支持隧道

 

其實企業中最常用的是 DR 實現方式,而 NAT 配置上比較簡單和方便,後邊實踐中會總結 DR 和 NAT 具體使用配置過程。

 

 

LVS的八種調度算法:

  1、輪叫調度rr :

     這種算法是最簡單的,就是按依次循環的方式將請求調度到不同的服務器上,該算法最大的特點就是簡單。輪詢算法假設所有的服務器處理請求的能力都是一樣的,調度器會將所有的請求平均分配給每個真實服務器,不管後端 RS 配置和處理能力,非常均衡地分發下去

   2、加權輪叫wrr :

      這種算法比 rr 的算法多了一個權重的概念,可以給 RS 設置權重,權重越高,那麼分發的請求數越多,權重的取值範圍 0 – 100。主要是對rr算法的一種優化和補充, LVS 會考慮每臺服務器的性能,並給每臺服務器添加要給權值,如果服務器A的權值爲1,服務器B的權值爲2,則調度到服務器B的請求會是服務器A的2倍。權值越高的服務器,處理的請求越多

   3、最少鏈接lc :

      這個算法會根據後端 RS 的連接數來決定把請求分發給誰,比如 RS1 連接數比 RS2 連接數少,那麼請求就優先發給 RS1

   4、加權最少鏈接wlc :

      這個算法比lc多了一個權重的概念

   5、基於局部性的最少連接調度算法lblc :

      這個算法是請求數據包的目標 IP 地址的一種調度算法,該算法先根據請求的目標 IP 地址尋找最近的該目標 IP 地址所有使用的服務器,如果這臺服務器依然可用,並且有能力處理該請求,調度器會盡量選擇相同的服務器,否則會繼續選擇其它可行的服務器

   6、複雜的基於局部性最少的連接算法lblrc :

      記錄的不是要給目標IP與一臺服務器之間的連接記錄,它會維護一個目標IP與一組服務器之間的映射關係,防止單點服務器負載過高

   7、目標地址散列調度算法dh :

      該算法是根據目標 IP 地址通過散列函數將目標 IP 與服務器建立映射關係,出現服務器不可用或負載過高的情況下,發往該目標 IP 的請求會固定發給該服務器

   8、源地址散列調度算法sh :

      與目標地址散列調度算法類似,但它是根據源地址散列算法進行靜態分配固定的服務器資源

 

LVS無需安裝,安裝的是管理工具,第一種叫ipvsadm,第二種叫keepalived

 

 

LVS/NAT模式實踐:地址轉換

 

director       內網192.168.56.101    外網172.16.3.78

real server1    內網192.168.56.102    

real server2    內網192.168.56.103

 

 

在director上安裝ipvsadm:yum install ipvsadm -y

編寫vim /usr/local/sbin/lvs_nat.sh  腳本,內容如下:

#!/bin/bash

echo 1 > /proc/sys/net/ipv4/ip_forward   director服務器開啓路由轉發功能

echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects   關閉icmp的重定向,下面4行

echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/enp0s3/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/enp0s8/send_redirects

iptables -t nat -F   director設置nat防火牆,下面3行

iptables -t nat -X

iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -j MASQUERADE

IPVSADM='/sbin/ipvsadm'   director設置ipvsadm,下面3行

$IPVSADM -A -t 192.168.56.101:80 -s wrr   定義一個集羣服務

$IPVSADM -a -t 192.168.56.101:80 -r 192.168.56.102:80 -m -w 2   -w後的數字是權重

    #添加real server 並指派調度算法爲NAT

$IPVSADM -a -t 192.168.56.101:80 -r 192.168.56.103:80 -m -w 1   -w後的數字是權重

    #添加real server 並指派調度算法爲NAT

也可以不寫腳本,一條一條的命令實現!

 

保存,在Director上執行腳本就可以完成lvs/nat的配置

/bin/bash  /usr/local/sbin/lvs_nat.sh

查看ipvsadm設置的規則: ipvsadm  -ln

 

這裏real server端以httpd服務來做測試,也可以使用ngixn做測試!

real server1和real server2分別添加主頁/var/www/html/index.html,內容分別爲two和three;  

到此完成LVS/NAT集羣配置!

 

測試訪問http頁面:

 

清空LVS規則: ipvsadm -C

 

永久保存LVS規則以及刪除LVS規則後再恢復的命令:

   保存: 方法一:service  ipvsadm  save   針對centos6系列系統

          方法二:ipvsadm -S > /etc/sysconfig/ipvsadm.s1 保存LVS規則到此文件中

   恢復: ipvsadm -R < /etc/sysconfig/ipvsadm.s1

LVS/NAT模式服務控制部署一鍵完整腳本(只在Director服務器上執行):

腳本名:lvs-nat-director.sh

#!/bin/bash

# 

# chkconfig: - 88 12

# description: LVS script for VS/NAT

# . /etc/rc.d/init.d/functions # VIP=192.168.0.200

DIP=172.16.100.1

RIP1=172.16.100.10

RIP2=172.16.100.11# 

case "$1" in

start)           

 # /sbin/ifconfig eth1:0 $VIP netmask 255.255.255.0 up

# Since this is the Director we must be able to forward packets

  echo 1 > /proc/sys/net/ipv4/ip_forward

 # Clear all iptables rules.

  /sbin/iptables -F

 # Reset iptables counters.

  /sbin/iptables -Z

 # Clear all ipvsadm rules/services.

  /sbin/ipvsadm -C

 # Add an IP virtual service for VIP 192.168.0.219 port 80

# In this recipe, we will use the round-robin scheduling method.

# In production, however, you should use a weighted, dynamic scheduling method.

  /sbin/ipvsadm -A -t $VIP:80 -s rr

 # Now direct packets for this VIP to

# the real server IP (RIP) inside the cluster

  /sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -m

  /sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -m

  /bin/touch /var/lock/subsys/ipvsadm.lock

;;  

stop) # Stop forwarding packets

  echo 0 > /proc/sys/net/ipv4/ip_forward

 # Reset ipvsadm

  /sbin/ipvsadm -C

 # Bring down the VIP interface  ifconfig eth1:0 down

  rm -rf /var/lock/subsys/ipvsadm.lock

;;

status)

  [ -e /var/lock/subsys/ipvsadm.lock ] && echo "ipvs is running..." || echo "ipvsadm is stopped..."

;;

*)

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

;; esac

 

LVS-NAT一鍵安裝腳本(包括Director服務器端和real server端):

腳本名 lvs-nat-install

#!/bin/bash

# 一鍵安裝lvs-nat腳本,需要注意的是主機名稱和ip的變化稍作修改就可以了

HOSTNAME=`hostname`

Director='LVS'

VIP="192.168.0.200"

RIP1="172.16.100.10"

RIP2="172.16.100.11"

RealServer1="web1"

RealServer2="web2"

Httpd_config="/etc/httpd/conf/httpd.conf"

 #Director Server Install configure ipvsadm

if [ "$HOSTNAME" = "$Director" ];then

ipvsadm -C

yum -y remove ipvsadm

yum -y install ipvsadm

/sbin/ipvsadm -A -t $VIP:80 -s rr

/sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -m

/sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -m

 echo 1 > /proc/sys/net/ipv4/ip_forward

 echo "Install  $Director sucess "

fi

  

 #RealServer Install httpd

if [ "$HOSTNAME" = "$RealServer1" ];then   #第一臺realserver安裝httpd服務

yum -y remove httpd

rm -rf /var/www/html/index.html

yum -y install httpd

echo "web1 Allentuns.com" > /var/www/html/index.html

sed -i '/#ServerName www.example.com:80/a\ServerName localhost:80' $Httpd_config

service httpd start       #centos7系統使用systemctl啓動httpd服務

echo "Install $RealServer1 success "

fi

 if [ "$HOSTNAME" = "$RealServer2" ];then   #第二臺realserver安裝httpd服務

yum -y remove httpd

rm -rf /var/www/html/index.html

yum -y install httpd

echo "web2 Allentuns.com" > /var/www/html/index.html

sed -i '/#ServerName www.example.com:80/a\ServerName localhost:80' $Httpd_config

service httpd start       #centos7系統使用systemctl啓動httpd服務

echo "Install $RealServer2"  

echo "Install $RealServer1 success "

fi

總結:NAT模型的缺陷是,進出的每個數據包都要經過Director server,當集羣負載均衡過大的時候Director server將會成爲整個集羣系統的瓶頸

 

DR模型很好的解決了這個問題:DR模型在只有請求的時候纔會經過Director server,迴應的數據包由Real server直接響應用戶不需要經過Director server,最常用的也就是DR模型

 

 

 

 

LVS/DR模式實踐:直接路由,企業最常用LVS模式

 

director       內網192.168.56.101    vip 192.168.56.100  配置在enp0s8上  

real server    內網192.168.56.102    vip 192.168.56.100  配置lo:0上

real server    內網192.168.56.103    vip 192.168.56.100  配置lo:0上

 

兩臺real server上都安裝httpd或nginx服務

在Director上安裝ipvsadm : yum install ipvsadm -y

在Director上做如下配置:

ifconfig enp0s8:0 192.168.56.100 broadcast 192.168.56.100 netmask 255.255.255.0 up

route add -host 192.168.56.100 dev enp0s8:0 >> /etc/rc.local  加入開機啓動

echo " echo "1" > /proc/sys/net/ipv4/ip_forward " >> /etc/rc.local  加入開機啓動  

iptables -F   清空防火牆規則

iptables -Z

ipvsadm -C    清空ipvsadm規則

ipvsadm -A -t 192.168.56.100:80 -s wlc

ipvsadm -a -t 192.168.56.100:80 -r 192.168.56.102 -g -w 1

ipvsadm -a -t 192.168.56.100:80 -r 192.168.56.103 -g -w 2

touch /var/lock/subsys/ipvsadm &> /dev/null

 

問題解決:配置ipvsadm 時若出現“Memory allocation problem”提示,則多清除下防火牆iptables -L和多執行sync

 

在所有real server上做如下配置:限制arp_ignore和arp_announce

  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

將上述4條命令,添加到/etc/rc.local文件裏使其開機自動生效

  ifconfig lo:0 192.168.56.100 broadcast 192.168.56.100 netmask 255.255.255.255 up

  echo "route add -host 192.168.56.100 dev lo:0" >> /etc/rc.local

  只能在lo接口上做配置,其他的網口都不行

  要是網卡配置永久生效,需要寫入ifcfg-lo:0文件

  

 

具體實現腳本如下:

Director端腳本: Director.sh

#!/bin/bash

# LVS script for VS/DR

# . /etc/rc.d/init.d/functions # VIP=192.168.56.100 

RIP1=192.168.56.102

RIP2=192.168.56.103

PORT=80

 #case "$1" in

start)

  /sbin/ifconfig enp0s8:0 $VIP broadcast $VIP netmask 255.255.255.255 up

  /sbin/route add -host $VIP dev enp0s8:0

 # Since this is the Director we must be able to forward packets

  echo 1 > /proc/sys/net/ipv4/ip_forward

 # Clear all iptables rules.

  /sbin/iptables -F

 # Reset iptables counters.

  /sbin/iptables -Z

 # Clear all ipvsadm rules/services.

  /sbin/ipvsadm -C

 # Add an IP virtual service for VIP 192.168.56.100 port 80

# In this recipe, we will use the round-robin scheduling method.

# In production, however, you should use a weighted, dynamic scheduling method.

  /sbin/ipvsadm -A -t $VIP:80 -s wlc

 # Now direct packets for this VIP to

# the real server IP (RIP) inside the cluster

  /sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -g -w 1

  /sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -g -w 2

  /bin/touch /var/lock/subsys/ipvsadm &> /dev/null

;;

stop) # Stop forwarding packets

  echo 0 > /proc/sys/net/ipv4/ip_forward

 # Reset ipvsadm

  /sbin/ipvsadm -C

 # Bring down the VIP interface

  /sbin/ifconfig enp0s8:0 down

  /sbin/route del $VIP

  /bin/rm -f /var/lock/subsys/ipvsadm

  echo "ipvs is stopped..."

;;

status)

  if [ ! -e /var/lock/subsys/ipvsadm ]; then

    echo "ipvsadm is stopped ..."

  else

    echo "ipvs is running ..."

    ipvsadm -L -n

  fi

;; *)

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

;; esac

 

Realr Server端腳本: Realserver.sh

#!/bin/bash

# Script to start LVS DR real server.

# description: LVS DR real server

# .  /etc/rc.d/init.d/functions  

VIP=192.168.56.100

host=`/bin/hostname`

 case "$1" in

start)

       # Start LVS-DR real server on this machine.

        /sbin/ifconfig lo down

        /sbin/ifconfig lo up

        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

        /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up

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

;;

stop)

        # Stop LVS-DR real server loopback device(s).

        /sbin/ifconfig lo:0 down

        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

;;

status)

        # Status of LVS-DR real server.

        islothere=`/sbin/ifconfig lo:0 | grep $VIP`

        isrothere=`netstat -rn | grep "lo:0" | grep $VIP`

        if [ ! "$islothere" -o ! "isrothere" ];then

            # Either the route or the lo:0 device not found.   

echo "LVS-DR real server Stopped."

        else

            echo "LVS-DR real server Running."

        fi

;; *)

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

            exit 1

;; esac

同樣執行測試: curl http://192.168.56.100/index.html

注意:在 DR 模式下,2臺 rs 節點的 gateway 不需要設置成 dir 節點的 IP 

 

 

LVS/TUN模式實踐: 隧道

 

缺點:需要所有的服務器支持"IP Tunneling"(IP Encapsulation)協議

 

 

LVS的健康狀態檢查腳本:

在LVS模型中,director不負責檢查RS的健康狀況,這就使得當有的RS出故障了,director還會將服務請求派發至此服務器,避免這種情況的發生

腳本名:check-lvs-health.sh

#!/bin/bash

# VIP=172.16.100.100

CPORT=80

FAIL_BACK=127.0.0.1

RS=("172.16.100.10" "172.16.100.11")

declare -a RSSTATUS

RW=("2" "1")

RPORT=80

TYPE=g

CHKLOOP=3

LOG=/var/log/ipvsmonitor.log

addrs() {

ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2

[ $? -eq 0 ] && return 0 || return 1

}

delrs() {

ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT

[ $? -eq 0 ] && return 0 || return 1

}

checkrs() {  local I=1 while [ $I -le $CHKLOOP ]; do if curl --connect-timeout 1 http://$1 &> /dev/null; then return 0 fi let I++ done return 1

}

initstatus() {  local I local COUNT=0;for I in ${RS[*]}; do if ipvsadm -L -n | grep "$I:$RPORT" && > /dev/null ; then

RSSTATUS[$COUNT]=1else

RSSTATUS[$COUNT]=0

A++

Dir[0]=$A  fi let COUNT++

done

}

initstatus  while :; do let COUNT=0 for I in ${RS[*]}; do if checkrs $I; then if [ ${RSSTATUS[$COUNT]} -eq 0 ]; then

addrs $I ${RW[$COUNT]}

[ $? -eq 0 ] && RSSTATUS[$COUNT]=1 && echo "`date +'%F %H:%M:%S'`, $I is back." >> $LOG

fi else if [ ${RSSTATUS[$COUNT]} -eq 1 ]; then

delrs $I

[ $? -eq 0 ] && RSSTATUS[$COUNT]=0 && echo "`date +'%F %H:%M:%S'`, $I is gone." >> $LOG

fi fi

let COUNT++ done sleep 5 done

 

查看ipvsadm相關: 支持的負載均衡方式

grep -i "ip_vs" /boot/config-3.10.0-693.el7.x86_64

 

 

LVS三種負載均衡方法優缺點比較:

_

VS/NAT

VS/TUN

VS/DR

Server

any

Tunneling

Non-arp device

server network

private

LAN/WAN

LAN

server number

low (10~20)

High (100)

High (100)

server gateway

load balancer

own router

Own router

 

NAT模式的請求分發服務器會成爲這個模式的瓶頸所在,因爲所有請求與響應走要經過他轉發。

IP隧道模式與DR模式的區別在於,DR模式與IP隧道模式相比,DR模式沒有IP封裝的開銷,但由於採用物理層(修改MAC地址)技術,所有服務器都必須在同一個物理網段中

 

LVS中ifconfig命令配置的網卡只是臨時生效,要永久生效,必須寫成網卡文件,拷貝原網卡文件即可,保持MAC地址與原網卡文件一致

  cp  ifcfg-enp0s3  ifcfg-enp0s3:0

 

NAT模式就是把分發器(也就是Director)上的正常網卡配置一個子網卡,子網卡的IP就是要用到的VIP,然後將real server上的換回網卡配置一個子網卡lo:0,IP也是VIP

訪問real server上的網站時,用VIP訪問即可

 

 

健康檢查方法二: 使用keepalived結合

   LVS可以實現負載均衡,但是不能夠進行健康檢查,比如一個rs出現故障,LVS 仍然會把請求轉發給故障的rs服務器,這樣就會導致請求的無效性。keepalive 軟件可以進行健康檢查,而且能同時實現 LVS 的高可用性,解決 LVS 單點故障的問題,其實 keepalive 就是爲 LVS 而生的。

具體實現方法就是:  多加一臺Director,兩臺Director使用keepalived實現負載均衡和高可用,解決

Director的單點故障

keepalived的主從節點只有兩點不同:

state MASTER 和 state  BACKUP

priority  權重數值不同,主比備大

 

keepalived的配置文件內容如下:

global_defs {

   notification_email {

     [email protected]

   }

   notification_email_from [email protected]

   smtp_server localhost

   smtp_connect_timeout 30

   router_id master     #keepalived 服務器名稱,主寫master,備寫backup,或用服務器名字命名

}

 

vrrp_instance VI_1 {

    state MASTER        #若是備用keepalived,則填BACKUP

    interface enp0s8

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

       192.168.56.200     #虛IP,即VIP

    }

}

virtual_server 192.168.56.200 80 {    #虛IP即VIP,80是web服務的端口

    delay_loop 6

    lb_algo wrr

    lb_kind DR

    persistence_timeout 50

    protocol TCP

 

    #有幾個real server  下面就加幾次下面的段

    real_server 192.168.56.102 80 {   #IP是real server的IP即RIP,web服務可訪問的

        weight 1

        TCP_CHECK {

        connect_timeout 10

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    }

    real_server 192.168.56.103 80 {    #IP是real server的IP即RIP,web服務可訪問的

        weight 1

        TCP_CHECK {

        connect_timeout 10

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    }   

}

 

 

 

參考博文:http://www.cnblogs.com/liwei0526vip/p/6370103.html

          http://www.cnblogs.com/lixigang/p/5371815.html

          http://blog.51cto.com/467754239/1549699

本文相關服務和專有名詞定義

Director:負責調度集羣的主機;也簡稱調度器、分發器

VIP:Virtual IP 向外提供服務的IP;通常此IP綁定域名

DIP:與內部主機RIP通信的IP,在Director主機上

RIP:Real Server IP;內部真正提供服務的主機

CIP:客戶端IP

 

 

 

 

 

 

 

 

 

 

    

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章