如何使用HAProxy的为7层负载平衡器WordPress和Nginx的在Ubuntu 14.04

在本教程中,我们将教你如何使用HAProxy的为7层负载均衡器从一个单一的域名或IP地址用于多种应用场合。负载均衡可以提高性能,可用性和环境的应变能力。

介绍

在本教程中,我们将教您如何使用HAProxy作为第7层负载均衡器,从单个域名或IP地址为多个应用程序提供服务。 负载平衡可以提高您的环境的性能,可用性和弹性。

如果您希望有单个域名来服务多个应用程序,那么第7层反向代理和负载平衡适合您的站点,因为可以分析http请求以决定哪个应用程序应接收流​​量。

本教程是用WordPress和静态网站作为示例编写的,但其一般概念可以与其他应用程序一起使用,以达到类似的效果。

先决条件

继续本教程之前,您应该至少有两个应用程序在单独的服务器上运行。 我们将使用一个托管在Nginx和WordPress上的静态网站作为我们的两个应用程序。 如果你想完全遵循这个教程,这里是我们用来设置我们的先决条件环境的教程:

我们的启动环境如下所示:

单独的应用程序服务器

除了您当前的环境,我们将创建以下VPS:

  • HAProxy的-WWW:您HAProxy的服务器,负载均衡和反向代理
  • WordPress的-2:你的第二个WordPress的Web应用程序服务器(只有当你想负载平衡环境的WordPress的组件所需)
  • 网络2:你的第二个Nginx的网络服务器(只有当你想负载平衡环境的Nginx的组件所需)

如果你不熟悉基本的负载均衡概念或术语,如7层负载均衡后端访问控制列表 ,这里是解释的基础知识的文章: 简介HAProxy的和负载平衡概念

我们的目标

在本教程结束时,我们希望有一个如下所示的环境:

第7层负载平衡

也就是说,你的用户将通过访问这两个应用程序的http://example.com 打头的所有请求http://example.com/wordpress将被转发到你的WordPress服务器,和所有其他的请求将被转发到你的基本的Nginx服务器。 请注意,您不一定需要对应用程序进行负载平衡以使它们显示在单个域上,但我们将在本教程中介绍负载平衡。

安装HAProxy

使用专用网络创建新的VPS。 在本教程中,我们将它称为HAProxy的-WWW。

在我们HAProxy的www的 VPS,让我们安装与HAProxy的apt-get的

sudo apt-get update
sudo apt-get install haproxy

我们需要启用HAProxy init脚本,因此HAProxy将与您的VPS一起启动和停止。

sudo vi /etc/default/haproxy

变化值ENABLED1使HAProxy的初始化脚本:

ENABLED=1

保存并退出。 现在HAProxy将启动和停止与您的VPS。 此外,您现在可以使用service命令来控制你的HAProxy的。 让我们检查一下是否正在运行:

user@haproxy-www:/etc/init.d$ sudo service haproxy status
haproxy not running.

它没有运行。 这很好,因为它需要配置,我们才能使用它。 让我们为我们的环境配置HAProxy。

HAProxy配置

HAProxy的配置文件分为两个主要部分:

  • 全球 :套工艺范围的参数
  • 代理 :由违约前端后端的参数

同样,如果你不熟悉HAProxy的或碱性的负载均衡概念和术语,请参考以下链接: 到HAProxy的介绍和负载平衡概念

HAProxy配置:全局

所有HAProxy的配置应该在你的HAProxy的VPS,HAProxy的www的完成。

首先,让我们默认haproxy.cfg文件的副本:

cd /etc/haproxy; sudo cp haproxy.cfg haproxy.cfg.orig

现在在文本编辑器中打开haproxy.cfg:

sudo vi /etc/haproxy/haproxy.cfg

你会看到,已经有定义的两个部分: 全局默认值 首先我们来看看一些默认参数。

根据默认设置 ,查找下面几行:

mode    http
option  httplog

选择http作为模式配置HAProxy以执行第7层或应用程序层负载均衡。 这意味着负载均衡器将查看http请求的内容,并根据前端中定义的规则将其转发到相应的服务器。 如果你不熟悉这个概念,请阅读负载均衡部分的类型在我们介绍到HAProxy的

不要关闭配置文件! 我们将在下面添加代理配置。

HAProxy配置:代理

前端配置

我们要添加的第一件事是前端。 对于基本层7反向代理和负载平衡设置,我们将要定义一个ACL,用于将流量定向到相应的后端服务器。 有迹象表明,在HAProxy的使用很多的ACL,我们将只包括在本教程中(path_beg)他们中的一员-的ACL在HAProxy的完整列表,请参阅官方文档: HAProxy的访问控制列表

