haproxy搭建负载均衡
一、haproxy部署LB集群
1、haproxy介绍
-
支持四层和七层的负载均衡
-
支持acl功能,访问控制
-
支持图形化监控
-
多种调度算法
2、算法介绍
3、主配置文件
4、haproxy部署LB实验
1、环境准备
- 四台网站服务器,一个代理服务器
# 61 62 63 64
# 代理服务器 80
- 四个网站服务器编辑网站页面
2、proxy服务器配置
[root@proxy haproxy]# yum -y install haproxy.x86_64
[root@proxy haproxy]# cat haproxy.cfg
#---------------------------------------------------------------------
# Example configuration for a possible web application. See the
# full configuration options online.
#
# https://www.haproxy.org/download/1.8/doc/configuration.txt
#
#---------------------------------------------------------------------
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
user haproxy
group haproxy
daemon
maxconn 4000
defaults
mode http
log global
option httplog
option dontlognull
retries 3
timeout http-request 5s
timeout queue 1m
timeout connect 5s
timeout client 1m
timeout server 1m
timeout http-keep-alive 5s
timeout check 5s
maxconn 3000
frontend main
bind *:80
default_backend http_back
backend http_back
balance roundrobin
server node1 127.0.0.1:5001 check
server node2 127.0.0.1:5002 check
server node3 127.0.0.1:5003 check
server node4 127.0.0.1:5004 check(做健康检查,default里面有配置的)
[root@proxy haproxy]#
- 具体的参数
frontend main # haproxy的名字,可以修改
bind *:80 # 监听后端服务器的端口都是80
default_backend http_back # 监听到了请求,将请求发送给这个http_back工作组
backend http_back # 配置网站服务器工作组
balance roundrobin # 调度算法,轮询
server node1(网站服务器起的名字) 127.0.0.1:5001 check
server node2 127.0.0.1:5002 check
server node3 127.0.0.1:5003 check
server node4 127.0.0.1:5004 check
- 修改好的配置文件
frontend main
bind *:80
default_backend http_back
backend http_back
balance roundrobin
server node1 192.168.200.61:80 check
server node2 192.168.200.62:80 check
server node3 192.168.200.63:80 check
server node4 192.168.200.64:80 check
- 启动服务
[root@proxy haproxy]# systemctl restart haproxy.service
[root@proxy haproxy]# netstat -pant|grep haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2563/haproxy
3、客户端测试
-
访问代理服务器
-
80主机上面的80端口,读取自己的配置文件,然后发送给http_back这个服务器组
-
也就是分发给后台的服务器
[root@proxy haproxy]# curl 192.168.200.80
63
[root@proxy haproxy]# curl 192.168.200.80
64
[root@proxy haproxy]# curl 192.168.200.80
61
[root@proxy haproxy]# curl 192.168.200.80
62
5、haproxy通过acl实现业务分离
-
把客户端的请求发送给后端不同的服务器组做负载均衡处理
-
四台服务器分成2个工作组
-
访问html请求由61,62处理
-
访问.php(动态请求)交给63,64处理
-
因此就需要配置不同的页面
-
可以控制请求访问到指定的服务器,静态的页面访问指定服务器,动态请求访问指定服务器
1、配置nginx解析php脚本
# 停止 63 64 apache服务
# 配置63,64 nginx网站
# 实现对php脚本解析
# 允许访问index.php
location / {
root html;
index index.php index.html index.htm;
}
# 取消注释
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}
# 64服务器也是这样配置的
# 安装软件包
[root@httpd-63 yum.repos.d]# yum -y install php php-devel php-fpm
# 修改这个文件下的监听的方式,改为监听9000端口
[root@httpd-63 php-fpm.d]# pwd
/etc/php-fpm.d
38 ;listen = /run/php-fpm/www.sock
39 listen = 127.0.0.1:9000
# 启动php-fpm服务
[root@httpd-63 php-fpm.d]# netstat -pant|grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 3748/php-fpm: maste
# 编写php页面
[root@httpd-63 html]# pwd
/usr/share/nginx/html
[root@httpd-63 html]# cat index.php
<?php
echo "192.168.200.63\n";
?>
# 64也是这样的
2、编写网站页面
# 61 62 服务器配置除了首页文件之外的a.html
# 但是内容不一样
[root@httpd-62 html]# cat a.html
62 a
# 63 64 服务器配置其他的.php页面
[root@httpd-63 html]# cat a.php
<?php
echo "63 a \n";
?>
3、haproxy配置acl
- 当有多个acl的时候,通过名字来进行区分
frontend main
bind *:80
default_backend http_back
acl htmlpage(取的名字) path_end(基于文件后缀来进行匹配) .html (匹配的.html页面)
acl phppage path_end .php
use_backend htmlweb if htmlpage # 匹配到了htmlpage的请求的话,转发给 htmlweb这个服务器组
use_backend phpweb if phppage
# curl localhost 的请求转发给 61 62 服务器
backend http_back
balance roundrobin
server node1 192.168.200.61:80 check
server node2 192.168.200.62:80 check
# curl localhost/a.html 请求转发给 61 62 服务器
backend htmlweb
balance roundrobin
server node1 192.168.200.61:80 check
server node2 192.168.200.62:80 check
# curl localhost/a.php 请求转发给 63 64 服务器
backend phpweb
balance roundrobin
server node3 192.168.200.63:80 check
server node4 192.168.200.64:80 check
4、客户端测试
[root@proxy haproxy]# curl localhost
61
[root@proxy haproxy]# curl localhost
62
[root@proxy haproxy]# curl localhost/a.html
61 a
[root@proxy haproxy]# curl localhost/a.html
62 a
[root@proxy haproxy]# curl localhost/a.php
64 a
[root@proxy haproxy]# curl localhost/a.php
63 a
5、要点
-
acl有多个匹配规则,上面的path_end是根据文件名后缀来进行匹配的
-
还有基于以下的方式
-
基于 IP 地址的 ACL
-
基于 URL 路径的 ACL
-
基于端口的 ACL
-
基于请求头的 ACL
-
等等
-
二、启动haproxy的web页面
-
修改配置文件,就能看到这个软件提供的web页面
-
就是一个健康页面,可以看到访问的次数等等
-
用的listen定义的端口
# 在最下面写即可
listen monitor_page
bind 0.0.0.0:8088 # 监听的端口
mode http
stats refresh 5s # 几秒刷新页面
stats uri /stats
stats auth admin:123456
# 重启haproxy服务
- 浏览器访问
192.168.200.80:8088/stats

-
可以仔细观察里面的颜色,不同的颜色代表不同的状态
-
停掉一个61服务,发现变成了红色了


浙公网安备 33010602011771号