如何在 Ubuntu 14.04 上使用 HAProxy 作为 WordPress 应用服务器的第 4 层负载均衡器如何在 Ubuntu 14.04 上使用 HAProxy 作为 WordPress 应用服务器的第 4 层负载均衡器如何在 Ubuntu 14.04 上使用 HAProxy 作为 WordPress 应用服务器的第 4 层负载均衡器如何在 Ubuntu 14.04 上使用 HAProxy 作为 WordPress 应用服务器的第 4 层负载均衡器
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

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

如何在 Ubuntu 14.04 上使用 HAProxy 作为 WordPress 应用服务器的第 4 层负载均衡器

介绍

在本教程中,我们将教您如何使用 HAProxy 作为 WordPress 服务器的第 4 层负载均衡器——特别是 Web 应用程序层。负载平衡应用程序服务器为您的设置增加了冗余,这在服务器故障或网络问题的情况下提高了可靠性,并将负载分散到多个服务器以提高读取性能。我们假设您的设置包括一个连接到单独的 MySQL 数据库服务器的 WordPress 应用程序服务器(有关如何设置它的教程,请参阅先决条件)。

如果您只运行一个 Web 服务器应用程序,则第 4 层负载平衡适合您的站点。如果你的环境更复杂(例如,你想在单独的服务器上运行 WordPress 和静态 Web 服务器,具有单一入口点),你将需要研究应用层(第 7 层)负载平衡。

本教程以 WordPress 为例编写,但其一般概念可用于负载平衡其他无状态 Web 应用程序。

先决条件

在继续本教程之前,您应该已经完成了使用单独的数据库服务器设置 WordPress 站点的教程(或具有类似的设置):如何设置远程数据库以使用 MySQL 优化站点性能

按照该教程在单独的 Web 应用程序和数据库服务器上设置 WordPress 后,您应该有两个 VPS。因为我们将处理多个 VPS,出于参考目的,我们将您现有的两个 VPS 称为以下内容:

  • wordpress-1:您的 WordPress 网络应用程序服务器
  • mysql-1:用于 WordPress 的 MySQL 服务器

您的环境的抽象视图当前看起来像这样:

在本教程中,除了您当前的环境之外,我们还需要两个额外的 VPS。我们会称他们为:

  • wordpress-2:您的第二个 WordPress 网络应用程序服务器
  • haproxy-www:您的 HAProxy 服务器,用于负载平衡

如果您不熟悉基本的负载平衡概念或术语,例如第 4 层负载平衡或后端或ACL,这里有一篇文章解释了基础知识:HAProxy 和负载平衡概念简介。

我们的目标

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

也就是说,您的用户将通过您的 HAProxy 服务器访问您的 WordPress 站点,这将以循环方式将他们转发到您的负载平衡 WordPress 应用程序服务器。您的两个(或更多,如果您愿意)都将访问您的 MySQL 数据库。

快照您当前的环境

可选:在继续本教程之前,您需要创建当前环境的快照。快照在本教程中有两个用途:

  1. 如果犯了错误,要恢复到工作环境
  2. 一次性复制原服务器,无需重新安装配置PHP和Nginx

注意:从 2016 年 10 月开始,快照的费用为每月每 GB 0.05 美元,具体取决于文件系统中的已用空间量。

拍摄您的 wordpress-1 和 mysql-1 VPS 的快照。

现在我们有了快照,我们准备继续构建我们环境的其余部分。

创建您的第二个 Web 应用程序服务器

现在我们需要创建第二个 VPS,它将与我们原来的 Web 应用程序服务器共享负载。有两种选择:

  1. 从原始 VPS 的快照创建一个新的 VPS,wordpress-1
  2. 从头开始创建一个新的 VPS,并使用与 wordpress-1 相同的软件和配置手动设置它

无论使用哪种方法,请务必选择 专用网络 选项(如果可用)。建议对本教程中使用的所有 VPS 使用专用网络。

如果您没有专用网络选项,请将专用 IP 地址替换为您的 VPS 的公共 IP 地址。请注意,在传输敏感数据(例如应用程序和数据库服务器之间未加密的数据库密码)时使用公共 IP 地址不是好的做法,因为该信息将通过公共 Internet 传输。

选项 1:使用快照创建新的 VPS

创建一个名为 wordpress-2 的新 VPS,使用您拍摄的 wordpress-1 快照。

