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

来源:https://www.cnblogs.com/qiuhom-1874/archive/2020/04/24/12763245.html
-Advertisement-
Play Games

haproxy的配置文件大概可以分兩段;第一段配置上global配置段即全局配置段,主要是針對haproxy的進程和安全相關的;第二段是proxies代理配置段,主要是配置haproxy前端監聽那個地址那個埠以及後端server的名稱、地址、埠,以及server相關屬性等配置;而proxies... ...


  前文我們聊了下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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 數組類型 在 C 中,數組實際上是對象,數組是一種數據結構,它包含若幹相同類型的變數。 數組概述 數組具有以下屬性: 數組可以是 "一維" 、 "多維" 或 "交錯" 的。 數值數組元素的預設值設置為零,而引用元素的預設值設置為 null。 交錯數組是數組的數組,因此其元素是引用類型並初始化為 nu ...
  • 劍指Offer題目,求數值的整數次方,題目描述,給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。保證base和exponent不同時為0。包括遞歸,整數的快速冪等多種解法 ...
  • 場景 有時會遇到使用枚舉類型的時候。 比如傳遞過來一個int的list,要根據這個list將對應的chekbox選中。 首先新建一個類KillComponents public enum KillComponents { /// <summary> /// 上霧化器 /// </summary> S ...
  • 昨天有朋友在公眾號發消息說看不懂await,async執行流,其實看不懂太正常了,因為你沒經過社會的毒打,沒吃過牢飯就不知道自由有多重要,沒生過病就不知道健康有多重要,沒用過ContinueWith就不知道await,async有多重要,下麵我舉兩個案例佐證一下? 一:案例一 【嵌套下的非同步】 寫了 ...
  • 在較早隨筆《微信小程式結合後臺數據管理實現商品數據的動態展示、維護》中介紹過使用小程式實現商品的展示,其實基於對應的介面,我們使用H5頁面來開發基於公眾號的商品展示和支付,也是產不多的原理,不過H5頁面和小程式的界面處理代碼有一些差異吧了,整體的實現思路倒是差不多的。本篇隨筆介紹基於H5頁面的開發,... ...
  • .netcore3.1在iis中發佈需要安裝 Hosting Bundle和 ASP.NET Core Runtime 3.1.2,但安裝了hosting宿主之後其他站點就會掛掉,不可訪問。 解決方案:1、停止IIS2、修改 C:\Windows\System32\inetsrv\config\ap ...
  • 在 WPF 中,如果想要使用代碼控制,讓某個視窗作為當前用戶的輸入的邏輯焦點的視窗,也就是在當前用戶活動的視窗的最上層視窗,預設使用 Activate 方法,通過這個方法在大部分設備都可以做到激活視窗 ...
  • wget簡介 GNU Wget(常簡稱為Wget)是一個在網路上進行下載的簡單而強大的自由軟體,其本身也是GNU計劃的一部分。它的名字是“World Wide Web”和“Get”的結合,同時也隱含了軟體的主要功能。當前它支持通過HTTP、HTTPS,以及FTP這三個最常見的TCP/IP協議協議下載 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...