1. 程式人生 > >負載均衡服務之HAProxy基礎配置(一)

負載均衡服務之HAProxy基礎配置(一)

  前文我們聊了下haproxy的基礎安裝,以及怎樣去代理後端主機的配置;當然沒有很詳細的去說配置檔案中各指令的意思;有關haproxy的安裝和代理後端server可以參考本人部落格https://www.cnblogs.com/qiuhom-1874/p/12741018.html;今天我們主要來說一下haproxy global配置段常用配置指令的用法和說明;

  前邊我們大概說了一下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的配置說明可以參考本人部落格https://www.cnblogs.com/qiuhom-1874/p/12091118.html;接下來我們來配置下,讓haproxy的日誌記錄到/var/log/haproxy.log這個檔案中去;

  提示:在rsyslog的配置檔案中明確要使用local2這個facility上的任何級別的日誌都交給/var/log/haproxy.log記錄;這樣只是把接收日誌的方式定義好了;通常如果rsyslog作為日誌伺服器接收非本機的其他主機日誌,我們還要讓rsyslog監聽在udp或者tcp的514埠上(當然這個埠也可以自己指定,通常不用更改),為其他主機提供服務;所以我們除了要定義把某個facility上的所有級別的日誌(當然也可以指定某些級別的日誌,這個要看你想要收集那一類的日誌)記錄到某個檔案中外,我們還要把udp或tcp的514埠開啟;

  提示:以上配置就是匯入imudp模組,然後讓rsyslog監聽在udp的514埠;這樣配置後我們就可以儲存rsyslog的配置檔案,然後重啟rsyslog,我們就可以把haproxy的日誌記錄到/var/log/haproxy.log中去了;

  提示:可以看到我們訪問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-dcon