一、概述
1.1、背景
随着網站業務量的增長網站的伺服器壓力越來越大,需要負載均衡方案,而商業的硬體如F5成本高,為了節省不必要的浪費,同時實作商業硬體一樣的高性能高可用的功能,我們可以利用LVS+Keepalived基于完整開源軟體的架構提供一個負載均衡及高可用的伺服器。
1.2、LVS+Keepalived介紹
LVS: Linux Virtual Server的簡寫,意即Linux虛拟伺服器,是一個虛拟的伺服器叢集系統。本項目在1998年5月由章文嵩博士成立,是中國國内最早出現的自由軟體項目之一。目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR):
目前有十種排程算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq),上次實驗是采用的VS/DR方法并帶有主備模式LVS,排程算法用的wrr.兩台WEB通vip經lvs(主備)排程實作業務分發負載均衡。
Keepalived在這裡主要用作RealServer的健康狀态檢查以及LoadBalance主機和BackUP主機之間failover的實作.
以下實驗是在隻用兩台的情況下,實作WEB負載均衡的方法
二、安裝前環境和準備
2.1、實驗說明
主LVS_master,WEB1: 192.168.6.14
備LVS_backeup,WEB2:192.168.6.247
對外VIP:192.168.6.201
2.2、系統環境
作業系統64位centos 6.0,
核心:2.6.32-220.el6.x86_64
4台作業系統均為centos 6.0,并配有yum環境.
2.3、安裝前準備
2.3.1、下載下傳popt-static
http://mirror.centos.org/centos/6/os/x86_64/Packages/popt-static-1.13-7.el6.x86_64.rpm
我在安裝過程碰到些報錯,下載下傳該包問題解決,下載下傳以下包時根據系統核心确定其版本。
2.3.2、下載下傳keepalived
http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
2.3.3、下載下傳ipvsadm
http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
2.3.4、加載ip_vs子產品(重要)
檢視核心uname–r,加載子產品,modprobe ip_vs,檢查lsmod | grep ip_vs
三、Director Server安裝
3.1、LVS_Master安裝(192.168.6.14)
3.1.1、安裝依賴包
#yum -y install kernel-devel make gccopenssl-devel libnl* popt*
我這用的yum安裝,大多情況實際下不一定有網絡,手動去下載下傳相關包或從安裝包中找到相關。
3.1.2、安裝popt-static
#rpm -ivh popt-static-1.13-7.el6.x86_64.rpm
3.1.3、安裝ipvsadm
# ln -s /usr/src/kernels/2.6.32-71.el6.x86_64/usr/src/linux
# tar -zxvfipvsadm-1.26.tar.gz -C /usr/src/
# cd /usr/src/ipvsadm-1.26/
# make
# make install
3.1.3、安裝keepalived
# tar -zxvfkeepalived-1.2.2.tar.gz -C /usr/src/
# cd /usr/src/keepalived-1.2.2/
# ./configure
#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/
3.1.4、配置keepalived.conf
# vi /etc/keepalived/keepalived.conf//内容如下
3.1.5、開啟負載伺服器路由機制(IP轉發)
vi /etc/sysctl.conf 保證有如下内容
net.ipv4.ip_forward = 1
3.1.6、建立負載伺服器啟動腳本
vi /usr/local/bin/lvsdr.sh 加入如下内容
3.1.7、測試負載伺服器啟動腳本
#Chmod +x /usr/local/bin/lvsdr.sh
#Chomd 775 /usr/local/bin/lvsdr.sh
執行測試
#/usr/local/bin/lvsdr.shstart
檢視ifconfig是否有ifcfg-eth0:1 (有就對了)
檢視route -n 路由表是否多了eth0:1路由(有就對了)
[root@host1 ~]/usr/local/bin/lvsdr.sh stop
檢視ifconfig是否有ifcfg-eth0:1 (無就對了)
檢視route -n 路由表是否多了eth0:1路由(無就對了)
[root@host1 ~]/usr/local/bin/lvsdr.sh adsa
是否提示參數錯誤,隻能使用{start|stop}。
3.1.8、安裝啟動回環位址腳本
要是用lvs的dr模式,必須在realserver上啟動回環位址,是以,搭建兩台機器的負載均衡,當然就得在本機也啟動相應的回環位址,才能實作所要的功能,腳本如下
vi /usr/local/bin/startlo
給其執行chmod+x/usr/local/bin/startlo
3.1.9、安裝檢測啟動回環位址腳本
但由于keepalived不像heartbeat裡有ldirectord來控制回環位址的啟動和停止,是以我們需要人為的判斷應該在哪台機器上啟動回環位址,是以就得使用下面的一個腳本判斷,
# vi /usr/local/bin/check_interface
給其執行權限chmod +x /usr/local/bin/check_interface
3.2、LVS_Backup安裝
LVS_Backup(192.168.6.247)安裝與LVS_MASTER安裝一緻,不同的隻是修改keepalived配置檔案,确定其主備關系,當主的不線上時,備的頂上。
[root@host1 ~]# vi/etc/keepalived/keepalived.conf//内容如下
四、最後安裝測試
Httpd安裝這裡就不說了,啟動每台機器的腳本,和HTTPD服務,keepalived。
[root@host1~]# /usr/local/bin/lvsdr.sh start
[root@host1~]# /usr/local/bin/check_interface
[root@host1~]# chkconfigkeepalived on
[root@host1 ~]# /etc/init.d/keepalived start
[root@host1 ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
ProtLocalAddress:PortScheduler Flags
->RemoteAddress:PortForward Weight ActiveConnInActConn
TCP192.168.6.201:httpwrr
->localhost.localdomain:httpLocal100
-> 192.168.6.247:httpRoute100
在區域網路中浏覽器不同主機上同時打開http://192.168.6.201檢視web,測試時進入的頁面不一樣則成功,做測試,兩台機器做了兩個不同頁面,實際環境中為一緻的。
關閉其中一台/etc/init.d/keepalived stop檢視,有頁面則正常。
[root@node1 keepalived]# vi realserver
#!/bin/bash
#description : start realserver
VIP=192.168.1.250
/etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS ofREALServer"
/sbin/ifconfig lo:0 $VIP broadcast $VIPnetmask 255.255.255.255 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
;;
stop)
/sbin/ifconfig lo:0 down
echo "close LVSDirectorserver"
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 "Usage: $0 {start|stop}"
exit 1
esac
[root@node1 keepalived]# chmod +xrealserver
[root@node1 keepalived]# ./realserverstart