LVS的高可用(keepalived)和實現(VS/DR)負載均衡

一、LVS的基礎知識

1、LVS出現的背景

Internet的快速增長使多媒體網絡服務器面對的訪問數量快速增加,服務器需要具備提供大量併發訪問服務的能力,因此對於大負載的服務器來 講,CPU、I/O處理能力很快會成爲瓶頸。由於單臺服務器的性能總是有限的,簡單的提高硬件性能並不能真正解決這個問題。爲此,必須採用多服務器和負載 均衡技術才能滿足大量併發訪問的需要。

2、LVS的概念

LVSLinux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。使用集羣技術和Linux操作系統實現一個高性能、高可用的服務器

3、LVS的包轉發策略

  1. NAT (Network Address Translation)模式。LB收到用戶請求包後,LB將請求包中虛擬服務器的IP地址轉換爲某個選定RS的IP地址,轉發給RS;RS將應答包發給LB,LB將應答包中RS的IP轉爲虛擬服務器的IP地址,回送給用戶。
  2. IP隧道 (IP Tunneling)模式。LB收到用戶請求包後,根據IP隧道協議封裝該包,然後傳給某個選定的RS;RS解出請求信息,直接將應答內容傳給用戶。此時要求RS和LB都要支持IP隧道協議。
  3. DR(Direct Routing)模式。LB收到請求包後,將請求包中目標MAC地址轉換爲某個選定RS的MAC地址後將包轉發出去,RS收到請求包後,可直接將應答內容傳給用戶。此時要求LB和所有RS都必須在一個物理段內,且LB與RS羣共享一個虛擬IP。

二、DR模式的LVS

DR模式下調度器和服務器組都必須在物理上有一個網卡通過不分段的局域網相連,即通過交換機或者高速的HUB相連,中間沒有隔有路由器。VIP地址爲調度 器和服務器組共享,調度器配置的VIP地址是對外可見的,用於接收虛擬服務的請求報文;所有的服務器把VIP地址配置在各自的Non-ARP網絡設備上, 它對外面是不可見的,只是用於處理目標地址爲VIP的網絡請求。

這裏寫圖片描述

二、IP虛擬機服務器軟件IPVS

1、IPVS軟件實現了三種IP負載均衡技術:

[1].VS/NAT
通過網絡地址轉換,調度器重寫請求報文的目標地址,根據預設的調度算法,將請求分派給後端的真實服務器;真實服務器的響應報文通過調度器時,報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。
[2].VS/TUN
採用NAT技術時,由於請求和響應報文都必須經過調度器地址重寫,當客戶請求越來越多時,調度器的處理能力將成爲瓶頸。爲了解決這個問題,調度器把請求報 文通過IP隧道轉發至真實服務器,而真實服務器將響應直接返回給客戶,所以調度器只處理請求報文。由於一般網絡服務應答比請求報文大許多,採用 VS/TUN技術後,集羣系統的最大吞吐量可以提高10倍。
[3].VS/DR
VS/DR通過改寫請求報文的MAC地址,將請求發送到真實服務器,而真實服務器將響應直接返回給客戶。同VS/TUN技術一樣,VS/DR技術可極大地 提高集羣系統的伸縮性。這種方法沒有IP隧道的開銷,對集羣中的真實服務器也沒有必須支持IP隧道協議的要求,但是要求調度器與真實服務器都有一塊網卡連 在同一物理網段上。

2、搭建DR模式的LVS

server2:調度器

1)配置高可用的yum源

查看完整的yum源 cd /var/www/html/rhel6.5

2)在server2上配置yum源

[root@server1 ~]# vim  /etc/yum.repos.d/rhel-source.repo
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.7.250/source6.5
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.7.250/source6.5/HighAvailability
enabled=1
gpgcheck=0
[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.7.250/source6.5/LoadBalancer
enabled=1
gpgcheck=0

3)安裝管理集羣服務ipvsadm(調度器)

[root@server2 varnish]# yum install ipvsadm -y
4)添加IP

[root@server2 ~]# ip addr add 172.25.66.100/24 dev eth0

5)設置LVS的vip,vip添加RS地址,並設置爲DR模式

[root@server2 ~]# ipvsadm -A -t 172.25.66.100:80 -s rr
  -A 增加一臺虛擬設備
  -t --tcp-service  service-address
  -s scheduler   
  rr 輪詢算法

6)添加後端實際服務器

[root@server2 ~]# ipvsadm -a -t 172.25.66.100:80 -r 172.25.66.3:80 -g    #將ip爲172.25.66.3添加爲調度器的服務器
[root@server2 ~]# ipvsadm -a -t 172.25.66.100:80 -r 172.25.66.4:80 -g    #將ip爲172.25.66.4添加爲調度器的服務器

查詢ipvsadm狀態

7)保存策略

[root@server2 ~]# /etc/init.d/ipvsadm save
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [  OK  ]

7)在真機中測試
完成以上步驟,在真機中測試只可能不能訪問到網頁。

第一步:查看ipvsadm主機是否接收到了請求,若是接收到了

