Haproxy搭建web集羣

Haproxy搭建web集羣
重點內容1:
1.四層負載均衡:
1)DNS輪詢:將同一個域名解析爲多個不同的ip地址實現負載均衡。
2)Nginx負載均衡:通過定義upstream 組名 {server ip:port weight=權重;…}後端服務,然後通過proxy_pass http://組名實現負載均衡
3)LVS負載均衡:通過ipvsadm定義VIP(集羣IP)和real server(後端服務器)調用linux內核(kernel)模塊ip_vs實現負載均衡。
2.haproxy負載均衡:通過定義listen(監聽),在監聽使用server定義後端web服務器,在balance指定調度算法實現負載均衡。
3.七層代理:
1)squid代理:在網站的前端搭建squid爲用戶訪問提速,並提供ACL(訪問控制列表)功能。
2)nginx代理:proxy_pass及其他參數實現七層代理。
3)haproxy代理:通過監聽將用戶和後端服務進行映射實現代理。
4)apache代理:apache代理較爲少用,主要是因爲性能不佳。
總之:LVS性能最好,但配置複雜;nginx對集羣節點健康檢查功能不強,性能不如haproxy。
重點內容2: HTTP請求:
1.http請求:通過URL(統一資源定位符)訪問網站就是http請求。
2.http請求狀態碼:URL訪問網站時會有一個數字表示請求的結果,如果2xx或3xx(如200/301)表示網站能正常訪問,如果是4xx或5xx(如404/500)表示訪問網站錯誤。
重點內容3: 負載均衡常用調度算法及web集羣調度器:
1.負載均衡常用調度算法:RR(輪詢,依次分發任務)、LC(最小連接,根據當前集羣節點處理請求量,將任務分發給處理請求量小的節點)、SH(來源訪問調度算法,根據客戶端的ip或cookie判斷客戶端上一次訪問的後端服務器並分發任務至此後端服務器)
2.常見的web集羣調度器:DNS輪詢、nginx代理、LVS負載均衡、haproxy代理、硬件設備(如F5、梭子魚、綠盟)負載均衡器。
重點內容4: 部署HAPROX+nginx:
1.安裝nginx
2.安裝haproxy並配置haproxy
重點內容5: Haproxy配置文件:/etc/haproxy/haproxy.cfg
1)全局配置:
global # 全局參數的設置
log 127.0.0.1 local2

log語法:log <address_1>[max_level_1]

# 全局的日誌配置,使用log關鍵字,指定使用127.0.0.1上的syslog服務中的local0日誌設備,記錄日誌等級爲info的日誌
chroot      /var/lib/haproxy      #改變當前工作目錄
pidfile     /var/run/haproxy.pid    #當前進程id文件
maxconn     4000           #最大連接數
user        haproxy         #所屬用戶
group       haproxy         #所屬組
daemon                     #以守護進程方式運行haproxy
stats socket /var/lib/haproxy/stats  #基於本地的文件傳輸

2)proxies(代理)配置參數:
mode http
#默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK
log global
#應用全局的日誌配置
option httplog

啓用日誌記錄HTTP請求,默認haproxy日誌記錄是不記錄HTTP請求日誌

option dontlognull

啓用該項,日誌中將不會記錄空連接。所謂空連接就是在上游的負載均衡器或者監控系統爲了探測該服務是否存活可用時,需要定期的連接或者獲取某一固定的組件或頁面,或者探測掃描端口是否在監聽或開放等動作被稱爲空連接;官方文檔中標註,如果該服務上游沒有其他的負載均衡器的話,建議不要使用該參數,因爲互聯網上的惡意掃描或其他動作就不會被記錄下來

option http-server-close
#每次請求完畢後主動關閉http通道
option forwardfor except 127.0.0.0/8
#如果服務器上的應用程序想記錄發起請求的客戶端的IP地址,需要在HAProxy上配置此選項, 這樣 HAProxy會把客戶端的IP信息發送給服務器,在HTTP請求中添加"X-Forwarded-For"字段。啓用X-Forwarded-For,在requests頭部插入客戶端IP發送給後端的server,使後端server獲取到客戶端的真實IP。
option redispatch
#當使用了cookie時,haproxy將會將其請求的後端服務器的serverID插入到cookie中,以保證會話的SESSION持久性;而此時,如果後端的服務器宕掉了, 但是客戶端的cookie是不會刷新的,如果設置此參數,將會將客戶的請求強制定向到另外一個後端server上,以保證服務的正常。
retries 3

定義連接後端服務器的失敗重連次數,連接失敗次數超過此值後將會將對應後端服務器標記爲不可用

timeout http-request 10s #http請求超時時間
timeout queue 1m #一個請求在隊列裏的超時時間
timeout connect 10s #連接超時
timeout client 1m #客戶端超時
timeout server 1m #服務器端超時
timeout http-keep-alive 10s #設置http-keep-alive的超時時間
timeout check 10s #檢測超時
maxconn 3000 #每個進程可用的最大連接數
frontend main :80 #監聽地址爲80
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js
use_backend static if url_static
default_backend my_webserver
#定義一個名爲my_webserver前端部分。此處將對應的請求轉發給後端
backend static
#使用了靜態動態分離(如果url_path匹配 .jpg .gif .png .css .js靜態文件則訪問此後端)
balance roundrobin
#負載均衡算法(#banlance roundrobin 輪詢,balance source 保存session值,支持static-rr,leastconn,first,uri等參數)
server static 127.0.0.1:80 check
#靜態文件部署在本機(也可以部署在其他機器或者squid緩存服務器)
backend my_webserver
#定義一個名爲my_webserver後端部分。PS:此處my_webserver只是一個自定義名字而已,但是需要與frontend裏面配置項default_backend 值相一致
balance roundrobin #負載均衡算法
server web01 172.31.2.33:80 check inter 2000 fall 3 weight 30 #定義的多個後端
server web02 172.31.2.34:80 check inter 2000 fall 3 weight 30 #定義的多個後端
server web03 172.31.2.35:80 check inter 2000 fall 3 weight 30 #定義的多個後端
3)server詳解:
server <name> <address>[:[port]] [param
]
定義後端主機的各服務器及其選項 server <name> <address>[:port] [settings ...] default-server [settings ...]
<name>:服務器在haproxy上的內部名稱;出現在日誌及警告信息
<address>:服務器地址,支持使用主機名
[:[port]]:端口映射;省略時,表示同bind中綁定的端口
[param]:參數
check:對當前server做健康狀態檢測,只用於四層檢測
注意:httpchk,“smtpchk”, “mysql-check”, “pgsql-check” and “sslhello-chk” 用於定義應用層檢測方法
addr :檢測時使用的IP地址
port :針對此端口進行檢測
inter <delay>:連續兩次檢測之間的時間間隔,默認爲2000ms
rise <count>:連續多少次檢測結果爲“成功”才標記服務器爲可用 ;默認爲2
fall <count>:連續多少次檢測結果爲“失敗”才標記服務器爲不可 用;默認爲3
cookie <value>:爲當前server指定cookie值,實現基於cookie的會話黏性
disabled:標記爲不可用
redir <prefix>:將發往此server的所有GET和HEAD類的請求重定向至指 定的URL
weight <weight>:權重,默認爲1
maxconn <maxconn>:當前server的最大併發連接數
backlog <backlog>:當server的連接數達到上限後的後援隊列長度
backup:設定當前server爲備用服務器
default-server [param
] 爲backend中的各server設定默認選項

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章