负载均衡#HAPROXY#002#编译安装指南

上节 我们主要讲解了HAProxy的基本知识,以及事关HAProxy的重要资源。我们知道HAProxy是众多负载均衡器中非常重要的一个,而本系列文章就是围绕其使用、管理以及原理来展开。在深度学习之前,我们先安装HAProxy,运行起来,直观感受下它的魅力。

0x01 源代码下载

使用上文提供的下载链接,下载到本地服务器上:

1
wget http://www.haproxy.org/download/2.8/src/haproxy-2.8.3.tar.gz

0x02 编译

HAProxy的编译相当简单,不用configure、不用cmake,系统给我们提供了Makefile文件,按照指引设置make参数即可编译成功。

我们先忽略掉所有编译选项,按照下面的方法编译一个版本出来测试。至于具体选项的特定含义,以及其他高级选项,后续再慢慢道来。

先安装依赖包:

1
2
3
4
sudo apt-get install -y libpcre3-dev
sudo apt-get install -y libssl-dev
sudo apt-get install -y liblua5.3-dev
sudo apt-get install -y libsystemd-dev

然后编译代码:

1
2
3
tar -zxvf haproxy-2.8.3.tar.gz
cd haproxy-2.8.3
make -j $(nproc) TARGET=linux-glibc USE_OPENSSL=1 USE_PCRE=1 USE_SYSTEMD=1

无报错即成功,在当前目录下会生成我们需要的可执行程序haproxy。

0x03 七层负载均衡测试方案

HAProxy支持四层和七层负载均衡,我们先做个简单的七层负载测试。测试方案如下:

  • 我们在同一台服务器上部署两个WebServer和一个HAProxy
  • WebServerA监听192.168.0.45:8081端口,其index.html页面内容为“WebServerA”
  • WebServerB监听192.168.0.45:8082端口,其index.html页面内容为“WebServerB”
  • HAProxy作为前端机,监听192.168.0.45:8080端口,HAProxy负载均衡算法采用轮询算法
  • 多次使用命令“curl http://192.168.0.45:8080/index.html ” 向HAProxy发起调用请求
  • 成功标准:我们多次调用curl,控制台依次轮流打印WebServerA,WebServerB,WebServerA,WebServerB……

0x04 七层负载均衡测试

首先,我们定制七层负载均衡测试用的配置文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
global
    log /tmp/log local0
    log /tmp/log local1 notice
    stats timeout 30s

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    timeout connect 5000
    timeout client  50000
    timeout server  50000

frontend frontend_www_example_com
    bind 192.168.0.45:8080
    mode http
    option httplog
    log global
    default_backend backend_www_example_com

backend backend_www_example_com
    balance roundrobin
    server web-node1 192.168.0.45:8081 check inter 2000 rise 30 fall 15
    server web-node2 192.168.0.45:8082 check inter 2000 rise 30 fall 15

将上述内容保存为 haproxy-7.cfg 文件( 右键另存为 )。然后使用如下命令启动HAProxy(启动haproxy之前,先启动webserver)。

1
$ ./haproxy -f ./haproxy-7.cfg

启动之后如下图:

我们在另外一个控制台,使用curl向haproxy发起请求,控制台输出如下:

可见输出与我们的预期一致,说明haproxy完美的对两台WebServer进行了轮询负载均衡调用。

0x05 四层负载均衡测试方案

四层负载均衡测试方案如下:

  • 使用Echo服务做测试,EchoServer返回时带上本机的信息用作区分
  • 测试工具下载: EchoServer EchoClient
  • 编译EchoServer:g++ -g -o echoserver echoserver.cpp
  • 编译EchoClient:g++ -g -o echoclient echoclient.cpp
  • 我们在同一台服务器上部署两个EchoServer和一个HAProxy
  • EchoServerA监听192.168.0.45:5001端口,启动命令:./echoserver -p 5001 -s “EchoServerA@5001 "
  • EchoServerB监听192.168.0.45:5002端口,启动命令:./echoserver -p 5002 -s “EchoServerB@5002 "
  • HAProxy作为前端机,监听192.168.0.45:5000端口,HAProxy负载均衡算法采用轮询算法
  • 多次使用命令“./echoclient -h 192.168.0.45 -p 5000 -m hello” 向HAProxy发起调用请求
  • 成功标准:控制台依次轮流打印 EchoServerA@5001 hello,EchoServerB@5002 hello,EchoServerA@5001 hello,EchoServerB@5002 hello……

0x06 四层负载均衡测试

首先,我们定制四层负载均衡测试用的配置文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
global
    stats timeout 30s

defaults
    mode    tcp
    timeout connect 5000
    timeout client  50000
    timeout server  50000

frontend frontend_echoserver
    bind 192.168.0.45:5000
    mode tcp                            #必须指定tcp模式
    default_backend backend_echoserver

backend backend_echoserver
    mode tcp                            #必须指定tcp模式
    balance roundrobin
    server echoservera 192.168.0.45:5001 check
    server echoserverb 192.168.0.45:5002 check

将上述内容保存为 haproxy-4.cfg 文件( 右键另存为 )。然后使用如下命令启动HAProxy(启动haproxy之前,先启动EchoServer)。

1
$ ./haproxy -f ./haproxy-4.cfg

启动之后如下图:

我们在另外一个控制台,使用echoclient向haproxy发起请求,控制台输出如下:

可见输出与我们的预期一致,说明haproxy完美的对基于TCP协议的两台EchoServer进行了四层负载均衡轮询调用。

0x07 HAProxy自带监控统计页面

HAProxy自带一套系统统计和监控页面,详细记录了所管理的frontend、backend等信息,打开监控页面我们可以直观查看backend中各后台真实服务器的运行状态,HAProxy以不同的颜色来标识状态,运维人员可以直观快速发现问题。 该项功能对开发和运维人员来讲极为友善,我们看下如何开启该项功能。修改上述的配置文件,加入如下配置项:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
listen admin_stats
    stats   enable
    bind    *:8090
    mode    http
    option  httplog
    log     global
    maxconn 10
    stats   refresh 30s
    stats   uri /monitor
    stats   realm haproxy
    stats   auth admin:apassword
    stats   hide-version
    stats   admin if TRUE

将上述统计监控功能的配置项加入上文 haproxy.cfg 文件,保存为新文件 haproxy-stats.cfg。或者下载本测试配置文件( 右键另存为 )。

使用新的配置文件,重新启动HAProxy

1
./haproxy -f ./haproxy-stats.cfg

我们打开浏览器,输入监控网页地址:http://192.168.0.45:8090/monitor 。

该页面需要认证,账号和密码是配置项"stats auth admin:apassword"指定的,即账号为admin,密码为apassword。

输入账号和密码之后,打开的监控页面如下。

至于监控项及其含义,后续博文我们再做详细讲解。