一、HAProxy简介
HAProxy是一种免费的、非常快速且可靠的解决方案,它提供了高可用性、负载平衡和对TCP和基于http的应用程序的代理。它特别适用于非常高的流量网站,并为世界上访问量最大的网站提供了强大的力量。多年来,它已经成为事实上的标准的opensource负载平衡器,现在随大多数主流Linux发行版本一起发布,并且经常在云平台上默认部署。
代理的作用:web缓存(加速)、反向代理、内容路由(根据流量及内容类型等将请求转发至特定服务器)、转码器(将后端服务器的内容压缩后传输给client端)。
缓存的作用:减少冗余内容传输;节省带宽、缓解网络瓶颈;降低了对原始服务器的请求压力,降低了传输延迟。
说明:对于http协议的反向代理,并不提供缓存功能。
二、实现WEB服务器的负载均衡
1、简单架构图
2、测试环境(说明):
HAProxy:192.168.1.157
web1:192.168.1.110
web2:192.168.1.184
3、HAProxy服务器安装haproxy
yum -y install haproxy
echo "1111111" > /var/www/html/index.html
systemctl start httpd
4、web1和web2安装httpd
yum -y install httpd
echo "2222222" > /var/www/html/index.html
systemctl start httpd
5、配置HAProxy
vim /etc/haproxy/haproxy.cfg
修改前端和后端的配置如下:
frontend main 192.168.1.157:80
default_backend webserver
backend webserver
balance roundrobin
server web1 192.168.1.110:80 check
server web2 192.168.1.184:80 check
6、配置HAProxy访问记录日志
日志位置:/var/log/haproxy.log
编辑配置文件/etc/rsyslog.conf
加入如下内容:
$ModLoad imudp
$UDPServerRun 514
local2.* /var/log/haproxy.log
重启rsyslog进程
systemctl restart rsyslog
启动haproxy服务
systemctl start haproxy
7、测试环境是否健康
通过浏览器访问HAProxy
http://192.168.1.157
访问日志记录如下图:
三、实现MySQL从服务器的负载均衡
1、简单架构图
业务系统通常会采用MySQL一主多从模式设计,即1台 MySQL“主”服务器(Master)+多台“从”服务器(Slave),“从”服务器之间通过Haproxy进行负载均衡,对外只提供一个访问IP,当程序需要访问多台"从"服务器时,只需要访问Haproxy,再由Haproxy将请求分发到各个数据库节点。
2、测试环境(说明):
MySQL(Master):192.168.1.1
MySQL(Slave):192.168.1.2
MySQL(Slave):192.168.1.3
HAProxy:192.168.1.4
3、HAProxy服务器安装haproxy
yum -y install haproxy
4、三台服务器安装MySQL
这里略;
5、配置HAProxy
vim /etc/haproxy/haproxy.cfg
global
maxconn 4096
daemon
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
#debug
#quiet
user haproxy
group haproxy
defaults
log global
mode http
option httplog
option dontlognull
log 127.0.0.1 local0
retries 3
option redispatch
maxconn 2000
#contimeout 5000
#clitimeout 50000
#srvtimeout 50000
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
listen admin_stats 0.0.0.0:8888
mode http
stats uri /dbs
stats realm Global\ statistics
stats auth admin:admin
listen proxy-mysql 0.0.0.0:23306
mode tcp
balance roundrobin
option tcplog
option mysql-check user haproxy #在mysql中创建无任何权限用户haproxy,且无密码
server MySQL1 192.168.1.2:3306 check weight 1 maxconn 2000
server MySQL2 192.168.1.3:3306 check weight 1 maxconn 2000
option tcpka
注:listen admin_stats 0.0.0.0:8888 这个配置是监控页面,绑定到本机8888端口,账号admin,密码admin
6、配置HAProxy健康检查MySQL的账号
用户名为haproxy 且无密码(重要) 否则haproxy无法检测MySQL状态。
CREATE USER 'haproxy'@'%' IDENTIFIED BY '';
如果不能设置为空,则先设置一个密码,然后在数据的user表中 把密码(authentication_string)设置为空。然后别忘记flush privileges;
7、然后用MySQL的客户端连接工具连接haproxy:
IP:192.168.1.4
Port:23306
8、通过web的方式查看所有MySQL节点的使用情况
地址:http://192.168.1:8888/dbs
账号:admin
密码:admin
即可登录监控后台,如下图: