haproxy詳解學習筆記

来源:http://www.cnblogs.com/linuxboke/archive/2016/04/23/5425914.html
-Advertisement-
Play Games

HAProxy: 實現了一種事件驅動,單一進程模型,支持數萬計的併發連接,用於為tcp和http應用程式提供高可用,負載均衡和代理服務的解決方案,尤其適用於高負載且需要持久連接或7層處理機制的web站點 代理(http): 正向代理: 反向代理: 代理作用:web緩存(加速)、反向代理、內容路由(根 ...


HAProxy: 實現了一種事件驅動,單一進程模型,支持數萬計的併發連接,用於為tcp和http應用程式提供高可用,負載均衡和代理服務的解決方案,尤其適用於高負載且需要持久連接或7層處理機制的web站點


代理(http): 
正向代理:
反向代理:

代理作用:web緩存(加速)、反向代理、內容路由(根據流量及內容類型等將請求轉發至特定伺服器)、轉碼器;

在代理伺服器上添加Via首部;

緩存的作用:
減少冗餘內容傳輸;
節省帶寬、緩解網路瓶頸;
降低了對原始伺服器的請求壓力;
降低了傳輸延遲

yum -y install haproxy,安裝haproxy  rpm -ql haproxy,查看安裝了哪些包,找到主配置文件/etc/haproxy/haproxy.cfg

全局配置段:

除去全局配置段,其他的都是代理配置段

chroot 切換根目錄,將haproxy都運行在/var/lib/haproxy 這樣做是為了增加haproxy的安全

pidfile 指定主進程文件  maxconn  預設最大連接數   user 以哪個用戶運行haproxy   group 以哪個組運行haproxy  daemon 運行位守護進程 stats socket 圖中有解釋(這樣做是為了基於共用記憶體訪問數據,而不需要通過tcp連接以提高運行性能)

 

第一項log 指所有日誌都記錄到本機, 通過local2設備輸出,因此還得去/etc/rsyslog.conf中添加和修改必要參數vim /etc/rsyslog.conf (在全局配置段log 最多可以指定兩個)

開啟日誌監聽 tcp和udp的埠都開啟   

local2.*  定義haproxy的日誌記錄位置,service rsyslog restart 重啟日誌服務

跳過defaults配置段去配置一臺簡單的負載均衡伺服器

frontend 指的是代理的前端,  main是名字  *:80  所有地址都監聽在80埠,default_backend:為frontend指明使用的預設後端,使用use_backend:指明使用哪個後端

bind 可以用來指定監聽多個埠

backend 指的是代理的後端,  叫做webservers

server 指定後端伺服器  web1指定名字後面是該server的ip地址 check  健康檢測單位為毫秒預設2秒檢測一次,  weight 權重預設為1, backup指其他伺服器都不可用時啟用此server

balance: 指明調度演算法;
動態:權重可動態調整
靜態:調整權重不會實時生效

roundrobin: 輪詢,動態演算法,每個後端主機最多支持4128個連接

 

static-rr: 輪詢,靜態演算法,每個後端主機支持的數量無上限

 

leastconn: 根據後端主機的負載數量進行調度;僅適用長連接的會話;動態

 

source :將客戶端源地址hash,並由後端伺服器的權重相除後發送至匹配的伺服器,這使得同一個ip地址總會被髮送給同一臺伺服器,預設為靜態

 

uri :將uri hash 此演算法常用後端是代理緩存或反病毒代理以提高緩存命中率,預設為靜態

 

url_param: 根據url中的指定的參數的值進行調度;把值做hash計算,並除以總權重

 

hdr(<name>) :根據請求報文中指定的header(如use_agent, referer, hostname)進行調度;把指定的header的值做hash計算

在hash演算法中 map-based是取模法,靜態 consistent是一致性哈希法,動態

 

如何啟用haproxy的狀態監控頁配置如下

listen 它代表既是前端,又是後端,enable激活監控頁面,hide-version隱藏haproxy的版本,auth 用戶密碼認證 if TRUE 只有admin用戶認證成功了才能打開該頁面

 

 

haproxy實現另一個功能:基於瀏覽器cookie實現session sticky

加入了這幾條指令: cookie serverid insert(在響應報文中插入serverid) cookie websrv1 當響應報文是web1發送回給haproxy,haproxy重新構建響應首部時在Cookie首部插入serverid=websrv1,當客戶端再次請求時,haproxy就會根據首部中剛插入的serverid再次將請求調度到同一臺伺服器上

 

介紹defaults配置段的參數,defaults中的參數如果frotend和backend段都沒有定義預設就是用defaults段的參數

mode  定義haproxy工作在哪種模式http | tcp   log  global  表示日誌就使用全句段中定義的記錄日誌方法 

httplog  豐富日誌記錄格式, dontlognull 不記錄健康檢測日誌

 forwardfor if-none execpt x.x.x.x/mask 允許在發往後端伺服器的請求首部中添加X-Forwarded-For首部 except排除哪些網段, if-none 僅在X-Forwarded-For這個首部不存在時才添加,如果不指定if-none那麼回覆蓋原來X-Forwarded-For,代理如果有多級這個if-none參數就必須了,這樣做只是為了後端server記錄真實的客戶端ip地址 

redispatch 是否允許將session重新分配到健康的後端伺服器上(在與後端伺服器session建立失敗時) redispatch表示允許 http-server-close 一般http-server-alive啟用時它才起作用,允許haproxy端主動斷開客戶端的連接(客戶端建立了server連接但沒發起請求而且持久連接超時的情況下或者請求的資源達到一定個數)

3 表示3次與後端伺服器連接失敗就認定伺服器不可用  queue 設定請求隊列的超時時長  http-request  等待客戶端http請求超時時長(如果客戶端發送請求發了一半但客戶端掛了的情況下) http-keep-alive 指定客戶端與haproxy的持久連接超時時長, connect與後端伺服器成功建立tcp連接需要等待的超時時長,server等待後端伺服器發送響應報文的超時時長,client  haproxy發送了響應報文等待client確定的超時時長 maxconn haproxy最多能建立多少個併發連接

 

haproxy 還可以向響應報文首部添加自定義首部

rspadd Via:\ nihao   向對客戶端的響應報文中添加Via首部,\是因為後面跟了一個空格,要對空格轉義

 

haproxy 通過acl功能根據http請求報文中的請求方法實現對後端不同伺服器組的調度

read 定義acl的名字, method匹配請求報文中首部Request Method的值

 if write 如果匹配write這條acl 就使用tag_engine這個伺服器組(後面如果給了多個名字則要同時滿足)

 

haproxy通過acl實現動靜網頁分離

 

這裡的應用伺服器我使用了cookie做會話綁定,insert 後面加nocache是官方給出的建議

這樣就實現了動靜分離 很簡單吧


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

-Advertisement-
Play Games
更多相關文章
  • ...
  • 在sql server 中,如果一張表存在聚集索引的時候,大多數情況下,如果進行select * from TableName查詢,預設的返回順序是按照聚集所在列的順序返回的 但是,在一張表存在聚集索引的時候,並不一定所有的情況都是按照聚集索引列的順序排列的, 下麵開始測試 如下查詢完全沒有問題,正 ...
  • 大數據大數據,身邊很多朋友都在談大數據,Big Data!!! 到底是什麼,用來幹嘛的,也很少有人說得出一二,那今天開始就簡單說說這一二事吧 hadoop 的來源:是作者女兒的一個玩具 - 一隻黃色的大象 發音 /hadu:p/ 在Apache旗下作為一個開源項目 它不是雲計算,卻是雲計算中的一部分 ...
  • MongoDB安裝 使用的版本為3.0,虛擬機操作系統為rhel-server-7.0-x86_641. 將mongodb-linux-x86_64-rhel70-3.0.11.tgz上傳並解壓到 /usr/local/mongodb 目錄下2. 設置環境變數# vi /etc/profile添加e ...
  • 在Linux中使用vi命令編輯mysql_backup.sh時遇到下麵提示信息 E325: ATTENTIONFound a swap file by the name ".mysql_backup.sh.swp" owned by: root dated: Sat Apr 23 23:58:28 ... ...
  • ...
  • 因為休眠功能在部分電腦無法正常工作,所以Ubuntu預設是不開啟休眠功能。 要想開啟休眠功能先進行如下測試: 1、先檢查是否有交換分區(swap),如果有確認交換分區至少和實際可用記憶體一樣大。 2、按Ctrl+Alt+T開啟終端或者Dash搜索開啟終端 3、運行sudo pm-hibernate, ...
  • 1、當我想要使用sudo時,提示 一開始以為是PATH不對,就各種百度各種試 都不好使,最後發現是我裝的debian 8.4.0 amd64 1並不是全功能,sudo沒有裝 2、apt源總是連接到cdrom,使用apt-get install時總是提示出錯,因為我是通過u盤ios鏡像安裝的 可以把c ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...