1、lvs+keepalived
html
一、lvslinux
LVS集羣採用IP負載均衡技術和基於內容請求分發技術。調度器具備很好的吞吐率,將請求均衡地轉移到不一樣的服務器上執行,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。整個服務器集羣的結構對客戶是透明的,並且無需修改客戶端和服務器端的程序。爲此,在設計時須要考慮系統的透明性、可伸縮性、高可用性和易管理性。nginx
二、keepalivedweb
Keepalived的做用是檢測web服務器的狀態,若是有一臺web服務器死機,或工做出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工做正常後Keepalived自動將web服務器加入到服務器羣中,這些工做所有自動完成,不須要人工干涉,須要人工作的只是修復故障的web服務器。算法
從上圖能夠看出,keepalived包括三個組件:IO複用組件、內存管理組件和控制組件。在覈心組件中IPVS wrapper就是負責生成ipvs規則的,因此說keepalived天生就是爲ipvs而生的,也就是爲LVS提供高可用集羣功能的。keepalived實現的功能主要有三個:一個是將IP地址飄移到其餘節點上,一個就是在另外一個主機上生成ipvs規則,最後一個就是健康情況檢查。keepalived經過軟件的方式在其內部模擬實現VRRP協議,而後藉助於VRRP協議實現IP地址漂移。
vim
2、拓撲後端
3、LVS(DR)+keepalived實現高可用負載均衡
bash
一、配置DR服務器
(1)配置LVS-DR-MASTERsession
[root@LVS-DR-MASTER ~]# yum -y install keepalived [root@LVS-DR-MASTER ~]# vim /etc/keepalived/keepalived.conf #! Configuration File for keepalived global_defs { notification_email { shuishui@126.com #故障接收聯繫人 } notification_email_from lvs.dr@localhost #故障發送人 smtp_server 127.0.0.1 #本機發送郵件 smtp_connect_timeout 30 router_id LVS_DEVEL_shuishui } vrrp_instance VI_1 { state MASTER interface eth0 #實例綁定的網卡,由於在配置虛擬IP的時候必須是在已有的網卡上添加的 virtual_router_id 88 #相同的VRID爲一個組,它將決定多播的MAC地址 priority 100 #主(172.16.7.10)的優先級爲100,備(172.16.7.100)的爲99 advert_int 1 #VRRP Multicast廣播週期秒數,設定MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒 authentication { auth_type PASS #有兩種認證方式,PASS或AH auth_pass 1111 #設置驗證密碼,在同一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通訊 } virtual_ipaddress { 172.16.7.1 #vip } } virtual_server 172.16.7.1 80 { delay_loop 6 #設置運行狀況檢查時間,單位是秒 lb_algo wlc #設置負載調度算法,wlc爲最小加權算法,rr爲輪訓 lb_kind DR #設置LVS負載均衡DR模式 net_mask 255.255.255.0 #persistence_timeout 0 #設置成非0後,過一會訪問VIP,就會出現訪問不到的狀況,JJ也註釋掉了這個參數 #會話保持時間,單位是秒。這個選項對動態網頁是很是有用的,爲集羣系統中的session共享提供了一個很好>的解決方案。 #有了這個會話保持功能,用戶的請求會被一直分發到某個服務節點,直到超過這個會話的保持時間。 #須要注意的是,這個會話保持時間是最大無響應超時時間,也就是說,用戶在操做動態頁面時,若是50秒內沒有執行任何操做, #那麼接下來的操做會被分發到另外的節點,可是若是用戶一直在操做動態頁面,則不受50秒的時間限制 protocol TCP #使用TCP協議檢查realserver狀態,指定轉發協議類型,有TCP和UDP兩種 sorry_server 127.0.0.1 80 real_server 172.16.7.200 80 { #對應後端web1 weight 3 #節點權重值 TCP_CHECK { #健康檢查方式 connect_port 80 connect_timeout 3 #鏈接超時 nb_get_retry 3 #重試次數 delay_before_retry 3 #重試間隔/S } } real_server 172.16.7.201 80 { #對應後端web2 weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
注:這裏我想說一下lvs的session問題的處理功能,由於他不像haproxy和nginx能夠工做在7層,因此lvs只提供簡單的維持session功能的參數,就是persistence_timeout,哇,這個只是說你同一個source只能大概給你個session維持時間,不像haproxy的source算法和nginx的ip_hash功能,因此啊,這方面lvs作的不如nginx和haproxy好。
(2)配置LVS-DR-BACKUP
[root@LVS-DR-MASTER ~]# scp /etc/keepalived/keepalived.conf root@172.16.7.100:/etc/keepalived/ # # #複製過去只需修改state爲backup和priority爲99 |
(3)測試VIP飄移
①、啓動keeplived服務後,LVS-DR-MASTER上擁有VIP
②、企業MASTER上的keepalived服務,測試VIP飄移
③、在LVS-DR-BACKUP上查看是否已拿到VIP
二、配置web
(1)配置web1
①、配置realserver
[root@web1 ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore [root@web1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@web1 ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce [root@web1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@web1 ~]# [root@web1 ~]# ifconfig lo:0 172.16.7.1 netmask 255.255.255.255 broadcast 172.16.7.1 up [root@web1 ~]# [root@web1 ~]# route add -host 172.16.7.1 dev lo:0 |
②、編輯網頁文件
[root@web1 ~]# yum -y install httpd [root@web1 ~]# [root@web1 ~]# vim /var/www/html/index.html <h1>Welcome to web1(172.16.7.200)</h1> |
③、啓動httpd服務測試正常與否
[root@web1 ~]# service httpd start |
(2)配置web2
方法同web1
(3)使用腳本配置 realserver
[root@localhost ~]# vi /etc/init.d/real.sh #description : start realserver VIP=172.16.7.1 . /etc/init.d/functions case "$1" in start) /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up 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 "LVS RealServer Start OK" ;; stop) /sbin/ifconfig lo:0 down 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 "LVS RealServer Stoped OK" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac
[root@localhost ~]# chmod +x /etc/init.d/real.sh [root@localhost ~]# /etc/init.d/real.sh start LVS RealServer Start OK [root@localhost ~]# echo "/etc/init.d/real.sh start" >> /etc/rc.local
三、訪問VIP測試LVS(DR)+keepalived高可用負載均衡
(1)負載均衡測試
①、兩臺web都工做正常,訪問VIP時,能夠被負載到兩臺web上
②、停掉一臺web的httpd服務,訪問VIP是,被負載到正常的web服務器上
(2)高可用測試
①、首先兩臺DR的keepalived服務都正常,此時VIP在LVS-DR-MASTER(172.16.7.10)上
②、關閉LVS-DR-MASTER上的keepalived服務,此時VIP在LVS-DR-BACKUP(172.16.7.100)上
[root@LVS-DR-MASTER ~]# service keepalived stop |
經測試,訪問172.16.7.1依然正常,經過keepalived+lvs避免了DR的單點故障,實現了高可用負載均衡
四、查看ipvs規則
若是想查看生效的規則,只需安裝ipvsadm便可
[root@LVS-DR-MASTER ~]# yum -y install ipvsadm [root@LVS-DR-MASTER ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.16.7.1:80 wlc -> 172.16.7.200:80 Route 3 0 0 -> 172.16.7.201:80 Route 1 0 0 |
查看更多lvs相關內容請點擊章文嵩博士原創論文:http://www.linuxvirtualserver.org/zh/lvs1.html