如果您选择此方法,请跳过“选项 2”至“同步 Web 应用程序文件”部分。

选项 2:从头开始创建新的 VPS

这是“选项 1”的替代方案。

如果您想从头开始设置 wordpress-2 服务器,而不是使用 wordpress-1 的快照,请确保安装相同的软件。如果您不记得如何安装和配置原始 WordPress 服务器,请参阅先决条件文档的设置 Web 服务器部分。

作为快速参考,这里列出了您需要安装或复制的相关软件和配置文件:

软件:

  • MySQL 客户端
  • Nginx
  • PHP

要安装此软件,请在您的 wordpress-2 服务器上运行以下命令:

sudo apt-get update
sudo apt-get install mysql-client
sudo apt-get install nginx php5-fpm php5-mysql

需要编辑或创建以匹配您的原始应用程序服务器的配置文件:

  • /etc/php5/fpm/php.ini
  • /etc/php5/fpm/pool.d/www.conf
  • /etc/nginx/sites-available/example.com
  • /etc/nginx/sites-enabled/example.com

完成软件配置后,不要忘记重新启动 PHP 和 Nginx,使用以下命令:

sudo service php5-fpm restart
sudo service nginx restart

完成安装和配置新应用程序服务器后,我们需要同步 WordPress 应用程序文件。

同步 Web 应用程序文件

在对应用程序进行负载平衡之前,我们需要确保新服务器的 Web 应用程序文件与您原来的 WordPress 服务器同步。这些文件的位置取决于您安装 WordPress 的位置,以及一些其他文件。除了WordPress需要运行的php文件外,通过WordPress界面上传的文件和安装的插件也需要在上传或安装时进行同步。在先决条件文档中,我们将 WordPress 安装在 /var/www/example.com 中——我们将在所有示例中使用此位置,但您需要将其替换为您的实际 WordPress 安装路径。

有多种方法可以在服务器之间同步文件——NFS 或 glusterFS 都是合适的选择。我们将使用 glusterFS 来满足我们的同步需求,因为它允许每个应用程序服务器存储自己的应用程序文件副本,同时保持整个文件系统的一致性。这是我们的目标共享存储的概念图:

如果您不熟悉本节中使用的任何 glusterFS 术语,请参阅本节所基于的 GlusterFS 教程。

注意:以下小节经常在 wordpress-1 和 wordpress-2 服务器之间跳转。一定要在正确的服务器上运行命令,否则你会遇到问题!

编辑主机文件

注意:如果您有一个内部 DNS,并且它有您的 VPS 的私有 IP 地址的记录,请随意跳过此步骤并将这些主机名替换为其余的 glusterFS 设置命令和配置。

否则,在 wordpress-1 和 wordpress-2 VPS 上:

编辑 /etc/hosts:

sudo vi /etc/hosts

添加以下两行,用您的应用程序服务器的 IP 各自的 IP 地址替换突出显示的词:

<前>

保存并退出。

安装 GlusterFS 并配置复制卷

在 wordpress-1 和 wordpress-2 VPS 上:

使用 apt-get 安装 glusterFS 服务器软件:

sudo apt-get install glusterfs-server

在 wordpress-1 上,运行以下命令与您的 wordpress-2 对等:

sudo gluster peer probe wordpress-2

在 wordpress-2 上,运行以下命令与 wordpress-1 对等:

sudo gluster peer probe wordpress-1

在 wordpress-1 和 wordpress-2 上,要创建 glusterFS 将存储其管理的文件的位置,请运行:

sudo mkdir /gluster-storage

在 wordpress-1 上,要创建一个名为 volume1 的复制 glusterFS 卷,它将其数据存储在两个应用程序服务器上的 /gluster-storage 中,请运行:

<前>

再次在 wordpress-1 上,运行以下命令以启动您刚刚创建的 glusterFS 卷 volume1:

<前>

在 wordpress-1 上,如果您想查看有关刚刚创建和启动的 glusterFS 卷的信息,请运行:

sudo gluster volume info

您应该看到您有两个 glusterFS \bricks,每个 WordPress 服务器一个。

现在我们有一个 glusterFS 卷在运行,让我们挂载它,这样我们就可以将它用作复制文件系统。

挂载共享存储

让我们先在 wordpress-1 上挂载文件系统。

