001 软负载均衡器 HAPROXY

       1. HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持
虚拟主机,它是免费、快速并且可靠的一种解决方案。 HAProxy特别适用于那些负载特大的web站点,这些
站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的 并发连接。
并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露
到网络上。
       2. HAProxy 实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内
存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的
资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系
统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工
作。
       3. HAProxy 支持连接拒绝 : 因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack
bots),也就是说限制它们的连接打开从而限制它们的危害。 这个已经为一个陷于小型DDoS攻击的网站开发
了而且已经拯救了很多站点,这个优点也是其它负载均衡器没有的。
       4. HAProxy 支持全透明代理(已具备硬件防火墙的典型特点): 可以用客户端IP地址或者任何其他地址来连接后
端服务器. 这个特性仅在Linux 2.4/2.6内核打了cttproxy补丁后才可以使用. 这个特性也使得为某特殊服务器处
理部分流量同时又不修改服务器的地址成为可能。

支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机

能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作

HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。

支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie

不能做web服务器

安装haproxy:

yum方式:

yum install -y haproxy #直接使用RPM来安装
rpm -qi haproxy ## 查看安装版本
rpm -ql haproxy ## 查看安装版本的文件以及路径

源码编译方式安装(推荐):

sudo yum -y install gcc make
## 创建运行haproxy时,使用的用户。在此我们使用haproxy这个用户,而且此用户不能登录到系统
sudo useradd -m haproxy
## 下载源代码
wget https://www.haproxy.org/download/1.8/src/haproxy-1.8.13.tar.gz
tar -xzvf haproxy-1.8.13.tar.gz
cd haproxy-1.8.13/
cat README
## 编译
make TARGET=linux26 ARCH=x86_64 PREFIX=/usr/local/haproxy
## 安装
sudo make install PREFIX=/usr/local/haproxy
ll /usr/local/haproxy/

##拷贝配置文件:

cd /root/haproxy-1.8.13/examples/

cp option-http_proxy.cfg /usr/local/haproxy/

mv option-http_proxy.cfg haproxy.cfg

配置文件详解
haproxy配置分为五部分:
global :全局配置主要用于设定义全局参数,属于进程级的配置,通常和操作系统配置有关

1. log:全局的日志配置,local0是日志输出设置,info表示日志级别(err,waning,info,debug)
2. maxconn:设定每个HAProxy进程可接受的最大并发连接数,此选项等同于linux命令选项”ulimit -n”
3. chroot :修改haproxy的工作目录至指定的目录并在放弃权限之前执行chroot()操作,可以提升haproxy的安全
级别,不过需要注意的是要确保指定的目录为空目录且任何用户均不能有写权限;
4. daemon:让haproxy以守护进程的方式工作于后台,其等同于“-D”选项的功能,当然,也可以在命令行中
以“-db”选项将其禁用;
5. nbproc :指定启动的haproxy进程个数,只能用于守护进程模式的haproxy;默认只启动一个进程,鉴于调
试困难等多方面的原因,一般只在单进程仅能打开少数文件描述符的场景中才使用多进程模式;
6. pidfile:将haproxy的进程写入pid文件。
7. ulimit-n:设定每进程所能够打开的最大文件描述符数目,默认情况下其会自动进行计算,因此不推荐修改此
选项
8. stats socket 定义统计信息保存位置。


default: 配置默认参数,这些参数可以被用到frontend,backend,Listen组件,在此部分中设置的参数值,
默认会自动引用到下面的frontend、backend、listen部分中,因引,某些参数属于公用的配置,只需要在
defaults部分添加一次即可。而如果frontend、backend、listen部分也配置了与defaults部分一样的参数,
Defaults部分参数对应的值自动被覆盖

