前文咱們聊了下haproxy的基礎安裝,以及怎樣去代理後端主機的配置;固然沒有很詳細的去說配置文件中各指令的意思;有關haproxy的安裝和代理後端server能夠參考本人博客http://www.javashuo.com/article/p-uswhukfn-co.html;今天咱們主要來講一下haproxy global配置段經常使用配置指令的用法和說明;html
前邊咱們大概說了一下haproxy的配置文件大概能夠分兩段;第一段配置是global配置段即全局配置段,主要是針對haproxy的進程和安全相關的配置;第二段是proxies代理配置段,主要是配置haproxy前端監聽那個地址那個端口以及後端server的名稱、地址、端口,以及server相關屬性等配置;而proxies配置段裏又分defaults配置段,這個部分主要是定義後續的backend,listen這兩個段的默認配置;什麼意思呢?也就是在後面的配置中若是咱們沒有寫對應參數,它默認會繼承defaults裏的配置;若是說後面的配置中和前邊的defaults中的配置重複了,那麼就之後面的配置生效,也就是說後面的配置段優先級高於defaults裏的配置;瞭解了haproxy的配置文件結構,接下來咱們來看看haproxy的global配置段經常使用指令;前端
提示:以上是haproxy1.5.18yum安裝裏默認提供的global配置段;其中log是用來指定日誌的,這裏要說一下haproxy的日誌,它和nginx的日誌不太同樣;nginx的日誌是咱們用access_log 指令來指定日誌文件和調用日誌格式的名稱,意思就是把日誌以增量的方式往指定的日誌文件中寫;而haproxy的日誌不是本身記錄日誌,而是經過把日誌發送給rsyslog服務器上的一個facility上,而後經過rsyslog的配置把指定facility上的日誌記錄到某個文件中或者數據中;以上配置段意思就是把haproxy的日誌發送給本機的rsyslog上的local2 記錄全部級別類型的日誌;其實咱們不用配置rsyslog,默認會把日誌記錄到/var/log/messages這個文件中,這是由於rsyslog中明肯定義了全部facility上的info級別以及info級別以上的日誌都記錄到/var/log/messages中;有關rsyslog的配置說明能夠參考本人博客http://www.javashuo.com/article/p-wobakswo-m.html;接下來咱們來配置下,讓haproxy的日誌記錄到/var/log/haproxy.log這個文件中去;nginx
提示:在rsyslog的配置文件中明確要使用local2這個facility上的任何級別的日誌都交給/var/log/haproxy.log記錄;這樣只是把接收日誌的方式定義好了;一般若是rsyslog做爲日誌服務器接收非本機的其餘主機日誌,咱們還要讓rsyslog監聽在udp或者tcp的514端口上(固然這個端口也能夠本身指定,一般不用更改),爲其餘主機提供服務;因此咱們除了要定義把某個facility上的全部級別的日誌(固然也能夠指定某些級別的日誌,這個要看你想要收集那一類的日誌)記錄到某個文件中外,咱們還要把udp或tcp的514端口打開;git
提示:以上配置就是導入imudp模塊,而後讓rsyslog監聽在udp的514端口;這樣配置後咱們就能夠保存rsyslog的配置文件,而後重啓rsyslog,咱們就能夠把haproxy的日誌記錄到/var/log/haproxy.log中去了;github
提示:能夠看到咱們訪問haproxy,其中的訪問日誌就記錄到咱們定義的/var/log/haproxy.log中去了;後端
chroot:該指令主要做用同vsftpd裏面的chroot相似,禁錮運行目錄的;通常這個參數主要是防止haproxy被惡意程序攻擊後對操做系統上的其餘路徑資源的破環;也就是說即使haproxy被惡意程序攻破,最多隻能破環咱們指定的chroot目錄,而非整個系統目錄結構;一般狀況下haproxy不會出現這種狀況,爲了安全咱們仍是配置上這個參數;若是haproxy是咱們手動編譯安裝的,一般咱們會把這個參數的值設置成很haproxy的程序編譯安裝時指定的目錄;yum安裝的基本上都是/var/lib/haproxy;通常都不會去更改它;安全
pidfile:該指令是指定pid文件的,一般狀況下須要和unit file裏指定的pid文件是同一個文件;不是同一個文件的話可能會遇到沒法reload的狀況;服務器
maxconn:該指令指定haproxy的單個進程最大併發鏈接數;多線程
user/group:前者用來指定運行haproxy進程的用戶(屬主),後者是用來指定運行進程的用戶屬組併發
uid/gid:前者用來指定運行haproxy工做進程的用戶id,後者是指定組id;以上兩種方式都是來指定運行haproxy進程的用戶身份;默認狀況是用的id爲99的用戶(nobody用戶)
deamon:此指令表示haproxy以守護進程運行;
stats socket:指定unix socket文件路徑;主要用於本機交互的方式管理haproxy;
以上是haproxy1.5.18配置文件中global段配置選項的說明;在haproxy1.8.0之後的版本中,haproxy支持多進程多線程的方式,而1.5不支持多線程,支持多進程,可是在1.5上啓用多進程的方式是串行的,意思就是它不是一個主進程下生成多個子進程,而是一個進程下生成一個進程,而後子進程下在生成子進程的方式;因此若是要使用多進程的方式,建議仍是使用1.8之後的版本;
haproxy配置多進程
nbproc:該指令是用於指定haproxy的進程數 ,一般狀況下建議同cup核心數同樣便可;
cpu-map:該指令用於綁定haproxy對應cup核心;有點相似nginx裏的worker_cpu_affinity參數的意義;
提示:以上配置表示指定haproxy的進程數爲4個,第一個進程綁定到0號核心上,第二個進程綁定到1號核心上,依次類推;以下
提示:以上是haproxy1.8.20上配置使用多進程,啓動進程狀況,咱們能夠看到haproxy進程的父進程都是5945;
在1.5.18上使用多進程
提示:以一樣的配置在haproxy1.5.18上,啓動的多進程就不同,在1.5.18上多了一個haproxy-systemd這個進程,而且haproxy進程都是它的子進程,而咱們用nbproc指定的進程數是指定haproxy-systemd下的haproxy的子進程數;而1.8.20nbproc指定的是haproxy的子進程數量,沒有haproxy-systemd,又或者咱們能夠理解爲1.8.20把1.5.18上的haproxy-systemd和haproxy進程合併成一個進程haproxy;一般狀況下haproxy單進程也是足夠用了,若是是在要開多進程,建議仍是使用1.8以上的版本吧;
haproxy使用多線程
haproxy的多線程是在1.7之後的版本才支持的,因此1.5上面不支持多線程的方式,因此咱們這裏的演示就用haproxy1.8.20來演示
nbthread:指定每一個haproxy進程開啓的線程數;
提示:以上配置表示啓動4個進程,每一個進程裏啓動4個線程,默認每一個進程一個線程
maxsslconn:該指令指定每一個haproxy進程ssl最大鏈接數,一般狀況下證書都不放在haproxy上,nginx上放證書更加合適;
maxconnrate:該指令指定每一個進程每秒最大鏈接數;
spread-checks:該指令指定後端server狀態check隨機提早或延遲百分比時間;一般狀況下在後端主機較多的狀況下使用;官方建議2-5(20%-50%)之間;若是在後端主機較多的狀況下,不使用該指令來延遲對後端主機健康狀態檢查,那麼頗有可能下降haproxy的性能,所以該指令在後端主機較多的狀況下(好比1000臺甚至更多)可以避免同時併發對後端主機check時對haproxy的性能影響;
以上是haproxy global配置段比較經常使用的配置指令說明,更多配置指令請參考https://cbonte.github.io/haproxy-dconv;