HAProxy负载均衡

社区版:https://www.haproxy.org/

企业版:https://www.haproxy.com/

lua官网: https://www.lua.org/download.html

 

安装lua

[root@LB src]# wget http://www.lua.org/ftp/lua-5.4.3.tar.gz
[root@LB src]# tar zxf lua-5.4.3.tar.gz
[root@LB src]# cd lua-5.4.3
[root@LB lua-5.4.3]# make linux test

 

安装haproxy

[root@LB ~]# yum -y install make gcc pcre-devel bzip2-devel openssl-devel systemd-devel

[root@LB ~]# useradd -r -M -s /sbin/nologin haproxy

[root@LB ~]# wget https://www.haproxy.org/download/2.3/src/haproxy-2.3.10.tar.gz


[root@LB ~]# tar -zxvf haproxy-2.3.10.tar.gz

[root@LB ~]# cd haproxy-2.3.10

[root@LB haproxy-2.3.10]# make -j `nproc` TARGET=linux-glibc USE_OPENSSL=1  USE_ZLIB=1 USE_PCRE=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/usr/local/src/lua-5.4.3/src  LUA_LIB=/usr/local/src/lua-5.4.3/src  PREFIX=/usr/local/haproxy
--------------------
TARGET=linux-glibc  #通用linux内核
USE_PCRE=1  #PCRE支持正则表达式,用于用户请求的uri
USE_OPENSSL=1   #https,证书
USE_ZLIB=1   #开启压缩
USE_SYSTEMD=1   #使用systemd启动haproxy主进程
USE_LUA=1 LUA_INC=/usr/local/src/lua-5.4.3/src LUA_LIB=/usr/local/src/lua-5.4.3/src   #开启lua,及lua和lua库所在路径
PREFIX=/apps/haproxy   #指定安装路径
--------------------

[root@LB haproxy-2.3.10]# make install PREFIX=/usr/local/haproxy

[root@LB haproxy-2.3.10]# cd /usr/local/haproxy/

[root@LB haproxy]# cp sbin/haproxy  /usr/sbin/

 

配置各个负载的内核参数

[root@LB haproxy]# echo 'net.ipv4.ip_nonlocal_bind = 1' >>  /etc/sysctl.conf
[root@LB haproxy]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@LB haproxy]# sysctl -p
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1

 

基础配置文件

HAProxy的配置文件haproxy由global和proxies组成

global:全局配置段

进程及安全相关参数
性能调整相关参数
Debug参数

 proxies: 代理配置段

defaults: 默认参数为frontend、backend、listen通过默认配置
frontend:前端
backend:后端
listen:同时拥有前端和后端的配置

 

global参数配置 官方文档: http://cbonte.github.io/haproxy-dconv/2.3/intro.html

chroot #锁定运行目录
deamon #守护进程运行
stats socket /var/lib/haproxy.sock mode 600 level admin #socket文件
user、group、uid、pid #以什么用户运行
nbproc #指定每个haproxy进程数,与cpu保持一致
nbthread #指定每个haproxy进程开启的线程数,默认每个进程一个线程
cpu-map 1 0 #绑定haproxy ,进程至指定cpu
maxconn #最大连接数
maxsslconn #gaproxy进程ssl最大连接数,用于haproxy配置证书的场景
maxconnrate #每秒创建的最大连接数
spread-checks #后端server状态check随机提前或延迟百分比时间,建议2-5(20%-50%)之间
pidfile #指定pid文件路径
log 127.0.0.1  local2 info #定义全局的syslog服务器,最多两个
defaults参数配置

option redispatch  #当sever ID对应的服务器挂掉后,强制定向到其他健康的服务器,重新排发
option abortonclose #当服务器负载很高的时候,自动结束掉当前列队处理比较久的连接,关闭
option http-keep-alive  #透传客户端真实的IP至后端的web服务器
option forwardfor  #设置默认的工作类型
timeout http-keep-alive 120s  #session 会话保持超时时间,范围内会转发到后端相同的服务器
timeout connect 120s  #客户端请求从haproxy到后端的最长连接等待时间(TCP之前)
timeout server 600s  #客户端请求从haproxy到后端服务端的请求处理超时时长(tcp之后)
timeout client 600s #设置haproxy与客户端的最长非活动时间
timeout check 5s #对后端服务器的默认检测超时时间

 

