HAProxy-keepalived負載均衡及基於域名動靜分離
專案環境:
系統版本:centos6.6-x86kernel:2.6
HAproxy版本:haproxy-1.5.2-2.el6.x86_64
Keepalived版本:keepalived-1.2.13-4.el6.x86_64
拓撲結構:
前端使用HAproxy排程客戶請求,部署keepalived避免單節點故障,有兩個站點www.test.com和www.dragon.com的業務需求,後端部署四臺伺服器為兩個站點做動靜分離,把www.dragon.com的DNS解析到虛擬IP:22.22.22.251,把www.test.com的DNS解析到虛擬IP22.22.22.252,又利用keepalived
配置Haproxy:
global log127.0.0.1local0notice//local0是日誌裝置,info是日誌記錄級別(err,warning,info,debug),可以在系統日誌裡檢視 maxconn5535//HAproxy接受的最大連線數,還要注意linux檔案接受的最大連線數,用命令"ulimit-n"看以檢視,在/etc/security/limit.conf可以永久修改。 chroot/usr/local/haproxy// usernobody//程序使用者 groupnobody//程序組 nbproc1//程序可以建立的程序數,建議小於伺服器的cpu數 daemon//後臺執行 defaults optionhttplog//記錄http日誌 modehttp//http模式,不與RFC格式相容的請求都會被拒絕,還有TCP模式作為4層轉發,多用於SSL,SSH,SMTP optiondontlognull retries3//連線失敗後重試此樹 maxconn5535 timeoutconnect5s//連線後端伺服器的最長等待時間 timeoutserver30s//服務端迴應客戶端資料傳送的最長等待時間 timeoutclient30s//連線客戶端傳送資料的最長等待時間 timeoutcheck5s//每5s檢驗一次後端伺服器 statsrefresh30s//後端伺服器健康狀態重新整理時間 statsuri/stats//通過瀏覽器可以檢視業務狀態,例如:www.w4ya.com/stats statsrealmwelcome//提示資訊 statsauthadmin:dragon123//檢視HA監控後端狀態時的帳號密碼驗證 statshide-version//不顯示haproxy的版本資訊 frontendwww bind:80 aclhost_webhdr(host)-iwww.draon.com//定義ACL匹配域名www.dragon.com aclurl_staticpath_end.html.css.jpg//定義ACL匹配靜態檔案 aclhost_testhdr_dom(host)-iwww.test.com//定義ACL匹配域名www.test.com aclurl_dynamicpath_end.php.jsp//定義ACL匹配動態 use_backendweb-dynamic-serverifhost_weburl_dynamic //如果域名為www.dragon.com和頁面是動態的,則把請求排程給web-dynamic-server use_backendweb-static-serverifhost_weburl_static||host_web //如果域名為www.test.com和頁面是靜態的,或則域名為www.dragon.com,則把請求排程給web-static-server use_backendtest-dynamic-serverifhost_testurl_dynamic use_backendtest-static-serverifhost_testurl_static||host_test backendweb-static-server//定義www.dragon.com動態頁面的管理叢集 modehttp balanceroundrobin//負載均衡演算法為輪詢 optionredispatch//保持cookie環境,使客戶機的session持久連線。 optionabortonclose//在伺服器高負載時,自動放棄佇列中處理時間較長的連線 optionhttpchkGET/index.html/通過請求後端http服務的頁面,判斷狀態 serverweb01192.168.1.118:80checkinter2000rise2fall3weight10 //後端響應的伺服器,根據需求可能會有多個。 ckeck:表示啟用對後端伺服器的健康檢查 rise:由故障切換會正常需要進行的檢查次數 fall:由正常到故障認定檢查的次數 weight:權重 backendweb-dynamic-server modehttp optionredispatch optionabortonclose optionhttpchkGET/index.php balanceroundrobin serverweb02192.168.1.111:80checkinter2000rise2fall3weight10 backendtest-static-server modehttp optionredispatch optionabortonclose optionhttpchkGET/index.html balanceroundrobin servertest01192.168.1.117:80checkinter2000rise2fall3weight10 backendtest-dynamic-server modehttp optionredispatch optionabortonclose optionhttpchkGET/index.php balanceroundrobin servertest02192.168.1.114:80checkinter2000rise2fall3weight10 HA1和HA2的配置檔案都是一樣的。
請求www.dragon.com和靜態頁面:
請求www.dragon.com和動態頁面:
請求www.test.com和靜態頁面:
請求www.test.com和動態頁面:
檢視HA檢測的後端服務叢集健康狀況:
配置keepalived:
global_defs{//全域性配置 notification_email{//報警郵箱 [email protected] [email protected] [email protected] } notification_email_from[email protected] smtp_server220.181.12.11smtpserver地址 smtp_connect_timeout30smtp連線超時 router_idhaproxy_DEVEL郵箱主題資訊 } vrrp_scriptcheck_haproxy{ script"killall-0haproxy"//對HAproxy的健康檢查 interval2 } vrrp_instanceVI_1{//例項標識 stateMASTER//設定為MASTER#另一keepalived配置這裡為SLAVE或者BACKUP interfaceeth2//指定HA監聽的網絡卡 virtual_router_id51//虛擬路由ID priority100//MASTER選舉的優先順序#另一keepalived配置改為80 advert_int1//MASTER和BACKUP的同步檢查時間間隔 authentication{//MASTER和BACKUP密碼驗證 auth_typePASS auth_pass1234 } track_script{//呼叫HA檢查 check_haproxy } virtual_ipaddress{//虛擬IP,可以有多個 22.22.22.251/24deveth2 } nopreempt//故障恢復以後,不搶奪VIP重回MASTER. nopreempt_delay300//搶佔延時 } vrrp_instanceVI_2{ stateMASTER#另一keepalived配置為MASTER interfaceeth2 virtual_router_id52 priority80#另一keepalived配置為100 advert_int1 authentication{ auth_typePASS auth_pass1234 } track_script{ check_haproxy } virtual_ipaddress{ 22.22.22.252/24deveth2 } } 需要注意兩個keepalived配置檔案不同的地方已經用#註釋
檢視keepalived執行效果:
[email protected] ~]# cat /var/log/messages
這裡例項VI_1進入BACKUP狀態,VI_2發現自己優先順序比對方的高切換成MASTER狀態,並把VIP:22.22.22.252加入了eth2網絡卡
檢視虛擬IP:
這裡例項VI_1進入MASTER,VI_2也進入了MASTER但後來發現網路中有更高優先順序的keepalived主機,自動切換回BACKUP狀態.
檢視虛擬IP:
模擬Haproxy發生故障:
在其中一臺機停掉Haproxy [[email protected]~]#servicehaproxystop 停止haproxy:[確定]
另一臺主機獲取故障Haproxy的VIP接管工作:
轉載於:https://blog.51cto.com/dragon123/1589801