1. 程式人生 > >HAProxy 日誌輸出及配置

HAProxy 日誌輸出及配置

正所謂,沒有軟體敢說沒有bug,人無完人,software is  not perfect software。是軟體就可能存在bug,那麼如果出現bug,我們就要分析對我們業務的影響及可能如何避免bug的再現。

HAProxy也不例外,也可能在特殊場景下出現bug,因此我們就有必要記錄下必要的日誌資訊。今天來聊下HAProxy的日誌輸出及對應引數配置。

HAProxy支援兩種主要的代理模式:"tcp"也即4層(大多用於郵件伺服器、內部協議通訊伺服器等),和7層(HTTP)。在4層模式 下,HAproxy僅在客戶端和伺服器之間轉發雙向流量。7層模式下,HAProxy會分析協議,並且能通過允許、拒絕、交換、增加、修改或者刪除請求 (request)或者回應(response)裡指定內容來控制協議,這種操作要基於特定規則。    

說到四層模式及七層模式,我們就要回憶下,在RabbitMQ叢集搭建過程中,有沒有使用到四層模式呢?答案是有的,使用TCP協議  進行雙向的通訊代理 使用的就是四層協議。

HAProxy配置檔案可以分為五部分,在上次RabbitMQ叢集搭建也簡單聊了下,

1 global:    全域性配置引數段,主要用來控制Haproxy啟動前的程序及系統相關設定
2 defaults:  配置一些預設引數,如果frontend,backend,listen等段未設定則使用defaults段設定
3 listen: 監聽配置
4 frontend:  用來匹配接收客戶所請求的域名,uri等,並針對不同的匹配,做不同的請求處理 
5 backend:  定義後端伺服器叢集,以及對後端伺服器的一些權重、佇列、連線數等選項的設定

 

HAProxy的安裝我們不再介紹,在安裝完畢以後,進行的日誌輸出配置:

根據實際需求,更改配置檔案,我的配置如下
        global                                    #全域性設定
       log 127.0.0.1   local3     #local3是裝置,對應於 /etc/rsyslog.conf中的配置,預設回收info的日誌級別 
       #log loghost    local0 info
       maxconn 
4096             #最大連線數 chroot /usr/local/haproxy uid 99           #所屬執行的使用者uid gid 99           #所屬執行的使用者組 daemon             #以後臺形式執行haproxy nbproc 2             #啟動2個haproxy例項 pidfile /usr/local/haproxy/haproxy.pid    #將所有程序寫入pid檔案 #debug #quiet     defaults                #預設設定 #log global log 127.0.0.1 local3 #日誌檔案的輸出定向 mode http     #預設的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK option httplog     #日誌類別,採用httplog option dontlognull option forwardfor     #如果後端伺服器需要獲得客戶端真實ip需要配置的引數,可以從Http Header中獲得客戶端ip option httpclose     #每次請求完畢後主動關閉http通道,haproxy不支援keep-alive,只能模擬這種模式的實現 retries 3     #3次連線失敗就認為伺服器不可用,主要通過後面的check檢查 option redispatch     #當serverid對應的伺服器掛掉後,強制定向到其他健康伺服器 maxconn 2000     #最大連線數 stats uri /stats     #haproxy 監控頁面的訪問地址       瀏覽器中輸入haproxy監控地址:http://10.10.100.39/stats檢視狀態 contimeout 5000     #連線超時時間 clitimeout 50000     #客戶端連線超時時間 srvtimeout 50000     #伺服器端連線超時時間 stats auth admin:admin     #設定監控頁面的使用者和密碼:Frank stats hide-version     #隱藏統計頁面的HAproxy版本資訊 frontend http-in     #前臺 bind *:80 mode http option httplog log global acl web1 hdr(host) -i www.9888.cn 9888.cn   #acl後面是規則名稱,-i是要訪問的域名,如果訪問www.9888.cn 這個域名就分發到下面的webserver1 的作用域。 use_backend webserver1 if web1 backend webserver1      #後臺 mode http balance roundrobin     #負載均衡演算法 option httpchk /index.html      #健康檢查 server web01 10.10.100.41:80 check cookie 1 inter 2000 fall 3 weight 30 server web02 10.10.100.18:80 check cookie 2 inter 2000 fall 3 weight 30   #cookie 1表示serverid為1,check inter 1500 是檢測心跳頻率   #rise 2是2次正確認為伺服器可用,fall 3是3次失敗認為伺服器不可用,weight代表權重.

 

對於Centos,日誌級別分別為:

Centos6.x中變成了:/etc/init.d/rsyslog
在配置前,我們先來了解下日誌的level: local0~local7 16~23保留為本地使用
emerg 0       系統不可用
alert 1       必須馬上採取行動的事件
crit 2        關鍵的事件
err 3        錯誤事件
warning 4      警告事件
notice 5      普通但重要的事件
info 6       有用的資訊
debug 7      除錯資訊

 

2.編輯系統日誌檔案配置 vim /etc/rsyslog.conf

在檔案末尾追加:local0.*                      /var/log/haproxy/haproxy.log

3、建立HAProxy記錄日誌檔案 並授權

mkdir /var/log/haproxy && chmod a+w /var/log/haproxy

4.配置rsyslog的配置檔案,開啟遠端日誌

vim /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS=”-c 2 -r -m 0

5.配置完成後,配置完成後重啟haproxy和rsyslog服務
/etc/init.d/rsyslog restart
/etc/init.d/haproxy restart

請注意:採用的Linux 系統版本是Centos 6.5

 

至此,可以正常的輸出HAProxy執行日誌,在出現故障或檢視執行情況時,可檢視該日誌檔案;另外我們可以根據需要靈活的調整日誌輸出級別及輸出目錄。