HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

HAProxy实现了一种事件驱动,单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作。

可靠性

        被痴迷的可靠性,我试图尽我所能以确保总设计服务的连续性。它更难以在短期内设计可靠的东西从地上爬起来,但是从长远来看,它揭示了比断码,试图掩盖自己的错误背后的重生过程和技巧,这样更容易维护。

在单进程程序中,你没有权利失败:最小的错误将导致程序崩溃,它像疯了一样或冻结的旋转。一直没有在代码中发现任何这样的错误,也不为过去10年来在生产。

        HAProxy的已安装在Linux 2.4系统,每天服务数以百万计的页面,只知道在3年内重新启动一次为一个完整的操作系统升级。显然,他们不直接暴露在Internet,因为他们没有收到任何补丁。内核是一个沉重的罗伯特·爱的jiffies64补丁修补2.4 环绕支持时间在497天(即发生两次)。在这种系统中,软件不能失败,但不会被立刻注意到了!

        现在,它被用来在多家财富500强公司在世界各地,以可靠的服务数百万每天的页面或继电器巨资。有些人甚至相信它这么多,他们使用它作为默认的解决方案来解决简单的问题(我经常告诉他们,他们这样做肮脏的方式)。这样的人,有时仍然使用1.1或1.2版本看到非常有限的变阵,并针对关键任务的用法。HAProxy的是真正适合于这样的环境中,因为它返回的指标提供了很多有价值的信息应用程序的健康,行为和缺陷,这是用来使系统更可靠。1.3版现在已经远远比1.1和1.2的结合进行更多的测试,所以我们强烈建议用户迁移到一个稳定的1.3为关键任务用途。

        如前所述,大部分的工作是由操作系统执行。出于这个原因,有很大一部分的可靠性涉及操作系统本身。最新的Linux 2.4版本,提供最高级别的稳定性。但是,它需要一堆补丁,实现了高水准的表现。Linux 2.6中包含的功能需要实现这种性能水平,但尚不稳定,这种用法。内核至少需要一个升级每个月修复bug或漏洞。有些人喜欢在Solaris(或不选择)执行。Solaris 8和9被称为是真正稳定,现在,×××能媲美的Linux 2.4的水平。Solaris 10的显示性能更接近到Linux 2.6,但同样的代码的稳定性问题。我有太少的报告从FreeBSD用户,但它应该是接近到Linux 2.4在性能和可靠性方面。OpenBSD系统有时会显示FIN_WAIT2状态时,客户突然消失住在插座插座由于分配失败。另外,我注意到,炎热的重新配置在OpenBSD不起作用。

        当系统被推到它的极限时,可以显着降低的可靠性。这就是为什么sysctl进行是很重要的精细调整。有没有一般的规则,每一个系统,每一个应用程序,将具体的。然而,重要的是要确保该系统将永远运行内存,它将永不掉。正确调整系统必须能够在满负荷运行多年没有放慢也没有崩溃。

安全性

 安全是一个重要的关注,当部署一个软件负载平衡器。这是可能到变硬的 操作系统,开放端口和访问服务的数量进行限制,但负载均衡器本身保持暴露。出于这个原因,我一直非常小心的编程风格。迄今发现的唯一的漏洞追溯到2002年初,只持续了一个星期。据介绍,日志返工时。它可以用来导致总线错误崩溃的过程,但它似乎没有可以执行代码:关注溢出只有3个字节,太短存储指针(有一个变量下)。

        无论如何,多照顾编写代码时操纵头。不可能的状态组合进行检查,并返回,从创建一个会话死亡和错误处理。有几个人在世界各地已审阅代码和更好的清晰度,以纾缓审计建议清理。顺便说一下,我用,拒绝修补程序,介绍犯罪嫌疑人的处理或异常情况没有足够的照顾。

        我一般建议开始的 HAProxy的根,因为它可以监狱本身在chroot环境中,并丢弃所有的特权之前启动实例。这是不可能的,如果它没有根,因为只有root用户可以执行的chroot()开始。

日志提供了大量的信息,以帮助维持一个令人满意的安全水平。他们只能通过UDP发送因为一旦cherrot中,/ dev /日志的 UNIX插座是可达的,并且不能有可能写入一个文件。下面的信息特别有用:

