HAProxy基础学习笔记


title: HAProxy基础学习笔记
date: 2018-11-05 11:53:00
tags:

  • HAProxy
  • 学习笔记

HAProxy代理软件基础学习笔记

基础知识

  • HAProxy是使用C语言编写的,提供负载均衡,以及基于TCP和HTTP的应用程序代理。它支持Client-HAProxy,HAProxy-Server的全程SSL链接;
  • HAProxy采用单线程事件驱动型非阻塞引擎,支持较大的并发数链接,具有较高的性能和稳定性;多线程或多进程受内存、系统调度、锁的限制,很少能处理数千并发链接。事件驱动型因为有更好的资源和事件管理的用户空间实现所有任务,所以可以处理较大并发数链接。 1
  • HAProxy适用于负载大的Web站点,支持数以万计的并发连接,它的运行模式可以简单安全的整合到当前的架构中,使Web服务器不被暴露到网络中;
  • HAProxy还提供基于Web的统计信息页面,用于展现健康状态和数据流量;
  • HAProxy常见的架构形式如下:2
    HAProxy基础学习笔记_第1张图片
    HAProxy Proxy

核心功能

  • 负载均衡
    • 提供2种负载均衡模式:TCP伪四层和HTTP七层
  • 健康检查
    • 支持TCP和HTTP两种健康检查模式
  • 会话保持
    • 对尉氏县会话共享的应用集群,可以通过Insert\Reweite\Prefix Cookie多种Hash方式实现会话保持
  • SSL
    • 可以解析HTTPS协议,并能够将请求解密为HTTP后后端传输
  • 监控与统计
    • 提供基于Web的统计信息页面

安装

  • 下载HAProxy压缩包,版本号是1.8.14

    • 下载地址:https://www.haproxy.org
  • 将下载的压缩包上传到服务器中,解压 3

    tar -xzvf haproxy-1.8.14.tar.gz
    cd haproxy-1.8.14
    uname -r # 获取系统内核版本信息
    make TARGET=linux310 ARCH=x86_64 PREFIX=/usr/local/haproxy -j 20
    # TRAGET 指定操作系统内核版本 ;ARCH 指定操作系统位数; PREFIX指定安装路径;使用参数-j 可以指定用于编译的线程数目
    make install
    
  • 完成安装

    HAProxy基础学习笔记_第2张图片
    make install haproxy

  • 准备配置文件

    cd /usr/local/haproxy
    mkdir conf
    cd conf
    touch haproxy.cfg  # haproxy的配置文件
    user add -r -s /bin/nologin haproxy
    
  • 准备启动脚本

    cd ~/haproxy-1.8.14/example
    cp haproxy.init /etc/init.d/haproxy
    chmod  +x haproxy
    vi haproxy
    # 分别修改HAProxy配置文件目录和sbin目录
    HAP_HOME=/usr/local/haproxy
    BIN=${HAP_HOME}/sbin
    CFG=${HAP_HOME}/conf/${BASENAME}.cfg
    # 如果出现“第26行,期待一元表达式”的提示信息,修改NETWORK字段
    [ ${NETWORKING}x = "no"x ] && exit 0
    

配置

  • 配置文件分为2大段:全局配置(Global),代理配置(Proxies)

全局配置

  • 全局配置建议不做修改,包含的字段有:
    1. 进程与安全配置相关的参数;
    2. 性能配置参数;
    3. Debug配置参数;
    4. 用户列表参数;
    5. peers参数;
    6. Mailers参数

代理配置

  • 代理配置又分为3部分,分别是defaults,frontend,backend,listen。
    • defaults
      • 默认参数的配置,在该部分内配置的参数,会被自动引用到之后的frontend,backend,listen,某些参数属于公用的配置,既可以在defaults中配置,也可以在frontend,backend,listen中配置,两者都配置的以后者为准,defaults中的配置会被覆盖;
    • frontend
      • 负责配置接受用户请求的虚拟前段节点,类似于nginx配置文件中的server{}字段;
    • backend
      • 负责配置集群后端服务器集群的配置,用来定义一组真实服务器,用来处理用户发出的请求,类似于nginx配置中的upstream{}字段;
    • listen
      • 用来配置前段和haproxy后端

