haproxy實現代理和負載均衡

HaProxy介紹:

haproxy是法國開發者威利塔羅在2000年使用C語言開發的一個開源軟件,是一款具備高并發(一萬以上)、高性能的TCP和HTTP負載均衡器,支持基于cookie的持久性,自動故障切換,支持正則表達式及web狀態統計,目前最新TLS版本為2.2。

haproxy是可提供可用性、負載均衡以及基于TCP和HTTP應用的代理,是免費、快速并且可靠的一種解決方案。haproxy非常適用于并發大(并發達1W以上)web站點,這些站點通常又需要會話保持或七層處理,haproxy的運行模式使得它可以很簡單安全的整合至當前的架構中,同時可以保護web服務器不被暴露到網絡上。

LVS,nginx,haproxy對比:

LVS是內核中的功能,nginx和haproxy是第三方實現的功能。

LVS只能提供四層負載均衡無法提供七層負載,(無法控制7層協議http頭部url等),功能單一。

nginx,haproxy可以實現4層和7層負載,功能較多,但是性能不如LVS,LVS>haproxy>nginx

haproxy對比nginx性能優越,功能單一,haproxy只做反向代理。

LVS沒有后端服務器健康性檢測,nginx和haproxy有后端服務器健康性檢測。

安裝haproxy:

三種方式:yum,rpm和編譯

yum安裝:yum install -y haproxy

[root@Node1 ~]#:yum install -y haproxy? ? ? ? ? ? ? ? #安裝

[root@Node1 ~]#:systemctl start haproxy? ? ? ? ? ? ? ? #啟動

[root@Node1 ~]#:systtemctl status haproxy? ? ? ? ? ? ? ? #查看是否啟動

可以rpm -qc haproxy查看配置文件

rpm安裝:

錯誤:軟件包:rh-haproxy18-haproxy-1.8.24-3.el7.x86_64 (/rh-haproxy18-haproxy-1.8.24-3.el7.x86_64)
rpm安裝haproxy需要需要:rh-haproxy18-runtime

需要依賴包

[root@Node1 ~]#:mkdir /hprxy; cd /phrxy

#準備一個runtime包,直接拖進來到目錄下,然后下載haproxy包

[root@Node1 hprxy]#:wget http://mirror.centos.org/centos/7/sclo/x86_64/rh/Packages/r/rh-haproxy18-haproxy-1.8.24-3.el7.x86_64.rpm

[root@Node1 hprxy]#:ls
rh-haproxy18-haproxy-1.8.24-3.el7.x86_64.rpm ?rh-haproxy18-runtime-3.1-2.el7.x86_64.rpm

[root@Node1 hprxy]#:yum install -y rh-haproxy18-runtime-3.1-2.el7.x86_64.rpm
[root@Node1 hprxy]#:yum install -y rh-haproxy18-haproxy-1.8.24-3.el7.x86_64.rpm

#啟動服務
[root@Node1 hprxy]#:systemctl start rh-haproxy18-haproxy.service

查看狀態:systemctl status?rh-haproxy18-haproxy.service發現啟動了

可以通過rpm -qc 服務名;rpm -ql 服務名,查看配置文件和列出文件相關文件。

編譯安裝haproxy:

在第二臺機器7-2上編譯安裝,7-1和7-3作為web真實服務器

由于CentOS7 之前版本自帶的lua版本比較低并不符合haproxy要求的lua最低版本(5.3)的要求,因此需要編譯安裝較新版本的lua環境,然后才能編譯安裝haproxy,所以需要先安裝lua環境。

[root@Node2 ~]#:mkdir /data ; cd /data

#查看當前lua版本,是5.1版本的。

[root@Node2 data]#:lua -v
Lua 5.1.4 ?Copyright (C) 1994-2008 Lua.org, PUC-Rio
#可以現在安裝lua新版本:wget?https://www.lua.org/ftp/lua-5.4.6.tar.gz
[root@Node2 data]#:wget https://www.lua.org/ftp/lua-5.4.6.tar.gz

#準備安裝包:haproxy-2.4.25.tar,直接拖進來/data/下

[root@Node2 data]#:ls
haproxy-2.4.25.tar.gz ?lua-5.4.6.tar.gz

#解壓

[root@Node2 data]#:tar xf lua-5.4.4.tar.gz

#做個軟鏈接
[root@Node2 data]#:ln -s lua-5.4.6 lua
[root@Node2 data]#:cd lua-5.4.4/src/
[root@Node2 src]#:make all test
#查看版本信息
[root@Node2 src]#:./lua -v
Lua 5.4.6 ?Copyright (C) 1994-2023 Lua.org, PUC-Rio? ? ? ? ? ? ? ? #5.4版本

#安裝haproxy

#安裝依賴環境:

[root@Node2 data]#:yum -y install gcc openssl-devel pcre-devel systemd-devel

#解壓
[root@Node2 data]#:tar xf haproxy-2.4.25.tar.gz
[root@Node2 data]#:cd haproxy-2.4.25/
#創建lua目錄用于自動補全功能
[root@Node2 haproxy-2.4.25]#:mkdir /usr/local/lua
[root@Node2 haproxy-2.4.25]#:cp -r src/ ? /usr/local/lua/
[root@Node2 haproxy-2.4.25]#:make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/data/lua/src/ ?LUA_LIB=/data/lua/src/

#安裝,指定路徑
[root@Node2 haproxy-2.4.25]#:make install PREFIX=/apps/haproxy

#軟鏈接,自動補全
[root@Node2 haproxy-2.4.25]#:ln -s /apps/haproxy/sbin/haproxy /usr/sbin/
#haproxy -v可以查看版本信息。haproxy -h查看幫助

#寫一個自啟動文件:

[root@Node2 haproxy-2.4.25]#:vim /usr/lib/systemd/system/haproxy.service

