Keepalived高可用集羣來實現web服務器負載均衡集羣

 

 Keepalived高可用集羣來實現web服務器負載均衡集羣node

1、Keepalived的介紹web

Keepalived是一個提供HA重要的底層工具,最先期的做用是爲ipvs提供HA功能的,是一個能夠提供vrrp已經health-check功能的服務軟件,能夠只用它提供雙機浮動的vipvrrp虛擬路由功能),這樣能夠簡單實現一個雙機熱備高可用功能。同時咱們還能夠利用LVS+Keepalived基於完整開源軟件的架構能夠爲你提供一個負載均衡及高可用的服務器。 Keepalived是一個基於VRRP協議來實現的WEB 服務高可用方案,能夠利用其來避免單點故障。一個WEB服務至少會有2臺服務器運行Keepalived,一臺爲主服務器(MASTER),一臺爲備份服務器(BACKUP),可是對外表現爲一個虛擬IP,主服務器會發送特定的消息給備份服務器,當備份服務器收不到這個消息的時候,即主服務器宕機的時候,備份服務器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。算法

2、VRRP的介紹bash

VRRPVirtual Router Redundancy Protocol,是虛擬路由冗餘協議,經過此協議咱們能夠把多個路由器作成一個虛擬路由器,從而來保證其中某個路由宕掉的時候不會形成咱們內部外出網絡的所有中斷。VRRP中的各個路由器都有一個惟一的標識VRID,其範圍爲0-255,路由器對外表現爲惟一的虛擬MAC地址,地址的格式爲00-00-5E-00-01-[VRID]。主控路由器負責對ARP請求用該MAC地址作應答。這樣,不管如何切換,保證給終端設備的是惟一一致的IPMAC地址,減小了切換對終端設備的影響。其中的VRID中的0255是保留的,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的軟件安裝,解決好依賴關係,更有利於後面的進行

 

192421899.png

RIP不能被外部主機解析使用腳本vipset.sh進行設置,要用vipset.sh腳本如配置VIParp參數

192536185.png

 

193213467.png

測試一下

Real Server1

193330680.png

Real Server2

193355620.png

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

193437825.png

(2)安裝keepalived軟件,必定要解決依賴關係

安裝以前必定要與服務器時間同步 ntpdate 172.16.9.1

193518252.png

 

  (3)、ipvsadm軟件安裝

 

193610631.png

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
        }
    }
}

194143935.png

194144659.png

194145613.png

而後把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
        }
    }
}

194335822.png

啓動keepalived服務;

 

194421650.png

 

194520141.png

 

194601389.png

訪問虛擬IP地址

194650596.png

主備轉換測試

# cd /etc/keepalived/

# touch down

194726824.png

在備用節點node2上查看

194846412.png

訪問虛擬IP

195128666.png

如今把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服務,查看node1node2上的VIP地址配置

node1主機

195238288.png

node2主機

195306135.png

測試

195411152.png

195412903.png

模擬node1出現故障

# cd /etc/keepalived/

# touch down

查看node2上虛擬IP地址

195537339.png

 

此時,訪問172.16..9.1192.16.53都是由node2主機返回結果

 

195727659.png

195728654.png

相關文章
相關標籤/搜索