客戶端經過VIP(Virtual IP)(10.10.3.160)來訪問負載均衡服務器。負載均衡服務器經過MASTER:10.10.3.156或BACKUP:10.10.3.157將請求分別轉發給真實Web服務器(real server1:10.10.3.158 real server2:10.10.3.159)。 linux
測試環境:web
Director Server1(Master):10.10.3.156 算法
Director Server2(Backup):10.10.3.157tomcat
VIP:10.10.3.160bash
Real server1:10.10.3.158服務器
Real server2:10.10.3.159負載均衡
LVS版本:ipvsadm-1.26oop
keepalived版本:keepalived-1.2.7測試
1、在兩臺Director Server上分別安裝並配置LVS+Keepalivedspa
2、安裝LVS前系統須要安裝
yum -y install kernel-devel openssl-devel lftplibnl* popt* libnl* libpopt* gcc*
3、兩臺Director Server分別安裝並配置LVS:
cd /usr/src
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
(若是已經建立了軟鏈接,那麼刪除之: rm /usr/src/linux 注意不能帶最後的/,不然沒法刪除。)
查看內核方法:cat /proc/version(下一步中的2.6.32-358.el6.x86_64則是此處的Linux version)
ln -s /usr/src/kernels/2.6.32-358.el6.x86_64/ /usr/src/linux
tar -zxvf ipvsadm-1.26.tar.gz
cd ipvsadm-1.26
make && make install
編寫並運行腳本(LVS服務器的腳本)
vi lvs.sh
#!/bin/bash VIP=10.10.3.160 RIP1=10.10.3.158 RIP2=10.10.3.159 /etc/rc.d/init.d/functions logger $0 called with $1 case "$1" in start) echo " start LVS of DirectorServer" /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up /sbin/route add -host $VIP dev eth0:0 echo "1" >/proc/sys/net/ipv4/ip_forward #Clear IPVS table /sbin/ipvsadm -C #set LVS /sbin/ipvsadm -A -t $VIP:80 -s rr /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g #Run LVS /sbin/ipvsadm ;; stop) echo "close LVS Directorserver" echo "0" >/proc/sys/net/ipv4/ip_forward /sbin/ipvsadm -C /sbin/ifconfig eth0:0 down ;; *) echo "Usage: $0 {start|stop}" exit 1 esac ~
注:/sbin/ipvsadm -A -t $VIP:80 -s rr (rr表明輪詢,還有其餘分配方式)
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g (-g表明DR模式,還有其餘模式)
給腳本加權限,並執行
chmod +x lvs.sh
./lvs.sh start
四、兩臺Director Server分別安裝並配置keepalived:
cd ..(cd /usr/src)
wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
tar zxvf keepalived-1.2.7.tar.gz
cd keepalived-1.2.7
./configure
make && make install
---------將keepalived作成啓動服務,方便管理---------
\cp /usr/local/etc/rc.d/init.d/keepalived /etc/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/etc/keepalived/keepalived.conf /etc/keepalived/
service keepalived start
-----------開啓路由轉發-----------
vi /etc/sysctl.conf
修改下面的值,從0修改到1:
net.ipv4.ip_forward = 1
刷新系統變量,使系統文件變動立刻生效
sysctl -p
------------配置Keepalived-------------
vi /etc/keepalived/keepalived.conf
輸入 :.,$d ,清空文件內容
從新輸入的內容爲:
! Configuration File for keepalived global_defs { notification_email { king_819@163.com } notification_email_from king_819@163.com smtp_server smtp.163.com # smtp_connect_timeout 30 router_id LVS_DEVEL } # VIP1 vrrp_instance VI_1 { state MASTER #備份服務器上將MASTER改成BACKUP interface eth0 lvs_sync_daemon_interface eth0 virtual_router_id 51 priority 100 # 備份服務上將100改成90 advert_int 5 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.10.3.160 #(若是有多個VIP,繼續換行填寫.) } } virtual_server 10.10.3.160 80 { delay_loop 6 #(每隔10秒查詢realserver狀態) lb_algo rr #(lvs 算法) lb_kind DR #(Direct Route) persistence_timeout 60 #(同一IP的鏈接60秒內被分配到同一臺realserver) protocol TCP #(用TCP協議檢查realserver狀態) real_server 10.10.3.158 80 { weight 100 #(權重) TCP_CHECK { connect_timeout 10 #(10秒無響應超時) nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 10.10.3.159 80 { weight 100 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
chkconfig --level 0123456 keepalived on
查看自啓動狀態
chkconfig --list keepalived
service keepalived restart
五、兩臺Real Server(WEB1和WEB2機器)分別編輯以下文件
vi /root/lvs_real.sh
#!/bin/bash # description: Config realserver #Written by : http://kerry.blog.51cto.com SNS_VIP=10.10.3.160 /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
賦給執行權限
chmod 755 /etc/rc.d/init.d/functions 別人的配置文檔中沒這個步驟,我不知道爲何老是說執行到這句時沒有權限,因此我添加了執行權限
chmod 755 /root/lvs_real.sh
/root/lvs_real.sh start
將四臺機器的IPTABLES所有關閉,防止出現其它問題:service iptables stop
兩臺Director server 分別啓動keepalived服務,並執行./lvs.sh start
兩臺Real server 分別執行/root/lvs_real.sh start
這樣高可用服務就配置好了。
配置兩臺Director server開機啓動項:
vi /etc/rc.d/rc.local
配置兩臺Real server開機啓動項:
vi /etc/rc.d/rc.local
我是這樣模擬真實需求測試的:在兩臺web主機上安裝tomcat,端口均爲80,將CRM項目分別部署到web主機上,啓動tomcat,在兩個主機上分別將CRM登陸頁增長顯示real server1 和real server 2。這樣經過訪問http://10.10.3.160/crm 能夠看見兩個登陸頁輪詢顯示,即測試實驗成功。