在現實網絡環境中,主機之間的通訊都是經過配置靜態路由或者(默認網關)來完成的,而主機之間的路由器一旦發生故障,通訊就會失效,所以這種通訊模式當中,路由器就成了一個單點瓶頸,爲了解決這個問題,就引入了VRRP協議。
熟悉網絡的學員對VRRP協議應該不陌生,它是一種主備模式的協議,經過VRRP能夠在網絡發生故障時透明的進行設備切換而不影響主機之間的數據通訊,這其中涉及到兩個概念:物理路由器和虛擬路由器。
VRRP能夠將兩臺或者多臺物理路由器設備虛擬成一個虛擬路由,這個虛擬路由器經過虛擬IP(一個或者多個)對外提供服務,而在虛擬路由器內部十多個物理路由器協同工做,同一時間只有一臺物理路由器對外提供服務,這臺物理路由設備被成爲主路由器(Master角色),通常狀況下Master是由選舉算法產生,它擁有對外服務的虛擬IP,提供各類網絡功能,如:ARP請求,ICMP 數據轉發等,並且其它的物理路由器不擁有對外的虛擬IP,也不提供對外網絡功能,僅僅接收MASTER的VRRP狀態通告信息,這些路由器被統稱爲「BACKUP的角色」,當主路由器失敗時,處於BACKUP角色的備份路由器將從新進行選舉,產生一個新的主路由器進入MASTER角色,繼續提供對外服務,整個切換對用戶來講是徹底透明的。
每一個虛擬路由器都有一個惟一的標識號,稱爲VRID,一個VRID與一組IP地址構成一個虛擬路由器,在VRRP協議中,全部的報文都是經過IP多播方式發送的,而在一個虛擬路由器中,只有處於Master角色的路由器會一直髮送VRRP數據包,處於BACKUP角色的路由器只會接受Master角色發送過來的報文信息,用來監控Master運行狀態,一通常不會發生BACKUP搶佔的狀況,除非它的優先級更高,而當MASTER不可用時,BACKUP也就沒法收到Master發過來的信息,因而就認定Master出現故障,接着多臺BAKCUP就會進行選舉,優先級最高的BACKUP將稱爲新的MASTER,這種選舉角色切換很是之快,於是保證了服務的持續可用性。前端
Keepalived是Linux下一個輕量級別的高可用解決方案。高可用(High Avalilability,HA),其實兩種不一樣的含義:廣義來說,是指整個系統的高可用行;狹義的來說就是指主機的冗餘和接管。它與HeartBeat、RoseHA實現相似的功能,均可以實現服務或者網絡的高可用,可是又有差異。HeartBeat是一個專業的、功能完善的高可用軟件,它提供了HA 軟件所需的基本功能。好比:心跳檢測、資源接管,檢測集羣中的服務,在集羣節點轉移共享IP地址的全部者等等。HeartBeat功能強大,可是部署和使用相對比較麻煩。與HeartBeat相比,Keepalived主要是經過虛擬路由冗餘(VRRP)來實現高可用功能,雖然它沒有HeartBeat功能強大,可是Keepalived部署和使用很是的簡單,全部配置只須要一個配置文件便可以完成。
keepalived主要有三個模塊,分別是core、check和vrrp。core模塊爲keepalived的核心,負責主進程的啓動、維護以及全局配置文件的加載和解析。check負責健康檢查,包括常見的各類檢查方式。vrrp模塊是來實現VRRP協議的。linux
基礎環境(關閉selinux和iptables):算法
VIP: 192.168.1.222
192.168.1.98 - lvs-master
192.168.1.99 - lvs-slave
192.168.1.101 - realserver01
192.168.1.102 - realserver02後端
1.LVS節點配置bash
安裝ipvsadm和keepalived服務器
# yum install ipvsadm keepalived -y
2.配置keepalived節點網絡
Master 配置負載均衡
# vi /etc/keepalived/keepalived.conf oop
global_defs { notification_email { test@126.com } notification_email_from lvs-alert@126.com smtp_server mail.126.com smtp_connection_timeout 30 router_id LVS_DEVEL # 設置lvs的id,在一個網絡內應該是惟一的 } vrrp_instance VI_1 { state MASTER #指定Keepalived的角色,MASTER爲主,BACKUP爲備 interface eth0 #指定Keepalived的角色,MASTER爲主,BACKUP爲備 virtual_router_id 51 #虛擬路由編號,主備要一致 priority 100 #定義優先級,數字越大,優先級越高,主DR必須大於備用DR advert_int 1 #檢查間隔,默認爲1s authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.222 #定義虛擬IP(VIP),可多設,每行一個 } } # 定義對外提供服務的LVS的VIP以及port virtual_server 192.168.1.222 80 { delay_loop 6 # 設置健康檢查時間,單位是秒 lb_algo wrr # 設置負載調度的算法爲wrr lb_kind DR # 設置LVS實現負載的機制,有NAT、TUN、DR三個模式 nat_mask 255.255.255.0 persistence_timeout 0 protocol TCP real_server 192.168.1.101 80 { # 指定real server1的IP地址 weight 3 # 配置節點權值,數字越大權重越高 TCP_CHECK { connect_timeout 10 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.1.102 80 { # 指定real server2的IP地址 weight 3 # 配置節點權值,數字越大權重越高 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
Slave 配置性能
先將上面的keepalived.conf配置文件,僅僅修改2處,以下: No.1處:把「state MASTER」修改成「state BACKUP」 #即備用服務器; No.2處:把「priority 100」修改成「priority 90」 #優先級爲90。
3.配置RealServer節點(默認已安裝配置啓動http服務)
配置realserver啓動腳本,爲後端realserver節點lo:0綁定VIP,抑制ARP廣播
vi /etc/init.d/realserver.sh
#add for chkconfig #chkconfig: 2345 70 30 #description: RealServer's script #processname: realserver.sh #!/bin/bash VIP=192.168.1.222 source /etc/rc.d/init.d/functions case "$1" in start) ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP /sbin/route add -host $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 echo "RealServer Start OK" ;; stop) ifconfig lo:0 down route del $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
4.啓動keepalived並查看lvs規則是否生效
# /etc/init.d/keepalived start
5.訪問測試(wrr模式,權值相同)
6.將後端的realserver其中一個節點服務停掉,並測試
能夠看到keepalived發現realserver02的80端口沒開,就認爲server故障並從集羣中自動剔除了realserver02,但當realserver02服務恢復以後,keepalived又再次將其加入集羣中。
7.將前端keepalived master節點停掉,並測試效果
當master故障,vip會自動漂移到slave繼續提供服務,從而保證了服務的高可用性。
主要實現功能:
1.負載均衡;
2.後端realserver出問題,自動從集羣中剔除;
3.lvs高可用,提供服務的LVS宕機,vip漂移到另外一臺LVS繼續提供服務。
LVS是一個能夠工做在網絡第四層的負載均衡軟件,所以它相對於Nginx一類工做在第七層的負載均衡軟件有着無可比擬的性能優點。
本次經過最小化的lvs+keepalived實驗瞭解了目前普遍運用的軟件負載均衡解決方案之一,後面繼續學習其餘負載均衡方案。