Keepalived高可用集羣來實現web服務器負載均衡集羣node
1、Keepalived的介紹web
Keepalived是一個提供HA重要的底層工具,最先期的做用是爲ipvs提供HA功能的,還是一個能夠提供vrrp已經health-check功能的服務軟件,能夠只用它提供雙機浮動的vip(vrrp虛擬路由功能),這樣能夠簡單實現一個雙機熱備高可用功能。同時咱們還能夠利用LVS+Keepalived基於完整開源軟件的架構能夠爲你提供一個負載均衡及高可用的服務器。 Keepalived是一個基於VRRP協議來實現的WEB 服務高可用方案,能夠利用其來避免單點故障。一個WEB服務至少會有2臺服務器運行Keepalived,一臺爲主服務器(MASTER),一臺爲備份服務器(BACKUP),可是對外表現爲一個虛擬IP,主服務器會發送特定的消息給備份服務器,當備份服務器收不到這個消息的時候,即主服務器宕機的時候,備份服務器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。算法
2、VRRP的介紹bash
VRRP:Virtual Router Redundancy Protocol,是虛擬路由冗餘協議,經過此協議咱們能夠把多個路由器作成一個虛擬路由器,從而來保證其中某個路由宕掉的時候不會形成咱們內部外出網絡的所有中斷。VRRP中的各個路由器都有一個惟一的標識VRID,其範圍爲0-255,路由器對外表現爲惟一的虛擬MAC地址,地址的格式爲00-00-5E-00-01-[VRID]。主控路由器負責對ARP請求用該MAC地址作應答。這樣,不管如何切換,保證給終端設備的是惟一一致的IP和MAC地址,減小了切換對終端設備的影響。其中的VRID中的0和255是保留的,0用於IP地址全部者主動放棄主控者角色時使用,255用於VRRP路由器的IP地址和虛擬路由器的接口IP地址相同時所擁有服務器
3、LVS的配置與安裝,網絡
啓用四臺虛擬機,我選擇是192.168.0.x.的網段,虛擬主機是172.16.9.1,因爲不在一個網段,須要加一個路由Routdde add default gw 172.16.0.1架構
Real Server1:192.168.0.54 Real Server2:192.168.0.55負載均衡
HA1:192.168.0.53 HA2;192.168.0.57ide
VIP:172.16.9.1工具
配置以前keepalived以前,先下載好yum軟件包,配置好http的軟件安裝,解決好依賴關係,更有利於後面的進行
RIP不能被外部主機解析使用腳本vipset.sh進行設置,要用vipset.sh腳本如配置VIP和arp參數
測試一下
Real Server1
Real Server2
Vipset.sh腳本以下所示:
#!/bin/bash # # Script to start LVS DR real server. # description: LVS DR real server # . /etc/rc.d/init.d/functions VIP=172.16.9.1 #VIP地址 host=`/bin/hostname` #定義host變量 case"$1"in start) #start的時候設置本機arp不被外部主機解析 # Start LVS-DR real server onthismachine. /sbin/ifconfig lo down /sbin/ifconfig lo up echo1> /proc/sys/net/ipv4/conf/lo/arp_ignore echo2> /proc/sys/net/ipv4/conf/lo/arp_announce echo1> /proc/sys/net/ipv4/conf/all/arp_ignore echo2> /proc/sys/net/ipv4/conf/all/arp_announce /sbin/ifconfig lo:0$VIP broadcast $VIP netmask255.255.255.255up #配置vip在lo:0,而且設置廣播地址和子網掩碼,此處使用32位是保證此vip不能與其餘地址通訊。 /sbin/route add -host $VIP dev lo:0#增長路由 ;; stop) #stop的時候恢復到系統的初始化arp參數 # Stop LVS-DR real server loopback device(s). /sbin/ifconfig lo:0down echo0> /proc/sys/net/ipv4/conf/lo/arp_ignore echo0> /proc/sys/net/ipv4/conf/lo/arp_announce echo0> /proc/sys/net/ipv4/conf/all/arp_ignore echo0> /proc/sys/net/ipv4/conf/all/arp_announce ;; status) # Status of LVS-DR real server. islothere=`/sbin/ifconfig lo:0| grep $VIP` isrothere=`netstat -rn | grep"lo:0"| grep $VIP` if[ !"$islothere"-o !"isrothere"];then # Either the route or the lo:0device # not found. echo"LVS-DR real server Stopped." else echo"LVS-DR real server Running." fi ;; *) # Invalid entry. echo"$0: Usage: $0 {start|status|stop}" exit1 ;; Esac
4、DR上的相關軟件的配置和安裝
(1)下載keepalived-1.2.7-5.el5.i386.rpm
(2)安裝keepalived軟件,必定要解決依賴關係
安裝以前必定要與服務器時間同步 ntpdate 172.16.9.1
(3)、ipvsadm軟件安裝
5、LVS的配置包括兩部分,虛擬主機組和虛擬主機
virtual_server 192.168.200.100 443 { #設置VIP port delay_loop 6 #多少秒檢查一次real server的健康狀態 lb_algo rr #調度算法 lb_kind NAT #lvs模型 nat_mask 255.255.255.0 #虛擬VIP的掩碼 persistence_timeout 50 #長鏈接時間 protocol TCP #協議類型 real_server 192.168.201.100 443 { #定義real server weight 1 #定義權重 SSL_GET { #檢查web服務的SSL情況 url { path / digest ff20ad2481f97b1754ef3e12ecd3a9cc } url { #檢查服務器的web服務情況 path /mrtg/ digest 9b3a0c85a887a256d6939da88aabd8cd } connect_timeout 3 #鏈接超時時間 nb_get_retry 3 #重試次數 delay_before_retry 3 #重試鏈接時間間隔 } } }
6、keepalived配置文件的詳解
(1)RS1裏面的keepalived.conf上的配置
Keepalived.conf的腳本 ! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from root@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 101 advert_int 1 authentication { auth_type PASS auth_pass keepalivedpass } virtual_ipaddress { 172.16.9.1 } } virtual_server 172.16.9.1 80 { delay_loop 6 lb_algo rr lb_kind NAT nat_mask 255.255.0.0 persistence_timeout 50 protocol TCP real_server 192.168.0.54 80 { weight 1 SSL_GET { url { path / status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } virtual_server 172.16.9.1 80 { delay_loop 6 lb_algo rr lb_kind DR nat_mask 255.255.0.0 # persistence_timeout 50 protocol TCP real_server 192.168.0.54 80 { weight 2 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 1 } } real_server 192.168.0.55 { weight 2 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 1 connect_port 80 } } }
而後把RS1上的keepalived.com複製到RS2上,並把其中的stata改爲BACKUP,priority修改成100,其餘內容不變
RS2裏面的keepalived.conf腳本
! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from root@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass keepalivedpass } virtual_ipaddress { 172.16.9.1 } } virtual_server 172.16.9.1 80 { delay_loop 6 lb_algo rr lb_kind DR nat_mask 255.255.0.0 # persistence_timeout 50 protocol TCP real_server 192.168.0.54 80 { weight 2 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 1 } } real_server 192.168.0.55 { weight 2 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 1 connect_port 80 } } }
啓動keepalived服務;
訪問虛擬IP地址
主備轉換測試
# cd /etc/keepalived/
# touch down
在備用節點node2上查看
訪問虛擬IP
如今把down文件刪除,MASTER節點會奪回資源,由於在node1上的優先級(101)比nod2上的優先級(100)高
雙主模式實現
兩個主機web服務同時開啓,配置的VIP不一樣,讓他們互爲主從
修改keepalived.conf配置文件(只需修改配置文件末尾「vrrp_instance VI_2」中的內容)
vrrp_instance VI_2 { interface eth0 state BACKUP # BACKUP for slave routers priority 100 # 100 for BACKUP virtual_router_id 52 garp_master_delay 1 authentication { auth_type PASS auth_pass password } track_interface { eth0 } virtual_ipaddress { 172.16.51.80/16 dev eth0 label eth0:1 } track_script { chk_httpd chk_schedown } notify_master "/etc/keepalived/notify.sh master eth0:1" notify_backup "/etc/keepalived/notify.sh backup eth0:1" notify_fault "/etc/keepalived/notify.sh fault eth0:1" }
在node2上啓用「vrrp_instance VI_2」中的內容後,修改一下第二VIP地址與腳本名稱(track_httpd, chk_schedown)
修改完成後,啓動keepalived服務,查看node1與node2上的VIP地址配置
node1主機
node2主機
測試
模擬node1出現故障
# cd /etc/keepalived/
# touch down
查看node2上虛擬IP地址
此時,訪問172.16..9.1與192.16.53都是由node2主機返回結果