defaults参数配置

option redispatch  #当sever ID对应的服务器挂掉后,强制定向到其他健康的服务器,重新排发
option abortonclose #当服务器负载很高的时候,自动结束掉当前列队处理比较久的连接,关闭
option http-keep-alive  #透传客户端真实的IP至后端的web服务器
option forwardfor  #设置默认的工作类型
timeout http-keep-alive 120s  #session 会话保持超时时间,范围内会转发到后端相同的服务器
timeout connect 120s  #客户端请求从haproxy到后端的最长连接等待时间(TCP之前)
timeout server 600s  #客户端请求从haproxy到后端服务端的请求处理超时时长(tcp之后)
timeout client 600s #设置haproxy与客户端的最长非活动时间
timeout check 5s #对后端服务器的默认检测超时时间

 

frontend参数

bind: 指定HAProxy的监听地址,可以是ipv或ipv6,可以同时监听多个IP或端口,可以同时用于listen字段中
bind [address]:<port_range> [,...] [param*]

listen http_proxy #监听http的多个IP的多个端口和sock文件
    bind :80,:443:8810-8819
    bind 10.0.0.1:10080,10.0.0.1:10443
    bind /var/run/ssl-frontend.sock user  root mode 600 accept-proxy

listen http_https_proxy  #https监听
    bind :80
    bind :443 ssl crt /etc/haproxy/site.pem
    
listen http_https_proxy_explicit  #监听ipv6、ipv4和unix sock文件
    bind ipv6@:80
    bind ipv4@public_ssl:443 ssl crt /etc/haproxy/site.pem
    bind  unix@ssl-frontend.sock user root mode 600 accept-proxy
    
linten external_bind_app1 #监听file descriptor
    bind  "fd@${FD_API}"

示例:
frontend  web_port
   bind :80,:8080
   bind 192.168.248.100:10080.8801-8810,192.168.248.102:9001-9005
   mode http/tcp   #指定负载协议类型
   use_backend  backend_name  #调用后端服务器组名称

 

backend配置 

定义一组后端服务器,backend服务器将被frontend进行调用

mode http/tcp  #指定负载协议类型
option #配置选项
server  #后端 real server

 注意: option后面加httpchk,smtpchk,mysql-check,pgsql-check,ssl-hello-chk方法,可用于实现跟多应用层检测功能

check #对指定real进行监控状态检查,默认不开启
  addr IP   #可指定的健康状态监测IP
  port num  #健康状态监测端口
  inter num #检测间隔时间,默认2s
  fall num  #后端服务器失效检查次数,默认3
  rise num  #后端服务器从下线户恢复查次数,默认2
weight #默认1,最大值256,0表示不参与负载均衡
backup #将后端服务器标记为备份状态
disabled #将后端服务器标记为不能用状态
redirect prefix http://www.magedy.net/ #将请求临时重定向到其他URL,值适用于http模式
maxconn <maxconn>:当前后端server的最大并发连接数,一般不设置
backlog <backlog>:当server的连接数到上线后的后援列队长度

 

测试环境,防火墙、selinux关闭

环境 IP 服务
centos8 DB 192.168.248.200 haproxy
centos8 RS1 192.168.248.201   httpd
centos8 RS2 192.168.248.202 httpd

生成配置文,frontend+backend

[root@LB ~]# mkdir /etc/haproxy
[root@LB ~]# vim /etc/haproxy/haproxy.cfg
#--------------全局配置----------------
global
    log 127.0.0.1 local2  info
   #log loghost local2 info
    maxconn 20480
    chroot /usr/local/haproxy
    pidfile /var/run/haproxy.pid
   #stats socket  /var/lib/haproxy/haproxy.sock mode 600 level admin
   #maxconn 4000
    user haproxy
    group haproxy
    daemon
    nbproc 1
    nbthread 4
   #cpu-map 1 0
   #cpu-map 2 1
    spread-checks 5