配置文件5 6

global
   log 127.0.0.1 local0  # 全局日志文件配置条目,最多可定义2个
   log 127.0.0.1 local1 notice
   chroot /var/lib/haproxy # 切换根目录,将haproxy运行在/var/lib/haproxy,增加其安全性
   # stats socket /run/haproxy/admin.sock mode 660 level admin
   # stats timeout 30s
   user haproxy # 指定运行用户和组
   group haproxy
   daemon # 设定haproxy以后台方式运行
   maxconn 45000 #每个进程每秒最大处理的连接数 
   # maxsslconn # 设定每个进程所能接受的ssl最大并发连接数

defaults
   log global  # 继承全局日志
   mode http  # 设置haproxy默认的运行模式,默认为http,支持tcp、http,tcp常用于ssl\ssh\smtp等服务
   option httplog
   option dontlognull # 不记录上级负载均衡发送的用于检测状态的心跳包
   option http-server-close # 客户端与服务器在完成一次请求后,hap会主动关闭该tcp连接,有助于提供性能
   option forwardfor except 127.0.0.0/8 # 由于hap工作在反向代理方向,后端集群中的服务器可能无法获取发送请求的真实ip,使用forwardfor可以在报文中分装新的字段记录请求段ip,使用except排除本地的ip地址
   option redispatch # 是否允许在session失败后重新分配
   retries 3 # 连接后端服务器失败重试次数,超出该数,hap会将对应的后端服务器设置为不可用状态
   timeout http-request 10s # 
   timeout connect 10s # 成功连接到一台服务器的最长等待时间,默认为毫秒,可以换用其他单位
   timeout client 10s # 连接客户端发送数据的最长等待时间,默认为毫秒
   timeout server 10s # 服务器端回应客户端数据放的最长等待时间
   timeout check 10s # 设置对后端服务器的检测超时时间

frontend main
   bind :80,:443 # 同时监听2个端口,之间不能有空格,监听端口要重启服务
   # bind 192.168.0.93:8080 
   mode http
   # sats uri /haproxy?stats
   # dfault_backend http_back
   default_bakcend webserver

backend webserver
   balance roundrobin # 后端集群服务器组内的调度算法,roundrobin轮循,依次访问每个后端服务器
   server webserver 192.168.0.91:80 check 
   server webserver 192.168.0.92:80 check 
   # server options: weight 支持配置权重
   # 动态算法:支持权重的运行时调整,支持慢启动,每个后端中最多支持4095个server
   # static-rr 静态算法,不支持权重运行时调整及慢启动,后端主机数量无上限
   server webserver 192.168.0.93:80 check weight 3 # 加权轮询,权重为3,未设置的权重默认为1
   server webserver 192.168.0.94:80 check 
   
   listen hap_page
     mode http
     bind *:8081
     option httplog # 采用http日志格式
     stats refresh 30s # 统计页面自动刷新时间
     stats uri  /hap?stats # 统计页面url地址
     stats realm HAProxy Manage Page # 弹出用户名密码对话框的提示文本
     stats auth root:haproxy # 设置登录统计页面的用户名密码
     stats hide-version # 隐藏统计页面上的HAProxy版本信息
 

错误提示

期待一元表达式错误提示

统计页面

HAProxy基础学习笔记_第3张图片
HAProxy 认证信息
HAProxy基础学习笔记_第4张图片
HAProxy Web页面

参考

  1. http://blog.51cto.com/11010461/2139872
  2. https://www.haproxy.org
  3. http://blog.51cto.com/11010461/2139872
  4. https://cbonte.github.io/haproxy-dconv/1.8/configuration.html
  5. https://www.unixmen.com/installing-haproxy-for-load-balancing-on-centos-7/
  6. https://www.cnblogs.com/pangguoping/p/7647091.html

你可能感兴趣的:(HAProxy基础学习笔记)