负载均衡软件HAProxy介绍及配置

## HAProxy
HAProxy是一款开源、高性能的、基于TCP和HTTP应用的负载均衡软件。

### 特点
>- 可靠性和稳定性非常好,可与硬件级的F5负载均衡设备相媲美。
- 最高可以同时维护40000~50000个并发连接,单位时间内处理的最大请求数为20000个,最大数据处理能力可达10Gbit/s。
- 支持多于8种负载均衡算法,同时也支持会话保持。
- 支持虚拟主机功能。
- 从HAProxy1.3后开始支持连接拒绝、全透明代理等功能。
- 支持功能强大的服务器状态监控页面,可实时了解系统的运行状况。
- 拥有功能强大的ACL(访问控制列表)支持,能给使用带来很大方便。

### 安装与配置
#### 1.安装
下载地址:https://fossies.org/linux/misc/haproxy-1.8.13.tar.gz/  
   # 解压  
    `tar -zxvf haproxy-1.8.13.tar.gz`  
    `cd haproxy-1.8.13`  
   # 安装  
    `make TARGET=linux2628 ARCH=x86_64 PREFIX=/usr/local/haproxy`  
    `make install PREFIX=/usr/local/haproxy`  
安装完成后安装目录下生成三个目录`doc` `sbin` `share`

####2.配置
安装完成后,默认安装目录中没有配置文件,需要在安装目录中创建配置文件目录和配置文件:  
`mkdir /usr/local/haproxy/conf`  
`touch haproxy.cfg`
#####2.1配置文件概述
HAProxy配置文件由5个部分组成:  

>- global部分  
用来设置全局配置参数,属于进程级的配置,通常和操作系统配置有关。
- defaults部分  
默认参数配置部分。在此部分设置的参数值,默认会自动被引用到下面的frontend、backend和listen部分中。
- frontend部分  
用于设置接受用户请求的前端虚拟节点。frontend可根据ACL规则直接指定要使用的后端(backend)。
- backend部分  
用于设置集群后端服务集群的配置,用来添加一组真实服务器。
- listen部分  
frontend部分和backend部分的结合体。HAProxy 1.3版本之前,HAProxy的所有配置选项都在这个部分中设置。  

#####2.2配置文件详解

```
#########全局配置##########
global
  log 127.0.0.1 local0 info #日志输出配置,所有日志都记录在本机,通过local0输出,info定义haproxy日志级别[error warring info debug]
  daemon #以后台形式运行harpoxy
  nbproc 1 #设置进程数量
  maxconn 4096 #默认最大连接数
  #user haproxy #运行haproxy的用户
  #group haproxy #运行haproxy的用户所在的组
  #pidfile /var/run/haproxy.pid #haproxy进程PID文件

########默认配置############
defaults
   log global #使用全局的日志配置,global表示引用在HAProxy配置文件global部分中定义的log选项配置格式
  mode http #默认的模式mode { tcp|http|health },tcp是默认模式,客户端和服务器间建立全双工的连接,不对7层报文做任何类型的检查,http模式下客户端请求被转发前会被深度分析,所有与RFC格式不兼容的请求将被拒绝,health只会返回OK,基本已废弃
  retries 2 #设置连接后端服务器的失败重试次数,连接失败的次数如果超过设定值,HAProxy将对应的后端服务器标记为不可用
  maxconn 4096 #默认的最大连接数
  timeout connect 5000ms #成功连接到一台服务器的最长等待时间
  timeout client 30000ms #连接客户端发送数据时最长的等待时间
  timeout server 30000ms #服务器端返回客户端数据发送的最长等待时间
  timeout check 2000 #对后端服务器的检测超时时间
  #timeout http-keep-alive10s #默认持久连接超时时间
  #timeout http-request 10s #默认http请求超时时间
  #timeout queue 1m #默认队列超时时间
  balance roundrobin #设置默认负载均衡方式,轮询方式
  #balance source #设置默认负载均衡方式,类似于nginx的ip_hash
  #balnace leastconn #设置默认负载均衡方式,最小连接数

########统计页面配置########
listen admin_stats   #定义了一个名为“admin_stats”的实例
  bind 0.0.0.0:1080 #设置Frontend和Backend的组合体,监控组的名称,按需要自定义名称
  mode http 
  option httplog #采用http日志格式
  #log 127.0.0.1 local0 err #错误日志记录
  maxconn 10 #默认的最大连接数
  stats refresh 30s #统计页面自动刷新时间
  stats uri /stats #统计页面url
  stats realm welcome login\ Haproxy #登录统计页面时密码框上提示文本
  stats auth admin:admin #设置监控页面的用户和密码:admin,可以设置多个用户名
  stats hide-version #隐藏统计页面上HAProxy的版本信息
  stats admin if TRUE #设置手工启动/禁用后端服务器,后端服务器(haproxy-1.4.9以后版本)

########设置haproxy 错误页面#####
#errorfile 403 /home/haproxy/haproxy/errorfiles/403.http
#errorfile 500 /home/haproxy/haproxy/errorfiles/500.http
#errorfile 502 /home/haproxy/haproxy/errorfiles/502.http
#errorfile 503 /home/haproxy/haproxy/errorfiles/503.http
#errorfile 504 /home/haproxy/haproxy/errorfiles/504.http

########frontend前端配置##############
frontend main  #定义了一个名为“main”的前端虚拟节点
  bind *:80 #定义一个或几个监听的套接字
  acl web hdr(host) -i www.abc.com  #acl后面是规则名称,-i为忽略大小写,后面跟的是要访问的域名,如果访问www.abc.com这个域名,就触发web规则
  acl img hdr(host) -i img.abc.com  #如果访问img.abc.com这个域名,就触发img规则
  use_backend webserver if web   #如果上面定义的web规则被触发,即访问www.abc.com,就将请求分发到webserver这个作用域
  use_backend imgserver if img   #如果上面定义的img规则被触发,即访问img.abc.com,就将请求分发到imgserver这个作用域
  default_backend dynamic #指定默认的后端服务池,dynamic在backend部分定义,不满足则响应backend的默认页面

########backend后端配置##############
backend webserver #webserver作用域
  mode http
  balance roundrobin #balance roundrobin 负载轮询,balance source 保存session值,支持static-rr,leastconn,first,uri等参数
  option httpchk /index.html HTTP/1.0 #健康检查, 检测文件,如果分发到后台index.html访问不到就不再分发给它
   option redispatch #用于cookie保持的环境中,HAProxy将serverID插入cookie中,以保证会话的持久性,如果后端服务器故障,客户端的请求会被强制定向到另一个健康的服务器上
  server web1 10.16.0.9:8085 cookie 1 weight 5 check inter 2000 rise 2 fall 3
  server web2 10.16.0.10:8085 cookie 2 weight 3 check inter 2000 rise 2 fall 3
   #定义多个后端真实服务器
  #cookie 1表示serverid为1,check inter 1500 是检测心跳频率 
  #rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重

backend imgserver  #定义后端服务池
  mode http
  option httpchk /index.php
  balance roundrobin 
  server img01 192.168.137.101:80 check inter 2000 fall 3
  server img02 192.168.137.102:80 check inter 2000 fall 3

backend dynamic   #定义后端服务池
  balance roundrobin 
  server test1 192.168.1.23:80 check maxconn 2000 
  server test2 192.168.1.24:80 check maxconn 2000


```

