• HAproxy:负载均衡


    简介


    HAProxy 提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy 特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

    摘录地址:https://www.bilibili.com/read/cv13811038

    一、拓扑图


    在这里插入图片描述

    二、配置部署


    2.1 安装

    yum -y install haproxy
    
    • 1

    2.2 配置

    2.2.1 基础配置

    vim /etc/haproxy
    ...
    
    • 1
    • 2

    配置文件详解

    HAproxy配置文件(haproxy.cfg )主要由5部分组成,但有些部分并不是必须的

    • global 全局配置段进程,安全配置,性能调整,Debug参数
    • defaults 默认配置段为frontend, listen, backend提供默认配置
    • frontend ACL配置段此部分用于设置接收用户请求的前端虚拟节点,并根据ACL规则直接指定要使用的后端backend
    • backend 真实集群配置段此部分用于设置群集后端服务集群的配置,处理前端用户的请求,添加真实的服务器
    • listen 代理配置段用来设置haproxy代理服务页面,监听整个后端集群状态

    全局配置 global

    global
    log 127.0.0.1 local0  日志输出配置,所有日志都记录在本机,通过local0输出
    #log 127.0.0.1 local0 notice local0代表日志设备,info,notice代表日志级别。
    #log 127.0.0.1 local0 info
    
    maxconn 4096           #每个HAproxy进程的最大连接并发数
    chroot /usr/local/haproxy    #改变当前工作目录,软件安装目录
    
    uid 99                       #所属运行的用户uid,也可以设置运行HAproxy进程的用户
    gid 99        #所属运行的用户组gid,也可以设置运行HAproxy进程的用户和组
    daemon                     #以后台形式运行ha-proxy
    nbproc 3                   #启动3个ha-proxy进程,可以设置多个进程提高性能
           要小于服务器的CPU内核数,过多的进程可能会导致进程崩溃
    pidfile /usr/local/haproxy/run/haproxy.pid     #pid文件位置
    debug               #调试模式,输出启动信息到标准输出 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    默认的全局配置 defaults

    defaults
    log  global  #集成全局配置中的日志格式
    mode http     #所处理的类别(#7层 http;4层tcp) tcp模式一般用于,SSL,SSH,SMTP,MySQL等
    option  httplog    #日志类别http日志格式
    option  http-server-close  #每次请求完毕后主动关闭http通道
    option  dontlognull      # 不记录健康检查的日志信息
    option  forwardfor   except 127.0.0.1 如果后端服务器需要获得客户端真实ip需要配置的参数
                可以从http  header中获得客户端ip
    option  redispatch  #serverID对应的服务器挂掉后,强制定向到其他健康的服务器
    option  abortonclose   #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接
     
    maxconn 20480    #最大连接数
    stats  refresh  30   统计页面刷新间隔
    retries  3    3次连接失败就认为该服务不可用
    balance  roundrobin     # rr 轮询负载均衡
    #balance  source   #  source 轮询负载均衡
    #balance  leastconn   # 最小连接的负载均衡方式,推荐在Mysql、LDAP等情况下使用
    
    timeout connect  5000   连接超时
           timeout client  50000   客户端超时
           timeout server 50000   后端服务器超时
    
    timeout  check  2000  设置对后端服务器的检测超时时间,默认单位是毫秒
    timeout http-request     10s
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    虚拟前端部分 frontend

    frontend  www
    bind *:80  | 0.0.0.0:80 只能在frontend和listen部分进行定义,用于定义一个或几个监听的套接字
       bind  主机名|IP地址|*:port   interface <ens33>(可选)
    option httplog    #启用日志记录http请求
    option forwardfor    #通过X-Forwarded-For信息,来记录客户端来源IP
    option httpclose    #表示在客户端和服务器端完成一次连接请求后,HAproxy将主动关闭此TCP连接
    log      global
    default_backend web #指定默认的后端服务器池,指定后端真实服务器。1234567
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    真实服务器集群部分 backend

    backend web    使用backend关键字定义名为web的后端真实服务器组
    mode http
    option loghttp
    option redispatch 如果后端服务器发生故障,会通过此参数,
       将客户的请求强制定向到另外一台健康的后端服务器上,以保证服务正常
    option abortonclose 此参数可以在服务器负载很高的情况下,自动结束当前队列中处理时间比较长的连接
    balance roundrobin 定义负载均衡算法
    cookie  SERVERID  表示允许向cookie插入serverid。
       每台服务器的serverid可在下面的server关键字中使用cookie关键字定义
    
    option  httpchk GET  /index.html 启用http的服务状态检测功能
    option  httpchk HEAD /index.html  HTTP/1.1\r\nHost:\ www.xxx.com   头部检测格式
    server  web1  192.168.10.2:80  cookie  server1  weight  6 check inter 2000 rise 2 fall 3
    server  web2  192.168.10.22:9000  cookie  server2  weight 6 check inter 2000 rise 2 fall 3
    
    注释如下:
    #服务器定义web1,cookie表示serverid为web1
    #check  inter  2000 检测心跳频率
    #rise 3 是三次正确认为服务器可用  fall 3  是三次失败认为服务器不可用
    #weight代表权重,backup为备份节点
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    代理页面监听部分 listen

    listen web_stats      #通过listen定义了一个名为“web_stats”的监控页面
    bind 0.0.0.0:80   #此处可以设置监听页面的端口号,可以是任意端口号
    log    global    
     mode   http    
     stats  refresh 30s    #设置HAproxy监控统计页面自动刷新时间
     stats  uri  /haproxy-stats #设置HAproxy监控统计页面的URL路径,
    stats  realm  welcome  logn\ Haproxy #设置登录HAproxy监控统计页面时,密码框上的文本提示信息
    stats auth admin:123.com #设置登录HAproxy统计页面的用户名和密码,可以为监控页面设置多个用户名和密码,每行一个
    #stats auth shm:123.com
    stats hide-version  #用来隐藏统计页面上HAproxy的版本信息
    stats admin if TURE  #可以在监控页面上手工启用或禁用后端真实服务器。 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.2.2 健康检查

    http健康检查方式注解GETclient请求服务器资源,服务器返回对应资源HEAD只请求响应报文中的HTTP头部POST将客户端的数据提交到服务器PUT从客户端向服务器传送的数据代替指定的文档内容DELETE删除,请求服务器删除 request-URI 标识资源MOVE请求服务器将指定页面转移到另外网络。

    1、通过监听端口进行健康检测 通过监听端口只会去检查后端server的端口,并不能保证服务的真正可用。

    listen http_proxy 0.0.0.0:80
           mode http
           cookie SERVERID
           balance roundrobin
           option httpchk
           server web1 192.168.1.1:80 cookie server01 check
           server web2 192.168.1.2:80 cookie server02 check inter 500 rise 1 fall 2 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2、通过URI获取进行健康检测,用过去GET后端server的的web页面,基本上可以代表后端服务的可用性。

    listen http_proxy 0.0.0.0:80
           mode http
           cookie SERVERID
           balance roundrobin
           option httpchk GET /index.html
           server web1 192.168.1.1:80 cookie server01 check
           server web2 192.168.1.2:80 cookie server02 check inter 500 rise 1 fall 2 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3、通过request获取的头部信息进行匹配进行健康检测 。这种检测方式,则是基于高级,精细的一些监测需求。通过对后端服务访问的头部信息进行匹配检测。

    listen http_proxy 0.0.0.0:80
           mode http
           cookie SERVERID
           balance roundrobin
           option httpchk HEAD /index.jsp HTTP/1.1\r\nHost:\ www.xxx.com
           server web1 192.168.1.1:80 cookie server01 check
           server web2 192.168.1.2:80 cookie server02 check inter 500 rise 1 fall 2 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.3 启动服务

    systemctl start haproxy
    systemctl enable haproxy
    
    • 1
    • 2
  • 相关阅读:
    Day35.根据身高重建队列、最少箭数引爆气球
    混淆技术研究笔记(六)如何基于yGuard实现?
    关于chatGPT对有关Docker Desktop问题的一个回答
    ps怎么拼图,自学ps软件photoshop2022,PS制作拼图效果
    Go构建模式:GOPATH、vendor、Go Module
    【微服务】Day02
    LeetCode 19. 删除链表的倒数第 N 个结点
    python爬虫-30-python之图形验证码技术
    springboot基本使用十一(自定义全局异常处理器)
    做了一个简单的时间事件流控件
  • 原文地址:https://blog.csdn.net/focus_lyh/article/details/126232726