设置高可用性负载平衡器(使用故障转移和会话支持)使用HAProxy / Heartbeat在Fedora 8

使用HAProxy / Heartbeat设置高可用性负载平衡器(具有故障切换和会话支持)在Fedora 8

版本1.0
作者:Oliver Meyer <o [dot] meyer [at] projektfarm [dot] de>

本文档描述了如何在Fedora 8上使用HAProxy和心跳设置主动/被动配置中的双节点负载平衡器。负载平衡器在用户和两个(或更多)具有相同内容的Apache Web服务器之间起作用。 负载平衡器将请求传递到Web服务器,并且还检查其运行状况。 如果其中一个关闭,所有请求将自动重定向到其余的Web服务器。 除此之外,两个负载平衡器节点使用心跳监视彼此。 如果主人失败,则Minion成为主人 - 用户不会注意到服务中断。 HAProxy是会话感知的 - 您可以使用任何Web应用程序,使用会话,如论坛,购物车等。

从HAProxy网站: “HAProxy是一个免费的,非常快速和可靠的解决方案,为基于TCP和HTTP的应用程序提供高可用性,负载平衡和代理,特别适用于在非常高的负载下爬行的网站,同时需要持久性或第7层处理,支持数以万计的连接对于今天的硬件来说显然是现实的,其操作模式使其与现有架构的集成非常容易和无风险,同时仍然提供不将脆弱的Web服务器暴露给网络的可能性。

这个howto是一个没有任何保证的实用指南 - 它不包括理论背景。 建立这样的系统有许多方法 - 这就是我选择的方式。

1准备

为了这个我如何设置四个Fedora 8系统(最小安装没有gui等),配置如下:

1.1负载平衡器1

主机名: lb1.example.com
IP: 192.168.0.110
共享IP: 192.168.0.120

1.2负载平衡器2

主机名: lb2.example.com
IP: 192.168.0.111
共享IP: 192.168.0.120

1.3 Web服务器1

主机名: http1.example.com
IP: 192.168.0.112

1.4 Web服务器2

主机名: http2.example.com
IP: 192.168.0.113

1.5概述

+-----------------+
|  192.168.0.120  |
|    Shared IP    |
+--------+--------+
         |
         +----------------------+
         |                      |
+--------+--------+    +--------+--------+
|  192.168.0.110  |    |  192.168.0.111  |
| Load Balancer 1 |    | Load Balancer 2 |
+--------+--------+    +--------+--------+
+--------+--------+    +--------+--------+
|  192.168.0.112  |    |  192.168.0.113  |
|  Web Server 1   |    |  Web Server 2   |
+-----------------+    +-----------------+

2 HTTP1和HTTP2

2.1防火墙配置

为了从外部访问Web服务器,您必须在两个Web服务器上打开相应的端口。

system-config-firewall-tui

将HTTP&HTTPS设置为可信服务,如下面的屏幕截图所示,并保存设置。

2.2 Apache配置

HAProxy将作为透明代理工作,因此用户的IP地址将在“ X-Forwarded-For ”字段中传递到Web服务器。 为了使Web服务器记录用户的IP地址,而不是登录负载平衡器的IP地址,我们必须在两台Web服务器上的apache配置文件中修改日志格式。

vi /etc/httpd/conf/httpd.conf

搜索以“LogFormat”开头的行...

[...]
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
[...]

...并将“ %h ”替换为“ %{X-Forwarded-For} i ”。 内容应如下所示:

[...]
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
[...]

我们将配置HAProxy以通过不断地从Web服务器请求文件“ check.txt ”来检查Web服务器的运行状况。 为了保持日志的小,我们将自定义每个Web服务器上的第一个vhost(HAProxy将使用Web服务器的IP地址来请求该文件,因此第一个虚拟主机将会回答该请求),以确保访问“ 检查”。 txt “将不会被记录。 在此示例中,vhosts在“ /etc/httpd/conf.d/vhosts.conf ”中配置。

将以下行添加到您的第一个vhost的配置中...

SetEnvIf Request_URI "^/check\.txt$" dontlog

...并将异常( env =!dontlog )添加到CustomLog的行中。 例如,第一个vhost的配置可能如下所示:

NameVirtualHost 192.168.0.112:80

<VirtualHost 192.168.0.112:80>
    ServerName health.example.com
    ServerAdmin admin@example.com
    DocumentRoot /var/www/haproxy
    
    SetEnvIf Request_URI "^/check\.txt$" dontlog
    LogLevel warn
    ErrorLog /var/log/httpd/vhost_error.log
    CustomLog /var/log/httpd/vhost_access.log combined env=!dontlog
</VirtualHost>

现在我们必须在第一个vhost的文档根目录下创建一个文件“ check.txt ”(这个文件可以是空的)。

touch /var/www/haproxy/check.txt

之后完成Web服务器的配置 - 重新启动Web服务器。

/etc/init.d/httpd restart
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

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

支付宝扫一扫打赏

微信扫一扫打赏