新聞中心
這里有您想知道的互聯(lián)網營銷解決方案
CentOS7.2部署Haproxy1.7.2
- haproxy:http://www.haproxy.org/
本文涉及haproxy的安裝,并做簡單配置。

一.環(huán)境準備
1. 操作系統(tǒng)
centos-7-x86_64-Everything-1511
2. Haproxy版本
截至2017-02-23,haproxy穩(wěn)定版本是1.7.2: http://www.haproxy.org/download/1.7/src/haproxy-1.7.2.tar.gz
3. 拓撲圖
- haproxy服務器采用VMware ESXi虛擬出的1臺服務器,前端訪問地址10.11.4.152,后端地址192.168.4.152;1
- Web1服務器為采用docker技術生成的1臺服務器,已安裝并啟動nginx服務,ip地址192.168.4.171;
- Web2同Web1服務器,ip地址192.168.4.172;
- 設置web1/2測試頁面(路徑參考nginx安裝步驟),以方便后續(xù)查看驗證結果。
二.Haproxy安裝
1. 下載
[root@elk-node2 ~]# cd /usr/local/src/ [root@elk-node2 src]# wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.2.tar.gz
2. 編譯安裝
#”TARGET”指定編譯對應的os對應的內核版本,通過”uname -r”查詢內核版本呢,README文件可查詢對應關系 [root@elk-node2 src]# tar -zxvf haproxy-1.7.2.tar.gz [root@elk-node2 src]# cd haproxy-1.7.2 [root@elk-node2 haproxy-1.7.2]# make TARGET=linux2628 PREFIX=/usr/local/haproxy [root@elk-node2 haproxy-1.7.2]# make install PREFIX=/usr/local/haproxy
三.Haproxy配置
1. 配置用戶
[root@elk-node2 ~]# groupadd haproxy [root@elk-node2 ~]# useradd -g haproxy haproxy -s /sbin/nologin
2. 配置文件
1)配置文件詳解
#默認安裝目錄下沒有配置文件,只有”doc”,“sbin”,“share”三個目錄,可手工創(chuàng)建目錄及配置文件;
#haproxy的配置文件主要是以下5部分:global全局配置、defaults默認配置、監(jiān)控頁面配置、frontend配置、backend配置
[root@elk-node2 ~]# mkdir -p /usr/local/haproxy/etc
[root@elk-node2 ~]# cd /usr/local/haproxy/etc/
[root@elk-node2 etc]# vim haproxy.cfg
#全局配置, 用于設定義全局參數(shù), 屬于進程級的配置, 通常與操作系統(tǒng)配置有關.
global
#定義全局日志, 配置在本地, 通過local0 輸出, 默認是info級別,可配置兩條
log 127.0.0.1 local0 warning
#定義日志級別【error warning info debug】
#log 127.0.0.1 local1 info
#運行路徑
chroot /usr/local/haproxy
#PID 文件存放路徑
pidfile /var/run/haproxy.pid
#設置每haproxy進程的最大并發(fā)連接數(shù), 其等同于命令行選項“-n”; “ulimit -n”自動計算的結果參照此參數(shù)設定.
maxconn 4096
#運行haproxy 用戶, 或者使用關鍵字uid
user haproxy
#運行haproxy 用戶組, 或者使用關鍵字gid
group haproxy
#后臺運行haproxy
daemon
#設置啟動的haproxy進程數(shù)量, 只能用于守護進程模式的haproxy;
#默認只啟動一個進程, 鑒于調試困難等多方面的原因, 一般只在單進程僅能打開少數(shù)文件描述符的場景中才使用多進程模式.
nbproc 1
#設置每進程所能夠打開的最大文件描述符數(shù)目, 默認情況其會自動進行計算, 因此不推薦修改此選項.
#ulimit-n 819200
#調試級別, 一般只在開啟單進程時調試, 且生產環(huán)境禁用.
#debug
#haproxy啟動后不會顯示任何相關信息, 這與在命令行啟動haproxy時加上參數(shù)“-q”相同
#quiet
#定義統(tǒng)計信息保存位置
stats socket /usr/local/haproxy/stats
#默認配置
defaults
#默認的模式【tcp:4層; http:7層; health:只返回OK】
mode http
#繼承全局的日志定義輸出
log global
#日志類別, httplog
#option httplog
#如果后端服務器需要記錄客戶端真實ip, 需要在HTTP請求中添加”X-Forwarded-For”字段;
#但haproxy自身的健康檢測機制訪問后端服務器時, 不應將記錄訪問日志,可用except來排除127.0.0.0,即haproxy本身.
#option forwardfor except 127.0.0.0/8
option forwardfor
#開啟http協(xié)議中服務器端關閉功能, 每個請求完畢后主動關閉http通道, 使得支持長連接,使得會話可以被重用,使得每一個日志記錄都會被記錄.
option httpclose
#如果產生了一個空連接,那這個空連接的日志將不會記錄.
option dontlognull
#當與后端服務器的會話失敗(服務器故障或其他原因)時, 把會話重新分發(fā)到其他健康的服務器上; 當故障服務器恢復時, 會話又被定向到已恢復的服務器上;
#還可以用”retries”關鍵字來設定在判定會話失敗時的嘗試連接的次數(shù)
option redispatch
retries 3
#當haproxy負載很高時, 自動結束掉當前隊列處理比較久的鏈接.
option abortonclose
#默認http請求超時??間
timeout http-request 10s
#默認隊列超時時間, 后端服務器在高負載時, 會將haproxy發(fā)來的請求放進一個隊列中.
timeout queue 1m
#haproxy與后端服務器連接超時時間.
timeout connect 5s
#客戶端與haproxy連接后, 數(shù)據傳輸完畢, 不再有數(shù)據傳輸, 即非活動連接的超時時間.
timeout client 1m
#haproxy與后端服務器非活動連接的超時時間.
timeout server 1m
#默認新的http請求連接建立的超時時間,時間較短時可以盡快釋放出資源,節(jié)約資源.
timeout http-keep-alive 10s
#心跳檢測超時時間
timeout check 10s
#最大并發(fā)連接數(shù)
maxconn 2000
#設置默認的負載均衡方式
#balance source
#balnace leastconn
#統(tǒng)計頁面配置, frontend和backend的組合體, 監(jiān)控組的名稱可按需自定義
listen admin_status
#配置監(jiān)控運行模式
mode http
#配置統(tǒng)計頁面訪問端口
bind 0.0.0.0:1080
#統(tǒng)計頁面默認最大連接數(shù)
maxconn 10
#http日志格式
option httplog
#開啟統(tǒng)計
stats enable
#隱藏統(tǒng)計頁面上的haproxy版本信息
stats hide-version
#監(jiān)控頁面自動刷新時間
stats refresh 30s
#統(tǒng)計頁面訪問url
stats uri /stats
#統(tǒng)計頁面密碼框提示文本
stats realm mCloud\ Haproxy
#監(jiān)控頁面的用戶和密碼:admin, 可設置多個用戶名
stats auth admin:admin
#手工啟動/禁用后端服務器, 可通過web管理節(jié)點
stats admin if TRUE
#設置haproxy錯誤頁面
errorfile 400 /usr/local/haproxy/errorfiles/400.http
errorfile 403 /usr/local/haproxy/errorfiles/403.http
errorfile 408 /usr/local/haproxy/errorfiles/408.http
errorfile 500 /usr/local/haproxy/errorfiles/500.http
errorfile 502 /usr/local/haproxy/errorfiles/502.http
errorfile 503 /usr/local/haproxy/errorfiles/503.http
errorfile 504 /usr/local/haproxy/errorfiles/504.http
#監(jiān)控haproxy后端服務器的監(jiān)控狀態(tài)
listen site_status
bind 0.0.0.0:1081 #監(jiān)聽端口
mode http #http的7層模式
log 127.0.0.1 local2 err #[err warning info debug]
monitor-uri /site_status #網站健康檢測URL,用來檢測HAProxy管理的網站是否可以用,正常返回200,不正常返回503
acl site_dead nbsrv(php_server) lt 1 #定義網站down時的策略當掛在負載均衡上的指定backend的中有效機器數(shù)小于1臺時返回true
acl site_dead nbsrv(html_server) lt 1
acl site_dead nbsrv(backend_default) lt 1
monitor fail if site_dead #當滿足策略的時候返回503,網上文檔說的是500,實際測試為503
monitor-net 192.168.4.171/32 #來自192.168.4.152的日志信息不會被記錄和轉發(fā)
monitor-net 192.168.4.172/32
#frontend, 名字自定義
frontend HAproxy_Cluster
#定義前端監(jiān)聽端口, 建議采用bind *:80的形式,否則做集群高可用的時候有問題,vip切換到其余機器就不能訪問.
bind 0.0.0.0:80
#acl后面是規(guī)則名稱,當請求的url末尾是以.php結尾時,匹配觸發(fā)php_web規(guī)則,以下兩種寫法均可.
acl php_web url_reg /*.php
#當請求的url末尾是以.css、.jpg、.png、.jpeg、.js、.gif結尾時,匹配并觸發(fā)static_web規(guī)則.
#acl static_web path_end .gif .png .jpg .css .js .jpeg
#acl static_web url_reg /*.(css|jpg|png|jpeg|js|gif)$
#-i為忽略大小寫,當被請求的是以www.test.com開頭的主機時,匹配并觸發(fā)dns_name規(guī)則.
acl html_web hdr_beg(host) -i www.haproxytest.com
#acl html_web hdr_beg(host) 10.11.4.152
#當客戶端的IP是x.x.x.x時,匹配并觸發(fā)src_ip規(guī)則.
#acl src_ip src x.x.x.x
#如果匹配acl規(guī)則php_web,將請求轉交到php_server組處理;如果匹配acl規(guī)則html_web,將請求轉交到html_server組處理.
use_backend php_server if php_web
use_backend html_server if html_web
#如果以上規(guī)則都不匹配時,將請求轉交到default_backend組處理.
default_backend backend_default
#backend后端配置, 配置php_server組與html_server組
backend php_server
#定義負載均衡方式為roundrobin方式, 即基于權重進行輪詢調度的算法, 在服務器性能分布較均勻情況下推薦.
#另有如下幾種負載均衡方式:
#-- static-rr: 也是基于權重進行輪轉調度, 但屬于靜態(tài)方法, 運行時調整后端機組權重不會使用新的權重;
#-- source: 基于請求源IP進行hash運算匹配后端服務器組;
#-- leastconn: 不適合會話較短的環(huán)境, 如基于http的應用;
#-- uri: 對整個URI進行hash運算;
#-- uri_param: 對URI中的參數(shù)進行轉發(fā);
#-- hdr():根據http頭進行轉發(fā), 無該頭部則轉為使用roundrobin.
balance roundrobin
mode http
#允許插入serverid到cookie中,serverid后面可定義
cookie SERVERID
#心跳檢測方式為檢測后端服務器index.html文件,還有其他方式
option httpchk GET /index.html
#后端服務器定義, maxconn 1024表示該服務器的最大連接數(shù), cookie 1表示serverid為1, weight代表權重(默認1,最大為265,0則表示不參與負載均衡),
#check inter 1500是檢測心跳頻率, rise 2是2次正確認為服務器可用, fall 3是3次失敗認為服務器不可用.
server php1 192.168.4.171:80 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 3
backend html_server
balance source
mode http
server html1 192.168.4.172:80 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 3
backend backend_default
balance source
mode http
server default1 192.168.4.171:80 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 3
2)error文件
#配置文件中統(tǒng)計監(jiān)控頁面部分定義了error文件,將安裝包中的文件復制到安裝目錄使用 [root@elk-node2 ~]# cp -r /usr/local/src/haproxy-1.7.2/examples/errorfiles/ /usr/local/haproxy/
當前名稱:CentOS7.2部署Haproxy1.7.2
文章URL:http://fisionsoft.com.cn/article/dpdjdph.html


咨詢
建站咨詢
