haproxy-詳解
四層:
LVS (Linux Virtual Server)
HAProxy (High Availability Proxy)
Nginx (1.9以上)
七層:
HAProxy
Nginx
硬件:
Netscaler https://www.citrix.com.cn/products/citrix-adc
Array https://www.arraynetworks.com.cn
北京靈州 http://www.lingzhou.com.cn/cpzx/llfzjh
應用 場景
四層: Redis Mysql rabbitmq memcache 等
七層: nginx tomcat apache php 圖片 動靜分離 API 等
HAProxy安裝及基礎配置
debian apt 安裝
如圖所示按自己的 debian 版本 和 需要安裝的 haproxy 版本 自行選擇
安裝最新長期穩定版 debian 需要導入一個新包的配置
不知道咋回事 haproxy 官方的給的代碼 上圖中 是錯誤的
需要 vim /etc/apt/sources.list.d/backports.list
插入下面一行代碼
deb http://deb.debian.org/debian bullseye-backports main #debian官方給的
?
apt update 更新一下源
apt install -t bullseye-backports haproxy=2.4.\* 安裝的時候需要指定 -t bullseye-backports
?
https://backports.debian.org/Instructions/ debian官方的backports 配置
ubuntu apt 安裝
如圖所示 按照自己的 ubuntu 版本 和 所需的haproxy 版本 自行選擇
centos7 yum 安裝
CentOS 中yum安裝版本太低,是1.5版本
可以添加yum源
使用其他的yum源,我們這里就使用IUS源。
IUS is a yum repository that provides newer versions of select software for RHEL and CentOS.
它為CentOS按RHEL提供最新軟件版本的yum源。
vim /etc/yum.repos.d/ius-7.repo
?
?
?
[ius]
?
name = IUS for Enterprise Linux 7 - $basearch
?
baseurl = https://repo.ius.io/7/$basearch/
?
enabled = 1
?
repo_gpgcheck = 0
?
gpgcheck = 1
?
gpgkey = https://repo.ius.io/RPM-GPG-KEY-IUS-7
?
[ius-debuginfo]
?
name = IUS for Enterprise Linux 7 - $basearch - Debug
?
baseurl = https://repo.ius.io/7/$basearch/debug/
?
enabled = 0
?
repo_gpgcheck = 0
?
gpgcheck = 1
?
gpgkey = https://repo.ius.io/RPM-GPG-KEY-IUS-7
?
[ius-source]
?
name = IUS for Enterprise Linux 7 - Source
?
baseurl = https://repo.ius.io/7/src/
?
enabled = 0
?
repo_gpgcheck = 0
?
gpgcheck = 1
?
gpgkey = https://repo.ius.io/RPM-GPG-KEY-IUS-7
?
?
?
清理緩存:yum clean all
更新緩存:yum makecache fast
?
?
編譯安裝 centos7
點擊Latest version 選擇 源碼包的 版本
https://www.lua.org/ # lua官網
?
?
?
?
yum install gcc openssl-devel readline-devel systemd-devel make pcre-devel #依賴包
?
?
?
wget https://www.haproxy.org/download/2.3/src/haproxy-2.3.16.tar.gz #右鍵點擊復制連接
?
curl https://www.lua.org/ftp/lua-5.3.5.tar.gz > lua-5.3.5.tar.gz #haproxy如果編譯開啟lua 需要安裝lua
?
tar xf lua-5.3.5.tar.gz -C /usr/local/src/ #解壓lua
?
cd /usr/local/src/lua-5.3.5
?
make INSTALL_TOP=/usr/local/lua-5.3.5 linux install #安裝lua
?
?
?
?
?
tar xf haproxy-2.2.19.tar.gz -C /usr/local/src/ #解壓haproxy
?
cd /usr/local/src/haproxy-2.2.19/
?
編譯參數: 可以查看當前目錄里邊的 INSTALL 和 README 文件 看需求編譯
?
?
?
make -j $(nproc) TARGET=linux-glibc USE_OPENSSL=1 USE_ZLIB=1 USE_LUA=1 USE_PCRE=1 USE_SYSTEMD=1 LUA_INC=/usr/local/lua-5.3.5/include LUA_LIB=/usr/local/lua-5.3.5/lib
?
make PREFIX=/usr/local/haproxy-2.2.19 install #編譯安裝
ln -sv /usr/local/haproxy-2.2.19/ /usr/local/haproxy #做個軟連接
?
?
?
?
用 systemd 管理 haproxy
?
vim /usr/lib/systemd/system/haproxy.service #加入如下代碼,或者用yum 安裝一個 直接照抄 修改一些關鍵屬性
?
[Unit]
Description=HAProxy Load Balancer
After=network-online.target
Wants=network-online.target
?
[Service]
EnvironmentFile=-/etc/sysconfig/haproxy
Environment="CONFIG=/etc/haproxy/haproxy.cfg" "PIDFILE=/run/haproxy.pid"
ExecStartPre=/usr/local/haproxy/sbin/haproxy -f $CONFIG -c -q $OPTIONS
ExecStart=/usr/local/haproxy/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $OPTIONS
ExecReload=/usr/local/haproxy/sbin/haproxy -f $CONFIG -c -q $OPTIONS
ExecReload=/bin/kill -USR2 $MAINPID
KillMode=mixed
SuccessExitStatus=143
Type=notify
?
[Install]
WantedBy=multi-user.target
?
?
?
?
?
systemctl daemon-reload # 重啟一下system 服務
?
?
?
?
?
?
還不能啟動 需要 根據上述代碼中的指定的路徑 創建編寫配置文件
mkdir /var/lib/haproxy
mkdir /etc/haproxy
vim /etc/haproxy/haproxy.service 加入如下代碼, PS企業常用配置
?
?
——————————————————————————————————————————————————————————————————————————————————-——
?
?
global
maxconn 100000
chroot /usr/local/haproxy
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
uid 99
gid 99
daemon
#nbproc 4
#cpu-map 1 0
#cpu-map 2 1
#cpu-map 3 2
#cpu-map 4 3
#nbthread 4
spread-checks 5
pidfile /var/lib/haproxy/haproxy.pid
log 127.0.0.1 local3 info
?
?
defaults
option redispatch
#option abortonclose
option http-keep-alive
option forwardfor
maxconn 100000
mode http
timeout connect 30s
timeout client 60ms
timeout server 60ms
?
?
?
listen stats
mode http
bind 0.0.0.0:9999
stats enable
log global
stats uri /haproxy-status
stats auth luoluo:angel4239360
?
?
————————————————————————————————-————————————————————-——————--——
?
systemctl start haproxy
?
?
?
?
?
?
?
?
?
?
haproxy 配置參數
global #全局配置
maxconn 100000 #單個進程的最大并發數,建議調大一點
?
?
最大連接數
chroot /usr/local/haproxy #鎖定運行目錄
#stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin #沒有多進程用這個
stats socket /var/lib/haproxy/haproxy.sock1 mode 600 level admin process 1
stats socket /var/lib/haproxy/haproxy.sock2 mode 600 level admin process 2
這樣寫, 防止開啟多進程模式下,服務器上線,下線時,利用 socat 動態關閉,開啟,或者更改 權重時,會有其他進程沒有關掉,或開啟。用socat關閉或者開啟的時候要把多個sock全都關閉或者開啟 (通俗來說就是多個人干活,我只通知了一個人,其他人不知道)
?
uid 99 #nobody 用戶
gid 99
daemon #已守護進程方式運行
spread-checks 5 #后端server狀態check隨機提前或延遲百分比時間,建議2-5(20%-50%)之間
#nbproc 4 # 相當于 nginx 的綁定 cpu 開啟多進程 cpu-map 表示哪個進程綁定在哪個cpu上
#cpu-map 1 0
#cpu-map 2 1
#cpu-map 3 2
#cpu-map 4 3
nbthread 4 # 表示開啟多個線程 跟nbproc是沖突的,只能選擇一個 建議開啟多進程的,除非單核資源有限
#pidfile /var/lib/haproxy/haproxy.pid #pid 文件指定路徑
log 127.0.0.1 local3 info
?
?
defaults #默認設置模塊,如果后邊寫到了這里就不生效了
option redispatch #當server ID對應的服務器掛掉后,強制定向到其他健康的服務器,重新派發
#option abortonclose #當服務器負載很高的時候,自動結束掉當前隊列處理比較久的連接 不建議開啟,看具體需求
option http-keep-alive #開啟會話保持
option forwardfor #透傳客戶端真實IP至后端web服務器
maxconn 100000 # 單個進程的最大并發數,建議調大一點
mode http #設置默認工作類型
timeout http-keep-alive 120s # session 會話保持超時時間,范圍內會轉發到相同的后端服務器
timeout connect 30s # 客戶端請求從 haproxy 到后端 server 的最長連接等待時間 (TCP之前)
timeout client 60s #設置 haproxy 與客戶端的最長非活動時間
timeout server 60s # 客戶端請求從 haproxy 到后端服務器的請求處理時長 (TCP之后)
timeout check 5s #對后端服務器的默認檢測超時時間
?
?
?
listen stats 這一段頁面監控
mode http
bind 0.0.0.0:9999
stats enable
log global
stats uri /haproxy-status
stats auth luoluo:angel4239360
?
?
?
?
?
?
frontend WEB_PORT 負載后端服務器 第一種 寫法 不常用 建議用下面的
bind :80
use_backend luoluo-host
?
backend luoluo-host
server web1 192.168.154.129:80 check addr 192.168.154.129 port 80 inter 2s fall 3 rise 5
?
?
?
?
listen luo 負載后端服務器 第二種寫法 建議用這種
bind 192.168.154.173:2333
server web1 192.168.154.129:80 weight 1 check addr 192.168.154.129 port 80 inter 2s fall 3 rise 5
server diertai 192.168.154.172:80 weight 1 check inter 2s fall 3 rise 5
?
?
?
?
?
?
?
調度算法
socat 動態操作 haproxy
?
socat 動態更改的操作,會在 haproxy 重啟,或者reload 時 失效,以配置文件為準
?
?
?
socat - /var/lib/haproxy/haproxy.sock #交互式操作
for i in `seq 5`;do socat - /var/lib/haproxy/haproxy.sock ; done #循環操作
echo "help" | socat stdio /var/lib//haproxy/haproxy.sock #查看幫助信息
echo "get weight luoluo-host/web1" | socat stdio /var/lib//haproxy/haproxy.sock 查看當前服務器的權重
echo "set weight luoluo-host/web1 5" | socat stdio /var/lib//haproxy/haproxy.sock 更改當前服務器的權重,靜態算法不支持更改
echo "set disable server luoluo-host/web1" | socat stdio /var/lib//haproxy/haproxy.sock 關閉當前后端服務器的轉發
echo "set enable server luoluo-host/web1" | socat stdio /var/lib//haproxy/haproxy.sock 開啟當前后端服務器的轉發
?

浙公網安備 33010602011771號