- 浏览: 473534 次
- 性别:
- 来自: 湖南
文章分类
- 全部博客 (201)
- j2ee (43)
- oracle (9)
- mysql (7)
- db2 (1)
- j2se (3)
- spring (1)
- hibernate (3)
- struts (0)
- Berkeley DB (0)
- linux (60)
- Apache2+PHP+MYSQL (2)
- solr (15)
- svn (1)
- IntelliJ Idea (1)
- eclipse,myeclipse (4)
- ant (2)
- vim (8)
- IT生活 (4)
- 测试 (6)
- lucene (4)
- shell (1)
- nutch (18)
- thread (1)
- hadoop (5)
- mapreduce (0)
- Python (4)
- 硬件 (1)
- database (1)
- maven (1)
- 正则表达 (0)
- 互联网 (1)
最新评论
-
youngcoder:
good job
HTTP协议头部与Keep-Alive模式详解 -
javazdq:
受教了 解释的不错。
lucene创建索引高级特性和索引创建参数优化 -
josico:
有几个问题想问下楼主1. LinkedBlockingQueu ...
生产者-消费者-BlockingQueue -
annybz:
有没有关于 BlockingQueue和ConcurrentL ...
生产者-消费者-BlockingQueue -
uniquejava:
多谢,记录的很真实。
DB2 学习记录
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端口。
发表评论
-
Maven使用deploy命令部署构建
2012-07-18 17:13 2427个人技术博客:http:/ ... -
Java 对象序列化您不知道的 5 件事
2012-07-04 14:56 1361个人技术博客:http://demi-panda.com ... -
Solr 获取分词
2012-05-07 18:32 3529个人博客:http://demi-panda.com ... -
地图经纬度距离计算
2012-03-30 15:43 2372public static final doubl ... -
ThreadLocal类
2012-03-01 18:38 902个人技术博客:http://demi-panda.com ... -
解决 – java.lang.OutOfMemoryError: unable to create new native thread
2012-01-16 20:27 2729一、认识问题: 首先我们通过下面这个 测试程序 ... -
Spring MVC中默认的ResponseBody为String的乱码问题
2011-12-22 16:54 1381个人技术博客:http://demi-panda.com ... -
ASCII和中文互转
2011-07-29 13:34 3783个人技术博客:http://demi-panda.com ... -
JVM 参数详解
2011-07-06 14:23 6444个人技术博客:http://demi-panda.com ... -
URL encode
2011-06-22 15:00 3059个人技术博客:http://demi-panda.co ... -
笔记之三-robots
2011-06-16 16:13 1105一、robots robots主要作用是屏蔽一些不愿意让 ... -
HTTP协议头部与Keep-Alive模式详解
2011-06-16 15:55 17223个人技术博客:http://demi-panda.com ... -
java.net.SocketException: Too many open files解决方法
2011-03-24 15:34 1169Get current limit: ulimit - ... -
负载均衡工具haproxy安装,配置,使用
2011-02-12 11:28 3878一,什么是haproxy HAProxy提供高可 ... -
Java编程思想第四版 完整中文版下载
2011-01-09 21:11 4131个人技术博客:http://demi-panda.com ... -
Java 理论与实践: 正确使用 Volatile 变量
2011-01-06 23:45 462Java 语言中的 volatile ... -
Java常用正则表达式
2010-12-08 20:41 920"^\d+$" //非负整数(正整数 + ... -
JConsole远程连接
2010-12-02 13:58 996JConsole很好用,可以解决很多疑难杂症。但远程连接需要设 ... -
JVM配置参数中文说明
2010-12-02 13:04 1191JVM配置参数中文说明: -------- ... -
Java 代理模式与动态代理类
2010-11-21 16:51 3523代理模式与Java 动态代理类 ...
相关推荐
使用 haproxy,实现在 http request 的负载均衡,将对负载均衡器的请 求分发到其所对应的 web 服务器。
用haproxy实现RDP会话负载均衡 这篇文章主要针对 thinstation 方案来做测试。
这是一个PPT,主要讲解在liunx服务器搭建一下haproxy应用实现负载均衡功能。
HAProxy+Nginx实现负载均衡
全面的负载均衡介绍,让你受益匪浅。。。。。。 haproxy 的负载均衡 全面的服务器负载均衡解决方案
安装haproxy负载均衡MySQL,截图最全,mysql5.7版本。
Haproxy实现企业级服务器的负载均衡
haproxy242负载均衡用
linux rabbitmq+haproxy分布式负载均衡生产环境部署完成 技术:rabbitmq集群 linux haproxy负载均衡 说明包含: rabbitmq安装程序 MQ集群负载均衡部署帮助文档 MQ集群负载均衡使用帮助文档 MQ集群负载均衡遇到...
基于haproxy构建负载均衡集群.docx
用Keepalived与HAProxy实现高可用负载均衡的配置方法.docx
千万级并发HAproxy均衡负载系统介绍,丰富的配置实例,以及注意事项
如何配置haproxy负载均衡器,命令,文档,操作, !
haproxy 1.7 负载均衡 haproxy 1.7 负载均衡 haproxy 1.7 负载均衡 haproxy 1.7 负载均衡
HAPROXY负载均衡反向代理最佳实践
主要介绍了keepalived+haproxy实现MySQL高可用负载均衡的配置方法,通过这两个软件可以有效地使MySQL脱离故障及进行健康检测,需要的朋友可以参考下
Nginx、LVS及HAProxy负载均衡软件的优缺点详解.docx
Web负载均衡解决方案-HAproxy+keepalived实现高可用负载均衡.docx
使用nginx-haproxy实现七层负载均衡笔记,Nginx / Haproxy都可以支持7层LB
mariadb+haproxy负载均衡集群搭建.docx