在 Ubuntu 14.04 上使用 HAProxy 进行 Web 服务器负载平衡在 Ubuntu 14.04 上使用 HAProxy 进行 Web 服务器负载平衡在 Ubuntu 14.04 上使用 HAProxy 进行 Web 服务器负载平衡在 Ubuntu 14.04 上使用 HAProxy 进行 Web 服务器负载平衡
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

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

在此页

  1. 什么是 HAProxy?
  2. 安装 HAProxy
  3. 配置 HAProxy
  4. 测试负载平衡和故障转移

什么是 HAProxy?

安装 HAProxy

我正在使用 Ubuntu 14.04 并通过以下方式安装它:

apt-get install haproxy

您可以通过以下方式检查版本:

haproxy -v


我们需要通过初始化脚本 /etc/default/haproxy 来启用 HAProxy。将 ENABLED 选项设置为 1 为:

ENABLED=1

要验证此更改是否正确完成,请在不带任何参数的情况下执行 HAProxy 的初始化脚本。您应该看到以下内容:

$ service haproxy <press_tab_key>
reload   restart  start    status   stop

配置 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

log 指令提到一个系统日志服务器,日志消息将被发送到该服务器。
maxconn 指令指定前端的并发连接数。默认值为 2000,应根据您的系统配置进行调整。
user 和 group 指令将 HAProxy 进程更改为指定的用户/组。这些不应该改变。

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout     5000
        clitimeout     50000
        srvtimeout     50000

上面的部分有默认值。选项 redispatch 在连接失败的情况下启用会话重新分配。因此,如果 Web 服务器实例出现故障,会话粘性将被覆盖。
retries 指令设置连接失败后在 Web 服务器实例上执行的重试次数。
要修改的值是各种超时指令。 contimeout 选项指定等待与 Web 服务器实例的连接尝试成功的最长时间。
clitimeout 和 srvtimeout 适用于客户端或服务器需要在 TCP 过程中确认或发送数据的情况。 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 以侦听 webfarm 的端口 80,这只是一个用于识别应用程序的名称。
stats 指令启用连接统计页面。可以使用 stats uri 中提到的 URL 查看此页面,因此在本例中为 http://192.168.205.15/haproxy?stats 可以在此处查看此页面的演示。
balance 指令指定负载平衡算法使用。可用的算法选项有:

  • 循环法(roundrobin),
  • 静态循环法(static-rr),
  • 最少连接数 (leastconn),
  • 来源(来源),
  • URI (uri) 和
  • URL 参数 (url_param)。

关于每个算法的信息可以从官方文档中获得。

服务器指令声明一个后端服务器,语法是:

server <server_name> <server_address>[:port] [param*]
    

我们在这里提到的名称将出现在日志和警报中。该指令支持更多参数,我们将在本文中使用检查参数。 check 选项在 web 服务器实例上启用健康检查,否则,web 服务器实例“始终被认为是可用的”。

完成配置后启动 HAProxy 服务:

sudo service haproxy start

测试负载平衡和故障转移

我们将在默认位于 /var/www/index.html 的默认 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(具有 IP-192.168.205.17 的 webserver02)上,将以下行附加为:

sudo sh -c "echo \<h1\>Hostname: webserver02 \(192.168.205.17\)\<\/h1\> >> /var/www/index.html"

现在在本地机器上打开网络浏览器并浏览 haproxy IP 即 http://192.168.205.15

每次刷新选项卡时,您都会看到负载正在分配给每个 Web 服务器。下面是我的浏览器截图:

当我第一次访问 http://192.168.205.15 时,我得到:

第二次,即当我刷新页面时,我得到:

您还可以通过访问 http://192.168.205.15/haproxy?stats 查看 haproxy 统计信息

您可以对此设置执行更多操作。一些想法包括:

  • 让一个或两个网络服务器离线,以测试当您访问 HAProxy 时会发生什么
  • 配置 HAProxy 以提供自定义维护页面
  • 配置网络界面,以便您可以直观地监控 HAProxy 统计信息
  • 将调度程序更改为循环法以外的其他程序
  • 为特定服务器配置优先级/权重

就这样!

©2015-2025 艾丽卡 support@alaica.com