介绍
在本教程中,我们将教您如何使用HAProxy作为第7层负载均衡器,从单个域名或IP地址为多个应用程序提供服务。 负载平衡可以提高您的环境的性能,可用性和弹性。
如果您希望有单个域名来服务多个应用程序,那么第7层反向代理和负载平衡适合您的站点,因为可以分析http请求以决定哪个应用程序应接收流量。
本教程是用WordPress和静态网站作为示例编写的,但其一般概念可以与其他应用程序一起使用,以达到类似的效果。
先决条件
继续本教程之前,您应该至少有两个应用程序在单独的服务器上运行。 我们将使用一个托管在Nginx和WordPress上的静态网站作为我们的两个应用程序。 如果你想完全遵循这个教程,这里是我们用来设置我们的先决条件环境的教程:
- WordPress的-1 VPS:
- 网络1 VPS: 如何在Ubuntu 14.04安装的Nginx
我们的启动环境如下所示:
除了您当前的环境,我们将创建以下VPS:
- HAProxy的-WWW:您HAProxy的服务器,负载均衡和反向代理
- WordPress的-2:你的第二个WordPress的Web应用程序服务器(只有当你想负载平衡环境的WordPress的组件所需)
- 网络2:你的第二个Nginx的网络服务器(只有当你想负载平衡环境的Nginx的组件所需)
如果你不熟悉基本的负载均衡概念或术语,如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
变化值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的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配置:代理
前端配置
我们要添加的第一件事是前端。 对于基本层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的快照创建一个新的VPS的选择,那就是创建web-2的最简单方法
- 从头开始创建。 安装所有相同的软件,相同的配置,那么你的Nginx服务器的根目录中的内容从网页-1复制到网络2使用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服务器的步骤在其他负载均衡教程介绍 。 完成从该教程以下三个步骤来创建你的第二个服务器的WordPress,WordPress的-2:
一旦你被称为尚未负载平衡的部分停止。
一旦你有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: