在Ubuntu 14.04上使用HAProxy进行Web服务器负载平衡

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进程期间确认或发送数据时,应用clitimeoutsrvtimeout 。 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监听端口80webfarm ,这只是一个用于识别应用程序的名称。
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统计信息
  • 将调度程序更改为循环以外的其他事项
  • 为特定服务器配置优先级/权重

就这样!

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