HAproxy教程(1)HAproxy的安装与配置

TangLu 未命名 2023-11-27 21779 0

一、HAproxy介绍

HAProxy是一款代理软件,可以实现TCP(第四层)和HTTP(第七层)的代理配置。工作在第四层时性能更好,因为只需要分析TCP/UDP层就可以流量分发,实现负载均衡(同样有代表性的工具还有LVS和F5)。而工作在第七层时提供了更灵活的配置,可以实现更多的功能,比如根据URL、客户端浏览器等更多条件来进行请求转发(同样有代表性的工具就是Nginx)。HAproxy在高可用的实现方式上是对后端节点的状态进行检测,如果出现故障则重新分发请求到正常节点。经过官⽅测试, HAProxy 单位时间处理的最⼤请求数为 20000 个,可以同时维护 40000-50000 个并发连接,最⼤数据处理与数据交换能⼒为 10Gbps


二、安装HAproxy
1、通过官方网站(https://www.haproxy.org/#down)下载较新版本的HAproxy源码包(CentOS默认仓库中的版本较老,故不推荐)

haproxy1.jpg


2、使用HAproxy源码包编译安装步骤如下

make TARGET=linux-glibc USE_OPENSSL=1 USE_PCRE=1    #源码包中的INSTALL文档有详细的安装说明 
make install PREFIX=/usr/local/haproxy


3、编译安装完成后运行命令测试

/usr/local/haproxy/sbin/haproxy --version

haproxy2.jpg


4、创建配置文件

如果是YUM安装的话配置文件会自动创建为/etc/haproxy/haproxy.cfg。通过编译安装的话则可以使用源码包中的模板文件进行修改,该模板目录中还有进程管理脚本等可以使用

cp /usr/local/src/haproxy-2.8.4/examples/basic-config-edge.cfg /usr/local/haproxy/haproxy.cfg
cp ./examples/haproxy.init /etc/init.d/haproxy
chmod 755 /etc/init.d/haproxy


5、创建用户并启动HAproxy服务

useradd haproxy
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg


三、HAproxy核心配置说明
Haproxy配置文件根据功能和用途分为了不同部分

global:全局参数,通常是和系统相关的配置
frontend:配置接收用户请求的前端信息,相当于服务的入口,类似配置nginx的upstream
backend:配置后端提供真实服务的服务器相关配置

use_backend:基于条件进行调度

default:默认使用的配置,可以在frontend、backend、listen等部分中使用

listen:兼容老版本的配置方式,老版本中没有划分frontend和backend,都是整合到了listen中进行配置

global
  log    127.0.0.1 local0    #全局日志配置,Haproxy通过rsyslog将日志发到指定日志服务器,这里传给了本机
  maxconn    20000    #设置每个haproxy进程的并发连接数
  nbproc    4    #设置Haproxy启动时的进程数,默认为1,不能超过CPU核数
  uid    200     #运行Haproxy的uid和gid
  gid    200
  daemon       #Haproxy后台运行
  pidfile  /usr/local/haproxy/haproxy.pid
  
defaults
  mode    http               #运行模式,分tcp(四层)或者http(七层)两种模式,默认是tcp模式
  timeout connect    10s     #成功连接到一台服务器的最长等待时间,不写单位的话默认是毫秒
  timeout client    1m       #客户端发送数据最长等待时间
  timeout server    1m       #服务端回应客户端数据发送的最长时间
  timeout check    10s       #设置每次对后端服务器检测超时的时间
  retries    3               #Haproxy连接后端服务器失败的次数,达到该次数后将标记该后端服务器为不可用并踢出集群
  
frontend  webserver  #定义前端节点的名字
  bind  *:80         #Haproxy前端服务所监听的IP与端口
  option  httplog    #Haproxy默认不记录http日志,通过这个配值启用详细日志
  option  dontlognull    #日志中不记录上级负载均衡器发送的用于检测的心跳数据包
  option  forwardfor    except 127.0.0.0/8    #让后端服务器能获得客户端真实IP
  log  global  #使用全局日志的配置
  default_backend  webserver    #访问该前端服务后默认转发到该后端服务组
  
backend webserver    #定义后端服务组的名字
  mode  http  
  balance  roundrobin    #定义负载均衡调度算法,还有static-rr、source、uri等多种算法
  option  redispatch    #在节点请求失败发生切换时保持cookie
  option  httpchk GET /index.html    #检查后端节点页面状态码是否为200,如果异常就不再将请求送给该服务器,除了GET外还可以使用HEAD
  server  server1 192.168.1.100:80 weight 5 check inter 2000 rise 2 fall 3 #weight是服务器权重,默认为1,最大为256,0不参与负载;check代表开启健康检查;inter代表健康检查间隔为2秒;rise代表健康检查多少次认为该服务器可用,fall则相反
  server  server2 192.168.1.110:80 weight 5 check inter 2000 rise 2 fall 3

  
listen  admin_stats  #Haproxy状态监控页面配置
  bind 0.0.0.0:9188
  mode http
  log 127.0.0.1 local 0 err
  stats refresh 30s  #监控页面自动刷新时间
  stats uri /status  #监控页面的地址
  stats auth admin:admin123  #登录监控页面的账号密码
  stats hide-version  #隐藏版本号
  stats admin if TRUE  #可在监控页面上手动启动或关闭后端服务器



三、Haproxy配置示例

1、将本机80端⼝的请求直接转发⾄后端 172.16.1.11:80 节点。这里使用了listen的配置方式,没有区分frontend和backend

listen proxy01 *:80 
  server web1 172.16.1.11:80;



2、将本机80端口的请求按照轮询的方式转发⾄后端webservers集群;后端 webservers 资源池包含 172.16.1.7:80、172.16.1.8:80 两个节点

frontend test_proxy *:80     #定义前端名称以及监听的地址 
default_backend webservers   #所有请求调度⾄ webservers集群 

backend webservers           #定义webservers集群名称  
  balance roundrobin         #采⽤轮询调度算法  
  server web1 172.16.1.7:80 check  #节点信息  
  server web2 172.16.1.8:80 check


3、完整配置示例

global
    log        127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user      haproxy
    group     haproxy
    daemon
    stats socket /var/lib/haproxy/stats

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8  #记录客户端真实IP
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s  #haproxy连接后端服务器超时时间
    timeout client          10m  #客户端和haproxy的非活动超时时间
    timeout server          10m  #haproxy和后端服务器的非活动超时时间
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend  test
    bind  *:80
    default_backend             test

backend test
    balance     roundrobin
    server  app1 192.168.145.180:80 weight 1 check inter 2000 fall 3 rise 3
    server  app2 192.168.145.190:80 weight 1 check inter 2000 fall 3 rise 3
listen mysqlserver  #名称随意写
    bind 0.0.0.0:3306
    balance roundrobin
    server server1 192.168.145.180:3306 weight 1
    server server2 192.168.145.190:3306 weight 1

listen  admin_stats  #配置状态监控页面
  bind 0.0.0.0:8000
  mode http
  stats refresh 30s
  stats uri /status
  stats auth admin:admin123
  stats hide-version
  stats admin if TRUE



四、Haproxy日志配置

vim /etc/rsyslog.conf  #Haproxy默认是把日志输出到/var/log/message中,不太方便查阅,所以配置文件中有配置rsyslog
$ModLoad imudp
$UDPServerRun 514
local2.*           /var/log/haproxy.log


#重启服务后查看514端口是否运行,并且是否生成了日志文件
systemctl restart rsyslog.service


五、Haproxy状态监控

Haproxy自身有提供一个状态监控页面,通过该页面可以看到后端节点的状态,如果宕掉的话会变为红色,不同颜色的含义在页面上也有说明。如图:

haproxy.png

评论