LVS+Keepalived+Tomcat實現高可用性及均衡負載


1、Keepalived簡介

      Keepalived是Linux下一個輕量級別的高可用解決方案。Keepalived起初是為LVS設計的,專門用來監控集群系統中各個服務節點的狀態,它根據TCP/IP參考模型的第三、第四層、第五層交換機制檢測每個服務節點的狀態,如果某個服務器節點出現異常,或者工作出現故障,Keepalived將檢測到,並將出現的故障的服務器節點從集群系統中剔除,這些工作全部是自動完成的,不需要人工干涉,需要人工完成的只是修復出現故障的服務節點。
      后來Keepalived又加入了VRRP的功能,VRRP(Virtual Router Redundancy Protocol,虛擬路由冗余協議)出現的目的是解決靜態路由出現的單點故障問題,通過VRRP可以實現網絡不間斷穩定運行,實現高可用性,因此Keepalvied 一方面具有服務器狀態檢測和故障隔離功能,另外一方面也有HA cluster功能,下面介紹一下VRRP協議實現的過程。

 

2、VRRP協議和工作原理 

      VRRP可以將兩台或者多台物理路由器設備虛擬成一個虛擬路由,這個虛擬路由器通過虛擬IP(一個或者多個)對外提供服務,而在虛擬路由器內部十多個物理路由器協同工作,同一時間只有一台物理路由器對外提供服務,這台物理路由設備被成為:主路由器(Master角色),一般情況下Master是由選舉算法產生,它擁有對外服務的虛擬IP,提供各種網絡功能,如:ARP請求,ICMP 數據轉發等,而且其它的物理路由器不擁有對外的虛擬IP,也不提供對外網絡功能,僅僅接收MASTER的VRRP狀態通告信息,這些路由器被統稱為“BACKUP的角色”,當主路由器失敗時,處於BACKUP角色的備份路由器將重新進行選舉,產生一個新的主路由器進入MASTER角色,繼續提供對外服務,整個切換對用戶來說是完全透明的。

   每個虛擬路由器都有一個唯一的標識號,稱為VRID,一個VRID與一組IP地址構成一個虛擬路由器,在VRRP協議中,所有的報文都是通過IP多播(一對多,一個Master對多個Backup)方式發送的,而在一個虛擬路由器中,只有處於Master角色的路由器會一直發送VRRP數據包,處於BACKUP角色的路由器只會接受Master角色發送過來的報文信息,用來監控Master運行狀態,一般不會發生BACKUP搶占MASTER的情況,除非它的優先級更高,而當MASTER不可用時,BACKUP也就無法收到Master發過來的信息,於是就認定Master出現故障,接着多台BAKCUP就會進行選舉,優先級最高的BACKUP將稱為新的MASTER,這種選舉角色切換非常之快,因而保證了服務的持續可用性

 

3、LVS負載均衡模式 直接路由模式(DR)

直接路由模式比較特別,很難說和什么方面相似,前NAT和TUN種模式基本上都是工作在網絡層上(三層),而直接路由模式則應該是工作在數據鏈路層上(二層)。其原理 為,DR和REALSERVER都使用同一個IP對外服務。但只有DR對ARP請求進行響應,所有REALSERVER對本身這個IP的ARP請求保持靜默。也就是說,網關會把對這個服務IP的請求全部定向給DR,而DR收到數據包后根據調度算法,找出對應的REALSERVER,把目的MAC地址改為 REALSERVER的MAC並發給這台REALSERVER。這時REALSERVER收到這個數據包,則等於直接從客戶端收到這個數據包無異(因為服務器也有對外服務的ip,所以,有了客戶機的ip地址,返回就可以不經過DR),處理后 直接返回給客戶端。由於DR要對二層包頭進行改換,所以DR和REALSERVER之間必須在一個廣播域,也可以簡單的理解為在同一台交換機上。

 

 

4、環境描述

LVS server1 (Master):192.168.1.135虛擬IP為:192.168.1.150(Master優先級高會首先獲得vip)
LVS server2 ( Slave ) :192.168.1.136虛擬IP為:192.168.1.150(Master掛了之后slave才會獲得vip)
WEB server1: 192.168.1.138虛擬IP為192.168.1.150(使用tomcat作為web容器)
WEB server2; 192.168.1.139虛擬IP為192.168.1.150 (使用tomcat作為web容器)

注意:所有集群服務器時間要一致

 

5、安裝LVS

注意此動作。否則MAKE直接報錯。
如果沒有/2.6.32-279.el6.x86_64 這個目錄,請安裝內核開發包
# yum -y install kernel-devel
# ln -s /usr/src/kernels/2.6.32-279.el6.x86_64/ /usr/src/linux
# tar -xvf ipvsadm-1.24.tar.gz
# cd ipvsadm-1.24
#make && make install
# ipvsadm –L


6、安裝Keepalived

