前文我們聊了下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-dconv;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/96265.html
標籤:Linux
上一篇:Docker 安裝及使用
下一篇:centos7 ——wget安裝
