Ubuntu 14.04上使用HAProxy进行Web服务器负载平衡
什么是HAProxy?
HAProxy(高可用性代理)是一种开源负载平衡器,可以负载平衡任何TCP服务。 HAProxy是一个免费的,非常快速和可靠的解决方案,为基于TCP和HTTP的应用程序提供负载平衡 , 高可用性和代理 。 它特别适用于非常高的交通网站,并为世界上许多最受欢迎的网站提供支持。
由于它的存在,它已经成为事实上的标准的开源负载平衡器。 虽然它不做广告,但广泛使用。 以下是安装程序的基本原理图:
安装HAProxy
我正在使用Ubuntu 14.04并安装它:
apt-get install haproxy
您可以通过以下方式检查版本:
haproxy -v
我们需要通过init脚本/ etc / default / haproxy
启动HAProxy
。 将ENABLED
选项设置为1
为:
ENABLED=1
要验证此更改是否正确完成,请执行HAProxy的init脚本,而不需要任何参数。 您应该看到以下内容:
$ service haproxy <press_tab_key>
reload restart start status stop
HAProxy现已安装。 现在让我们创建一个安装程序,其中有2个(两个)Apache Web Server实例和1个(一个)HAProxy实例。 以下是设置信息:
我们将使用三个系统,几乎通过VirtualBox产生:
实例1 - 负载平衡器
主机名:haproxy
操作系统:Ubuntu
私人IP:192.168.205.15
实例2 - Web服务器1
主机名:webser01
操作系统:带有LAMP的Ubuntu
私人IP:192.168.205.16
实例2 - Web服务器2
主机名:webserver02
操作系统:带有LAMP的Ubuntu
私人IP:192.168.205.17
以下是设置如何的图:
现在让我们配置HAProxy。
配置HAProxy
通过重命名来备份原始文件:
mv /etc/haproxy/haproxy.cfg{,.original}
我们将创建自己的haproxy.cfg
文件。 使用您喜欢的文本编辑器创建/etc/haproxy/haproxy.cfg
文件为:
global log /dev/log local0 log 127.0.0.1 local1 notice maxconn 4096 user haproxy group haproxy daemon defaults log global mode http option httplog option dontlognull retries 3 option redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000 listen webfarm 0.0.0.0:80 mode http stats enable stats uri /haproxy?stats balance roundrobin option httpclose option forwardfor server webserver01 192.168.205.16:80 check server webserver02 192.168.205.17:80 check
说明:
global log /dev/log local0 log 127.0.0.1 local1 notice maxconn 4096 user haproxy group haproxy daemon
日志
指令提到将发送日志消息的系统日志服务器。
maxconn
指令指定前端并发连接数。 默认值为2000
,应根据系统配置进行调整。
用户
和组
指令将HAProxy进程更改为指定的用户/组。 这些不应该改变。
defaults log global mode http option httplog option dontlognull retries 3 option redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000
上述部分具有默认值。 redispatch
选项在连接失败的情况下启用会话重新分配。 因此,如果Web服务器实例关闭,会话粘性被覆盖。
重试
指令设置连接失败后在Web服务器实例上执行的重试次数。
要修改的值是各种超时
指令。 contimeout
选项指定等待连接尝试Web服务器实例成功的最长时间。
当客户端或服务器预期在TCP进程期间确认或发送数据时,应用clitimeout
和srvtimeout
。 HAProxy建议将客户端和服务器超时设置为相同的值。
listen webfarm 0.0.0.0:80 mode http stats enable stats uri /haproxy?stats balance roundrobin option httpclose option forwardfor server webserver01 192.168.205.16:80 check server webserver02 192.168.205.17:80 check
上面的块包含前端和后端的配置。 我们正在配置HAProxy监听端口80
的webfarm
,这只是一个用于识别应用程序的名称。
stats
指令启用连接统计信息
页面。 这个页面可以使用stats uri
中提到的URL来查看,所以在这种情况下,它是http://192.168.205.15/haproxy?stats
这个页面的演示可以在这里查看 。
balance
指令指定要使用的负载均衡算法。 可用的算法选项有:
- Round Robin(roundrobin),
- 静态循环(static-rr),
- 最少连接数(最小连接数),
- 来源(来源),
- URI(uri)和
- 网址参数(url_param)。
有关每个算法的信息可以从官方文档中获得。
服务器
指令声明后端服务器,语法为:
server <server_name> <server_address>[:port] [param*]
我们在这里提到的名称将显示在日志和警报中。 此指令支持一些其他参数 ,我们将使用该检查
参数在本文中。 检查
选项可以在Web服务器实例上启用运行状况检查,否则,Web服务器实例始终被视为可用。
完成配置后,启动HAProxy服务:
sudo service haproxy start
测试负载平衡和故障转移
我们将在默认的index.html
文件中附加服务器名称,默认位于/var/www/index.html
在实例2 - Web服务器1(具有IP-192.168.205.16的webserver01)上,将以下行添加为:
sudo sh -c "echo \<h1\>Hostname: webserver01 \(192.168.205.16\)\<\/h1\> >> /var/www/index.html"
在实例3 - Web服务器2(webserver02与IP-192.168.205.17),下面附加:
sudo sh -c "echo \<h1\>Hostname: webserver02 \(192.168.205.17\)\<\/h1\> >> /var/www/index.html"
现在打开本地机器上的Web浏览器,浏览haproxy
IP即http://192.168.205.15
每次刷新选项卡时,都会看到正在分配给每个Web服务器的负载。 以下是我的浏览器的屏幕截图:
我第一次访问http://192.168.205.15
时,我得到:
第二次,即刷新页面时,我得到:
您还可以访问http://192.168.205.15/haproxy?stats
来检查haproxy统计
还有更多的你可以做这个设置。 一些想法包括:
- 将一台或两台Web服务器脱机以测试当您访问HAProxy时会发生什么
- 配置HAProxy以提供自定义维护页面
- 配置Web界面,以便您可以可视地监视HAProxy统计信息
- 将调度程序更改为循环以外的其他事项
- 为特定服务器配置优先级/权重
就这样!