在文件的结尾,让我们添加前端,WWW。 务必更换haproxy_www_public_IP与HAProxy的www的VPS的公网IP:

frontend www
   bind haproxy_www_public_IP:80
   option http-server-close
   acl url_wordpress path_beg /wordpress
   use_backend wordpress-backend if url_wordpress
   default_backend web-backend

以下是前端配置片段中每行代码的解释:

  • 前端WWW:指定一个名为“www”的前端,我们将用它来处理传入的WWW流量
  • 绑定haproxy_www_public_IP:80:更换haproxy_www_public_IP与HAProxy的www的公共IP地址。 这告诉HAProxy这个前端将处理此IP地址和端口上的传入网络流量
  • 选择HTTP的服务器关闭 :允许在服务器上的HTTP连接关闭模式和维护,支持断点续传的能力,保持活动和流水线在客户端上。 此选项将允许HAProxy通过单个连接处理多个客户端请求,这通常会提高性能
  • ACL url_wordpress path_beg / WordPress的 :指定了一个叫url_wordpress ACL的计算结果为真,如果请求的路径以“/ WordPress的”开头,例如http://example.com/wordpress/hello-world
  • use_backend WordPress的后端,如果url_wordpress:指示在该url_wordpress ACL到WordPress后端 ,我们将尽快确定符合任何交通
  • default_backend网络后端 :这个规定不匹配use_backend规则的任何流量将被转发到网络的后端 ,我们将在下一步定义

后端配置

完成前端配置后,通过添加以下行继续添加第一个后端。 请务必使用适当的值替换突出显示的字词:

backend web-backend
   server web-1 web_1_private_IP:80 check

以下是后端配置代码段中每行代码的解释:

  • 后端Web后端 :指定后端名为web后端
  • 服务器的web-1,...:指定名为web-1,私有IP(你必须替换)和端口,它正在侦听,80在这种情况下,一个后端服务器。 检查选项使负载平衡器此服务器上定期进行健康检查

然后添加您的WordPress应用程序的后端:

backend wordpress-backend
   reqrep ^([^\ :]*)\ /wordpress/(.*) \1\ /\2
   server wordpress-1 wordpress_1_private_IP:80 check

以下是后端配置代码段中每行代码的解释:

  • 后端WordPress的后端 :指定后端名为WordPress的后端
  • reqrep ...:重写为/ WordPress/转发流量到WordPress的服务器时请求。 如果WordPress应用程序安装在服务器根目录中,但我们希望通过我们的HAProxy服务器上的/ wordpress访问它,则这不是必需的
  • 服务器的wordpress-1,...:指定名为WordPress的-1,私有IP(你必须替换)和端口,它正在侦听,80在这种情况下,一个后端服务器。 检查选项使负载平衡器此服务器上定期进行健康检查

HAProxy配置:统计

如果要启用HAProxy统计信息,这在确定HAProxy如何处理传入流量时很有用,那么您需要在配置中添加以下内容:

listen stats :1936
   stats enable   
   stats scope www
   stats scope web-backend
   stats scope wordpress-backend
   stats uri /
   stats realm Haproxy\ Statistics
   stats auth user:password

