HAProxy是一款免费、快速并且可靠的提供高可用性、负载均衡以及TCP(4层)和HTTP应用(7层)的代理。虽然HAProxy可以工作在第4层,但是通过对其官网配置文件的了解,第4层之能做简单的转发,主要应用还是偏于第7层,配置参数很多,可以做很多分析。
前段时间因项目需求,对其做了一个简单的调研,给大家做一个分享。
网络上关于HAProxy的讲解很多,但都千篇一律,因此想全面了解它的同学,建议登陆其官网(http://haproxy.1wt.eu/)阅读其详细的各方文档,不过官网全是英文,描述晦涩且相关demo很少,要做好准备。
一、安装:
# tar zcvf haproxy-1.3.20.tar.gz # cd haproxy-1.3.20
# make TARGET=linux26 PREFIX=/usr/local/haproxy #将haproxy安装到/usr/local/haproxy,TARGET表示linux内核版本, 可以根据自己机器调整
# make install PREFIX=/usr/local/haproxy
二、启动:
HAProxy启动时需要配置文件,首次接触可以使用安装文件夹中的examples中的默认配置文件haproxy.cfg启动,为了清晰,先创建一个配置文件目录
#mkdir /usr/local/haproxy/conf
将安装目录中的haproxy.cfg拷贝到/usr/local/haproxy/conf
启动服务:/usr/local/haproxy/sbin/haproxy –f /usr/local/haproxy/conf/haproxy.cfg
如果启动中遇到如下错误:
“ Cannot create ** 目录/文件”
解决:mkdir 目录
三、配置:
配置文件主要分为两大部分:global 区域和代理区域。
global :主要涉及进程方面的参数。如下所示:
log 127.0.0.1 local0 #log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
chroot /home/develop/haproxy
uid 99
gid 504 #develop group id
daemon
nbproc 1
pidfile /home/develop/haproxy/logs/haproxy.pid
其他参数和具体参数意义请大家参考官网。
代理区域:分为三个部分:defaults、listen、frontend、backend
defaults:为它下面声明的区(如listen、frontend、backend)设置了默认的参数。如果一个defaults下面又声明了一个defaults,那么相同参数的取最下面defaults的值。如下所示:
mode http #工作模式http代理,即7层,其他取值:tcp(工作在四层)/health
option httplog
option httpclose
option dontlognull
option forwardfor
option redispatch
retries 2
maxconn 2000
balance roundrobin #后端服务器负载均衡模式
stats uri /haproxy-stats
contimeout 5000
clitimeout 50000
srvtimeout 50000
frontend:描述一系列用来接收客户端链接的套接字,就相当于socket编程中的listen、bind、accept功能。如下所示:
bind 192.168.198.79:7910 #haproxy绑定地址和侦听端口 mode tcp
acl shunt src 10.28.169.231
use_backend new_server if shunt
default_backend old_server
backend:描述真正服务器,一个配置文件中可以定义多个。如下所示:
server second 192.168.198.77:7910 #真正的后端服务器
server third 192.168.198.78:7910
listen:frontend和backend的组合,通常用于tcp的转发中。
强大的acl:
acl的语法如下:
acl <aclname> <criterion> [flags] [operator] <value> ...
如下所示:
mode tcp
acl shunt src 10.28.169.231
这个acl的名称为 shunt,criterion为src,value为10.28.169.231。这个acl中没有flags和operator部分。
意思是如果链接请求的客户端的ip地址为10.28.169.231,就匹配上。初看起来,作用不是很大,但它可以形成条件判断。例如这么一个应用场景:如果请求客户端地址是10.28.169.231,转发到10.28.169.114服务器上执行,其他请求客户端转发到10.28.169.12上执行。可以按如下配置项达到要求:
frontend only1
bind 192.168.198.79:7910
mode tcp
acl shunt src 10.28.169.231
use_backend new_server if shunt
default_backend old_server
backend new_server
server first 10.28.169.114:7910
backend old_server
server second 10.28.169.12:7910
四、总结
对HAProxy只做了简单的调研了解和测试,只能理解到这个程度,如果描述有误,欢迎大家纠正,共勉!
前段时间因项目需求,对其做了一个简单的调研,给大家做一个分享。
网络上关于HAProxy的讲解很多,但都千篇一律,因此想全面了解它的同学,建议登陆其官网(http://haproxy.1wt.eu/)阅读其详细的各方文档,不过官网全是英文,描述晦涩且相关demo很少,要做好准备。
一、安装:
# tar zcvf haproxy-1.3.20.tar.gz # cd haproxy-1.3.20
# make TARGET=linux26 PREFIX=/usr/local/haproxy #将haproxy安装到/usr/local/haproxy,TARGET表示linux内核版本, 可以根据自己机器调整
# make install PREFIX=/usr/local/haproxy
二、启动:
HAProxy启动时需要配置文件,首次接触可以使用安装文件夹中的examples中的默认配置文件haproxy.cfg启动,为了清晰,先创建一个配置文件目录
#mkdir /usr/local/haproxy/conf
将安装目录中的haproxy.cfg拷贝到/usr/local/haproxy/conf
启动服务:/usr/local/haproxy/sbin/haproxy –f /usr/local/haproxy/conf/haproxy.cfg
如果启动中遇到如下错误:
“ Cannot create ** 目录/文件”
解决:mkdir 目录
三、配置:
配置文件主要分为两大部分:global 区域和代理区域。
global :主要涉及进程方面的参数。如下所示:
log 127.0.0.1 local0 #log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
chroot /home/develop/haproxy
uid 99
gid 504 #develop group id
daemon
nbproc 1
pidfile /home/develop/haproxy/logs/haproxy.pid
其他参数和具体参数意义请大家参考官网。
代理区域:分为三个部分:defaults、listen、frontend、backend
defaults:为它下面声明的区(如listen、frontend、backend)设置了默认的参数。如果一个defaults下面又声明了一个defaults,那么相同参数的取最下面defaults的值。如下所示:
mode http #工作模式http代理,即7层,其他取值:tcp(工作在四层)/health
option httplog
option httpclose
option dontlognull
option forwardfor
option redispatch
retries 2
maxconn 2000
balance roundrobin #后端服务器负载均衡模式
stats uri /haproxy-stats
contimeout 5000
clitimeout 50000
srvtimeout 50000
frontend:描述一系列用来接收客户端链接的套接字,就相当于socket编程中的listen、bind、accept功能。如下所示:
bind 192.168.198.79:7910 #haproxy绑定地址和侦听端口 mode tcp
acl shunt src 10.28.169.231
use_backend new_server if shunt
default_backend old_server
backend:描述真正服务器,一个配置文件中可以定义多个。如下所示:
server second 192.168.198.77:7910 #真正的后端服务器
server third 192.168.198.78:7910
listen:frontend和backend的组合,通常用于tcp的转发中。
强大的acl:
acl的语法如下:
acl <aclname> <criterion> [flags] [operator] <value> ...
如下所示:
mode tcp
acl shunt src 10.28.169.231
这个acl的名称为 shunt,criterion为src,value为10.28.169.231。这个acl中没有flags和operator部分。
意思是如果链接请求的客户端的ip地址为10.28.169.231,就匹配上。初看起来,作用不是很大,但它可以形成条件判断。例如这么一个应用场景:如果请求客户端地址是10.28.169.231,转发到10.28.169.114服务器上执行,其他请求客户端转发到10.28.169.12上执行。可以按如下配置项达到要求:
frontend only1
bind 192.168.198.79:7910
mode tcp
acl shunt src 10.28.169.231
use_backend new_server if shunt
default_backend old_server
backend new_server
server first 10.28.169.114:7910
backend old_server
server second 10.28.169.12:7910
四、总结
对HAProxy只做了简单的调研了解和测试,只能理解到这个程度,如果描述有误,欢迎大家纠正,共勉!