#---------------------------------------------------------------------
#common defaults that all the 'listen' and 'backend' sections will
#use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode http
    log global
    option dontlognull
    option httpclose
    option httplog
    option  http-keep-alive
    #option forwardfor
    option redispatch
    balance roundrobin
    timeout connect 60s
    timeout client 30s
    timeout server 30s
    timeout check 10s
    maxconn 60000
    retries 3

#-------------------状态页面----------------
listen stats
    mode http
    bind 0.0.0.0:9999
    stats enable
    log global
    stats uri  /haproxy-status
    stats  auth    admin:admin    

#----------------前端入口-----------------
frontend  web_prot
    bind 192.168.248.200:80
    mode http
    use_backend  test
   #redirect prefix http://www.itwangqing.net.cn

#---------------后端服务------------------
backend test
    mode http
    option forwardfor
    server apacheRS1  192.168.248.201:80 maxconn 5 check addr 192.168.248.201 port 80 inter 2s fall 3 rise 5
    server apacheRS2  192.168.248.202:80 maxconn 5 check addr 192.168.248.202 port 80 inter 2s fall 3 rise 5

 

检测配置文件并启动服务

[root@LB ~]# haproxy  -f /etc/haproxy/haproxy.cf -c
Configuration file is valid
[root@LB ~]# haproxy  -f /etc/haproxy/haproxy.cf

#测试访问
[root@LB ~]# for i in `seq 6`;do curl 192.168.248.200;done
apacheRS1
apacheRS2
apacheRS1
apacheRS2
apacheRS1
apacheRS2

 

网页上查看haproxy状态,用户密码admin:admin

HAProxy负载均衡

 

使用listen替代fronted+backend

--------------全局配置----------------
global
    log 127.0.0.1 local2  info
   #log loghost local2 info
    maxconn 20480
    chroot /usr/local/haproxy
    pidfile /var/run/haproxy.pid
   #stats socket  /var/lib/haproxy/haproxy.sock mode 600 level admin
   #maxconn 4000
    user haproxy
    group haproxy
    daemon
    nbproc 1
    nbthread 4
   #cpu-map 1 0
   #cpu-map 2 1
    spread-checks 5

#-------------------默认配置-------------------
defaults
    mode http
    log global
    option dontlognull
    option httpclose
    option httplog
    option  http-keep-alive
    #option forwardfor
    option redispatch
    balance roundrobin
    timeout connect 60s
    timeout client 30s
    timeout server 30s
    timeout check 10s
    maxconn 60000
    retries 3
#---------------状态页面---------------------
listen stats
    mode http
    bind 0.0.0.0:9999
    stats enable
    log global
    stats uri  /haproxy-status
    stats  auth    admin:admin    
 
#--------------web设置--------------------------    
listen test
    bind 192.168.248.200:80
    server apacheRS1  192.168.248.201:80  check inter 2s fall 3 rise 5
    server apacheRS2  192.168.248.202:80  check inter 2s fall 3 rise 5

 重启服务

[root@LB ~]# pkill -9 haproxy
[root@LB ~]# haproxy  -f /etc/haproxy/haproxy.cfg

 

网页上查看haproxy状态

HAProxy负载均衡

haproxy.service文件编写

[root@LB haproxy]# cat > /usr/lib/systemd/system/haproxy.service <<EOF
> [Unit]
> Description=HAProxy Load Balancer
> After=syslog.target network.target
> 
> [Service]
> ExecStartPre=/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg   -c -q
> ExecStart=/usr/local/haproxy/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg  -p /var/run/haproxy.pid
> ExecReload=/bin/kill -USR2 $MAINPID
> 
> [Install]
> WantedBy=multi-user.target
> EOF

[root@LB ~]# systemctl  daemon-reload

 

上一篇:c-无法在QT编辑器中创建调试引擎


下一篇:HAProxy 算法