LVS配置文檔

LVS+Heartbeat實現高可用負載平衡羣集

 

 

 

LVS Master

 

IP172.16.0.5

IP:  192.168.1.1

 

VIP172.16.0.111

LVS Slave

 

IP172.16.0.6

IP:  192.168.1.2

 

WEB1

 

IP172.16.0.10

 

VIP172.16.0.111

WEB2

IP:172.16.0.20

VIP:172.16.0.111

工作原理:
當客戶當訪問網站的時候,會訪問VIP所在的調度器LVS Master(當Master掛掉,訪問Slave),LVS MasterSlave)會根據算法選擇合適的WEB服務器,隨後將請求包中的目的MAC改寫爲目的服務器的MAC,並將此包(單播,多播,廣播)給服務器(服務器上面設定了和LVS一樣的VIP,但是由於不進行ARP解析,所以不會產生IP地址衝突問題),服務器接收到請求後,經過處理將結果直接返回給客戶機,而不再經過LVS調度器。

軟件包需求:
yum   -y  install   ipvsadm
yum   -y  install   heartbeat*
yum   -y  install   heartbeat

LVS Master 上面編寫所需腳本:
Vim  /opt/vip.sh
#!/bin/bash
#設置腳本所需變量
vip=172.16.0.111
lvs_1=172.16.0.5
web1=172.16.0.10
web2=172.16.0.20
ip=/sbin/ifconfig
ipv=/sbin/ipvsadm
ips=/sbin/ipvsadm-save
ro=/sbin/route
path=/etc/sysconfig/ipvsadm
mask=255.255.255.255
#利用case語句編寫腳本
case $1 in
    start)
#配置vip
$ip eth0:1 $vip broadcast $vip netmask $mask
#添加路由
$ro add -host $vip dev eth0:1
#以輪轉算法開啓服務,並設置連接保持時間爲600s
#-A:添加服務,-ttcp協議, -s rr:設置輪轉算法, -p:設置保持時間
$ipv -A -t $vip:80 -s rr -p 600
#DR模式添加負載均衡服務器
#-a添加服務器, -ttcp協議, -rroute -gDR模式, -iTUN -mNAT
$ipv -a -t $vip:80 -r $web1:80 -g
$ipv -a -t $vip:80 -r $web2:80 –g
#儲存ipvsadm配置
$ips $path
echo "Start OK!!!"
    ;;
    stop)
#清空ipvsadm設置
$ipv –C
#刪除路由
$ro del -host $vip dev eth0:1
echo "Stop OK!!!"
    ;;
    *)
echo "If you want to use this script,Please enter start or stop "
exit 1
esac
#爲腳本添加可執行權限
chmod +x /opt/vip.sh


在web服務器上編寫腳本:
Vim /opt/vip.sh
#!/bin/bash
#設置環境所需變量
vip=172.16.0.111
web1=172.16.0.10
case $1 in
    start)
#設置網卡ipvip和路由
/sbin/ifconfig eth0 $web1
/sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255
/sbin/route add -host $vip dev lo:0
#關閉arp響應
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
echo "start OK"
    ;;
    stop)
#開始arp響應
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
/sbin/route del -host $vip dev lo:0
echo "Stop OK"
    ;;
    *)
echo "If you want to use this script,Please enter start or stop"
    ;;
esac
#爲腳本添加可執行權限
chmod +x /opt/web1.sh

 

 

 

編寫web2所需腳本
Vim /opt/vip.sh
#!/bin/bash
#設置環境所需變量
vip=172.16.0.111
web2=172.16.0.20
case $1 in
    start)
#設置網卡ipvip和路由
/sbin/ifconfig eth0 $web2
/sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255
/sbin/route add -host $vip dev lo:0
#關閉arp響應
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
echo "start OK"
    ;;
    stop)
#開始arp響應
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
/sbin/route del -host $vip dev lo:0
echo "Stop OK"
    ;;
    *)
echo "If you want to use this script,Please enter start or stop"
    ;;
esac
#爲腳本添加可執行權限
chmod +x /opt/web1.sh


複製ha.cfharesourcesauthkeysldirectord.cf等配置文件:
rpm   -q   heartbeat  -d                        #查找配置文件所在位置
[root@localhost ~]# cp -a /usr/share/doc/heartbeat-2.1.3/ha.cf /etc/ha.d/
[root@localhost ~]# cp -a /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d/
[root@localhost ~]# cp -a /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d/
[root@localhost ~]# find /  -name ldirectord.cf/etc/ha.d/ldirectord.cf
[root@localhost ~]# cp -a /usr/share/doc/heartbeat-ldirectord-2.1.3/ldirectord.cf
/etc/ha.d/