1. mode http 设置haproxy的运行模式,有三种{http|tcp|health}。注意:如果haproxy中还要使用4层的
应用(mode tcp)的话,不建议在此定义haproxy的运行模式。
设置HAProxy实例默认的运行模式有tcp、http、health三种可选:
tcp模式:在此模式下,客户端和服务器端之前将建立一个全双工的连接,不会对七层报文做任何检查,默认
为tcp模式,经常用于SSL、SSH、SMTP等应用。 http模式:在此模式下,客户端请求在转发至后端服务器之
前将会被深度分板,所有不与RFC格式兼容的请求都会被拒绝。 health:已基本不用了
2. log global 设置日志继承全局配置段的设置。
3. option httplog 表示开始打开记录http请求的日志功能。
4. option dontlognull 如果产生了一个空连接,那这个空连接的日志将不会记录。
5. option http-server-close 打开http协议中服务器端关闭功能,使得支持长连接,使得会话可以被重用,使
得每一个日志记录都会被记录
6. option forwardfor except 127.0.0.0/8 如果上游服务器上的应用程序想记录客户端的真实IP地址,
haproxy会把客户端的IP信息发送给上游服务器,在HTTP请求中添加”X-Forwarded-For”字段,但当是haproxy
自身的健康检测机制去访问上游服务器时是不应该把这样的访问日志记录到日志中的,所以用except来排除
127.0.0.0,即haproxy身
7. option redispatch 当与上游服务器的会话失败(服务器故障或其他原因)时,把会话重新分发到其他健康的
服务器上,当原来故障的服务器恢复时,会话又被定向到已恢复的服务器上。还可以用”retries”关键字来设定在
判定会话失败时的尝试连接的次数。
8. retries 3 向上游服务器尝试连接的最大次数,超过此值就认为后端服务器不可用。
9. option abortonclose 当haproxy负载很高时,自动结束掉当前队列处理比较久的链接
10. timout http-request 10s 客户端发送http请求的超时时间
11. timeout queue 1m 当上游服务器在高负载响应haproxy时,会把haproxy发送来的请求放进一个队列中,
timeout queue定义放入这个队列的超时时间
12. timeout connect 5s haproxy与后端服务器连接超时时间,如果在同一个局域网可设置较小的时间
13. timeout client 1m 定义客户端与haproxy连接后,数据传输完毕,不再有数据传输,即非活动连接的超时
时间。
14. timeout server 1m 定义haproxy与上游服务器非活动连接的超时时间。
15. timeout http-keep-alive 10s 设置新的http请求连接建立的最大超时时间,时间较短时可以尽快释放出资
源,节约资源
stats refresh 30 #设置统计页面刷新时间间隔
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接
balance roundrobin #设置默认负载均衡方式,轮询方式
#balance source #设置默认负载均衡方式,类似于nginx的ip_hash
#contimeout 5000 #设置连接超时时间
#clitimeout 50000 #设置客户端超时时间
#srvtimeout 50000 #设置服务器超时时间
timeout http-request 10s #默认http请求超时时间
timeout queue 1m #默认队列超时时间
timeout connect 10s #默认连接超时时间
timeout client 1m #默认客户端超时时间
timeout server 1m #默认服务器超时时间
timeout http-keep-alive 10s #默认持久连接超时时间
timeout check 10s #设置心跳检查超时时间
16. timeout check 10s 健康检测的时间的最大超时时间。
17. maxconn 3000 最大并发连接数。
18. contimeout 5000 设置成功连接到一台服务器的最长等待时间,默认单位是毫秒,新版本的haproxy使用
timeout connect替代,该参数向后兼容。
19. clitimeout 3000 设置连接客户端发送数据时的成功连接最长等待时间,默认单位是毫秒,新版本haproxy
使用timeout client替代。该参数向后兼容。
20. srvtimeout 3000 设置服务器端回应客户度数据发送的最长等待时间,默认单位是毫秒,新版本haproxy使
用timeout server替代。该参数向后兼容
21. balance roundrobin 设置负载算法为:轮询算法rr
1. roundrobin:基于权重进行的轮叫算法,在服务器的性能分布经较均匀时这是一种最公平的,最合量的
算法
2. static-rr:也是基于权重时行轮叫的算法,不过此算法为静态方法,在运行时调整其服务权重不会生效
3. source:是基于请求源IP的算法,此算法对请求的源IP时行hash运算,然后将结果与后端服务器的权理
总数相除后转发至某台匹配的后端服务器,这种方法可以使用一个客户端IP的请求始终转发到特定的后
端服务器
4. leastconn:此算法会将新的连接请求转发到具有最少连接数目的后端服务器。在会话时间较长的场景中
推荐使用此算法。例如数据库负载均衡等。此算法不适合会话较短的环境,如基于http的应用
5. uri:此算法会对部分或整个URI进行hash运算,再经过与服务器的总权重要除,最后转发到某台匹配的
后端服务器上
6. uri_param:此算法会椐据URL路径中的参数时行转发,这样可以保证在后端真实服务器数量不变时,同
一个用户的请求始终分发到同一台机器上
7. hdr:此算法根据httpd头时行转发,如果指定的httpd头名称不存在,则使用roundrobin算法进行策略
转发
8. rdp-cookie(name):示根据据cookie(name)来锁定并哈希每一次TCP请求


