高可用性代理(High Availability Proxy,HAProxy)是一款流行的开源TCP/HTTP负载平衡器和代理解决方案,可以在Linux、Solaris和FreeBSD上运行。它最常见的用途是通过在多个服务器(例如Web、应用程序、数据库)之间分配工作负载来提高服务器环境的性能和可靠性,特别适用于流量很高的网站。多年来 HAProxy 已成为事实上的标准开源负载平衡器,随多数主流Linux发行版一起提供,并为世界上许多高访问量的网站提供支持,在很多知名公司获得成功应用,如GitHub、Imgur、Instagram和Twitter。
随着流量的增加,管理数据库流量变得越来越困难,并且数据库实际上分布在多个服务器上。PostgreSQL 客户端通常与单个端点通信。当主节点发生故障时,数据库客户端将继续重试相同的IP 地址。而如果故障已经转移到辅助节点,就需要使用新端点更新应用程序。在应用程序和数据库实例之间放置负载平衡器,可以将应用程序定向到可用或运行状况良好的数据库节点,并在需要时进行故障转移。另一个好处是可以通过有效使用副本来提高读取性能。可以创建一个只读端口,以平衡各个副本之间的读取。下面介绍如何安装及启动HAProxy。
作为负载平衡器,HAProxy将流量从一个来源分发到一个或多个目的地,并为此任务定义特定的规则和(或)协议。如果有目的地停止响应,则将其标记为脱机,并将流量发送到其余的可用目的地。
HAProxy始终提供3个有效的稳定发行版本(LTS,即长期支持,是Long Term Support的缩写),即两个正在开发中的最新版本和一个仍在接收重要更新的历史版本。
通过访问其官网可以得知,1.8、2.0和2.2是目前3个有效的稳定发行版本,如表2-1所示。
表2-1 HAProxy版本信息表
运行yum list haproxy 命令可以得知,目前安装标准库的版本为1.5.18,已经不再维护。
接下来,安装标准库中当前最新稳定版本2.2,因此需要通过源代码安装。首先,检查是否具备下载和编译程序的先决条件。
确定是否具备编译HAProxy的最小依赖环境。
使用以下命令下载源代码。
下载完成后,使用以下命令解压文件。
进入源代码目录。
编译程序。
最后,安装HAProxy。
现在已成功安装HAProxy,但仍需要进行配置才能使其运行。
创建新文件/usr/local/etc/haproxy/haproxy.cfg,并将以下内容添加到文件中。
第一部分是全局和默认配置块。
第二部分是统计信息的配置块,此处可选,如果不需要统计信息,则可以通过 7000端口访问。
第三部分是核心配置块,假设 PostgreSQL 集群是使用内置的流复制模式配置的,包含一个master和两个slaves。
bind参数:与HTTP负载均衡不同,HAProxy对数据库没有特定的“模式”,因此使用TCP方式。侦听地址可以根据需要设置,此处设置为*:5000。
option pgsql-check user optima参数:运行状况检测可以根据需要选择不同的软件(如Patroni、Xinetd等),此处使用了PostgreSQL内置的pgsql-check。
balance参数:负载平衡算法,在后端部分中配置服务器,允许HAProxy根据可用的轮询算法将这些服务器用于负载均衡。
平衡算法用于确定每个连接转移到后端的哪个服务器,包括如下选项。
roundrobin(轮询):根据权重依次使用每个服务器。当服务器的处理时间保持均匀分布时,这是最流畅、最公平的算法。该算法是动态的,可以动态调整服务器权重。
leastconn(最少连接优先):选择连接数最少的服务器。在具有相同负载的服务器之间执行。建议在较长的会话(例如LDAP、SQL、TSE等)中使用此算法,不适用于较短的会话(例如HTTP)。
first(第一):具有可用连接插槽的第一台服务器接收连接。从最低的数字标识符到最高的数字标识符之间选择服务器。服务器达到其maxconn值后,将使用下一台服务器。
source(源):对源IP地址进行散列处理,然后除以运行中服务器的总权重,以指定将接收请求的服务器。这样,相同的客户端 IP 地址将始终到达同一服务器,而服务器保持不变。
运行如下命令,启动HAProxy。