Haproxy是目前比較流行的一種集羣調度工具,與同類集羣調度工具LVS和Nginx相比,LVS性能最好,可是搭建相對複雜,Nginx的upstream模塊支持集羣功能,可是對集羣節點健康檢查功能不強,性能沒有Haproxy好。nginx
LVS、Haproxy、Nginx最經常使用的調度算法有三種,分別是RR(Round Robin)輪詢、LC(Least Connection)最小鏈接數、SH(Source Hashing)基於來源訪問。web
案例環境redis
單臺Haproxy服務器就能夠實現多臺Web服務器之間的熱備和負載均衡,這裏使用Keepalived保證了Haproxy自己的高可用。算法
1、Haproxy服務器的安裝與配置服務器
1.編譯安裝Haproxy網絡
安裝兩個支持包負載均衡
將haproxy編譯到內核中ide
安裝工具
2.Haproxy服務器配置性能
建立配置文件目錄
複製源碼包中的配置文件做爲模版進行修改
Haproxy配置文件一般分爲三個部分:global(全局配置)、defaults(默認配置)、listen(應用組件配置)。
以示例參數說明以下:
global
log127.0.0.1 local0 //配置日誌記錄,local0爲日誌設備,默認存放到系統日誌
log127.0.0.1 local1notice //notice爲日誌級別,一般有24個級別
maxconn 4096 //最大鏈接數
uid99 //所屬運行的用戶UID
gid99 //所屬運行的用戶GID
pidfile /var/run/haproxy.pid //pid文件存放路徑
daemon //之後臺形式運行haproxy
defaults
logglobal //定義日誌爲global配置中的日誌定義
mode http //模式爲http
option httplog //採用http日誌格式概率日誌
option dontlognull //不記錄健康檢查的日誌信息
option redispatch //serverId對應的服務器掛掉後,強制定向到其餘健康的服務器
option httpclose //每次請求完畢後主動關閉http通道
retries3 //3次鏈接失敗就認爲服務不可用
maxconn 2000 //最大鏈接數
contimeout 5000 //鏈接超時時間
clitimeout 50000 //客戶端超時間
srvtimeout 50000 //服務器超時時間
listen webcluster 0.0.0.0:80
//Frontend和Backend的組合體,監控組的名稱,按需自定義名稱,點聽80端口。
option httpchk POST /index.htm //心跳檢測的文件
balance roundrobin //負載調度使用輪詢算法
server inst1 192.168.1.20:80 check inter 2000 fall 3
//服務器定義,check inter 2000表示檢測心跳頻率,fall 3是3次失敗認爲服務器不可用
server inst1 192.168.1.21:80 check inter 2000 fall 3
3.建立自啓動腳本
複製源碼包中的服務腳本做爲haproxy程序的控制腳本
優化並添加系統服務
啓動haproxy服務
開啓iptables防火牆80端口的例外
nginx服務器的搭建,這裏再也不演示,爲了測試負載均衡,要在兩臺web服務器上建立不一樣的內容的網頁。
在客戶機上訪問haproxy 01,兩次看到的內容不一樣,說明負載均衡已經實現。
若是要測試高可用,只須要停用一臺nginx服務器,在客戶機上再次訪問haproxy 01,這時候只能看到一種內容的網頁,而且刷行網頁不會出現報錯,說明高可用也已經實現。
2、使用keepalived實現Haproxy自己的高可用
1.編譯安裝keepalived
安裝keepalived以前須要安裝三個支持包
編譯安裝keepalived,使用指定的內核位置對keepalived進行配置,並將安裝路徑指定爲根目錄,這樣就無需額外建立連接文件了。
添加系統服務
2.主服務器的配置
global_defs{…} //指定全局參數
router_id //指定本服務器名稱
vrrp_instance 實例名稱 { ... } //指定VRRP熱備實例
state //指定熱備狀態
virtual_router_id //虛擬路由器的ID號,每一個熱備組保持一致
priority //優先級,數值越大優先級越高
advert_int //通告間隔秒數(心跳頻率)
authentication {…} //認證信息,每一個熱備組保持一致
auth_type //認證類型
auth_pass //密碼子串
virtual_ipaddress{…} //指定漂移地址,能夠有多個
重啓keepalived服務
在haproxy 01上部署完keepalived服務後,查看網卡的信息,發現eth0接口自動添加了VIP地址。
3.備用服務器的配置
在haproxy 02上安裝keepalived的過程同樣,只是配置文件中主要有三處不一樣:路由器名稱、熱備狀態、優先級。
能夠在haproxy 02上直接複製第一臺的配置文件
修改這三處便可
重啓keepalived服務
查看網絡接口信息,發現eth0接口沒有添加VIP地址。
在客戶機訪問VIP的地址,打開兩次後發現一樣能夠實現負載均衡的效果。
若是,要測試haproxy自己的高可用,只要停用haproxy 01,而後在客戶端再次訪問VIP地址便可。
3、Haproxy日誌
Haproxy的日誌默認是輸出到系統的syslog中(即/var/log/message),查看不方便。因此,能夠將其單獨定義出來。
1.修改Haproxy配置文件關於日誌配置的選項
這裏主要是將Haproxy的info及notice日誌分別記錄到不一樣的日誌文件中。
重啓haproxy服務
2.修改rsyslog配置
爲了便於管理,將haproxy相關的配置獨立定義到haproxy.conf,並放到/etc/rsyslog.d/下,rsyslog啓動時會自動加載此目錄下的全部配置文件。
在haproxy.conf中加入以上內容
「& ~」表示當日志寫入到日誌文件後,rsyslog中止處理這個信息。
重啓rsyslog服務
即時查看日誌信息,在客戶端訪問haproxy 01服務器後,便會彈出新的日誌信息。