配置环境
我们有两个 Apache Web 服务器 webserver-01.onitroad.com 和 webserver-02.onitroad.com,
我们想为它们配置一个 HTTP 负载均衡器,例如:haproxy-01.onitroad.com。
主机名 | haproxy-01.onitroad.com | webserver-01.onitroad.com | webserver-02.onitroad.com |
---|---|---|---|
IP 地址 | 192.168.1.100/24 | 192.168.1.101/24 | 192.168.1.102/24 |
操作系统 | CentOS 7 | CentOS 7 | CentOS 7 |
Web Server | nginx | nginx |
负载平衡(Load balancing)是指在一组后端服务器(也称为服务器群或者服务器池)之间有效地分配传入网络流量。
负载平衡改善了跨多个计算资源的工作负载分布。
使用具有负载平衡的多个组件而不是单个组件可以通过冗余来提高可靠性和可用性。
负载均衡器是执行负载均衡的设备。
硬件和软件负载平衡器可能具有多种特殊功能。
负载均衡器的基本特性是能够根据调度算法将传入请求分发到集群中的多个后端服务器上。
在这篇文章中,我们将使用 HAProxy配置一个 HTTP 负载均衡器,以在两个 Web 服务器之间分配 HTTP 工作负载。
测试 HAProxy 配置
在浏览器中打开 haproxy-01.onitroad.com
我们可能会观察到 HTTP 请求已由 webserver-01.onitroad.com 提供服务。
它表明我们的负载均衡器已将请求转发到此服务器。
按 F5 刷新网页。
因为,我们已经在 HAProxy 中配置了循环负载均衡。
因此,它将下一个请求转发到另一台web服务器。
我们可以多次刷新网页查看转发情况。
查看HAProxy的详细统计信息。
浏览到 http://haproxy-01.onitroad.com/haproxy?stats 。
我们已经成功配置了一个带有 HAProxy 的 HTTP 负载均衡器。
在 CentOS 7 上配置 HAProxy
首先使用浏览器打开两个web服务器的web页面。
http://webserver-01.onitroad.com
http://webserver-02.onitroad.com
确保我们的网络服务器配置正确且可浏览。
当我们使用负载平衡器访问时,我在两台服务器上设置了不同的页index,以区分服务器。
登录到 haproxy-01.onitroad.com 并安装 HAProxy。
[root@haproxy-01 ~]# yum install -y haproxy
HAProxy 已安装。
现在配置 rsyslog 来处理 HAProxy 日志。
[root@haproxy-01 ~]# vi /etc/rsyslog.conf
搜索并取消注释以下行。
$ModLoad imudp $UDPServerRun 514
在同一文件中添加以下指令。
# HAProxy Logging local2.* /var/log/haproxy.log
保存设置并退出。
重新启动 rsyslog 服务使更改生效。
[root@haproxy-01 ~]# systemctl restart rsyslog.service
现在根据我们的环境配置 HAProxy 设置。
[root@haproxy-01 ~]# vi /etc/haproxy/haproxy.cfg
在此文件中添加以下指令。
# HAProxy Load Balancer for Apache Web Server frontend http-balancer bind 192.168.1.100:80 default_backend web-servers backend web-servers mode http balance roundrobin stats enable stats auth admin:123 server webserver-01 192.168.1.101:80 check server webserver-02 192.168.1.102:80 check
保存设置并退出。
启动并启用 haproxy 服务。
[root@haproxy-01 ~]# systemctl start haproxy ; systemctl enable haproxy ln -s '/usr/lib/systemd/system/haproxy.service' '/etc/systemd/system/multi-user.target.wants/haproxy.service'
允许 HTTP 服务通过 Linux 防火墙。
[root@haproxy-01 ~]# firewall-cmd --permanent --add-service=http success [root@haproxy-01 ~]# firewall-cmd --reload success