在 wordpress-1 上,编辑 fstab 以便我们的共享文件系统将在启动时挂载:

sudo vi /etc/fstab

将以下行添加到文件末尾以使用 /storage-pool 作为我们的挂载点。随意替换这个(这里和这个 glusterFS 设置的其余部分):

<前>

保存并退出。

在 wordpress-1 上,您现在可以将 glusterFS 卷挂载到 /storage_pool 文件系统:

<前>

这会在您的 wordpress-1 VPS 上安装共享卷 /storage-pool。您可以运行 df -h,它应该被列为已安装的文件系统。接下来,我们将按照类似的过程将共享存储挂载到 wordpress-2 上。

在 wordpress-2 上,编辑 fstab 以便我们的共享文件系统将在启动时挂载:

sudo vi /etc/fstab

将以下行添加到文件末尾以使用 /storage-pool 作为我们的挂载点。如果您使用了不同的值,请确保在此处替换它:

<前>

在 wordpress-2 上,您现在可以将 glusterFS 卷挂载到 /storage_pool 文件系统:

sudo mkdir /storage-pool
sudo mount /storage-pool

现在,在 /storage-pool 文件系统中创建、修改或删除的任何文件都将在两台服务器之间同步,即使其中一台服务器暂时关闭也是如此。

将 WordPress 文件移动到共享存储

下一步是将 wordpress-1 的 WordPress 文件移动到共享存储。请用您自己的价值观替换突出显示的词。 /var/www/example.com 表示您的 WordPress 文件所在的位置(以及 Nginx 正在查找文件的位置),而 example.com 本身只是目录的基本名称。

在 wordpress-1 上,运行这些命令将您的 WordPress 应用程序文件移动到您的共享文件系统 /storage-pool:

<前>

接下来,您需要创建一个符号链接,指向共享文件系统上的 WordPress 文件,您的 WordPress 文件最初通过运行存储在该文件系统中:

<前>

现在您的 WordPress 文件位于共享文件系统 /storage-pool 上,Nginx 仍然可以通过它们的原始位置 /var/www/example.com 访问它们.

将新的应用服务器指向共享存储

下一步是在我们新的 Web 应用程序服务器上创建一个指向共享文件系统上的 WordPress 文件的符号链接。

如果您使用快照选项创建了 wordpress-2,请在 wordpress-2 上运行以下命令:

<前>

如果您从头开始创建 *wordpress-2,请在 wordpress-2 上运行以下命令:

<前>

这就是同步 WordPress 应用程序文件的步骤!下一步是为我们的新应用程序服务器 wordpress-2 提供对数据库的访问权限。

创建一个新的数据库用户

因为 MySQL 通过用户名和源主机识别用户,我们需要创建一个新的 wordpressuser,它可以从我们的新应用程序服务器 wordpress-2 进行连接。

在你的数据库 VPS 上,mysql-1,连接到 MySQL 控制台:

mysql -u root -p

在以下 MySQL 语句中,将所有突出显示的词替换为适合您的环境的词:

  • wordpressuser:您的 MySQL WordPress 用户。确保它与现有的用户名相同
  • wordpress_2_private_IP:您的wordpress-2 VPS 的私有IP
  • 密码:您的 MySQL WordPress 用户密码。确保它与现有密码相同(并且这是一个好的密码!)

运行此语句创建一个可以从您的新 WordPress 服务器连接的 MySQL 用户,wordpress-2:

<前>

同样,将您自己的值替换为 wordpressuser、wordpress_2_private_IP,并且,如果您的数据库 未命名为 \wordpress,请务必更改那也是。

<前>

现在,您的第二个 Web 应用程序服务器 wordpress-2 可以登录到数据库服务器 mysql-1 上的 MySQL。

尚未负载平衡

请注意,有两个正在运行的 Web 应用程序服务器,但应用程序没有负载平衡,因为必须通过各自的公共 IP 地址访问每个服务器。我们希望能够通过相同的 URL(例如 http://example.com/)访问应用程序,并在两个 Web 应用程序服务器之间实现流量平衡。这就是 HAProxy 的用武之地。

安装 HAProxy

使用专用网络创建新的 VPS。在本教程中,我们将其称为 haproxy-www。

在我们的 haproxy-www VPS 中,让我们使用 apt-get 安装 HAProxy:

sudo apt-get update
sudo apt-get install haproxy

我们需要启用 HAProxy 初始化脚本,这样 HAProxy 就会随着您的 VPS 一起启动和停止。

sudo vi /etc/default/haproxy

将 ENABLED 的值更改为 1 以启用 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

您会看到已经定义了两个部分:global 和 defaults。首先,我们将对一些默认参数进行一些更改。

在 defaults 下,查找以下行:

mode    http
option  httplog

在这两种情况下都将 \http 替换为 tcp:

mode    tcp
option  tcplog

选择 tcp 作为模式配置 HAProxy 执行第 4 层负载平衡。在我们的例子中,这意味着特定 IP 地址和端口上的所有传入流量都将转发到同一后端。如果您不熟悉这个概念,请阅读我们的 HAProxy 简介中的负载平衡类型部分。

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

HAProxy 配置:代理

我们要添加的第一件事是前端。对于基本的第 4 层负载平衡设置,前端侦听特定 IP 地址和端口上的流量,然后将传入流量转发到指定的后端。

在文件末尾,让我们添加我们的前端,www。请务必将 haproxy_www_public_IP 替换为您的 haproxy-www VPS 的公共 IP:

<前>

以下是对上面前端配置片段中每一行的含义的解释:

  • 前端 www:指定一个名为“www”的前端,因为我们将使用它来处理传入的 www 流量
  • 绑定 haproxy_www_public_IP:80:将 haproxy_www_public_IP 替换为 haproxy-www 的公共 IP 地址。这告诉 HAProxy 这个前端将处理这个 IP 地址和端口上的传入网络流量
  • default_backend wordpress-backend:指定此前端的所有流量都将转发到我们将在下一步定义的wordpress-backend

完成前端配置后,通过添加以下行继续添加后端。请务必将突出显示的单词替换为适当的值:

<前>

以下是对上面后端配置片段中每一行的含义的解释:

  • backend wordpress-backend:指定一个名为“wordpress-backend”的后端
  • balance roundrobin:指定此后端将使用“roundrobin”负载平衡算法
  • mode tcp:指定此后端将使用“tcp”或第 4 层代理
  • server wordpress-1 …: 指定一个名为 \wordpress-1 的后端服务器,私有 IP(您必须替换)和它正在侦听的端口,在本例中为 80。 \check 选项使负载均衡器定期对此服务器执行健康检查
  • server wordpress-2 …: 这指定了一个名为“wordpress-2”的后端服务器

现在保存并退出。 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 日志记录现已启用!一旦 HAProxy 启动,日志文件将在 /var/log/haproxy.log 中创建。

启动 HAProxy 和 PHP/Nginx

在 haproxy-www 上,启动 HAProxy 以使您的配置更改生效:

sudo service haproxy restart

根据您设置新应用程序服务器的方式,您可能需要通过重新启动 PHP 和 Nginx 来重新启动 WordPress 应用程序。

在 wordpress-2 上,通过运行以下命令重新启动 PHP 和 Nginx:

sudo service php5-fpm restart
sudo service nginx restart

现在 WordPress 应该在您的两个应用程序服务器上运行,并且它们是负载平衡的。但是仍然需要进行最后一项配置更改。

更新 WordPress 配置

现在您的 WordPress 应用程序的 URL 已经更改,我们必须更新 WordPress 中的一些设置。

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

<前>

找到靠近顶部的行 define(DB_NAME, wordpress); 并在其上方添加以下行,替换突出显示的值:

<前>

保存并退出。现在,WordPress URL 配置为指向您的负载均衡器,而不仅仅是您的原始 WordPress 服务器,当您尝试访问 wp-admin 仪表板时,它会发挥作用。

负载均衡完成!

您的 Web 应用程序服务器现在已实现负载平衡!您的用户现在可以通过负载均衡器的公共 IP 地址或域名访问您的负载均衡 WordPress,haproxy-www!

结论

现在您的用户负载将分布在您的两个 WordPress 服务器之间。此外,如果您的一个 WordPress 应用程序服务器出现故障,您的站点仍将可用,因为其他 WordPress 服务器将转发所有流量!

通过此设置,请记住,您的 HAProxy 负载平衡器服务器 haproxy-www 和数据库服务器 mysql-1 需要运行,您的站点才能正常运行。

作者:Mitchell Anicas

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