frontend: 接收请求的前端虚拟节点,Frontend可以更加规则直接指定具体使用后端的backend) frontend是
在haproxy 1.3版本以后才引入的一个组件,同时引入的还有backend组件。通过引入这些组件,在很大程度
上简化了haproxy配置文件的复杂性。forntend可以根据ACL规则直接指定要使用的后端backend

1. frontend http_80_in 定义一个名为http_80_in的frontend
2. bind 0.0.0.0:80 定义haproxy前端部分监听的端口。
3. mode http 定义为http模式
4. log global 继承global中log的定义
5. option forwardfor 使后端server获取到客户端的真实IP


backend: 在HAProxy1.3版本之前,HAProxy的所有配置选项都在这个部分中设置。为了保持兼容性,
haproxy新的版本依然保留了listen组件配置试。两种配置方式任选一中。

用来定义后端服务集群的配置,真实服务器,一个Backend对应一个或者多个实体服务器

1. cookie 表示充许向cookie插入SERVERID,每台服务器的SERVERID可以下面的server关键字中使用cookie关
键字定义
2. option httpchk 此选项表示启用HTTP的服务状态检测功能。 HAProxy作为一个专业的负载均衡器,并且它
支持对backend部分指定的后端服务节点的 健康检查,以保证在后端的backend中某个节点不能服务时,把
从frontend端进来的客户端请求分配至backend中其他健康节点上,从而保证 整体服务的可用性
3. method 表示HTTP请求的方式,常用的有OPTIONS、GET、HEAD几种方式。 一般健康检查可以采用HEAD
方式进行,而不是采用GET方式,这是因为HEAD方式没有数据返回,仅检查Response的HEAD是不是状态码
200。因此,相对于GET,HEAD方式更快,更简单
4. uri 表示要检测的URL地址,通过执行此URL,可以获取后端服务器的运行状态,在正常情况下返回状态码
200,返回其他状态码均为异常状态
5. version 指定心跳检测时的HTTP的版本号
6. server 用来定义多台后端真实服务器,不能用于defaults和frontend部分,格式为: server name
address:port param
7. name 为后端真实服务器指定一个内部名称,随便这下义一个即可
8. address :后端真实服务器的iP地址或主机名。
9. port :指定连接请求发往真实服务器时的目标端口,在未设定时,将使用客户端请求时的同一端口
10. param :为后端服务器设定的一系列参数,可用参数非常多
11. check :表示启用对此后端服务器执行健康检查
12. inter :设置健康状态检查的时间间隔,单位为毫秒
13. rise :设置人故障状态转换至正常状态需要成功检查的次数,如 rise 2:表示2次检查正确就认为此服务器
可用
14. fall :设置后端服务器从正常状态转换为不可用状态需要检查的次数,如 fall 3表示3 次检查失败就认为此
服务器不可用
15. cookie :为指定的后端服务器设定cookie值,此外指定的值将在请求入站时被检查,第一次为此值挑选的后
端服务器将在后续的请求中一直被选中,其目的在于实现持久连接的功能
16. cookie server1 :表示web1的serverid为server1
17. weigth :设置后端真实服务器的权重,默认为1,最大值为256,设置为0表示不参与负载均衡。
18. maxconn :设定每个backend中server进程可接受的最大并发连接数,此选项等同于linux命令选项”ulimit -n”
19. backup :设置后端真实服务器的备份服器,仅仅在后端所有真实服务器均不可用的情况下才启用


listen: (Fronted和backend的组合体) 比如haproxy实例状态监控部分配置

PS: 代理配置段主要有以下几部分配置块:
1. Frontend:定义面向客户的监听的地址和端口,以及关联的后端的服务器组
2. Backend:后端服务器组的定义
3. Listen:组合的方式直接定义frontend及相关的backend
4. Defaults:默认的配置。其中listen配置块可以直接使用frontend和backend中任意一项参数配置, 比如acl语
法配置以及server语法配置参数

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值