Haproxy 安裝手記,版本升級並追加 log 機制

版主: stnet253

回覆文章
admin
系統管理員
文章: 38
註冊時間: 2012-02-25, 22:10
聯繫:

Haproxy 安裝手記,版本升級並追加 log 機制

未閱讀文章 admin »

Haproxy 是一個快速,簡單又容易安裝的軟件,可做為網頁分流及簡易的HA 的功能,是一個小而美的軟件!

以下是個人實際使用的案例及安裝過程記錄! 詳細可以訪問官網 http://haproxy.1wt.eu/

1.環境設定

mkdir /var/run/haproxy
useradd haproxy

2.下載 haproxy

wget http://haproxy.1wt.eu/download/1.4/src/ ... .15.tar.gz

3.安裝

cd /tmp

tar -zxvf haproxy-1.4.15.tar.gz

cd haproxy-1.4.15

make TARGET=linux26 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy

4.編輯設定檔
vi /usr/local/haproxy/haproxy.cfg

global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
chroot /usr/local/haproxy
uid haproxy
gid haproxy
daemon
quiet
nbproc 2
pidfile /var/run/haproxy/haproxy.pid

listen http_proxy 10.XX.XX.XX:80,10.XX.XX.XX:443 ##監聽的 IP 及 port 有多個ports 可以用逗號分開
mode tcp
balance roundrobin
server srv1 10.XX.XX.XX check weight 3 inter 2000 rise 2 fall 3
server srv2 10.XX.XX.XX check weight 1 inter 2000 rise 2 fall 3

5.開啟服務

/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg



問題解決:

1.多部 web 主機的 session 問題.

網路上找到有三種解決方式,但我實際測驗僅其中一種可以完全正常,

(1) balance roundrobin 改為 balance source

(2) 加入 appsession PHPSESSID len 128 timeout 1h request-learn

(3) 確認 php.ini 的內容 session.name = PHPSESSID 名稱須一致!

2.Https 無法正常問題

由於 https 及http 其 mode [http,tcp] 方式不同結果也不同,故後來我將其進行分開的設定.

3.如何取得 client 端實際IP?

(1) 以php 例,主機端可用

$ip = ( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ? ( $_SERVER['HTTP_X_FORWARDED_FOR'] ) : ( $_SERVER['REMOTE_ADDR'] );

取得client 端實際IP,但我測試結果僅對 http 有效,https 則只能取到 haproxy server 的 IP.

(2) access.log 如何正確顯示 client ip.

apache:httpd.conf 內容修改



LogFormat "%h %l %u %t \"%r\" %>s %b \"%{X-Forwarded-For}i\"" common





最終我的 config 變更為如下的設定,運行都可正常!

listen http_proxy
bind 10.XX.XX.XX:80
mode http
balance roundrobin
option httpclose
option forwardfor
appsession PHPSESSID len 128 timeout 1h request-learn
server srv2 10.XX.XX.XX:80 check weight 1 inter 2000 rise 2 fall 3
server srv1 10.XX.XX.XX:80 check weight 1 inter 2000 rise 2 fall 3



listen https_proxy
bind 10.XX.XX.XX:443
balance source
option httpclose
option forwardfor
appsession PHPSESSID len 128 timeout 1h request-learn
server srv2 10.XX.XX.XX:443 check weight 1 inter 2000 rise 2 fall 3
server srv1 10.XX.XX.XX:443 check weight 1 inter 2000 rise 2 fall 3





---------------------------------Haproxy 1.4.17 並追加 log 機制----------------------



Haproxy 1.4.17 安裝及追加 log 功能 ,並修正了一些錯誤的問題!



global
maxconn 4096
chroot /usr/local/haproxy
uid haproxy
gid haproxy
daemon
nbproc 1 --改為1 是因為使用了appsession 參數,若用 2 會出現警示,雖然還是能用.
pidfile /var/run/haproxy/haproxy.pid

defaults
contimeout 3000
clitimeout 150000
srvtimeout 150000

listen https_proxy
log global
log 127.0.0.1 local3 info
bind 10.X.X.X:443
balance source
appsession PHPSESSID len 128 timeout 1h request-learn
server srv2 10.X.X.X:443 check weight 1 inter 2000 rise 2 fall 3
server srv1 10.X.X.X7:443 check weight 1 inter 2000 rise 2 fall 3

listen http_proxy
log global
log 127.0.0.1 local4 info
bind 10.X.X.X:80
mode http
option httplog
option dontlognull
balance roundrobin
option httpclose
option forwardfor
appsession PHPSESSID len 128 timeout 1h request-learn
server srv2 10.X.X.X:80 check weight 1 inter 2000 rise 2 fall 3
server srv1 10.X.X.X:80 check weight 1 inter 2000 rise 2 fall 3

##如何產生 haproxy 的 log ,查了文件,依照方法處理了,但一直無法收到 log ,一直以為是 haproxy.log 及 /etc/syslog.conf 設定錯誤,試了很久一直失敗!
##找到原因後實在很悶,為何系統文件都不提供有如此必要的設定需注意啊!
整理如下:
1.haproxy.log

listen https_proxy
log global
log 127.0.0.1 local3 info
......

listen http_proxy
log global
log 127.0.0.1 local4 info
.........

2./etc/syslog.conf
#Haproxy
local3.* /var/log/haproxy_443.log
local4.* /var/log/haproxy_80.log

3./etc/sysconfig/syslog --這一個是很多網上的參考資料所忽略的,但我只在 RedHat/Centos 實際測試過!
(1) redhat/CentOS
修改參數如下 :
SYSLOGD_OPTIONS="-m 0 -r" --很重要

(2) Debian/Ubuntu
須改為設定 /etc/default/syslogd
修改參數如下 :
SYSLOGD="-r"

4.service syslog restart

5.haproxy restart
回覆文章

誰在線上

正在瀏覽這個版面的使用者:Semrush [Bot] 和 1 位訪客