·源IP地址和端口的请求使人们有可能找到自己的原产地在防火墙日志;

·会议设置了日期,一般匹配防火墙日志,而推倒日期往往相匹配的代理日期;

·适当的请求编码确保请求者不能隐藏非打印字符,也不是傻瓜终端。

·任意请求和响应头和cookie捕获检测扫描***,代理和被感染主机。

·定时器有助于区分手动键入从浏览器的请求。

        HAProxy的还提供了基于正则表达式的头控制。部分请求,以及请求和响应头可以拒绝,允许,删除,改写,或补充。这是常用来阻止危险的请求或编码(例如:Apache的组块漏洞),以防止意外的从服务器到客户端的信息泄漏。其他功能,如高速缓存控制检查,确保没有敏感信息上游代理得到accidentely缓存的连续例如应用服务器中的一个bug。

haproxy的实例安装配置

    准备:

        挂载镜像文件,镜像可以从网上下载

#   mount /dev/cdrom /mnt/cdrom
#   vim /etc/yum.repos.d/server.repo
[base]
name=CDROM
baseurl=file:///mnt/cdrom/Server
enabled=1
gpgcheck=0
[Packages]
name=CDROM1
baseurl=file:///mnt/cdrom/HighAvailability
enabled=1
gpgcheck=0
[ResilientStorage]
name=CDROM2
baseurl=file:///mnt/cdrom/ResilientStorage
enabled=1
gpgcheck=0
[LoadBalancer]
name=CDROM3
baseurl=file:///mnt/cdrom/LoadBalancer
enabled=1
gpgcheck=0

规划ip地址

            后端服务器      172.16.14.3        172.16.14.4

            前端haproxy服务器 172.16.222.2

            虚拟地址为172.16.14.20(可以平通后端服务器)

一、配置后端web服务器

(172.16.14.3    172.16.14.4)
#   yum  -y install httpd
#   vim /var/www/html/index.html
node1.magedu.com(172.16.14.3)
node2.magedu.com(172.16.14.4)

二、配置安装haproxy

# yum-y install haproxy

        查看配置文件

152433858.png

配置文件中说明修改配置文件的前提,所以修改以下文件

#   vim /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS="-c 5 -r"
# vim /etc/rsyslog.conf
local2.*                         /var/log/haproxy.log

修改haproxy的配置文件

#   vim /etc/haproxy/haproxy.cfg
#---------------------------------------------------------------------
# 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
defaults
mode                    http
log                     global
option                  httplog
option                  dontlognull
option http-server-close
option forwardfor       except 127.0.0.0/8
option                  redispatch
retries                 3
timeout http-request    10s
timeout queue           1m
timeout connect         10s
timeout client          1m
timeout server          1m
timeout http-keep-alive 10s
timeout check           10s
maxconn                 30000
listen stats
mode http
bind 0.0.0.0:1080
stats enable
stats hide-version
stats uri     /haproxyadmin?stats
stats realm   Haproxy\ Statistics
stats auth    admin:admin
stats admin if TRUE
frontend http-in
bind *:80
mode http
log global
option httpclose
option logasap
option dontlognull
capture request  header Host len 20
capture request  header Referer len 60
default_backend servers          指定后端服务
frontend healthcheck
bind :1099
mode http
option httpclose
option forwardfor
default_backend servers
backend servers
balance roundrobin          调度算法
server websrv1 1972.16.14.3:80 check maxconn 2000
server websrv2 172.16.14.4:80 check maxconn 2000

重新启动haproxy服务

        #servicehaproxy restart

        使用浏览器进行测试

152831305.png

152832272.png

前面配置文件中定义了状态页面

listen stats
mode http
bind 0.0.0.0:1080
stats enable
stats hide-version
stats uri     /haproxyadmin?stats
stats realm   Haproxy\ Statistics
stats auth    admin:admin
stats admin if TRUE

使用浏览器访问

153019294.png

账号密码分别为admin、admin

153105500.png

这样就实现了服务器的高可用,当然后端的服务器也可以为mysql等类的服务器,

    希望各位多多指教