固定链接 基于滴滴云部署 HAProxy 实现 7 层和 4 层负载均衡

基于滴滴云部署 HAProxy 实现 7 层和 4 层负载均衡

基于滴滴云部署 HAProxy 实现 7 层和 4 层负载均衡

1. 简介

HAProxy 是一款提供高可用性、负载均衡以及基于 TCP(第四层)和 HTTP(第七层)应用的开源软件。

本文基于滴滴云 CentOS 7.5 虚拟机和 HAProxy 1.9 版本来验证 HAProxy 基本的四层和七层负载均衡功能。

2. 环境准备

本文采用三台 1核1G,40G硬盘的滴滴云 CentOS 7.5虚拟机,EIP 带宽为 1M,具体架构如下:

在上图中,共有 4 个后端服务,Nginx1-2,Apache1-2,分别分布在 2 个后端服务器上:

  • Nginx1: 116.85.11.147:80
  • Apache1: 116.85.11.147:8080
  • Nginx2: 116.85.56.19: 80
  • Apache2: 116.85.56.19:8080

Nginx 和 Apache 均可用 yum 安装,此处省略。

分别在 Nginx 和 Apache 中添加服务页:

服务页内容以 Nginx1 为例:

3. 安装 HAProxy

在 116.85.19.174 上下载并解压 HAProxy:

编译并安装:

PREFIX 为指定的安装路径,TARGET 则根据当前操作系统内核版本指定:

  • Linux22 for Linux 2.2
  • Linux24 for Linux 2.4 and above (default)
  • Llinux24e for Linux 2.4 with support for a working epoll (> 0.21)
  • Linux26 for Linux 2.6 and above
  • Linux2628 for Linux 2.6.28, 3.x, and above (enables splice and tproxy)

此例中,我们的操作系统内核版本为 3.10.0,所以TARGET 指定为 Linux2628。

将 HAProxy 注册为系统服务,在 /etc/init.d 目录下添加 HAProxy 服务的启停脚本:

4. 使用 HAProxy 搭建 7 层负载均衡器

接下来我们要配置一个 7 层负载均衡器并使其拥有以下功能:

  • 负载均衡
  • 会话保持
  • 根据 URL 前缀向不同的后端集群转发
  • 监控页面

此步骤的核心是为 HAProxy 创建配置文件,当启动 HAProxy 时会读取此文件:

借助 Linux 的 rsyslog 保存 HAProxy 的日志,Global 和 Defaults 域中添加以下内容:

以上的作用是将 info 及以上级别的日志推送到 rsyslog 的 local0 接口,将 warn 及以上级别的日志推送到 rsyslog 的 local1 接口,所有的前端访问都默认使用 Global 中的日志配置。

为 rsyslog 添加 HAProxy 日志的配置:

修改 rsyslog 的启动参数:

重启 rsyslog:

启动 HAProxy:

查看 HAProxy 是否启动:

查看是否生成日志:

通过浏览器访问 HAProxy 的 IP 地址并分别添加 Nginx 和 Apache 后缀,点击刷新,可以看到请求被定义到不同的集群:




接下来,在配置文件中添加 Cookie,使 HAProxy 具有会话保持的功能,即同一个客户端的访问始终定向到同一台服务器上:

以上红色字体部分的配置功能是将 Cookie 发送给客户端,以记录 session。

重启 HAProxy:

再次访问 Nginx,打开浏览器的开发者工具,可以看到此次访问有 Cookie写入:

刷新浏览器,访问会始终保持在 Nginx1页面。

接下来添加以下内容到配置文件,添加监控功能:

在 2 个后端添加 check:

重启 HAProxy:

访问监控页面,输入用户名和密码:

可以看到两个后端都是正常的。

5. 使用 HAProxy 搭建 4 层负载均衡器

HAProxy 作为 4 层负载均衡器不会解析 HTTP 协议相关内容,只针对传输层的数据包做检查,因此不会根据 URL 向不同的后端转发请求,也没有通过 Cookie 保持会话的功能。

本例中使用 HAProxy 代理两个 HTTP 后端,不提供保持会话功能。

修改配置文件:

重启HAProxy:

将两台 Apache 服务器的测试页面放入的默认目录下:

浏览器访问 HAProxy 的 IP 地址,轮询访问 Apache1 和 Apache2:


HAProxy 的 4 层负载均衡虽然不能使用 Cookie 保持会话,但是可以通过源 IP 来识别请求,只要是同一 IP 来源的请求都可以定向到固定的后端资源,只需在配置文件中修改后端的调度算法:

重启 HAProxy:

再次打开浏览器访问 HAProxy 的 IP,刷新后始终访问相同的后端资源。

本文作者:贺子一

参考资源:

http://cbonte.github.io/haproxy-dconv/1.9/configuration.html
https://www.jianshu.com/p/c9f6d55288c0

您的留言将激励我们越做越好