一、Haproxy介绍
HAProxy是一个特别适用于高可用性环境的TCP/HTTP开源的反向代理和负载均衡软件。实现了一种事件驱动,单一进程模型,支持非常大的并发连接,是因为事件驱动模型有更好的资源和时间管理的用户端(user-space)实现这些业务
在7层负载均衡方面的功能很强大(支持cookie track, header rewrite等等)
支持双机热备
支持虚拟主机
支持健康检查
同时还提供直观的监控页面,可以清晰实时的监控服务集群的运行状况。
同时支持Linux 2.6内核中System Epoll,通过简化系统调用,大幅的提高了网络I/O性能。
二、HAProxy配置
HAProxy的配置过程分为3个主要部分:
命令行参数,这是最优先的;
global(全局)段,设置进程级参数;
代理配置段,通常位于default,listen,backend这样的形式内。
配置文件的语法是由关键字后跟可选的一个或者多个参数(参数之间有空格)组成。如果字符串中包含空格,必须用’\’进行转义。
HAProxy配置中分五大部分:
global:全局配置参数,进程级的,用来控制Haproxy启动前的一些进程及系统设置
defaults:配置一些默认的参数,可以被frontend,backend,listen段继承使用
frontend:用来匹配接收客户所请求的域名,uri等,并针对不同的匹配,做不同的请求处理
backend:定义后端服务器集群,以及对后端服务器的一些权重、队列、连接数等选项的设置,我将其理解为Nginx中的upstream块
listen:可以理解为frontend和backend的组合体
Haproxy配置文件的配置方法主要有两种,一种是由前端(frontend)和后端(backend)配置块组成,前端和后端都可以有多个。第二种方法是只有一个listen配置块来同时实现前端和后端。最常用也是推荐的方法为第一种,即frontend和backend的模式。
三、使用haproxy实现反向代理和负载均衡
实验准备
此实验需要三台虚拟机:
主机名 ip 说明
server1 172.25.63.1 反向代理务服务器
server2 172.25.63.2 后端服务器(real server)
server3 172.25.63.3 后端服务器(real server)
同时物理机(ip 172.25.63.250)作为客户端
1.配置反向代理务服务器
安装haproxy
[root@server1 ~]# yum install haproxy -y
修改配置文件:
将不使用的 frontend和backend模块注释掉,并加入listen模块:
[root@server1 ~]# vim /etc/haproxy/haproxy.cfg
87 listen admin *:8080
88 stats enable
89 stats uri /status #监控页面地址
90 stats auth admin:westos #管理帐号和密码
91 stats refresh 5s #刷新频率
92
93 listen westos *:80 #监听的实例名称,地址和端口
94 balance roundrobin #负载均衡算法
95 server web1 172.25.63.2:80 check
96 server web2 172.25.63.3:80 check
[root@server1 ~]# systemctl start haproxy.service #启动服务
2.配置后端服务器(Apache)
[root@server2 ~]# yum install httpd -y
[root@server2 ~]# cd /var/www/html/
[root@server2 html]# vim index.html
server2 #server3中测试文件内容为server3
[root@server2 html]# systemctl start httpd
server3与server2相同的操作
3.测试
在客户端浏览器访问http://172.25.63.1:8080/status会提示输入密码,输入在配置文件中编辑的管理帐号和密码后即可进入实现后端服务器的管理:
说明haproxy配置成功,接下来测试负载均衡:
在客户端:
[root@foundation63 ~]# curl 172.25.63.1
server2
[root@foundation63 ~]# curl 172.25.63.1
server3
[root@foundation63 ~]# curl 172.25.63.1
server2
[root@foundation63 ~]# curl 172.25.63.1
server3
[root@foundation63 ~]# curl 172.25.63.1
server2
四、为haproxy生成日志文件
[root@server1 ~]# vim /etc/rsyslog.conf
15 $ModLoad imudp
16 $UDPServerRun 514 #打开udp的端口
55 local2.* /var/log/haproxy #编辑日志记录策略
[root@server1 ~]# systemctl restart rsyslog.service
[root@server1 ~]# cat /var/log/haproxy #查看日志文件
Mar 8 15:27:07 localhost haproxy[2167]: 172.25.63.250:38012 [08/Mar/2020:15:27:01.816] admin admin/<STATS> 5311/0/0/0/5311 200 17628 - - LR-- 1/1/0/0/0 0/0 "GET /status HTTP/1.1"