zoukankan      html  css  js  c++  java
  • 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 LB 192.168.248.200 haproxy
    centos8 RS1 192.168.248.201 httpd
    centos8 RS2 192.168.248.202 httpd

    RS安装httpd

    [root@RS1 ~]# yum -y install httpd
    [root@RS1 ~]# echo apacheRS1 > /var/www/html/index.html
    
    [root@RS2 ~]# yum -y install httpd
    [root@RS2 ~]# echo apacheRS2 > /var/www/html/index.html
    

    haproxy生成配置文,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
    

    基于https访问

    [root@RS1 ~]# yum -y install mod_ssl
    [root@RS1 ~]# systemctl  start httpd
    
    [root@RS2 ~]# yum -y install mod_ssl
    [root@RS2 ~]# systemctl  start httpd
    

    修改haproxy配置文件

    # option  httplog 需要注释
    
    listen https
        bind 192.168.248.200:443
        log global
        mode tcp
        server httpsRS1 192.168.248.201:443 check inter 2s fall 3 rise 5
        server httpsRS2 192.168.248.202:443 check inter 2s fall 3 rise 5
    

    测试访问

    [root@LB ~]# for i in `seq 6` ;do curl -k https://192.168.248.200;done
    apacheRS1
    apacheRS2
    apacheRS1
    apacheRS2
    apacheRS1
    apacheRS2
    
  • 相关阅读:
    浅析CString内部实现机制
    ...sourceannotations.h(142) : error C3094: “repeatable”: 不允许匿名使用
    非MFC项目使用CString及如何打印
    GetTextExtentPoint32--获取字符串在屏幕上长度
    窄字符与宽字符相关的操作
    如何给图片添加黑色边框
    react native
    礼仪 习俗 文化
    职业 行业 2 博客
    读书 文摘 笔记 2 人生的支柱
  • 原文地址:https://www.cnblogs.com/diqiyao/p/14748126.html
Copyright © 2011-2022 走看看