VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
  • haproxy-详解

负载均衡类型:

四层:

LVS (Linux Virtual Server)
HAProxy (High Availability Proxy)
Nginx (1.9以上)

七层:

 

HAProxy
Nginx

硬件:

 

F5 https://F5.com/zh

Netscaler https://www.citrix.com.cn/products/citrix-adc

Array https://www.arraynetworks.com.cn

深信服 http://www.sangfor.com.cn

北京灵州 http://www.lingzhou.com.cn/cpzx/llfzjh

 

 

应用 场景

四层: Redis   Mysql  rabbitmq  memcache 等
七层: nginx   tomcat  apache  php   图片  动静分离  API 等

 

HAProxy安装及基础配置

https://www.haproxy.org/

image-20211213172817104

 

image-20211213172911392

 

debian apt 安装

image-20211213173031447

如图所示按自己的 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 安装

 

image-20211213174413415

 

如图所示  按照自己的 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

 

https://www.haproxy.org/

image-20211213194509129

点击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 配置参数

 

image-20211214221312020

 

image-20211214224137314

 

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

 

 

 

 

 

 

 

调度算法

 

 

 

 

image-20211215114437435

 

image-20211215153417077

 

image-20211215154102652

image-20211215155043385

 

 

image-20211215155522813

image-20211216214220887

image-20211216214823745

 

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  开启当前后端服务器的转发
  

 出处:https://www.cnblogs.com/luoluo160717/p/15750972.html


相关教程