最近在研究 負載均衡。目前研究的是keepalived+lvs模式
1、軟件介紹
keepalived:顧名思義是保持存活,常用來搭建設備的高可用,防止業務核心設備出現單點故障。keepalived主要用作realserver的健康檢查以及負載均衡主機和backup主機之間的故障漂移。
單點故障:在公司整個業務流程中,某一點出現故障就會導致整個系統架構不可用,單點故障常發生在數據庫、核心業務系統等。對此我們的解決辦法是對核心業務系統進行高可用負載均衡。
LVS:LinuxVirtualServer,linux虛擬服務器,是一個虛擬的服務器集群系統。目前有三種負載均衡技術(VS/NAT、VS/TUN和VS/DR);十種調度算法(rrr|wrr|lc|wlc|lblcr|lblc|dh|sh|sed|nq)。
2、實驗拓撲圖。
本次實驗一共用到4臺服務器,其中兩臺服務器用來搭建keepalived+lvs,另兩臺是對外提供服務的web服務器。
本次實驗用到了5個ip地址。
Master:10.68.4.201 Backup:10.68.4.58
web1:10.68.4.198web2:10.68.4.248
virtualIP:10.68.4.199
3、拓撲圖介紹
keepalived--master和keepalived--backup 兩者之間通過vrrp協議利用組播進行通信,master主機對外接受請求并將請求轉發至后方的realserver,backup主機只接受請求而不轉發請求。某時刻當backup主機沒有接受到master主機發送的信息時,于是發送vrrp通告信息并廣播arp信息,宣城自己是master,如果收到其他主機發送的通告信息的優先級比自己的高,那么自己將繼續轉為backup,優先級別高的機器,此時就是新master主機,并接替原master主機的工作。
每個keepalived機器都對后方的realserver進行監控,只不過master負責將外部請求轉發至后方的realserver,backup則不作該處理。
4、keepalived安裝
安裝的過程中,如果報錯
checking for IPVS syncd support... yes
checking for kernel macvlansupport... no
checking whether SO_MARK is declared... no
configure: error: No SO_MARK declaration in headers
那么只需要在編譯時,添加--disable-fwmark參數即可。最后確保如下幾項為yes狀態即可,加粗一定得是yes。
Use IPVS Framework : Yes IPVS sync daemon support : Yes IPVS use libnl : Yes Use VRRP Framework : Yes
!ConfigurationFileforkeepalived global_defs{ notification_email{ } router_idLVS_DEVEL } vrrp_instanceVI_1{#定義一個vrrp組,組名唯一 stateMASTER#定義改主機為keepalived的master主機 interfaceeth0#監控eth0號端口 virtual_router_id58#虛擬路由id號為58,id號唯一,這個id決定了多播的MAC地址 priority150#設置本節點的優先級,master的優先級要比backup的優先級別高,數值要大 advert_int1#檢查間隔,默認為1秒 authentication{ auth_typePASS#認證方式,密碼認證 auth_pass1111#認證的密碼,這個密碼必須和backup上的一致 } virtual_ipaddress{#設置虛擬的ip,這個ip是以后對外提供服務的ip。 10.68.4.199 } } virtual_server10.68.4.19980{#虛擬主機設置,ip同上。 delay_loop2#服務器輪詢的時間間隔 lb_algorr#lvs的調度算法 lb_kindDR#lvs的集群模式 nat_mask255.255.255.0 persistence_timeout50#會話超時50s protocolTCP#健康檢查是用tcp還是udp real_server10.68.4.24880{#后端真實主機1 weight100#每臺機器的權重,0表示不給該機器轉發請求,知道它恢復正常。 TCP_CHECK{#健康檢查項目,以下 connect_timeout3 nb_get_retry3 delay_before_retry3 connect_port80 } } real_server10.68.4.19880{#后端真實主機2 weight100#每臺機器的權重,0表示不給該機器轉發請求,知道它恢復正常。 TCP_CHECK{#健康檢查項目,以下 connect_timeout3 nb_get_retry3 delay_before_retry3 connect_port80 } } }
backup主機的配置基本同上,只有以下地方需要修改。
stateBACKUP#定義改主機為keepalived的backup主機,監控主master priority100#設置本節點的優先級,數值要比master主機上的小
測試keepalived的故障漂移,
首先,在10.68.4.201和10.68.4.58上同時啟動keepalived,此時觀察master主機和backup主機
可以看出虛擬ip此時綁定在4.201--master上,然后停止4.201上的keepalived服務
通過查看4.58上的日志,可以看到4.58已經宣告自己是master了。并且虛擬ip也漂移到新的mater機器上。
以上的配置,keepalived的高可用功能已經實現。
5、realserver服務器配置
本例中,我在4.198和4.248上,分別安裝了httpd,模擬兩臺web服務器。然后要在兩臺服務器上配置虛擬vip,這里我寫了一個腳本。
#!/bin/bash #description:configrealserverloandapplynoarp WEB_VIP=10.68.4.199#虛擬vip,也就是虛擬ip ./etc/rc.d/init.d/functions case"$1"in start) ifconfiglo:0$WEB_VIPnetmask255.255.255.255broadcast$WEB_VIP /sbin/routeadd-host$WEB_VIPdevlo: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"1">/proc/sys/net/ipv4/conf/eth0/arp_ignore echo"2">/proc/sys/net/ipv4/conf/eth0/arp_announce echo"1">/proc/sys/net/ipv4/conf/default/arp_ignore echo"2">/proc/sys/net/ipv4/conf/default/arp_announce sysctl-p>/dev/null2>&1 echo"RealServerStartOK" ;; stop) ifconfiglo:0down routedel$WEB_VIP>/dev/null2>&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"0">/proc/sys/net/ipv4/conf/eth0/arp_ignore echo"0">/proc/sys/net/ipv4/conf/eth0/arp_announce echo"0">/proc/sys/net/ipv4/conf/default/arp_ignore echo"0">/proc/sys/net/ipv4/conf/default/arp_announce echo"RealServerStoped" ;; status) #StatusofLVS-DRrealserver. islothere=`/sbin/ifconfiglo:0|grep$WEB_VIP` isrothere=`netstat-rn|grep"lo:0"|grep$WEB_VIP` if[!"$islothere"-o!"isrothere"];then #Eithertherouteorthelo:0device #notfound. echo"LVS-DRrealserverStopped." else echo"LVS-DRRunning." fi ;; *) #Invalidentry. echo"$0:Usage:$0{start|status|stop}" exit1 ;; esac exit0
將此腳本分別在4.198和4.248上執行下。此時,我們在兩臺keepalived的主機上可以查看到如下相同信息。
此時,我們通過網頁訪問10.68.4.199,時,根據ipvsadm查詢到的realserver主機的順序,可以看出此時優先訪問4.198.
而當我們將4.198這臺機器的httpd的服務停掉,首先可以看到兩臺keepalived主機都會將4.198這臺機器剔除,此時我們再次查詢時ipvsadm,只可以看到一臺web服務器,再次頁面訪問,這時就是在訪問4.248這臺機器了。
而當我們修復好4.198機器后,keepalived又會自動將改服務器添加進來。
從上面的測試可知,lvs的負載均衡功能已經實現。
6、我碰到過的問題
頁面乜有任何顯示,思來想去就是找不到問題出在哪? 后面從論壇上看到一位網友也出現同樣的問題,細問下才知導致這個問題出現是因為我們keepalived.conf 文件 的書寫格式存在問題,后面我回去重新檢查了下,發現少寫了一個 “}” keepalived啟動時不會檢測keepalived.conf 配置文件語法格式。 所以以后再配置書寫時,一定要格外注意啊。
網站欄目:Keepalived+lvs+httpd之負載均衡
文章來源:http://www.yijiale78.com/article48/cghiep.html
成都網站建設公司_創新互聯,為您提供靜態網站、營銷型網站建設、移動網站建設、微信小程序、網站制作、網站營銷
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