ha.cf 配置:
debugfile /var/log/ha-debug      #debug日誌路徑             #
logfile    /var/log/ha-log       #heartbeat日誌路徑
logfacility   local0
keepalive 2                      #心跳檢測時間間隔
#initdead 120                    #指定heartbeat首次啓動時的死亡時間
deadtime 20                      #心跳死亡時間
warntime 10                      #心跳延遲時間
udpport    694                      #heartbeat監聽端口
#baud  19200                     #串口通訊波特率
ucast eth1 192.168.1.2           #採用單播來通知心跳,Ip地址爲對端Ip
auto_failback on                 #主節點重新啓動後是否主動拿回資源
#watchdog /dev/watchdog          #需要softdog支持,系統故障1分鐘後自動重啓
node   lvs_1                     #主調度器主機名與uname –n必須一致
node   lvs_2                     #輔調度器主機名與uname n必須一致
ping 172.16.0.1                  #檢測服務器是否正常

haresources 配置:
lvs_1 IPaddr::172.16.0.111/32 ldirectord::ldirectord.cf
lvs_1:  主調度器主機名
172.16.0.111 vip
lidrectord.cflidrectord文件名稱

authkeys設置:
auth 3
#1 crc
#2 sha1 HI!
3 md5 Hello!
#123表示認證算法,這裏啓用了md5算法
#修改完authkeys文件必須將文件權限修改爲600

 

ldirectord.cf配置:
checktimeout=3                            #服務器超時時間checkinterval=1                           #檢測服務器的間隔時間fallback=127.0.0.1:80                     #當服務器全部掛掉後重定向的地址autoreload=yes                            #修改ldirectord.cf後自動加載quiescent=yes                             #virtual=172.16.0.111:80                  #vip和端口
        real=172.16.0.10:80 gate          #web服務器地址和端口,gate代表DR
        real=172.16.0.20:80 gate          #web服務器地址和端口,gate代表DR
        fallback=127.0.0.1:80 gate        #如果服務器全部掛掉重定向到本機
        service=http                      #服務類型爲http
        request="haha.html"               #檢測服務器時用到的文件名
        receive="Test Page"               #檢測服務器時文件中的內容
        virtualhost=some.domain.com.au
        scheduler=rr                      #啓用輪叫調度算法
        persistent=600                    #連接保持時間
        #netmask=255.255.255.255
        protocol=tcp                      #協議類型
        checktype=negotiate               #調度器檢測服務器的類型
        checkport=80                      #指定監聽端口
#需要在服務器的網頁文件主目錄中創建haha.html文件內容爲Test Page 用於調度器檢測服務器是否存在

 

修改主機名和/etc/hosts文件:
vim /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=lvs_1

vim /etc/hosts
172.16.0.5      lvs_1
172.16.0.6      lvs_2
#LVS Slave LVS Master 一樣修改只是主機名需要改爲lvs_2

lvs上面啓動服務:
[root@lvs_1 ~]# export LANGUAGE=C       #如果不更改編碼啓動ldirectord會報錯[root@lvs_1 ~]# export LC_ALL=C         #最好還是定義到/etc/profile文件中
[root@lvs_1 ~]# service heartbeat start
[root@lvs_1 ~]# /etc/ha.d/resource.d/ldirectord star

web服務器上面啓動服務:
[root@lvs_1 ~]# Service httpd start

lvs_1上面查看LVS狀態:
[root@lvs_1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.0.111:80 rr persistent 600
  -> 172.16.0.20:80               Route   1      0          0
  -> 172.16.0.10:80               Route   1      0          0
#發現兩個web服務器權重都爲1,說明正常

停掉lvs_1查看lvs_2是否能夠正常切換:
[root@lvs_2 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.0.111:80 rr persistent 600
  -> 172.16.0.20:80               Route   1      0          0
  -> 172.16.0.10:80               Route   1      0          0
#發現lvs_2可以自動切換,說明lvs配置沒有問題

最後檢測lvs_1重新啓動後,能否奪回資源:
[root@lvs_1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.0.111:80 rr persistent 600
  -> 172.16.0.20:80               Route   1      0          0
  -> 172.16.0.10:80               Route   1      0          0






 


 

 


 


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