一.负载均衡
1.1什么是负载均衡?
负载均衡:Load Balance,简称LB,是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均 衡将特定的业务(web服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从而提高了 公司业务的并发处理能力、保证了业务的高可用性、方便了业务后期的水平动态扩展
1.2为什么要用到负载均衡?
1. Web服务器的动态水平扩展-->对用户无感知
2.增加业务并发访问及处理能力-->解决单服务器瓶颈问题
3.节约公网IP地址-->降低IT支出成本
4.隐藏内部服务器IP-->提高内部服务器安全性
5.配置简单-->固定格式的配置文件
6.功能丰富-->支持四层和七层,支持动态下线主机
7.性能较强-->并发数万甚至数十万
1.3负载均衡的类型都有哪些?
1.3.1四层负载均衡
1.通过ip+port决定负载均衡的去向。
2.对流量请求进行NAT处理,转发至后台服务器。
3.记录tcp、udp流量分别是由哪台服务器处理,后续该请求连接的流量都通过该服务器处理。
4.支持四层的软件
lvs:重量级四层负载均衡器。
Nginx:轻量级四层负载均衡器,可缓存。(nginx四层是通过upstream模块)
Haproxy:模拟四层转发。
1.3.2七层负载均衡
1.通过虚拟ur|或主机ip进行流量识别,根据应用层信息进行解析,决定是否需要进行负载均衡。
2.代理后台服务器与客户端建立连接,如nginx可代理前后端,与前端客户端tcp连接,与后端服务器建立 tcp连接,。
3.支持7层代理的软件:
Nginx:基于http协议(nginx七层是通过proxy_pass)
Haproxy:七层代理,会话保持、标记、路径转移等。
二.什么是HAproxy?
HAProxy是法国开发者 威利塔罗(Willy Tarreau) 在2000年使用C语言开发的一个开源软件 是一款具备高并发(万级以上)、高性能的TCP和HTTP负载均衡器 支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计
三.haproxy的安装以及功能hap
3.1实验环境:
功能 | IP |
---|---|
haproxy | eth0:172.25.254.128/24 |
server1 | eth0:172.25.254.40/24 |
server2 | eth0:172.25.254.50/24 |
3.2haproxy实验环境部署以及负载均衡的实现(注:均基于rehat9.4,每台虚拟机都用的NAT模式,每台虚拟机的防火墙,selinux是否关闭):
1.两台服务器下载nginx服务
2.添加两台服务器nginx的页面访问内容
3.两台服务器均启用nginx服务
4.在除上面两台主机外的主机上安装haproxy服务
5.修改/etc/haproxy/haproxy.cfg配置文件并重启haproxy服务:
vim /etc/haproxy/haproxy.cfg
systemctl restart haproxy.cfg
或者配置文件以下面的格式写也可以
6.在haproxy主机上验证是否可以访问两台服务器的nginx(每台虚拟机的本地解析是否配置:vim /etc/hosts ,格式IP 主机名)
3.3设置haproxy设置多进程与多线程:
1.图中第一个命令查看进程数量:
2.修改haproxy.cfg配置文件保存退出并重启服务:
3.再次查看进程数量:
4.查看线程数量:
5.设置线程数量为2:
6.图中第二个命令再次查看线程数量:
3.4自定义haproxy日志:
1.查看haproxy.cfg配置文件中全局中log名字为local2:
2.编辑rsyslog.conf配置文件:
3.重启服务:
4.执行重启haproxy服务命令可以看到生成了haproxy.log日志:
3.5Proxies配置:
3.5.1Proxies配置-defaults:
3.5.2Proxies配置-frontend
3.5.3Proxies配置-backend
3.5.4重定向网页实例:
1.修改配置文件:
2.输入IP地址:
3.发现访问到的网站是百度:
3.6 socat工具热处理haproxy:
1.查看server1权重:
2.修改权重server1权重:
3.检测权重是否生效,连接server1次数多,权重修改生效:
4.停用server1服务器:
5.启用server1服务器:
6.socat热处理多进程,对haproxy.cfg添加以下参数
7.成功生成stats1,stats2.
3.7haproxy算法:
3.7.1静态算法:
1.static-rr基于权重的轮询调度算法(编辑haproxy.cfg文件,该算法不支持socat热处理):
2.first算法(该算法不支持socat热处理):
3.7.2动态算法:
1.roundrobin算法(该算法支持socat热处理):
2.leastconn算法(该算法支持socat热处理):
3.7.3可调算法:
1.source算法:
2.map-base取模法:
3.hdr算法:
4.uri算法:
访问结果:(注:第一次访问index1的是40后面都会是40,其它同理)
5.url_param算法
3.7.3上诉的可调算法其实都用到了一个很重要的算法,一致性hash算法,它将上诉这些可调算法中的静态算法改变成动态算法,使它们能够支持socat热处理。下面使关于一致性hash的内容图片:
3.7.4 算法总结:
3.8基于cookie的会话保持:
3.8.1cookie定义及参数:
3.8.2实验步骤:
1.修改haproxy.cfg文件:
2.通过服务器的cookie名访问到指定服务器:
3.通过加-i参数可以看到cookie名,判断访问的使哪一个服务器:
3.9HAProxy状态页:
1.修改haproxy.cfg文件,图中第二行的端口bind也可自己设置,我这里是允许所有主机都可以访问7777端口;图中白色区域最后一行是一会儿访问网站时要用到的登录用户名和密码,可自己设置:
2.访问172.25.254.128/status网站:
补充,也可以把参数加入到haproxy子配置文件生成状态页:
3.10IP透传:
3.10.1四层IP透传:
1.没有开启透传前查看/etc/nginx/nginx.conf:
看不到访问服务器的源ip地址
2.开启透传:
添加以下白色区域内容给server1开启四层ip透传并重启服务
给/etc/nginx/nginx.conf添加以下内容并重启nginx服务
3.开启后可看到访问服务器客户端的源ip地址:
3.10.2七层IP透传:
1.修改haproxy.cfg配置文件,开启七层IP透传:
这一行必须开启,如果注释了七层IP透传则关闭
2.实验结果:
3.11 ACL访问控制列表:
3.11.1多个ACL的组合调用方式:
3.11.1.1基于域名的访问:
1.修改haproxy.conf
全域名访问设置
后缀域名访问设置
前缀域名访问设置
2.修改windows的hosts文件,路径为C:\Windows\System32\drivers\etc:
3.输入域名,访问成功:
3.11.1.2基于网段的访问:
1.
2.访问成功:
3.拒绝访问指定的服务器:
4.拒绝成功,访问失败:
3.11.1.2.基于浏览器的访问:
1.
2.虚拟机本地curl命令无法访问:
3.curl命令外的浏览器可以访问
3.11.1.3动静分离访问
1.server1下载一个apache的http服务,把原来的nginx停用,然后下载php,再启动httpd服务,最后在/var/www/html下创建文件index.php动态网站:
2.server2上创建静态页面:
3.修改haproxy.cfg文件
4.访问静态和动态页面成功:
3.11.2自定义HAproxy错误页面:
3.11.2.1自定义错误页面:
1.关闭server1和server2的nginx服务:
2.在/etc/haproxy/创建目录errorpage并复制/usr/share/haproxy/503.http到这个目录下:
3. 查看503.http内容 :
4.修改haproxy.cfg文件,添加白色区域内容:
5.访问到自定义错误页面,实验成功:
3.11.2.2自定义错误重定向:
1.修改haproxy.cfg,在和上面相同的地方加入最后一条配置并重启服务:
2.输入IP地址:
3.发现访问到了百度:
3.11.3HAproxy四层负载:
1.先在两台server服务器上下载mariadb数据库,然后再修改vim /etc/my.cnf文件,修改server-id,然后启动mariadb服务:
2.分别进入两个服务器的数据库:
3.修改haproxy.cfg文件,添加白色区域内容:
4. 用server1可以进入server2数据库,用server2可以进入server1数据库,haproxy可以进入两台服务器的数据库,负载成功。
3.11.4HAproxy实现https:
3.11.4.1设置不加密的https访问:
1.把server1的nginx服务关闭启用http服务,创建一个承载密钥的目录:
2.生成密钥并将生成的密钥导入jm.pem文件中:
3.检查haproxy是否开启443端口:
4.访问成功:
3.11.4.2设置全站加密的https访问:
1.修改haproxy.cfg,添加白色区域内容:
2.再次访问,全站加密成功: