如何使用HAProxy的至于在Ubuntu 14.04的WordPress应用程序服务器第4层负载均衡

关于如何使用HAProxy的作为为WordPress应用服务器第4层负载平衡器教程。它假定您的设置包含连接到一个单独的MySQL数据库服务器一个WordPress应用服务器。

介绍

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

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

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

先决条件

本教程继续之前,您应该已经完成了与一个单独的数据库服务器建立一个WordPress站点教程(或者有类似的设置): 如何建立一个远程数据库优化与MySQL网站性能

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

  • WordPress的-1:您的WordPress的Web应用程序服务器
  • 的mysql-1:您的MySQL服务器为WordPress

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

WordPress应用程序和数据库服务器

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

  • WordPress的-2:你的第二个WordPress的Web应用程序服务器
  • HAProxy的-WWW:您HAProxy的服务器进行负载平衡

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

我们的目标

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

HAProxy负载平衡Web应用程序

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

快照您当前的环境

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

  1. 如果发生错误,要恢复到工作环境
  2. 对原始服务器进行一次性复制,无需再次安装和配置PHP和Nginx

注:在2016年10月开始,快照成本每月每千兆字节$ 0.05,在文件系统中的使用的空间量。

把你的WordPress-1mysql-1的VPS的快照。

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

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

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

  1. 创建一个从你把原来的VPS的快照新的VPS,WordPress-1
  2. 从头开始创建一个新的VPS与手动相同的软件和配置,WordPress的-1进行设置

无论使用哪种方法,一定要选择专用网络选项,如果它是可用。 对于本教程中使用的所有VPS,建议使用专用网络。

如果你没有一个专用网络选项,你的VPS公网IP地址代替私有IP地址。请注意,使用公网IP地址,当你在传输敏感数据,如应用程序和数据库服务器之间未加密的数据库密码,是不是好因为这些信息将通过公共互联网传播。

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

创建一个新的VPS名为WordPress的-2,用了你的WordPress的-1的快照。

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

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

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

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

有关快速参考,以下是您需要安装或复制的相关软件和配置文件的列表:

软件:

  • 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的这个GlusterFS教程 ,在本条的基础上的。

注意:以下小节的wordpress-1WordPress-2服务器之间跳跃频繁。 确保在正确的服务器上运行命令,否则会遇到问题!

编辑主机文件

注意:如果你有一个内部DNS,它具有记录您的VPS的私有IP地址,那么可以跳过这一步并替换这些主机名的glusterFS设置命令和配置的其余部分。

否则,WordPress的-1和WordPress-2的VPS:

编辑/ etc / hosts:

sudo vi /etc/hosts

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

wordpress_1_private_IP  wordpress-1
wordpress_2_private_IP  wordpress-2

保存并退出。

安装GlusterFS并配置复制卷

WordPress-1WordPress-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,创建一个名为复制glusterFS量volume1 ,将存储在数据/gluster-storage在两个应用程序服务器,运行:

sudo gluster volume create volume1 replica 2 transport tcp wordpress-1:/gluster-storage wordpress-2:/gluster-storage force
Expected Output: volume create: volume1: success: please start the volume to access data

WordPress的-1再次,运行以下命令来启动你刚刚创建的glusterFS量, volume1

sudo gluster volume start volume1
Expected Output: volume start: volume1: success

WordPress的-1,如果你想看到你刚刚创建并启动了glusterFS卷信息,运行:

sudo gluster volume info

你应该看到你有两个glusterFS“砖”,每个WordPress服务器一个。

现在我们有一个glusterFS卷运行,让我们挂载它,所以我们可以使用它作为一个复制文件系统。

挂载共享存储

让我们先把文件系统安装在wordpress-1上。

WordPress的-1,编辑fstab,这样我们的共享文件系统将安装在启动:

sudo vi /etc/fstab

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

wordpress-1:/volume1   /storage-pool   glusterfs defaults,_netdev 0 0

保存并退出。

WordPress的-1,你现在能够将glusterFS卷装入到/storage_pool文件系统:

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

挂载共享卷,/存储池,在你的WordPress-1 VPS。 您可以运行df -h ,它应该被列为安装的文件系统。 接下来,我们将遵循类似的过程安装WordPress-2共享存储。

WordPress的-2,编辑fstab,这样我们的共享文件系统将安装在启动:

sudo vi /etc/fstab

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

wordpress-2:/volume1   /storage-pool   glusterfs defaults,_netdev 0 0

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

sudo mv /var/www/example.com /storage-pool/
sudo chown www-data:www-data /storage-pool/example.com

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

sudo ln -s /storage-pool/example.com /var/www/example.com

现在,你的WordPress文件位于共享文件系统, /storage-pool ,他们仍然是Nginx的访问通过其原始位置, /var/www/example.com

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

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

如果使用快照选项创建WordPress的 -2,WordPress的-2运行以下命令:

sudo rm /var/www/example.com
sudo ln -s /storage-pool/example.com /var/www/example.com

如果你从头开始创建WordPress的-2 *,WordPress的-2运行以下命令**:

sudo mkdir -p /var/www
sudo ln -s /storage-pool/example.com /var/www/example.com

这是为了同步的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用户的密码。 确保它与已经存在的密码相同(并且它是一个好的密码!)

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

CREATE USER 'wordpressuser'@'wordpress_2_private_IP' IDENTIFIED BY 'password';

再次,替换自己的值wordpressuserwordpress_2_private_IP ,并且,如果你的数据库是不是名为“WordPress的”,一定要改变这一点。

GRANT SELECT,DELETE,INSERT,UPDATE ON wordpress.* TO 'wordpressuser'@'wordpress_2_private_IP';
FLUSH PRIVILEGES;

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

尚未负载平衡

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

安装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”替换为“tcp:

mode    tcp
option  tcplog

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

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

HAProxy配置:代理

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

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

frontend www
   bind haproxy_www_public_IP:80
   default_backend wordpress-backend

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

  • 前端WWW:指定一个名为“www”的前端,我们将用它来处理传入的WWW流量
  • 绑定haproxy_www_public_IP:80:更换haproxy_www_public_IP与HAProxy的www的公共IP地址。 这告诉HAProxy这个前端将处理此IP地址和端口上的传入网络流量
  • default_backend WordPress的后端 :指定所有这些前端的流量将被转发到WordPress的后端 ,我们将在下一步定义

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

backend wordpress-backend
   balance roundrobin
   mode tcp
   server wordpress-1 wordpress_1_private_IP:80 check
   server wordpress-2 wordpress_2_private_IP:80 check

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

  • 后端WordPress的后端 :指定一个名为“WordPress的后端”后端
  • 平衡roundrobin:指定这个后端将使用“roundrobin”负载均衡算法
  • 模式TCP:指定这个后端将使用“TCP”或4层代理
  • 服务器WordPress的-1 ...:80指定在这种情况下,一个名为“WordPress的-1”的后端服务器,私有IP(你必须替换)和端口,它正在侦听。 “检查”选项使负载平衡器定期对此服务器执行运行状况检查
  • 服务器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日志记录现在已启用! 日志文件将在被创建/var/log/haproxy.log一旦HAProxy的开始。

启动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但您的安装可能会有所不同):

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仪表板时发挥作用。

负载平衡完成!

您的Web应用程序服务器现在负载平衡! 您的负载均衡WordPress是现在可以通过负载平衡器,HAProxy的-WWW的公网IP地址或域名访问你的用户!

结论

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

有了这个设置,请记住您HAProxy的负载均衡服务器,HAProxy的www的 ,和你的数据库服务器,MySQL-1,需要运行为您的网站才能正常工作。

作者:Mitchell Anicas