第二步:查看服務虛擬機是否有迴應(打開服務虛擬機的httpd服務,添加ip)

出現的錯誤可能有兩個

1、服務虛擬機的httpd服務沒有打開

2、服務虛擬機沒有添加vip

3、若一切都準備好。會出現以下結果

如果綁定的MAC地址是sever2或sever3的,那麼我們會發現,在測試端根本不會形成輪叫,而是直接去了MAC綁定的後端服務器

8)在server2和server3中下載yum install -y arptables_jf,防止在物理機中測試時直接訪問server2和server3

[root@server3 ~]# yum install -y arptables_jf

9)設置arp抑制

##對input進行拒絕
[root@server2 ~]# arptables -A IN -d 172.25.7.100 -j DROP
##對output進行僞裝
[root@server2 ~]# arptables -A OUT -s 172.25.7.100 -j mangle --mangle-ip-s 172.25.7.2
[root@server2 ~]# /etc/init.d/arptables_jf save

 

測試:

負載均衡:

總結:DR實現負載均衡的流程如下:

DR: client ->VS ->RS ->client

三、DR模式下LVS的健康檢查

1)安裝軟件ldirectord-3.9.5-3.1.x86_64.rpm用來對後端服務器作健康檢查

 yum install ldirectord-3.9.5-3.1.x86_64.rpm -y

2)查看配置文件(rpm -ql ldirectord)

[root@server2 ~]# cp  /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
[root@server2 ~]# cd  /etc/ha.d/
[root@server2 ha.d]# ls
ldirectord.cf  resource.d  shellfuncs
[root@server2 ha.d]# vim  ldirectord.cf 

3)開啓健康檢查服務:

[root@server2 ha.d]# /etc/init.d/ldirectord start

4)清除之前的後端服務器策略 ipvsadm -C

5)編寫本機的Apach默認發佈文件

vim /var/www/html/index.html
<h1>網站正在維護...</h1>

6)關掉server3和server4的httpd,在物理主機則是curl 172.25.66.100

四、高可用集羣(keepalived)管理

1)源碼安裝Keepalived(安裝地址:http://www.keepalived.org/download.html)

[root@server2 ~]# /etc/init.d/ldirectord stop#由於ldirectord與Keepalived衝突,必須將ldirectord
[root@server2 ~]# chkconfig  ldirectord off    #由於ldirectord開機自啓,所以也要將開機自啓動關掉
[root@server1 ~]# yum  install libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm -y
[root@server1 ~]# tar  zxf  keepalived-2.0.6.tar.gz #對安裝包進行解壓
[root@server1 ~]# cd  keepalived-2.0.6

 源碼安裝三部曲:

[root@server2 keepalived-2.0.6]# ./configure --with-init=SYSV --prefix=/usr/local/keepalived
[root@server2 keepalived-2.0.6]# make 
[root@server2 keepalived-2.0.6]# make install

生成軟連接方便Keepalived的管理與設置,並給他的腳本加可執行權限

cd /usr/local/keepalived/etc/rc.d/init.d/
chmod +x keepalived
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/keepalived /etc/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/

2)將server2中源碼編譯好的keepalived發送給server5,在server5中同樣製作軟連接:

scp -r /usr/local/keepalived/ server4:/usr/local/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/

3)修改server2的keepalived配置文件:

[root@server2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {    #全局定義塊
   notification_email {    #郵件通知
        root@localhost
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
#VRRPD配置
vrrp_instance VI_1 {
    state MASTER     # 指定該節點爲主節點,備用節點設置爲BACKUP
    interface eth0    #綁定虛擬IP的網絡接口
    virtual_router_id 66     #設置驗證信息,兩個節點需一致
    priority 100        # 主節點的優先級,數值在1~254,注意從節點必須比主節點的優先級別低
    advert_int 1        #組播信息發送間隔,兩個節點需一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.66.100    #指定虛擬IP,兩個節點需設置一樣
    }
}
#虛擬服務配置
virtual_server 172.25.66.100 80 {
    delay_loop 6    #指定檢查間隔
    lb_algo rr     #指定lvs算法
    lb_kind NAT    #指定lvs模式爲DR
    #persistence_timeout 50   #持久連接設置,會話保持時間,在此處需要註釋 
    protocol TCP    #指定轉發協議爲TCP協議

    real_server 172.25.66.3 80  {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
    real_server 172.25.66.4 80  {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

4、開啓keepalived

[root@server2 ~]# /etc/init.d/keepalived start

5、將配置好的keepalived文件發送給備機(server5),將MASTER改成BACKUP

[root@server2 local]# scp -r keepalived/ server5:/usr/local/

6、在server5上的操作

ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/keepalived /etc/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/

7、修改keepalived配置文件

[root@server5 keepalived]# vim  keepalived.conf 
vrrp_instance VI_1 {
    state BACKUP  ##狀態爲備用
    interface eth0
    virtual_router_id 7
    priority 50   ##修改優先級50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.7.100
    }
}
[root@server5 keepalived]# /etc/init.d/keepalived start

這裏寫圖片描述這裏寫圖片描述

當server1掛掉之後這裏寫圖片描述

 

 

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