Centos 6.2高性能負載均衡的實現

LVS的安裝配置
減輕服務器的壓力,是每個公司都想實現的,方法有很多種,可以用軟件實現,也可以用硬件實現,可對於一些中小型企業來說,承受不起硬件負載均衡帶來的負擔,所以就選擇了用軟件,本文介紹了用LVS+Keepalived來搭建一個實現高性能高可用負載均衡的環境。
一. LVS+Keepalived  介紹 
    1. LVS 
       LVS是Linux   Virtual   Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目在 1998 年 5 月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR ); 
八種調度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh )。 
    2. Keepalvied 
       Keepalived 在這裏主要用作 RealServer的健康狀態檢查LoadBalance主機和 
       BackUP 主機之間failover 的實現 
二.  網站負載均衡拓樸圖
 


IP信息表
LVS-DR-MASTER    192.168.2.117
LVS-DR-BACKUP    192.168.0.36
LVS-DR-VIP         192.168.2.121
WEB1-Realserver     192.168.2.116
WEB2-Realserver     192.168.2.119
GateWay            192.168.0.1
LVS-DR-VIP指的是虛擬IP地址,還可以叫做LVS集羣的服務IP,在DR、TUN模式中,數據包是直接返回給用戶的,所以,在Director Server上以及集羣的每個節點上都需要設置這個地址。此IP在Real Server上一般綁定在迴環地址上.
各個Real Server可以是在同一個網段內,也可以是相互獨立的網段,還可以是分佈在internet上的多個服務器.
三.   安裝LVS 和Keepalvied 軟件包
LVS安裝:yum –y install ipvsadm
Keepalived安裝:wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz
#tar zxvf keepalived-1.1.15.tar.gz 
#cd keepalived-1.1.15 
#./configure   && make && make install 
#find / -name keepalived     # 查看keepalived 位置 
 #cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ 
 #cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ 
#mkdir /etc/keepalived 
#cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ 
 #cp /usr/local/sbin/keepalived /usr/sbin/ 
 #service keepalived start|stop       #做成系統啓動服務方便管理.
四.  配置LVS 實現負載均衡
一、LVS-DR-MASTERS設置:
[root@localhost ~]#ifconfig eth0:0 192.168.2.121 broadcast 192.168.2.121 netmask 255.255.255.255 up
此處在eth0設備上綁定了一個虛擬設備eth0:0,同時設置了一個虛擬IP是192.168.2.121,也就是上面我們規劃的IP地址,然後指定廣播地址也爲192.168.2.121,需要特別注意的是,這裏的子網掩碼爲255.255.255.255。
然後給設備eth0:0指定一條路由,執行如下指令:
[root@localhost ~]#route add -host 192.168.2.121 dev eth0:0    
然後用ipvsadm來配置LVS
[root@localhost ~]# ipvsadm -A -t 192.168.2.121:80 -s rr -p 600
表示在內核的虛擬服務器列表中添加一條192.168.2.121的虛擬服務器記錄,並且指定此虛擬服務器的服務端口爲80,然後指定此虛擬服務器的調度策略爲輪詢調度,並且在每個real server上的持續服務時間爲600秒,即10分鐘
[root@localhost ~]# ipvsadm -a -t 192.168.2.121:80 -r 192.168.2.116:80 –g
[root@localhost ~]# ipvsadm -a -t 192.168.2.121:80 -r 192.168.2.119:80 –g
以上兩條設置表示在虛擬服務器192.168.2.121中添加兩條新的Real Server記錄,兩個Real Server的IP分別爲192.168.2.116和192.168.2.119,參數“-g”指定了虛擬服務器的工作模式爲直接路由模式,即DR模式。
然後開啓數據轉發功能 並且立即生效
[root@localhost ~]#echo "1" >/proc/sys/net/ipv4/ip_forward
[root@localhost ~]#sysctrl –p   
以上的操作可以用腳本來實現
Vim /usr/local/sbin/lvs-dr.sh
#!/bin/bash
GW=192.168.0.1
# website director vip.
SNS_VIP=192.168.2.121
SNS_RIP1=192.168.2.119
SNS_RIP2=192.168.2.116

logger $0 called with $1
case "$1" in
start)
  # set squid vip
  /sbin/ipvsadm --set 30 5 60
  /sbin/ifconfig eth0:0 $SNS_VIP broadcast $SNS_VIP netmask 255.255.255.255 up
  /sbin/route add -host $SNS_VIP dev eth0:0
  /sbin/ipvsadm -A -t $SNS_VIP:80 -s wrr -p 3
  /sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP1:80 -g -w 1
  /sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP2:80 -g -w 1
  touch /var/lock/subsys/ipvsadm >/dev/null 2>&1
  ;;
stop)
      /sbin/ipvsadm -C
      /sbin/ipvsadm -Z
      ifconfig eth0:0 down
      ifconfig eth0:1 down
      route del $SNS_VIP
      route del $SS_VIP
      rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1
      echo "ipvsadm stoped"
      ;;
