目录
1.四层负载均衡:
2.七层负载均衡:
3. 四层和七层的区别
4.HAProxy的安装和服务信息
4.1 实验环境
主机名 | haproxy.lab.example.com | webserver1.lab.example.com | webserver2.lab.exampe.com |
IP | 192.168.0.100/24 | 192.168.0.10/24 | 192.168.0.20/24 |
网卡 | eth0 | eth0 | eth0 |
4.2 软件安装
webserver1和webserver2都装nginx:
启动服务、关防火墙:
在haproxy上下载haproxy:
4.3 haproxy的基本配置信息
此时可访问:
但如果:
此时再curl:
可发现效果一样。
4.3.1 多进程和线程
一个进程:
多个进程:
查看线程数量:
多线程参数和多进程参数是互斥的,不能同时使用。
同时使用会报错:
生成日志文件:
# vim /etc/rsyslog.conf
#vim /etc/haproxy/haproxy.cfg
成功~
注意:要先重启rsyslog.service,再重启haproxy!
4.4 proxies配置
4.4.1defaults:
dontlognull:空连接
http-keep-alive:保持长对话
timeout http-request:等待客户端请求完全被接收和处理的最长时间
timeout- queue:设置删除连接和客户端不可用服务提示的等待时间
timeout check:后端服务器健康检查的超级时间
改端口号:
echo "sorry 下班了" > /var/www/html/index.html
4.4.2 backup:
4.4.3 disable:
此时webserver1就下线了。
#systemctl restart nginx
此时去浏览器输入:172.25.254.100 出来的是www.baidu.com
webserver1和webserver2测试:
#while true; do curl 172.25.254.100;done
4.5 socket
可以看见权限:
设置、查看权重:
测试:
5.haproxy的算法
5.1 静态算法
5.1.1 static-rr:基于权重的轮询调度
成功。
5.1.2 first
5.2 动态算法
5.2.1 roundrobin
5.2.2 leastconn
5.3 其他算法
5.3.1 source
5.3.2 hash
5.3.3 uri
6. HAProxy状态页
6.1 状态页配置项
stats enable # 基于默认的参数启用 stats pagestats hide-version # 将状态页中 haproxy 版本隐藏stats refresh <delay> # 设定自动刷新时间间隔,默认不自动刷新stats uri <prefix> # 自定义 stats page uri ,默认值: /haproxy?statsstats auth <user>:<passwd> # 认证时的账号和密码,可定义多个用户 , 每行指定一个用户# 默认: no authenticationstats admin { if | unless } <cond> # 启用 stats page 中的管理功能
6.2 启用状态页
7.cookie
浏览器访问:
8. IP透传
8.1七层透传
不透传时:
透传重要参数:forwardfor
当没有这个参数时:
重启服务后:
当有这个参数时:
[root @webserver1 ~]# cat /etc/httpd/logs/access_log
8.2 四层透传
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
做设定:
重启服务后:
因为是直接处理的流量,所以被拒绝了。
或者:
此时添加一个参数:
装apache的手册:
9.ACL(访问控制技术)
看数据报文:
#curl -v 192.168.0.100
演示
要做本地解析:
9.1.1以什么结尾:
[root @haproxy ~]# vim /etc/haproxy/haproxy.cfg
9.1.2 以什么开头:
9.2 ACL-operator 具体操作符
整数比较: eq 、 ge 、 gt 、 le 、 lt字符比较:- exact match (-m str) : 字符串必须完全匹配模式- substring match (-m sub) : 在提取的字符串中查找模式,如果其中任何一个被发现, ACL 将匹配- prefix match (-m beg) : 在提取的字符串首部中查找模式,如果其中任何一个被发现, ACL 将匹配- suffix match (-m end) : 将模式与提取字符串的尾部进行比较,如果其中任何一个匹配,则 ACL 进行 匹配- subdir match (-m dir) : 查看提取出来的用斜线分隔( “/" )的字符串,如其中任一个匹配,则 ACL 进行匹配- domain match (-m dom) : 查找提取的用点( “." )分隔字符串,如果其中任何一个匹配,则 ACL 进行匹配
9.2.1 end
9.2.2 base
9.2.3 path
9.2.4基于域名匹配====
9.2.5基于IP匹配====
拒绝:
9.2.6基于源地址访问====
浏览器类型====
====
[root@webserver1 ~]# dnf install php -y
[root@webserver1 ~]# systemctl restart httpd
[root@webserver1 ~]# vim /var/www/html/index.php<?php
phpinfo();
?>
9.2.7基于文件后缀动静分离====
9.2.8基于访问路径====
[root@webserver2 ~]# mkdir /usr/share/nginx/html/static -p
[root@webserver2 ~]# echo static - 192.168.0.20 > /usr/share/nginx/html/static/index.html
[root@webserver1 ~]# mkdir -p /var/www/html/php
[root@webserver1 ~]# cp /var/www/html/index.php /var/www/html/php/
====
listen stats
mode http
bind 0.0.0.0:9999
stats enable
stats refresh 3
stats uri /status
stats auth huola:huolafrontend webcluster
bind *:80
mode http
acl static path_sub -m sub static
acl php path_sub -m sub php##########################################
use_backend webcluster-host if php
default_backend default-host
backend webcluster-host
mode http
server web1 192.168.0.10:80 check inter 2 fall 2 rise 5backend default-host
mode http
server web2 192.168.0.20:80 check inter 2 fall 2 rise 5[root@haproxy ~]# systemctl restart haproxy.service
不同路径访问的不同的网站。
9.2.9基于自定义的错误页面文件====
9.2.9.1 errorfile====
获取一下:
可以看见:
演示:
[root@haproxy ~]# cat /etc/haproxy/errorpage/badpage.http
HTTP/1.0 503 Service Unavaliable
Cache-Control: no-cache
Connection: close
Content-Type: text/html;charset=UTF-8<html><body><h1>什么动物生气最安静</h1>
男人!!!
</body></html>
[root@haproxy ~]# systemctl restart haproxy.service
[root@haproxy ~]# systemctl restart httpd
9.2.9.2 errorloc====
[root@haproxy ~]# systemctl restart haproxy.service
10.HAProxy四层负载
[root@webserver1 ~]# dnf install mariadb-server -y
[root@webserver2 ~]# dnf install mariadb-server -y
当id=1:
[root@webserver1 ~]# systemctl start mariadb
当id=2:
[root@webserver2 ~]# systemctl start mariadb
webserver1:
webserver2:
haproxy:
查看:
11.HAProxy http加密访问(制作证书和密钥)
证书已完成。
key🆗啦~
查看密钥:
改配置参数:
[root@haproxy ~]# systemctl restart haproxy.service
12.全站加密
全局配置:
[root@haproxy ~]# vim /lib/systemd/system/haproxy.service
可以看到指定了三个变量:
状态页:
所以在子配置文件也生效。