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

一、Keepalived簡介

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

 

二、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,這種選舉角色切換很是之快,於是保證了服務的持續可用性
linux

 

三、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之間必須在一個廣播域,也能夠簡單的理解爲在同一臺交換機上。web

 

 

四、環境描述

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容器)算法

注意:全部集羣服務器時間要一致

bootstrap

 

五、安裝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


vim

六、安裝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.            !!!

瀏覽器

七、主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
}
}
}tomcat

 

八、從DR服務器配置文件

主從配置區別:bash

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

 

九、配置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

 

十、啓動WEB server的腳本

# ./ realserver.sh start
# ip add list


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

 

 

十一、配置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.

十二、啓動keepalived服務

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

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

 

1三、訪問測試


是否能夠看到WEBIP



而後經過瀏覽器訪問:http://192.168.1.150 看看是否能夠訪問?

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

相關文章
相關標籤/搜索