status)
      if [ ! -e /var/lock/subsys/ipvsadm ];then
      echo "ipvsadm stoped"
      exit 1
      else
      echo "ipvsadm OK"
      fi
      ;;
*)
 echo "Usage: $0 {start|stop|status}"
 exit 1
esac
 exit 0
可以用以上腳本來啓動和關閉LVS,只需要./ lvs-dr.sh start就可以開啓LVS了
二、Realserver的設置
[root@localhost ~]#ifconfig lo:0 192.168.2.121 netmask 255.255.255.255 broadcast 192.168.2.121
在本地迴環接口上綁定了一個虛擬設備lo:0 設置一個IP爲192.168.2.121 掩碼爲255.255.255.255 
[root@localhost ~]#route add -host 192.168.2.121 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
以上是忽略arp請求,立即生效。
由於虛擬ip,也就是上面的LVS-DR-VIP(192.168.2.121)地址,是Director Server和所有的Real server共享的,如果有ARP請求VIP地址時,Director Server與所有Real server都做應答的話,就出現問題了,因此,需要禁止Real server響應ARP請求。
2臺WEB1-Realserver都做此配置
以上操作可以用如下腳本來操作:
Vim /usr/local/sbin/realserver.sh
!#/bin/bash
SNS_VIP=192.168.2.121

case "$1" in
start)
      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)
     ifconfig lo:0 down
      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
可以用以上腳本來啓動和關閉lo:0迴環接口上綁定的虛擬設備,只需要./realserver  start
五.利用Keepalvied 實現負載均衡和和高可用性 
1.配置在主負載均衡服務器上配置keepalived.conf 
#vi /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {
   notification_email {
#     [email protected]                  //報警的郵箱    
   }
#   notification_email_from [email protected]           //發送報警郵件的郵箱地址
#   smtp_server 192.168.200.1                     //提供郵件服務的服務器的IP
#   smtp_connect_timeout 30                      //郵件服務器連接超時的時間
#   router_id LVS_DEVEL                        //郵件的標記
}

vrrp_instance VI_1 {                             
    state MASTER             // #備份服務器上將MASTER 改爲BACKUP
    interface eth0
    virtual_router_id 51
    priority 100                //備份服務上將 100 改爲99
    advert_int 1
    authentication {
        auth_type PASS         //加密方式
        auth_pass 1111          //密碼,MASTER 和BACKUP必須一致
    }
    virtual_ipaddress {
        192.168.2.121           // #(如果有多個VIP,繼續換行填寫.)
    }
}

virtual_server 192.168.2.121 80 {         //虛擬服務器IP和端口
    delay_loop 6                     // #(每隔6 秒查詢realserver 狀態)
    lb_algo wrr                      // #(lvs 算法)
    lb_kind DR                      // #(Direct Route)模式
    nat_mask 255.255.255.255          //子網掩碼
    persistence_timeout 50      // #( 同一IP 的連接60 秒內被分配到同一臺realserver)
    protocol TCP                // #(用TCP 協議檢查realserver 狀態)

    real_server 192.168.2.116 80 {     //虛擬服務器下面的realserver的IP和端口
        weight 1                  //#(權重),越大被分配到的機率越大
        TCP_CHECK {
        connect_timeout 10          // #(10 秒無響應超時)
        nb_get_retry 3              //嘗試3次
        delay_before_retry 3         //每次間隔3秒
        connect_port 80             //連接端口
                }
     }
    real_server 192.168.2.119 80 {
        weight 1
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
                }
     }

}
2.   BACKUP服 務 器 同 上 配 置 ,先 安 裝 lvs再 按 裝  keepalived,  然 後 配 置 
/etc/keepalived/keepalived.conf,只需將紅色標示的部分改一下即可.
現在,在Master和backup上都運行腳本./lvs-dr.sh atsrt
在Master和backup上啓動keepalived。
在realserver都運行腳本./realserver.sh start
然後用ipvsadm –ln來查看集羣中的服務器
[root@localhost sbin]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.121:80 wrr persistent 3
  -> 192.168.2.116:80             Route   1      0          0         
  -> 192.168.2.119:80             Route   1      0          0      
這樣,當用戶訪問192.168.2.121的80端口的時候,就會被隨機分配到realserver其中的一臺上面,當realserver其中一臺宕機的話,LVS會自動把宕機的機器提出服務器羣集,當這臺宕機的服務器恢復正常的時候,LVS會自動把它加入服務器羣集中。
如果LVS-MASTER宕機的話,,LVS- BACKUP就會自動接管LVS-MASTER上運行的服務,當LVS-MASTER恢復正常的時候,LVS- BACKUP就會把運行的服務交給LVS-MASTER來運行。

發佈了12 篇原創文章 · 獲贊 5 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章