ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HAProxy负载均衡

2021-05-09 16:35:47  阅读:196  来源: 互联网

标签:HAProxy haproxy 负载 LB option bind 均衡 http root


社区版: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

 

使用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.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

 

标签:HAProxy,haproxy,负载,LB,option,bind,均衡,http,root
来源: https://www.cnblogs.com/diqiyao/p/14748126.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有