简介
HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。(摘自百度百科)
HAProxy使用
HAProxy安装
由于HAProxy在base包中,可以直接使用yum安装
yum install -y haproxy
HAProxy配置
global
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
global字段用来定义全局配置,用来调整进程、性能等参数。
log
log 127.0.0.1 local2
定义全国的syslog服务器,以哪种级别以上的方式来记录到日志当中。 log最多定义两个
示例:
1)如果记录到本地的rsyslog中,我们需要先将rsyslog以C/S架构运行,修改/etc/rsyslog.conf
修改以下两项
$ModLoad imudp
$UDPServerRun 514
添加一项
local2.* /var/log/haproxy.log
2)重启rsyslog服务
[root@ydong ~]# ss -unlp | grep 514
UNCONN 0 0 *:514 *:* users:(("rsyslogd",pid=9554,fd=3))
UNCONN 0 0 :::514 :::* users:(("rsyslogd",pid=9554,fd=4))
3)日志已经出现
[root@ydong ~]# ls /var/log/haproxy.log
/var/log/haproxy.log
chroot
chroot /var/lib/haproxy
修改haproxy的工作目录至指定的目录并在放弃权限之前执行chroot()操作,可以提升haproxy的安全级别,不过需要注意的是要确保指定的目录为空目录且任何用户均不能有写权限;
pidfile
·pidfile /var/run/haproxy.pid
haproxy的进程文件
maxconn
maxconn 4000
每个进程所能接收的最大并发连接数
user 和group
user haproxy /group haproxy
定义运行haproxy时的用户和组
daemon
daemon
让haproxy以后台运行的方式运行。 可以在命令行使用-db
的方式禁止运行在后台
nbproc
nbproc <number>
haproxy创建的进程,默认为1个进程,这也是官方推荐的。 因为多个进程调试起来比较困难,但是如果系统打开的文件数量较少,可以增加此进程的数量
ulimit -n
ulimit -n <number>
: 每个haproxy打开的文件数量,官方不建议修改此项,默认即可
maxconnrate
maxconnrate <number>
:每个进程每秒钟所能创建的最大连接数
spread-checks
spread-checks <0..50, in percent>
:检查对后端的服务器进程分散检测,避免同一个时间精确检测,导致服务器负载极速上升。 官方建议设置在‘2-5’之间。
proxies
defaults
defaults段的参数,是默认参数,它会自动被应用到frontend、backend
里。因此,一些公用的配置,可以放入到这里。如果在frontend、backend
中也写入了同样的参数,那么defaults段的参数将被覆盖。
frontend
定义haproxy的前端,用于与客户端通信。
backend
定义后端的real server。 haproxy将请求转发给后端真正处理的服务器
listen
前端和后端的组合体。
简单的proxy示例
frontend web
bind :80
use_backend websrv
backend websrv
balance roundrobin
server srv1 172.17.0.2:80 check
server srv2 172.17.0.3:80 check
bind
bind
:定义监听的一个或者多个端口,可在frontend、listen
中使用。
示例:
listen websrv
bind *:80
balance roundrobin
server web1 172.17.0.2:80 check
server web2 172.17.0.3:80 check
balance
balance
:后端服务器的调度算法。 只能用在listen、backend、defaults
中
roundrobin
:基于权重的轮询方式