# tar –xvf keepalived-1.2.12.tar.gz
#./configure --sysconf=/etc/ --with-kernel-dir=/usr/src/kernels/2.6.32-279.el6.x86_64/
Keepalived version       : 1.2.12
Compiler                 : gcc
Compiler flags           : -g -O2
Extra Lib                : -lssl -lcrypto -lcrypt
Use IPVS Framework       : Yes 表示使用ipvs框架,也是代表啟動IPVS功能
IPVS sync daemon support : Yes  表示啟動ipvs的同步功能,--disabled-lvs-sysncd此參數可以關閉。
IPVS use libnl           : No   表示使用新的libn1版本,如果想使用新的版本,需要重新安裝libn1的包
Use VRRP Framework       : Yes 表示使用VRRP框架,這個實現keepalived高可用的必須功能
Use VRRP VMAC            : Yes 表示使用基礎VMAC接口的xmit VRRP包
SNMP support             : No
SHA1 support             : No
Use Debug flags          : No
# make && make install
# cp /soft/keepalived-1.2.12/bin/keepalived /usr/bin/

ERRR: yum install -y openssl openssl-devel
  !!! OpenSSL is not properly installed on your system. !!!
  !!! Can not include OpenSSL headers files.            !!!

7、主DR(master)配置Keepalived配置文件(/etc/keepalived/keepalived.conf)

! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1 #郵件服務器
smtp_connect_timeout 30 #郵件超時時間
router_id master
}

vrrp_instance VI_1 {    #定義VRR組,
state MASTER    #定義為MASTER主
interface eth0   #對外訪問的網絡接口
virtual_router_id 51  #虛擬路由標識。注意主從要一致,因為是同一個vip,所以id號才要是一致
priority 100   #主從優先級,主的優先級要高於從。注意是越大優先級越高
advert_int 1   #:廣播周期秒數
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.150   #:虛擬VIP地址,真實環境這里應該是公網IP
}
}

virtual_server 192.168.1.150 80 {  #:虛擬VIP地址 與 端口,DR架構WEB端口和虛擬端口監聽一致。否則將無法訪問,無法實現端口映射
delay_loop 6  #健康檢查時間間隔,單位是秒
lb_algo rr   #調用算法為RR
lb_kind DR  #調用架構模式為DR
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP

real_server 192.168.1.138 80 {   #:真實WEB服務器地址與端口
weight 1
TCP_CHECK{
connect_timeout 10   #:連接超時為10秒
nb_get_retry 3
delay_before_retry 8
connect_port 80   #連接端口為80,要和上面的保持一致
}

real_server 192.168.1.139 80 {
weight 1
TCP_CHECK{
connect_timeout 10
nb_get_retry 3
delay_before_retry 8
connect_port 80
}
}
}

 

8、從DR服務器配置文件

主從配置區別:

state BACKUP   #狀態改成BACKUP
priority 90     #優先級要低於主
interface eth0  #網絡接口注意和本機對應,
其它的配置文件內容和主的一樣

 

9、配置WEBserver,所有的WEB腳本都一樣

#!/bin/bash
# Written by NetSeek
# description: Config realserver lo and apply noarp

WEB_VIP="192.168.1.150"                        ;只需要改動你設置的vip即可
. /etc/rc.d/init.d/functions

case "$1" in
start)
ifconfig lo:0 $WEB_VIP netmask 255.255.255.255 broadcast $WEB_VIP
/sbin/route add -host $WEB_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 $WEB_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"
       ;;
status)
        # Status of LVS-DR real server.
        islothere=`/sbin/ifconfig lo:0 | grep $WEB_VIP`
        isrothere=`netstat -rn | grep "lo:0" | grep $web_VIP`
        if [ ! "$islothere" -o ! "isrothere" ]
        then
            echo "LVS-DR real server Stopped."
        else
            echo "LVS-DR Running."
        fi
        ;;
*)

echo "$0: Usage: $0 {start|status|stop}"
exit 1
;;
esac
exit 0

 

10、啟動WEB server的腳本

# ./ realserver.sh start
# ip add list


有上圖所示的VIP就成功了,VIP綁定在本地回環接口

 

 

11、配置Tomcat配置文件並啟動tomcat

# vim /usr/local/tomcat/conf/server.xml   

 <Connector port="80" protocol="HTTP/1.1"  索搜此項修改默認WEB端口             

  connectionTimeout="20000"               redirectPort="8443" />

<Host name="localhost"  appBase="web"  可以修改域名或者IP,但作代理請保持localhost           

 unpackWARs="true" autoDeploy="true">         

 <Context path="" docBase="/opt/web"></Context> 新增此項修改WEB的家目錄

 

[root@slave bin]# ./startup.sh start
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

12、啟動keepalived服務

keepalived,lvs是keepalived編譯支持的模塊
在LVS主從服務器上啟動keepalived
# /etc/init.d/keepalived start
在MASTER服務器上會看到VIP,當MASTER掛了之后。VIP將自動切換到SLAVE(從),
# /etc/init.d/keepalived start

有上圖所示的vip表示keepalived啟動VIP生效

 

13、訪問測試


是否可以看到WEBIP



然后通過瀏覽器訪問:http://192.168.1.150 看看是否可以訪問?

f5不停的刷新,看看是否能訪問不同的web頁面?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM