1. 程式人生 > 實用技巧 >HAProxy-keepalived負載均衡及基於域名動靜分離

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



拓撲結構:

wKiom1SNMFqQs7U6AAE-uuvWhxc645.jpg


wKioL1SNMPah1b2cAAFkXmIndYY757.jpg

前端使用HAproxy排程客戶請求,部署keepalived避免單節點故障,有兩個站點www.test.comwww.dragon.com的業務需求,後端部署四臺伺服器為兩個站點做動靜分離,www.dragon.comDNS解析到虛擬IP22.22.22.251,把www.test.comDNS解析到虛擬IP22.22.22.252,又利用keepalived

相互備份,做HA的主機我採用兩網絡卡,一張負責接受請求,一張負責連線內網。



配置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和靜態頁面:

wKioL1SNMifjTgJEAACbWJlpPrE361.jpg

wKioL1SNO_LhfrYLAACheS_cvLA778.jpg

請求www.dragon.com和動態頁面:

wKiom1SNMdOxNbYrAAFeAIFBh4A365.jpg


請求www.test.com和靜態頁面:

wKioL1SNPGqQX2RLAACMdIFd7-8187.jpg

wKiom1SNO6bwORXMAACVUCNmyqo615.jpg

請求www.test.com和動態頁面:

wKioL1SNMruAluMsAAGQdLyHmlI036.jpg

檢視HA檢測的後端服務叢集健康狀況:

wKioL1SNMurBWnlVAAnzZ7wjtWg898.jpg




配置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

wKiom1SNM0bC_MVCAAUxHLS-QlE808.jpg

這裡例項VI_1進入BACKUP狀態,VI_2發現自己優先順序比對方的高切換成MASTER狀態,並把VIP:22.22.22.252加入了eth2網絡卡

檢視虛擬IP:

wKiom1SNOvzBZgPBAAHF9BATbpg796.jpg


wKioL1SNM9GDVJVaAAXDt_NGKUQ253.jpg

這裡例項VI_1進入MASTER,VI_2也進入了MASTER但後來發現網路中有更高優先順序的keepalived主機,自動切換回BACKUP狀態.

檢視虛擬IP:

wKiom1SNNnyQxnHpAAGwZryC8ZI701.jpg



模擬Haproxy發生故障:

在其中一臺機停掉Haproxy
[[email protected]~]#servicehaproxystop
停止haproxy:[確定]

另一臺主機獲取故障Haproxy的VIP接管工作:

wKioL1SNN_yAg5qYAAIcfWEws1Y563.jpg


轉載於:https://blog.51cto.com/dragon123/1589801