使用 HAProxy 配置 HTTP 负载均衡器

Jaroslav Štěpánek 的头像

·

·

·

54,582 次阅读

随着基于 Web 的应用和服务的增多,IT 系统管理员肩上的责任也越来越重。当遇到不可预期的事件如流量达到高峰,流量增大或者内部的挑战比如硬件的损坏或紧急维修,无论如何,你的 Web 应用都必须要保持可用性。甚至现在流行的 devops 和持续交付(CD)也可能威胁到你的 Web 服务的可靠性和性能的一致性。

不可预测,不一致的性能表现是你无法接受的。但是我们怎样消除这些缺点呢?大多数情况下一个合适的负载均衡解决方案可以解决这个问题。今天我会给你们介绍如何使用 HAProxy 配置 HTTP 负载均衡器。

什么是 HTTP 负载均衡?

HTTP 负载均衡是一个网络解决方案,它将进入的 HTTP 或 HTTPs 请求分配至一组提供相同的 Web 应用内容的服务器用于响应。通过将请求在这样的多个服务器间进行均衡,负载均衡器可以防止服务器出现单点故障,可以提升整体的可用性和响应速度。它还可以让你能够简单的通过添加或者移除服务器来进行横向扩展或收缩,对工作负载进行调整。

什么时候,什么情况下需要使用负载均衡?

负载均衡可以提升服务器的使用性能和最大可用性,当你的服务器开始出现高负载时就可以使用负载均衡。或者你在为一个大型项目设计架构时,在前端使用负载均衡是一个很好的习惯。当你的环境需要扩展的时候它会很有用。

什么是 HAProxy?

HAProxy 是一个流行的开源的 GNU/Linux 平台下的 TCP/HTTP 服务器的负载均衡和代理软件。HAProxy 是单线程,事件驱动架构,可以轻松的处理 10 Gbps 速率 的流量,在生产环境中被广泛的使用。它的功能包括自动健康状态检查,自定义负载均衡算法,HTTPS/SSL 支持,会话速率限制等等。

这个教程要实现怎样的负载均衡

在这个教程中,我们会为 HTTP Web 服务器配置一个基于 HAProxy 的负载均衡。

准备条件

你至少要有一台,或者最好是两台 Web 服务器来验证你的负载均衡的功能。我们假设后端的 HTTP Web 服务器已经配置好并可以运行

在 Linux 中安装 HAProxy

对于大多数的发行版,我们可以使用发行版的包管理器来安装 HAProxy。

在 Debian 中安装 HAProxy

在 Debian Wheezy 中我们需要添加源,在 /etc/apt/sources.list.d 下创建一个文件 “backports.list” ,写入下面的内容

deb http://cdn.debian.net/debian wheezy­backports main 

刷新仓库的数据,并安装 HAProxy

# apt­ get update
# apt ­get install haproxy 

在 Ubuntu 中安装 HAProxy

# apt ­get install haproxy 

在 CentOS 和 RHEL 中安装 HAProxy

# yum install haproxy 

配置 HAProxy

如果你完成了配置,现在启动 HAProxy 并验证是否运行正常。

在 Centos/RHEL 中启动 HAProxy

让 HAProxy 开机自启,使用下面的命令

# chkconfig haproxy on
# service haproxy start 

当然,防火墙需要开放 80 端口,像下面这样

CentOS/RHEL 7 的防火墙

# firewall­cmd ­­permanent ­­zone=public ­­add­port=80/tcp
# firewall­cmd ­­reload 

CentOS/RHEL 6 的防火墙

把下面内容加至 /etc/sysconfig/iptables 中的 “:OUTPUT ACCEPT” 段中

­A INPUT ­m state ­­state NEW ­m tcp ­p tcp ­­dport 80 ­j ACCEPT 

重启iptables

# service iptables restart 

在 Debian 中启动 HAProxy

启动 HAProxy

# service haproxy start 

不要忘了防火墙开放 80 端口,在 /etc/iptables.up.rules 中加入:

­A INPUT ­p tcp ­­dport 80 ­j ACCEPT 

在 Ubuntu 中启动HAProxy

让 HAProxy 开机自动启动在 /etc/default/haproxy 中配置

ENABLED=1 

启动 HAProxy:

# service haproxy start 

防火墙开放 80 端口:

# ufw allow 80 

测试 HAProxy

Server IP: 192.168.100.3
X-Forwarded-for: 192.168.100.4

如果我们停掉一台后端 Web 服务,curl 命令仍然正常工作,请求被分发至另一台可用的 Web 服务器。

总结

现在你有了一个完全可用的负载均衡器,以轮询的模式对你的 Web 节点进行负载均衡。还可以去实验其他的配置选项以适应你的环境。希望这个教程可以帮助你们的 Web 项目有更好的可用性。

你可能已经发现了,这个教程只包含单台负载均衡的设置。这意味着我们仍然有单点故障的问题。在真实场景中,你应该至少部署 2 台或者 3 台负载均衡以防止意外发生,但这不是本教程的范围。

如果你有任何问题或建议,请在评论中提出,我会尽我的努力回答。


via: http://xmodulo.com/haproxy-http-load-balancer-linux.html

作者:Jaroslav Štěpánek 译者:Liao 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

1 条回复

  1. 微博评论 的头像
    微博评论

    有些没用过的配置,留看

    来自北京

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注