天天看點

[配置應用]LVS+keepalived負載均衡CentOS5.6環境下布署(32位)V2

系統環境:CentOS 5.6 32位(最小安裝) 架構圖如上圖

試過在64位時編譯會出錯,提示找不到一些核心庫檔案,檔案名稱含了64字樣的緣故,編譯有問題,逐一修改修改原安裝包很麻煩。還不知道會有其他未知BUG。

關鍵點:keepalived 是運作在LVS基礎上的,LVS 安裝ipvsadmin #yum install ipvsadmin (省去編譯版本配對問題)

很多朋友使用編譯安裝不成功,是由于ipvsadmin的版本跟你使用的linux核心不一緻。

首先請檢視自己 Linux 作業系統核心的版本   指令: uname -a    指令: cat /proc/version 指令:lsb_release -a

下面看我怎麼編譯安裝的。(linux應用中編譯安裝是我力薦)

下載下傳軟體ipvsadm

下載下傳後,安裝ipvsadmin

編譯時候報 make[1]: *** [libipvs.o] Error 1 錯誤

但是下了ipvsadm後編譯出了問題: 

解決辦法可能不隻一種;我是用的下面的辦法搞定的:

ln -s /usr/src/kernels/2.6.x-xx.EL-i686/ /usr/src/linux

cd ipvsadm-1.24

make && make install

ipvsadmin -v 應該能看到如下資訊:

[root@localhost ipvsadm-1.24]# ipvsadm -v

ipvsadm v1.24 2005/12/10 (compiled with popt and IPVS v1.2.0)

說明編譯安裝成功!

另外注意 keepalived 在Linux下的(VRRP)虛拟路由備援協定 ,keepalived采用VRRP機制,那麼就會涉及負載均衡伺服器連接配接的路由器(交換機)

VRRP協定将兩台或多台路由器裝置虛拟成一個裝置,對外提供虛拟路由器IP(一個或多個)。

實際使用中,如果你連接配接的使用的路由器是傻瓜型的話,可以忽略這個問題。

如果你用是智能路由器,設定了規則的話,那就要注意了,一些規則會将VRRP發出的狀态檢測包,當做病毒屏蔽掉,最後導緻的結果是keepalived    負載均衡器之間的失敗切換failover,是通過VRRPv2(Virtual Router Redundancy Protocol) stack實作的。 

還可能導緻不能檢測後端真實伺服器的存活狀态(檢測web伺服器的狀态)。

簡單知道

1.keepalived 通過對伺服器池對象的健康檢查,實作對失效機器/服務的故障隔離 (官方專用名詞“Checkers”負責真實伺服器的健康檢查healthchecking)

2.負載均衡器之間的失敗切換failover,是通過VRRPv2(Virtual Router Redundancy Protocol) stack實作的。

不就是(LVS-DR,LVS-NAT,LVS-TUN)3種模式!

VS/DR: 即(Virtual Server via Direct Routing) 

 也就是用直接路由技術實作虛拟伺服器。它的連接配接排程和管理與VS/NAT和VS/TUN中的一樣,但它的封包轉發方法又有不同,VS/DR通過改寫請求封包的MAC位址,将請求發送到Real Server,而Real Server将響應直接傳回給客戶,免去了VS/TUN中的IP隧道開銷。這種方式是三種負載排程機制中性能最高最好的,但是必須要求Director Server與Real Server都有一塊網卡連在同一實體網段上。

測試環境 :

lvs-master:192.168.9.201 (主)

lvs-backup:192.168.9.202 (備)

vip:192.168.9.200        (虛拟ip)

web1:192.168.9.203       (後端真實WEB伺服器1)

web2:192.168.9.204       (後端真實WEB伺服器2)

netmask:255.255.255.0    (掩碼)

gateway:192.168.9.1      (網關)

網絡拓撲:詳細見“LVS叢集的體系結構,建構強壯的體系結構裡負載均衡層、真實伺服器層、後端共享存儲層都是相輔相成”文章 如圖

echo "============================ 更新系統時間 ======================"

yum install -y ntp

ntpdate time.nist.gov

echo "00 01 * * * /usr/sbin/ntpdate time.nist.gov" /etc/crontab

echo “========================= 安裝ipvsadm、keepalived ==================”

[root@master ~]# cd /usr/local/src

[root@master ~]# ln -sv /usr/src/kernels/2.6.18-194.el5-i686/ /usr/src/linux

[root@master ~]# tar -zxvf ipvsadm-1.24.tar.gz

[root@master ~]# cd ipvsadm-1.24

[root@master ~]# make;make install

[root@master ~]# cd ..

[root@master ~]# tar -zxvf keepalived-1.1.17.tar.gz

[root@master ~]# cd keepalived-1.1.17

[root@master ~]# ./configure

configure: error:

  !!! OpenSSL is not properly installed on your system. !!!

  !!! Can not include OpenSSL headers files.

解決辦法:

[root@master ~]# yum -y install openssl-devel

[root@master ~]# ./configure 

編譯的時候出現這個提示,說明keepalived和核心結合了,如果不是這樣的,需要加上這個參數./configure --with-kernel-dir=/kernel/path

Keepalived configuration

------------------------

Keepalived version       : 1.1.17

Compiler                 : gcc

Compiler flags           : -g -O2

Extra Lib                : -lpopt -lssl -lcrypto 

Use IPVS Framework       : Yes

IPVS sync daemon support : Yes

Use VRRP Framework       : Yes

Use LinkWatch            : No

Use Debug flags          : No

echo “======================= 配置keepalived ===========================”

[root@master ~]#  cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/

[root@master ~]#  cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

[root@master ~]#  mkdir /etc/keepalived

[root@master ~]#  cp /usr/local/sbin/keepalived /usr/sbin/

[root@master ~]# vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

   notification_email {

      [email protected]

   }

   notification_email_from [email protected]  #http://jimmyli.blog.51cto.com/

   smtp_server jimmyli.blog.51cto.com

  # smtp_connect_timeout 30

   router_id LVS_DEVEL

}

# VIP1

vrrp_instance VI_1 {

    state MASTER             #備份伺服器上将MASTER改為BACKUP   

    interface eth0

    lvs_sync_daemon_inteface eth0

    virtual_router_id 51

    priority 100    # 備份服務上将100改為90

    advert_int 5

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.9.200   

        #(如果有多個VIP,繼續換行填寫.)

virtual_server 192.168.9.200 80 {

    delay_loop 6                  #(每隔6秒查詢realserver狀态)

    lb_algo wlc                  #(lvs 算法)

    lb_kind DR                  #(Direct Route)

    persistence_timeout 60        #(同一IP的連接配接60秒内被配置設定到同一台realserver)

    protocol TCP                #(用TCP協定檢查realserver狀态)

    real_server 192.168.9.203 80 {

        weight 100               #(權重)

        TCP_CHECK {

        connect_timeout 10       #(10秒無響應逾時)

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    real_server 192.168.9.204 80 {

        weight 100

        connect_timeout 10

     }

[root@master ~]#  service keepalived start|stop

[root@master ~]# chkconfig –level 2345 keepalived on

echo “====================== 配置realserver =========================”

[root@web_1 ~]# vi /root/lvs_real.sh

#!/bin/bash

#http://jimmyli.blog.51cto.com/

#Config realserver

SNS_VIP=192.168.9.200

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

case "$1" in

start)

       /sbin/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)

       /sbin/ifconfig lo:0 down

       /sbin/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 1

esac

exit 0

[root@web_1 ~]# chmod +x /roo/lvs_real.sh

[root@web_1 ~]# /root/lvs_real.sh start

[root@web_1 ~]# ifconfig

[root@web_1 ~]# echo “/root/lvs_real.sh start” >> /etc/rc.local

echo “===================== 測試LVS+keepalived ========================”

#LVS_master、LVS_backup上開啟keepalived,LVS_master先綁定VIP

LVS_master:

LVS_backup:

#解析域名,測試通路

#測試關閉LVS_master,短暫的掉包後,LVS_backup馬上接替工作

LVS_backup接替LVS_master綁定VIP

LVS_backup負責轉發

LVS_master重新開機完成後,就會自動接回控制權,繼續負責轉發

#測試關閉其中一台realserver

通過上面測試可以知道,當realserver故障或者無法提供服務時,負載均衡器通過健康檢查自動把失效的機器從轉發隊列删除掉,實作故障隔離,保證使用者的通路不受影響

#重新開機被關閉的realserver

當realserver故障恢複後,負載均衡器通過健康檢查自動把恢複後的機器添加到轉發隊列中

實際生産環境中,keepalived是非常穩定的,并且能夠承受巨量并發數。

文章中沒有涉及到後端真實伺服器的架構配置,我認為一個完整的高性能WEB架構應該,後端也是重中之重的,完整的一部分,必備可少。歡迎朋友一起交流,讨論。扣扣:柒⑥柒陸叁⑤叁伍

     本文轉自jimmy_lixw 51CTO部落格,原文連結:http://blog.51cto.com/jimmyli/601701,如需轉載請自行聯系原作者