一、HAProxy简介

HAProxy是一种免费的、非常快速且可靠的解决方案,它提供了高可用性、负载平衡和对TCP和基于http的应用程序的代理。它特别适用于非常高的流量网站,并为世界上访问量最大的网站提供了强大的力量。多年来,它已经成为事实上的标准的opensource负载平衡器,现在随大多数主流Linux发行版本一起发布,并且经常在云平台上默认部署。

代理的作用:web缓存(加速)、反向代理、内容路由(根据流量及内容类型等将请求转发至特定服务器)、转码器(将后端服务器的内容压缩后传输给client端)。

缓存的作用:减少冗余内容传输;节省带宽、缓解网络瓶颈;降低了对原始服务器的请求压力,降低了传输延迟。

说明:对于http协议的反向代理,并不提供缓存功能。

二、实现WEB服务器的负载均衡

1、简单架构图

haproxy部署harbor haproxy详解_服务器


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

haproxy部署harbor haproxy详解_服务器_02

访问日志记录如下图:

haproxy部署harbor haproxy详解_html_03

三、实现MySQL从服务器的负载均衡

1、简单架构图

业务系统通常会采用MySQL一主多从模式设计,即1台 MySQL“主”服务器(Master)+多台“从”服务器(Slave),“从”服务器之间通过Haproxy进行负载均衡,对外只提供一个访问IP,当程序需要访问多台"从"服务器时,只需要访问Haproxy,再由Haproxy将请求分发到各个数据库节点。

haproxy部署harbor haproxy详解_MySQL_04

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

即可登录监控后台,如下图:

haproxy部署harbor haproxy详解_haproxy部署harbor_05