下面是在上述统计监听配置片段的非平凡行的解释:

  • 听统计:1936年 :配置HAProxy的的统计页面,在端口1936年访问(例如HTTP:// HAProxy的\ _www \ _Public \ _IP:1936年
  • 统计范围...:收集指定的前端或后端统计
  • 统计URI /:指定统计页面为/的URI
  • 统计领域HAProxy的\统计 :启用统计信息并设置身份验证领域(弹出身份验证)的名称,连用统计AUTH选项
  • 统计AUTH HAProxy的:密码 :指定统计页面身份验证凭据。 将用户名和密码更改为您自己的

现在保存并退出。 当您启动HAProxy的,在统计页面将通过使用HTTP:// HAProxy的\ _www \ _Public \ _ip:1936年/一旦你开始你的HAProxy的服务。 HAProxy现在可以启动,但让我们首先启用日志记录。

启用HAProxy日志

在HAProxy中启用日志非常简单。 首先编辑rsyslog.conf文件:

sudo vi /etc/rsyslog.conf

然后找到以下两行,取消注释它们以启用UDP syslog接收。 完成后,它应该类似于以下内容:

$ModLoad imudp
$UDPServerRun 514
$UDPServerAddress 127.0.0.1

现在重新启动rsyslog以启用新配置:

sudo service rsyslog restart

HAProxy日志记录现在已启用! 日志文件将在被创建/var/log/haproxy.log一旦HAProxy的开始。

更新WordPress配置

现在你的WordPress应用程序的URL已更改,我们必须更新几个设置在WordPress。

在任意一个WordPress的服务器上 ,编辑您的wp-config.php文件。 它位于您安装的WordPress(在本教程中,它被安装在/var/www/example.com但您的安装可能会有所不同):

cd /var/www/example.com; sudo vi wp-config.php

附近找到,上面写着顶行define('DB_NAME', 'wordpress');并添加它上面的以下行,替换突出显示的值,:

define('WP_SITEURL', 'http://haproxy_www_public_IP');
define('WP_HOME', 'http://haproxy_www_public_IP');

保存并退出。 现在WordPress的URL被配置为指向你的负载均衡器,而不是只有你原来的WordPress服务器,这将在你试图访问wp-admin仪表板时发挥作用。

启动HAProxy

在HAProxy的www的 ,开始HAProxy的,让您的配置更改生效:

sudo service haproxy restart

反向代理完成

现在,您的应用程序是通过同一域名,example.com访问,通过一个7层反向代理,但是他们还没有负载平衡。 您的环境应如下图所示:

反向代理与无负载平衡

根据我们之前定义的前端,这里是HAProxy如何转发您的流量的描述:

  • http://example.com/wordpress :以/ WordPress的开头的任何请求将被发送到WordPress的后端 (其中包括你的WordPress-1的服务器)
  • http://example.com/ :任何其他请求都将被发送到网络的后端 (其中包括web服务器1中)

如果您想要做的是在单个域上托管多个应用程序,您就完成了! 如果要对应用程序进行负载平衡,则需要继续阅读。

如何添加负载平衡

负载平衡web-1

要对基本Web服务器进行负载平衡,您只需创建一个具有与原始配置和内容相同的配置和内容的新Web服务器。 我们称这个新的服务器: 网络2。

创建新VPS时有两个选项:

  1. 如果你需要从网络1的快照创建一个新的VPS的选择,那就是创建web-2的最简单方法
  2. 从头开始创建。 安装所有相同的软件,相同的配置,那么你的Nginx服务器的根目录中的内容从网页-1复制到网络2使用rsync(见Rsync的教程 )。

:两者的上述方法做你的服务器根目录内容的一次复制。 如果你更新你的任何文件,您的服务器的一个节点,网络1 或Web 2,请确保您再次同步文件。

您相同的Web服务器已经设置完毕后,将其添加到在HAProxy的配置网络的后端

HAProxy的www的 ,编辑haproxy.cfg:

sudo vi /etc/haproxy/haproxy.cfg

找到配置的Web后端部分:

backend web-backend
   server web-1 web_1_private_IP:80 check

然后添加你的web-2服务器上的下一行:

   server web-2 web_2_private_IP:80 check

保存并退出。 现在重新加载HAProxy以使您的更改生效:

sudo service haproxy reload

现在,您的Web后端有两个服务器处理所有非WordPress的流量! 它是负载平衡!

负载平衡wordpress-1

负载平衡WordPress等应用程序比负载平衡静态Web服务器更复杂,因为您必须担心同步上传的文件和其他数据库用户等问题。

:所有这一切都需要创建一个额外的,相同的WordPress服务器的步骤在其他负载均衡教程介绍如何使用HAProxy的作为WordPress的4层负载均衡 完成从该教程以下三个步骤来创建你的第二个服务器的WordPress,WordPress-2:

  1. 创建第二个Web应用程序服务器
  2. 同步Web应用程序文件
  3. 创建新的数据库用户

一旦你被称为尚未负载平衡的部分停止。

一旦你有WordPress的-2中创建,你有你的数据库设置正确,你所要做的就是把它添加到在HAProxy的配置你的WordPress后端

HAProxy的www的 ,编辑haproxy.cfg:

sudo vi /etc/haproxy/haproxy.cfg

找到配置的WordPress的后端部分:

backend wordpress-backend
   server wordpress-1 wordpress_1_private_IP:80 check

然后添加你的WordPress-2服务器上的下一行:

   server wordpress-2 wordpress_2_private_IP:80 check

保存并退出。 现在重新加载HAProxy以使您的更改生效:

sudo service haproxy reload

现在,你的WordPress后端有两个服务器处理所有你的WordPress的流量! 它是负载平衡!

结论

现在您已经完成了本教程,您应该能够扩展反向代理和负载均衡概念,以便为您的环境添加更多应用程序和服务器,从而更好地满足您的需求。 请记住,有无限的方式配置您的环境,如果您有更复杂的需求,您可能需要深入了解HAProxy配置手册。

此外,如果您正在寻找另一种方法来提高WordPress实例的性能,您可能需要查看MySQL复制。 看看这个教程描述如何设置与WordPress:

作者:Mitchell Anicas