您好,登錄后才能下訂單哦!
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關鍵字,指定使用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
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設定默認選項
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。