1. 程式人生 > >初識千萬級高並發負載均衡軟件HaProxy

初識千萬級高並發負載均衡軟件HaProxy

負載均衡 haproxy 高並發

什麽是HaProxy?


負載均衡的實現方式一般有兩種方式,硬件負載均衡和軟件負載均衡,硬件負載均衡最具代表性的當屬F5,軟件負載均衡的實現方案很多,大致分為兩類,一種為操作系統級的負載均衡,另一種為第三方應用的軟件負載均衡。LVS就是基於操作系統的一種軟件負載均衡,HaProxy和Nginx等就是開源的基於第三方應用的軟件負載均衡。

HaProxy是TCP / HTTP 反向代理服務器,尤其適合於高可用性環境。HAProxy 可以在4和7兩層作負載均衡。它支持兩種主要的代理模式:"tcp"也即4層(大多用於郵件服務器、內部協議通信服務器、Mysql等),和7層HTTP的代理。在4層的代理模式下,haproxy僅在客戶端和服務器之間進行流量轉發。但是在7才能夠http代理模式下,haproxy會分析應用層協議,並且能通過允許,拒絕,交換,增加,修改或者刪除請求或者回應裏指定內容來控制協議。

HaProxy的安裝與配置


在紅帽官方發行的Linux版本的鏡像中以加入了haproxy的軟件包。所以用戶無需使用復雜的編譯安裝方式來安裝該軟件,可直接使用yum方式或者rpm方式安裝haproxy

[root@node1 ~]# yum -y install haproxy #安裝haproxy

[root@node1 ~]# rpm -qi haproxy #查看軟件信息

[root@node1 ~]# rpm -ql haproxy #查看軟件的文件列表

安裝完成後可使用如上命令來查看其信息和軟件列表,其中三個文件構成器軟件運行環境,即主程序,配置文件,服務啟動腳本。配置文件為

/etc/haproxy/haproxy.cfg

Haproxy配置

Haproxy的配置文件總體分為兩大段,全局配置段(global)和代理配置段(proxies)。

全局配置段:

主要配置進程及安全配置相關的參數性能調整相關參數和Debug的一些選項。這些參數一般只設置一次,如果配置無誤,就不需要再次配置進行修改。

代理配置段下分為四個子配置段:

defaults :為frontend, backend,listen 提供默認配置

frontend :前端,相當於nginx 中的server {}段,用於接收請求的前端虛擬節點,Frontend可以根據規則直接指定具體使用後端的backend(可動態選擇)

backend :後端,相當於nginx 中的upstream {}段,即後端服務集群的配置,是真實的服務器,一個Backend對應一個或者多個實體服務器

listen :同時擁有前端和後端,即frontend和backendde 組合體, 適用於一對一環境

配置文件詳解:

全局配置段

global

log 127.0.0.1 local2 #全局的日誌配置其中日誌級別是[err warning info debug],local2 是日誌設備,但是之前在/etc/syslog.conf文件中定義的是local0所以這裏也是用local2,同時支持把日誌存放與遠程的日誌服務器中,需對日誌服務進行陪孩子

chroot /var/lib/haproxy

pidfile /var/run/haproxy.pid

maxconn 4000 #默認最大連接數

user haproxy #運行haproxy的用戶

group haproxy #運行haproxy的用戶

daemon #使HAProxy進程進入後臺運行(守護進程方式)。這是推薦的運行模式

nbproc 2 #要啟動的haproxy 的進程數量,系統默認單進程,要求使用daemon

maxconnrate <number> :設置每個進程每秒種所能建立的最大連接數量

maxsessrate <number> :設置每個進程每秒種所能建立的最大會話數量

maxsslconn <number>: 每進程支持SSL 的最大連接數量

spread-checks <0..50, in percent> 健康檢測延遲時長比,建議2-5 之間

默認配置段

defaults

mode http #默認使用http代理,做配置時註意

log global #使用全局默認日誌配置

option httplog #采用http日誌格式

option dontlognull

option http-server-close

option forwardfor except 127.0.0.0/8

option redispatch #如果cookie寫入了serverId而客戶端不會刷新cookie,當serverId對應的服務器掛掉後,強制定向到其他健康的服務器

retries 3

timeout http-request 10s #請求超時時間

timeout queue 1m

timeout connect 10s #連接超時時間

timeout client 1m #客戶端超時時間

timeout server 1m #服務端超時時間

timeout http-keep-alive 10s #持久連接超時時間

timeout check 10s #心跳檢測超時時間

maxconn 3000

Frontend ,backend,listen配置選項詳解:

Bind:指定一個或者多個前端偵聽地址和端口,用於listen,Frontend段

示例:

listen http_proxy

bind :80,:443

bind 10.0.0.1:10080,10.0.0.1:10443

bind /var/run/ssl-frontend.sock user root mode 600 accept-proxy

Balance後端服務器組內的調度算法,用於default, backend,listen段

用法:balance <algorithm> [<arguments> ]

balance url_param <param>[check_post]

調度算法種類:

roundrobin基於權重輪詢,動態算法,支持權重的運行時調整,支持慢啟動;每個後端backend 中最多支持4095 個server

serveroptionsweight #

static-rr基於權重輪詢,靜態算法,不支持權重的運行時調整及慢啟動;後端主機數量無上限

leastconn加權最少連接,動態算法,最少連接的後端服務器優先分配接收新連接,相同連接時輪詢,推薦在較長會話的場景使用 ,例如MySQL 、LDAP 等,不適合http

first根據服務器在列表中的位置,自上而下進行調度;前面服務器的連接數達到上限,新請求才會分配給下一臺服務

source源地址hash ,新連接先按權重分配,後續連接按source 分配請求

uri對URI 的左半部分或整個uri 做hash 計算,並除以服務器總權重取模,以後派發至某挑出的服務器, 適用於後端緩存服務器

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

左半部分:/<path>;<params>

整個uri /<path>;<params>?<query>#<frag>

url_param對用戶請求的uri 中的<params>部分中的參數的值作hash 計算,並由服務器總權重相除以後派發至某挑出的服務器;通常用於追蹤用戶,以確保來自同一個用戶的請求始終發往同一個Backend Server

hdr(<name>)對於每個http 請求,此處由<name> 指定的http 首部將會被取出做hash;計算; 並由服務器總權重相除以後派發至某挑出的服務器; 無 有效值的會被輪詢調度

rdp-cookie 遠程桌面相關

rdp-cookie(<name>)

hash-type 哈希算法,用於default,listen,backend配置段

hash-type <method> <function><modifier>

method:

map-based除權取余法,哈希數據結構是靜態數組

consistent一致性哈希,哈希數據結構是一棵樹

<function>: 哈希函數

sdbmdjb2 wt6

default_backend <backend>

無use_backend 匹配時,使用默認的backend,用於frontend中,或者defaults和listen中

default-server [param*]

為backend 中的各server設定默認選項,用於default,listen,backend配置段

server <name><address>[:[port]] [param*]

定義後端主機的各服務器及其選項,用於listen和backend中。

server <name> <address>[:port] [settings ...]

default-server [settings ...]

<name> :服務器在haproxy 上的內部名稱;出現在日誌及警告信息

<address> :服務器地址,支持使用主機名

[:[port]] :端口映射;省略時,表示同bind 中綁定的端口

[param*] :參數

weight <weight> :權重,默認為1

maxconn <maxconn> :當前後端server 的最大並發連接數

backlog <backlog> :當server 的連接數達到上限後的後援隊列長度

backup :設定當前server 為備用服務器Sorry Server

Haproxy的配置選項眾多,不能詳盡,讀者可查看其官方文檔進行學習。

https://cbonte.github.io/haproxy-dconv/


本文出自 “Keep simple keep stupid” 博客,請務必保留此出處http://yangzhiheng.blog.51cto.com/11586378/1979161

初識千萬級高並發負載均衡軟件HaProxy