`

利用HAProxy实现负载均衡

    博客分类:
  • j2ee
阅读更多

HAProxy的安装和部署

考虑公司当前服务器的并发量,最终还是选定了HAProxy来实现负载均衡,相较于其他的负载均衡系统,HAProxy的配置和使用还是比较简单的。
下面是自己安装和部署haproxy的记录,比较重要的一点是解决了haproxy + syslog-ng的日志输出问题。
PS: 这个问题费了我好大神:-|

PLATFORM: SUSE Linux Enterprise Server 11 (x86_64)

1. haproxy的编译安装

获取haproxy的源代码
官方地址:http://haproxy.1wt.eu/
目前最新的版本:http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.8.tar.gz

命令:

wget
 http://
haproxy.1wt.eu/
download/
1.4
/
src/
haproxy-1.4.8.tar.gz

考虑到版本的更新,具体的安装属性可能会稍有改变,建议在安装前可以大致浏览下haproxy目录下的README和Makefile两个文件。

编译haproxy
进入解压后的haproxy的目录,用下列命令进行编译:

make
 TARGET
=os ARCH
=arch
 CPU
=cpu USE_xxx
=1
 ...

这里着重说明几个常用的选项。

TARGET
指定对目标操作系统在编译的时候进行优化,可选择如下值之一:
Generic, linux22, linux24, linux24e, linux26, solaris, freebsd, openbsd,
Cygwin, custom。
如果不确定目标系统,可以保留默认值generic。

CPU
指定对特定的CPU进行优化,可选择如下值之一:generic, i586, i686, ultrasparc, custom。默认值为generic。

ARCH
指定ARCH值可强制编译生成针对一个特定系统架构的程序。通常用于在一个系统架构的平台上生成针对另一个不同架构平台的程序,比如在一个64位架构的目标系统上编译生成一个32位的程序。

当前可选的值有:x86_64, i386, i486, i586, i686。
注:若选择上述其中的一个值,”-m32”或”-m64”会被添加到CFLAGS和LDFLAGS选
项中。

DEBUG
指定生成调试信息,可通过指定DEBUG=-DDEBUG_xxx对特定的代码部分生成调试信息。
当前定义的DEBUG宏有:DEBUG_FULL, DEBUG_MEMORY, DEBUG_FSM, DEBUG_HASH和
DEBUG_AUTH。
USE_PCRE, USE_STATIC_PCRE 选项可通过指定”USE_xxx=1”表示使用,指定”USE_xxx=”表示禁用。

指定是否使用libpcre库中的正则表达式实现来代替系统的libc库中的实现,考虑到使用libpcre库的效率要比libc高,因此推荐使用此选项。

注:
因libpcre还没有广泛普及,因此在动态链接的时候,需确保目标系统安装有libpcre的动态库。因libpcre还没有广泛普及,因此在动态链接 的时候,需确保目标系统安装有libpcre的动态库。针对上面的问题,可以使用USE_STATIC_PCRE,指定静态链接libpcre。
使用libpcre库编译时,需先确保系统已安装libpcre库。若不使用libpcre,则默认使用系统libc库中的标准正则表达式实现。强烈推荐使用static_pcre。

PREFIX
指定安装目录,默认为/usr/local,其他诸如文档之类的文件将会在PREFIX指定的相应目录下。

DESTDIR
指定安装目录,默认没有设置,如果想将haproxy安装一个沙盒中则可以指定该属性。
考虑到我们的系统为Linux,内核2.6+版本的,CPU为x86_64的,可以使用如下命令编译:

make
 TARGET
=linux26 USE_STATIC_PCRE
=1

安装 HAProxy
可以直接将生成的haproxy程序拷贝到你想安装到的目录。或者执行命令安装到之前指定或默认的目录:
sudo make install

2. 配置 HAProxy

Doc/目录下提供了一些文档,具体的配置说明可以参考在configuration.txt文件。
下面主要说明下配置过程中日志输出问题和一些需要注意的配置选项。

1). 日志的输出问题。

根据说明,haproxy的日志输出使用了系统的日志程序,比如syslogd, syslog-ng。这两个日志系统使用上其主要的区别就是其配置文件的格式不同,考虑syslog-ng算是syslog的一个升级版,在性能和功能性 上都要优于syslogd,因此这里主要介绍的是配置syslog-ng来实现haproxy的日志输出。
我的机器环境,一如既往:SUSE Linux Enterprise Server 11 (x86_64),
日志程序默认是syslog-ng。

I. 编辑系统日志服务的配置文件/etc/sysconfig/syslog,查看SYSLOG_DAEMON的值,这个值指定了所要使用的日志服务程序,默认为空,表示自动检测,如果不确定,可以显式指定SYSLOG_DAEMON = “syslog-ng”。

II. 编辑syslog-ng的配置文件/etc/syslog-ng/syslog-ng.conf,在末尾添加如下代码:

# for supporting the logging of "HAProxy"

 
source my_src {

    #
    # process log messages from network:
    #
    udp(
ip(
"0.0.0.0"
)
 port(
514
)
)
;

}
;

 
filter f_local0 {
 facility(
local0)
; };

filter custom {
 program(
"haproxy"
)
; };

 
destination d_haproxy {
 file(
"/var/log/haproxy.log"
)
; };

 
log {
 source(
my_src)
; filter(f_local0); destination(d_haproxy); };

#log {
 source(
my_src)
; filter(custom); destination(d_haproxy); };    # OK, work too

注:这里指定了日志输出到/var/log目录下,工作正常,若指定输出到/home等其他子目录下却会失败,具体原因不详,待查。另,haproxy的日志也可通过此方法将其发送到某个日志服务器用于统一处理,具体可查看syslog-ng的相关文档。

III. 重启syslog服务,使用如下命令:

service syslog restart

IV. 编辑haproxy的配置文件,假定名为haproxy.cfg
在所需要做日志记录的模块(比如,global, default等)添加如下代码:

# 使用系统的syslog记录日志(通过udp,默认端口号为514
)
log 127.0.0.1 local0

注:local0 在两个配置文件中的一致。

这会查看日志基本上就OK了。

tail
 -f
 /
var/
log/
haproxy.log

注:其他须解决的日志相关问题
a. haproxy当前的日志全部记录在一个文件中,考虑按日期将其分段成不同文件存储;
b. 日志不能输出到除/var/log/外的其他目录

2). 一些常用配置选项的说明

如下是我使用的一个配置文件,常用的选项说明都已经注释了,需要更全面的描述请查阅configuration.txt文件。

#########################################################################
# HAProxy 配置文件
#########################################################################
 
global
# 使用系统的syslog记录日志(通过udp,默认端口号为514
)
log 127.0.0.1 local0 # info [
err warning info debug]


chroot /home/user/haproxy
 
#限制单个进程的最大连接数
maxconn 65535

 
# 让进程在后台运行,即作为守护进程运行,正式运行的时候开启,此处先禁止,等同于在命令行添加参数 -D
# daemon
# 指定作为守护进程运行的时候,要创建多少个进程,默认只创建一个,需要daemon开启模式
# nbproc 1

 
# 设置debug模式运行,与daemon模式只能互斥,等同于在命令行添加参数 -d
# debug
pidfile /home/user/haproxy/logs/haproxy.pid    # not work
 
defaults
# 在连接失败或断开的情况下,允许当前会话被重新分发
option redispatch
# 设置在一个服务器上链接失败后的重连次数
retries 2

# 设置服务器分配算法
balance roundrobin
 
# 不记录空连接
option dontlognull
 
# 设置等待连接到服务器成功的最大时间
timeout connect 5000ms
# 设置客户端的最大超时时间
timeout client 1800000ms
# 设置服务器端的最大超时时间
timeout server 1800000ms
 
# Enable the sending of TCP keepalive packets on both sides, clients and servers
# NOTE: 在服务器CPU强劲的情况下,最好不要开启保活,这样可减少资源消耗
#option tcpka
 
##############################统计页面配置##################################
 
listen admin_stat
# 监听端口
bind *:8011

# http的7
层模式
mode http
option httplog
log global
# 统计页面自动刷新时间
stats refresh 30s
# 统计页面URL
stats uri /admin?stats
# 统计页面密码框上提示文本
stats realm Haproxy\ Statistics
# 统计页面用户名和密码设置
stats auth admin:admin
# 隐藏统计页面上HAProxy的版本信息
stats hide-version
 
###########################TCP连接的监听配置################################
 
listen  tcp-in
bind *:2211

mode tcp
# 日志记录选项
option tcplog
log global
 
# 后台服务器
# weight  -- 调节服务器的负重
# check -- 允许对该服务器进行健康检查
# inter  -- 设置连续的两次健康检查之间的时间,单位为毫秒(
ms)
,默认值 2000
(
ms)

# rise  -- 指定多少次连续成功的健康检查后,即可认定该服务器处于可操作状态,默认值 2

# fall  -- 指定多少次不成功的健康检查后,认为服务器为当掉状态,默认值 3

# maxconn  -- 指定可被发送到该服务器的最大并发连接数
server localhost 0.0.0.0:2233
 weight 3
 check inter 2000
 rise 2
 fall 3

server 192.168.1.100 192.168.1.100:2233
 weight 3
 check inter 2000
 rise 2
 fall 3

server 192.168.1.101 192.168.1.101:2233
 weight 3
 check inter 2000
 rise 2
 fall 3

 
#########################HTTP连接的监听配置################################
 
listen  http-in
bind *:2212

mode http
option httplog
log global
 
# 设置健康检查模式
#option httpchk OPTIONS * HTTP/1.1
\r\nHost:\ www
#option smtpchk
 
# 后台服务器
server localhost 0.0.0.0:2234
 weight 3
 check inter 2000
 rise 2
 fall 3

server 192.168.1.100 192.168.1.100:2234
 weight 3
 check inter 2000
 rise 2
 fall 3

server 192.168.1.101 192.168.1.101:2234
 weight 3
 check inter 2000
 rise 2
 fall 3

在这个配置文件中,使用了listen块,而没有用frontend和backend。listen块定义了一个完整的代理过程,同时包含了前端的 监听套接字和后台的服务器描述,从这个层面考虑,使用frontend和backend,似乎显得条理要清楚点。不过测试发现使用listen块的时候, 输出的日志会记录下后台服务器的健康状况,而使用frontend和backend则不会。
对于健康检查,推荐开开启比较好,否则当后台服务器当掉的时候,haproxy将不会将连接重定向到下一个可用的服务器上。

根据以上配置的统计页面url,可访问:http://host_ip:2212/admin?stats 进入统计页面。注:端口号是你配置的前置http端口。

分享到:
评论

相关推荐

    用Keepalived与HAProxy实现高可用负载均衡的配置方法.docx

    通过定义前端和后端,HAProxy将流量从前端代理到后端服务器,实现负载均衡。它允许用户自定义负载均衡策略,确保服务的稳定性和性能。 3. Keepalived与HAProxy组合 由于HAProxy本身可能存在单点故障,引入...

    haproxy242负载均衡用

    haproxy242是HAProxy的2.4.2版本,这是一款广泛使用的开源负载均衡器和反向代理服务器,适用于HTTP、TCP以及其他应用协议。HAProxy的主要功能是将流入的网络流量分发到多个后端服务器,以提高服务的可用性和响应速度...

    负载均衡 Haproxy1.8.4

    需要注意的是,由于Haproxy主要针对Linux环境,Windows服务器可能需要其他负载均衡解决方案,如IIS的ARR模块或使用虚拟化技术实现跨平台部署。 总的来说,Haproxy 1.8.4作为一款强大的负载均衡器,为企业级应用提供...

    管理系统系列--主从HAProxy负载均衡任务管理系统.zip

    【标题】:“管理系统系列--主从HAProxy负载均衡任务管理系统”这一主题主要涵盖了在IT行业中如何利用HAProxy技术实现高可用性和负载均衡的系统设计。HAProxy是一款开源的、高性能的TCP/HTTP负载均衡器,它能够有效...

    Mysql高可用架构集群--MyCat集群部署HAProxy+MyCat

    该方案通过利用HAProxy实现负载均衡和故障切换功能,结合MyCat的读写分离特性,旨在提高整个系统的稳定性和响应速度。 #### 二、技术栈介绍 1. **MySQL**:关系型数据库管理系统,被广泛用于Web应用开发。 2. **...

    定时器实现负载均衡

    "定时器实现负载均衡"这个话题涉及到如何利用定时任务来确保服务在多台服务器间均匀分布,以提高系统的稳定性和效率。这里我们将深入探讨定时器的工作原理、负载均衡的基本概念以及如何在两台服务器之间实现这一目标...

    负载均衡软件、硬件实现方案

    当客户端查询域名时,DNS服务器返回其中一个可用的IP地址,从而实现负载均衡。这种方式简单易用,但灵活性较低,因为更改DNS记录后需要等待TTL时间才能生效。 ##### 2.3 LVS LVS(Linux Virtual Server)是一个开源...

    千万级并发HAproxy均衡负载系统介绍及配置.pdf

    【HAproxy介绍】 ...无论是大型互联网公司还是中小企业,都可以利用HAproxy来提高服务的可用性和性能,同时减轻后端服务器的压力。理解并熟练掌握HAproxy的配置和使用,对于构建稳定、高效的网络服务至关重要。

    Haproxy+多台MySQL从服务器(Slave)实现负载均衡.pdf

    【Haproxy+多台MySQL从服务器(Slave)实现负载均衡】 在高并发和大数据量的场景下,为了确保数据库服务的稳定性和高可用性,通常会采用MySQL的主从复制架构,配合负载均衡器如Haproxy来分散读取操作的压力。此配置...

    haproxy均衡负载

    ### Haproxy均衡负载系统详解 ...总之,Haproxy作为一种高效稳定的负载均衡工具,在现代Web应用架构中扮演着至关重要的角色。通过对Haproxy的深入了解和合理配置,可以帮助企业构建出更加健壮、高效的网络服务环境。

    MyCat高可用负载均衡集群实现(HAProxy+Keepalived+MyCat)

    ### MyCat高可用负载均衡集群实现(HAProxy+Keepalived+MyCat) #### 一、概述 在当今互联网行业中,随着业务规模的不断扩大和技术需求的日益增长,系统的高可用性和负载均衡能力变得尤为重要。本篇文章主要介绍了...

    linux服务器之LVS、Nginx和HAProxy负载均衡器对比总结

    本篇文章将对比三种常用的Linux服务器负载均衡器:LVS、Nginx和HAProxy,探讨其各自的特点、适用场景和常用算法。 LVS(Linux Virtual Server)是基于IP层的负载均衡器,它具有以下显著特点: 1. 高抗负载能力:...

    web集群服务的负载均衡方案选择与实现

    DNS负载均衡是一种简单而成本较低的实现方式,通过DNS服务器实现负载均衡的技术主要包括RR-DNS(Round-Robin DNS)。 ##### 3.1 RR-DNS的工作原理 - **基本概念**:RR-DNS是通过DNS服务器轮流返回多个IP地址来实现...

    服务器负载均衡技术:使用apache部署集群实现负载均衡

    Apache作为一款广泛应用的开源Web服务器,可以通过一些扩展实现负载均衡功能,比如使用mod_proxy模块。本文将探讨如何使用Apache部署集群来实现负载均衡。 首先,我们需要了解负载均衡的基本原理。负载均衡器(Load...

    大型网站架构系列:负载均衡详解

    2. 软件负载均衡器:如Nginx、HAProxy等,运行在通用硬件上,灵活性高,成本较低。 3. 云负载均衡器:如AWS Elastic Load Balancer、Google Cloud Load Balancer,易于管理和扩展,适用于云计算环境。 五、负载均衡...

    Java集群与负载均衡

    4. **Java中的负载均衡**:Java应用可以通过使用内置的负载均衡库(如Jetty的Continuation)或集成外部负载均衡解决方案(如Nginx、HAProxy)实现负载均衡。 5. **云服务负载均衡**:云提供商如AWS的ELB(Elastic ...

Global site tag (gtag.js) - Google Analytics