####3.通过ACL规则实现智能负载均衡
HAProxy通过ACL完成以下两种主要功能:
>1) 通过设置的ACL规则检查客户端请求是否合法,如果符合ACL规则要求就放行。  
2) 符合ACL规则要求的请求将被提交到后端的服务器集群,进而实现基于ACL规则的负载均衡。

HAProxy中的ACL规则经常使用在frontend部分中,使用方法如下:  
`acl 自定义的acl名称 acl方法 -i [匹配的路径或文件]`  

- acl:一个关键字,表示定义ACL规则的开始。  
- acl方法:HAProxy定义了很多ACL方法,常用的方法有 `hdr_reg(host)`、 `hdr_dom(host)`、 `hdr_beg(host)`、 `url_sub`、 `url_dir`、 `path_beg`、 `path_end`等。  
- `-i`表示忽略大小写。

####4.管理与维护HAProxy  
HAProxy安装目录的sbin目录下有一个可执行的二进制文件`haproxy`,对HAProxy的启动、关闭、重启等操作都是通过这个二进制文件来实现的。   

以下即此文件的用法:  
`haproxy [-f <cfgfile>]* [ -vdVD ] [ -n <maxconn> ] [ -N <maxpconn> ]`   
其中:  
`cfgfile`:配置文件  
`maxconn`:最大并发连接总数  
`maxpconn`:默认的连接数  

参数|说明  
:-:|:-  
 -v |显示当前版本信息;“-vv”显示已知的创建选项
 -d |表示让程序运行在debug模式:“-db”表示禁用后台模式,让程序在前台运行  
 -D |让程序以daemon模式启动,此选项也可以在HAProxy配置文件中设置  
 -q |表示无限提示模式,程序运行部输出任何信息  
 -c |对HAProxy配置文件进行语法检查。若配置文件错误,会输出对应的错误位置和错误消息  
 -n |设置最大并发连接总数
 -m |限制可用的内存大小,以MB为单位
 -N |设置默认的连接数
 -p |设置HAProxy的PID文件路径
 -de |不使用epoll模型
 -ds |不使用speculative epoll
 -dp |不使用poll模型
 -sf |程序启动后想PID文件里的进程发送FINISH信号,这个参数需要放在命令行的最后
 -st |程序启动后向PID里的进程发送TERMINATE信号,这个参数放在命令行的最后,经常用于重启HAProxy进程

- 启动HAProxy  
`/usr/local/haproxy/sbin/haproxy -f \ > /usr/local/haproxy/conf/haproxy.cfg`  
- 关闭HAProxy  
`killalll -9 haproxy`  
- 平滑重启HAProxy  
`/usr/local/haproxy/sbin/haproxy -f \ > /usr/local/haproxy/conf/haproxy.cfg -st 'cat /usr/local/haproxy/logs/haproxy.pid'`  
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值