[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target
[Service]
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg ?-c -q ? ? #-c檢查語法。-f指定配置文件,也可以跟文件夾
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid ?#-p指定pid文件
ExecReload=/bin/kill -USR2 $MAINPID ? #重新加載
LimitNOFILE=100000 ? ?#打開文件數
[Install]
WantedBy=multi-user.target
[root@Node2 haproxy-2.4.25]#:systemctl daemon-reload
#創建主配置文件目錄。需要手動創建

[root@Node2 haproxy-2.4.25]#:mkdir /etc/haproxy

#創建主配置文件/etc/haproxy/haproxy.cfg

global:全局配置段

進程及安全配置相關的參數

性能調整相關參數

Debut參數

proxies:代理配置段

defaults:為frontend,backend,listen提供默認配置
frontend:前端,相當于nginx中的server{},定義虛擬機,監聽分配請求
backend:后端,相當于nginx中的upstream{},真實服務器
listen:同時擁有前端和后端配置,配置簡單,生產推薦使用,前端和后端,更簡單。

主配置文件配置塊:

[root@Node2 haproxy-2.4.25]#:vim /etc/haproxy/haproxy.cfg

#全局模塊,

global
maxconn 100000? ? ? ? ? ? ? ? #最大連接數
chroot /apps/haproxy????????????????#禁錮,haproxy進程,只可以訪問,/apps/haroxy文件夾
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin? ? ? ? ?#指明sock文件的位置

#指明uid和gid

uid 99
gid 99
#后臺方式,守護進程

daemon
#進程數, 開啟幾個進程

#nbproc 4?????????????????? ?#nbthread線程與nbproc進程不能同時指定
#cpu-map 1 0
#cpu-map 2 1
#cpu-map 3 2
#cpu-map 4 3
pidfile /var/lib/haproxy/haproxy.pid? ? ? ? ? ? ? ? #指定PID路徑
log 127.0.0.1 local3 info? ? ? ? ? ? ? ? ? ? ????????? ? #日志
?

defaults
option http-keep-alive
option ?forwardfor
maxconn 100000
mode http
timeout connect 300000ms
timeout client ?300000ms
timeout server ?300000ms

#狀態頁

listen stats
mode http? ? ? ? ? ? ? ? 支持7層http
bind 0.0.0.0:9999
stats enable
log global
stats uri ? ? /haproxy-status????????
stats auth ? ?haadmin:123456? ? ? ? ? ? ? ? #用戶名和密碼

listen ?web
bind 0.0.0.0:8899
mode http
log global

server web1 ?192.168.114.10:80
server web2 ?192.168.114.30:80

#指定一個pid路徑

[root@Node2 haproxy-2.4.25]#:mkdir ?/var/lib/haproxy

#創建用戶haproxy

[root@Node2 haproxy-2.4.25]#:useradd -r -s /sbin/nologin ?haproxy

#啟動haproxy

[root@Node2 haproxy-2.4.25]#:systemctl enable --now haproxy

起來之后查看狀態:

listen中說明了代理服務器,和后端真實服務器。

而frontend和backup就把兩者分離出來。listen相當于兩者的結合。

7-1和7-3作為web服務器。下載httpd:

yum install -y httpd

systemctl start httpd

7-1:echo 7-1 > /var/www/html/index.html

7-3:echo 7-3 > /var/www/html/index.html

systemctl status httpd查看狀態是否都起來了。并且能curl通

測試是否實現了代理和負載均衡:在瀏覽器也可以在本臺服務器上curl 192.168.114.20:8899要跟上端口號:8899。因為我們在listen中設置的就是8899端口號。

狀態頁:

在配置文件中有以下三個配置,端口號,uri,訪問控制。在瀏覽器地址欄中輸入:192.168.114.20:9999/haproxy-status

bind 0.0.0.0:9999

stats uri ? ? /haproxy-status

stats auth ? ?haadmin:123456


?

進程:發現進程是一個進程下三個線程

?修改進程配置,nbproc 4就是有四個進程:

重啟systemctl restart haproxy。

通過進程樹查看一下:?

日志:

vim /etc/rsyslog.conf打開文件開啟15和16行。

在/etc/rsyslog.conf文件的73行下添加一行,指定local3,并制定日志文件路徑在/var/log/haproxy.log

重啟systemctl restart haproxy rsyslog

使用瀏覽器訪問192.168.114.20:8899

在日志文件中tail -f /var/log/haproxy.log實時查看

不使用listen,而使用frontend和backup兩個模塊:相當于把listen分開寫,frontend是代理端,backup是服務端,負載均衡的web服務器。把listen注釋掉或者刪除。

?測試:由于我們指定的80端口,直接是curl 192.168.114.20不需要加端口,默認就是80。

其中listen或者說frontend和backup可以放在子配置文件中:

創建一個子配置文件:mkdir /etc/haproxy/conf.d

直接寫在子配置文件中,但haproxy不像nginx可以在主配置文件中寫入include包含模塊。haproxy主配置文件不支持include。需要將子配置文件寫在/usr/lib/systemd/system/haproxy.service文件中指明。

?把主配置文件中的注釋掉。修改文件:vim /usr/lib/systemd/system/haproxy.service

重新加載配置文件,重啟服務:

[root@Node2 haproxy]#:systemctl daemon-reload
[root@Node2 haproxy]#:systemctl restart haproxy

訪問測試:

haproxy也有跳轉的功能,在server后加入check redir http://www.baidu.com

?自動跳轉到百度主頁,如果瀏覽器跳轉不到(但也會顯示標題頭部是百度的),可以使用內置火狐瀏覽器:192.168.114.20。將自動跳轉到百度首頁。

---end---

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/37821.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/37821.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/37821.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Numpy array和Pytorch tensor的區別

1.Numpy array和Pytorch tensor的區別 筆記來源: 1.Comparison between Pytorch Tensor and Numpy Array 2.numpy.array 4.Tensors for Neural Networks, Clearly Explained!!! 5.What is a Tensor in Machine Learning? 1.1 Numpy Array Numpy array can only h…

arthas監控工具筆記(一)

文章目錄 啟動 math-game啟動 arthas查看 dashboard通過 thread 命令來獲取到math-game進程的 Main Class通過 jad 來反編譯 Main Class退出 arthas 界面linux服務器掛不上進程怎么辦? 核心表達式變量loader 本次調用類所在的 ClassLoaderclazz 本次調用類的 Class 引用method…

信息學奧賽初賽天天練-39-CSP-J2021基礎題-哈夫曼樹、哈夫曼編碼、貪心算法、滿二叉樹、完全二叉樹、前中后綴表達式轉換

PDF文檔公眾號回復關鍵字:20240629 2022 CSP-J 選擇題 單項選擇題(共15題,每題2分,共計30分:每題有且僅有一個正確選項) 5.對于入棧順序為a,b,c,d,e的序列,下列( )不合法的出棧序列 A. a,b&a…

螺旋矩陣問題C代碼

給定一個n行m列的二維數組,要求按順時針螺旋順序輸出矩陣中的所有元素,n和m小于等于10 如下圖是一個三行四列的螺旋矩陣 要求輸出 1 2 3 4 8 12 11 10 9 5 6 7 全局變量定義 int a[11][11]; int vis[11][11]; // 訪問標記數組關鍵代碼如下 int dx[] …

MySQL高級-MVCC-基本概念(當前讀、快照讀)

文章目錄 1、MVCC基本概念1.1、當前讀1.1.1、創建表 stu1.1.2、測試 1.2、快照讀 1、MVCC基本概念 全稱Multi-Version Concurrency Control,多版本并發控制。指維護一個數據的多個版本,使得讀寫操作沒有沖突,快照讀為MySQL實現MVCC提供了一個…

OpenCV cv::Mat到 Eigen 的正確轉換——cv2eigen

在進行計算機視覺項目時,我們經常需要處理相機位姿的變換。最近,我在項目中遇到了一個看似簡單但實際上頗具挑戰性的問題:從 OpenCV 的 cv::Mat 格式轉換到 Eigen 庫的格式。這個過程中遇到了一些問題,但最終找到了一個穩健的解決…

鏤空的文字?分享 1 段優質 CSS 代碼片段!

大家好,我是大澈! 本文約 800 字,整篇閱讀約需 1 分鐘。 每日分享一段優質代碼片段。 今天分享一段優質 CSS 代碼片段,實現 CSS 文字鏤空的效果。 老規矩,先閱讀代碼片段并思考,再看代碼解析再思考&#…

nginx本地域名配置

修改hosts文件(僅限本地測試): 在Windows上,hosts文件位于C:\Windows\System32\drivers\etc\hosts。 打開hosts文件,添加一行:127.0.0.1 xxx.com (xxx.com為自己設定的域名) 如果修…

Leetcode3190. 使所有元素都可以被 3 整除的最少操作數

Every day a Leetcode 題目來源:3190. 使所有元素都可以被 3 整除的最少操作數 解法1:遍歷 遍歷數組,累加最少操作數,即 min(num % 3, 3 - num % 3)。 代碼: /** lc appleetcode.cn id3190 langcpp** [3190] 使所…

uniapp+vue3開發微信小程序踩坑集

本文主要記錄使用uniappvue3開發微信小程序遇見的各種常見問題及注意點。(持續更新) 問題: 自定義組件為什么有些樣式加不上去 給自定義組件增加class的時候,有時候不生效有時候生效,一度讓我懷疑自己記憶錯亂。后來…

C++枚舉

C枚舉 枚舉的基礎用法不不再贅述枚舉的三點問題1、作用域問題解決思路1解決思路2 2、隱式轉換成int3、枚舉變量的實際類型無法明確指定 枚舉的基礎用法不不再贅述 枚舉的三點問題 1、作用域問題 舉個例子,顏色有blue代表藍色,心情有blue代表憂郁。 以…

mysql安裝配置教程

mysql安裝配置教程 MySQL是一個流行的關系型數據庫管理系統,用于存儲和管理數據。下面是簡要的MySQL安裝配置教程: 步驟1:下載MySQL 訪問MySQL官方網站(https://dev.mysql.com/downloads/mysql/)下載適合您操作系統…

Java冒泡排序實現及應用解析

Java冒泡排序實現及應用解析 冒泡排序是計算機科學中最基本的排序算法之一,盡管它的效率不是最高的,但由于其實現簡單,它在教學和某些特定場景下仍然具有不可替代的作用。本文將從Java語言的角度,深入探討冒泡排序的基本原理、實…

全國31省細分產品出口數據集(2002-2022年)

數據簡介:整理全國31個省直轄市自治區按hs碼分的22類細分產品的出口數據,只包含22類的細分,不包含更細的類目。可用來計算出口產品質量,出口產品技術復雜度等指標,數據區間為2002-2022年。 數據名稱:31省細…

《昇思25天學習打卡營第11天 | 昇思MindSpore基于 MindSpore 實現 BERT 對話情緒識別》

11天本節學習到BERT全稱是來自變換器的雙向編碼器表征量,它是Google于2018年末開發并發布的一種新型語言模型。BERT模型的主要創新點都在pre-train方法上,即用了Masked Language Model和Next Sentence Prediction兩種方法分別捕捉詞語和句子級別的repres…

【SGX系列教程】(五)Intel-SGX 官方示例分析(SampleCode)——RemoteAttestation

文章目錄 一.RemoteAttestation原理介紹1.1 遠程認證原理1.2 遠程認證步驟1.3 遠程認證基本流程1.4 IAS通過以下步驟驗證報告的簽名1.5 關鍵術語1.6 總結二.源碼分析2.1 README2.1.1 README給出的編譯流程2.2 重點代碼分析2.2.0 主要代碼模塊交互流程分析2.2.1 isv_app文件夾2.…

python-18-零基礎自學python-用類創建冰淇凌小店的口味

學習內容:《python編程:從入門到實踐》第二版 知識點: 類、子類、繼承、調用函數 練習內容: 練習9-6:冰激凌小店 冰激凌小店是一種特殊的餐館。編寫一個名為IceCreamStand的類,讓它繼承為完成練習9-1或…

YonBIP 獲取項目代碼配置(圖文)

項目開發文件在本地環境重新部署后,開發端機器需要重新部署,在此記錄一下操作過程。 1. 新建項目目錄,在目錄下點鼠標右鍵,選 Git Bash Here 2. 開始下載代碼,根據代碼量多少,幾分鐘就能下載完成。 3. 下載…

任意密碼重置漏洞

文章目錄 1. 任意密碼重置漏洞原理2. 任意密碼重置漏洞產生原因3. 任意密碼重置漏洞場景3.1 驗證碼爆破3.2 驗證憑證回傳3.3 驗證憑證未綁是用戶3.4 跳過驗證步驟3.5 憑證可預測3.6 同時向多個賬戶發送憑證 4. 任意密碼重置經典案例4.1 中國人壽某重要系統任意賬戶密碼重置4.2 …

【單元測試】Controller、Service、Repository 層的單元測試

Controller、Service、Repository 層的單元測試 1.Controller 層的單元測試1.1 創建一個用于測試的控制器1.2 編寫測試 2.Service 層的單元測試2.1 創建一個實體類2.2 創建服務類2.3 編寫測試 3.Repository 1.Controller 層的單元測試 下面通過實例演示如何在控制器中使用 Moc…