1.HAProxy简介
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会
话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy优缺点
优点: 1.支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机; 2.支持Session的保持,Cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。能够补充Nginx的一些缺点。 3.HAProxy跟LVS类似,本身就只是一款负载均衡软件;单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。 4.HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。 5.HAProxy负载均衡策略非常多,比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash) 6.免费开源,稳定性也是非常好,可以与LVS相媲美; 7.自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警;
缺点: 1.不支持POP/SMTP协议 SPDY协议; 2.不能做Web服务器,即不支持HTTP cache功能; 3.重载配置的功能需要重启进程,虽然也是soft restart,但没有Nginx的reaload更为平滑和友好; 4.多进程模式支持不够好;
4层负载均衡
将网络流量负载平衡到多个服务器的最简单方法是使用第4层(传输层)负载平衡。以这种方式进行负载均衡将根据IP范围和端口转发用户流量。用户访问负载均衡器,负载均衡器将用户的请求转发给后端服务器的Web后端组。无论选择哪个后端服务器,都将直接响应用户的请求。通常,Web后端中的所有服务器应该提供相同的内容 - 否则用户可能会收到不一致的内容。
7层负载均衡
7层负载均衡是更复杂的负载均衡。网络流量使用第7层(应用层)负载均衡,允许负载均衡器根据用户请求的内容将请求转发到不同的后端服务器。这种负载平衡模式允许在同一域和端口下运行多个Web应用程序服务器。
Haproxy特点
支持TCP与Http协议,工作在网络4层和7层 支持Session共享、Cookies引导 支持通过URL健康检测 支持8种负载均衡策略 支持心跳检测
Nginx特点
支持Http协议,工作在网络7层 支持通过端口健康检测 支持强大的正则匹配规则 支持WebSocket协议 支持Http Cache
说明:对于Http协议,Haproxy处理效率比Nginx高。所以,没有特殊要求的时候或者一般场景,建议使用Haproxy来做Http协议负载!但如果是Web,那么建议使用Nginx!
2.HAProxy工作原理
HAProxy有前端(frontend)和后端(backend),前端和后端都可以有多个,也可以只有一个listen块来同时实现前端和后端。 前端(frontend)区域可以根据HTTP请求的header信息来定义一些规则,然后将符合某规则的请求转发到相应后端(backend)进行处理。因此HAProxy可以实现动静分离(动静分离简单来说就是指将静态请求转发到对应的静态资源服务器,将动态请求转发到动态资源服务器),我们上篇说过的LVS就没有此功能
3.实现HAProxy负载均衡
1.配置部署haproxy和设置身份验证
?
stats uri /status????????????????????? ? ? ???? #设置统计页面的uri为/status
stats auth admin:westos??????????????? #身份验证用户名密码 frontend main *:80?????????????????? ??? ? #监听地址为80 default_backend? app?????????????? ??? #默认的请求转发地址,名为app backend app?????????????????????? ? ? ? ?? #定义一个名为app的后端部分,需要与frontend的配置项default_backend 值相一致,算法为轮询,将动态请求转到以下两台服务器的任意一台 server app1 172.25.33.2:80 check???? #定义的多个后端 server app2 172.25.33.3:80 check???? #定义的多个后端
?
?
?
?
?
?
?
?
?
2.自定义路由监控器
自定义设置符合条件的url监控,并把请求转发到指定服务器
当访问路径以/static /images等开头,以.jpg .gif等结尾时,跳入backend static模块,由该模块内server提供服务
?
?
?
?如果图片在浏览器中访问不到有可能是权限不够
?3.指定日志存放
?
?
systemctl restart rsyslog.service systemctl start haproxy.service
?
避免产生两次日志,增加负担
4.自定义路由监控器
?把来自172.25.134.250的访问拒绝
?
?添加错误代码,把相应错误代码转发至其他路径
?
?
5. 访问重定向 ?
?
?
6.读写分离
?
?把2作为只读服务器,提供页面
?把server3作为存储服务器,在server3的httpd服务中创建上传页面,并赋予写入权限
?
?
设置文件大小限制
?
?
?
?
?在server3中也给upload777权限
?
上传后文件到server3中,server2为空
?
4.HAProxy高可用
?
?
?
?
?
?server1生成免密操作密钥,发送给server4
?
?配置软件仓库,安装高可用插件
?将server1的仓库配置文件发送给server4
?安装高可用插件
?开启server1和server4的pcsd服务
?修改server1和server4的hacluster认证密码,然后认证
?
?认证
?
?设定集群的名称为mycluster,集群内有server1和server4两个设备
?
?启动集群内所有服务节点
?
验证配置,出现报错,这个因为没有Fencing设备时,没有禁用stonith功能
?禁用功能
crm_mon是监控集群状态的主要命令crm status是一样的效果
?
?
??
?访问网页172.25.134.1/status可以查看到状态,查看端口可以显示80端口被监听
?配置集群管理VIP
设定VIP,查看状态显示获取到了VIP信息
关闭server1、server4的haproxy服务
?
?
?将haproxy 添加到集群管理
?查看状态发现vip运行在server1节点,haproxy运行在server4节点
?将vip和haproxy 放入同一个组中解决不同步的问题
pcs status?
?手动删除vip,查看集群运行状态,运行出现了错误和警告
?
?VIP自动添加
?关闭server1的haproxy
?
节点自动切换
?
设置集群节点为备用节点,以及重新上线
?
?节点自动切换
?5.防止脑裂
Fence主要作用是防止两个系统同时向资源写数据 破坏资源的安全性和一致性从而导致脑裂
?真实主机安装fence插件
?建立fence_xvm.key的存放目录
?
?配置fence,只有在网桥的时候选择br0接口,其余回车即可)
?
?
?
?
?
?
?
?此处可以看到之后要生成的fence_xvm.key文件的存放位置
?
?生成fence_xvm.key文件
?
?
?
?关闭火墙
?将生成的密钥文件发送给server1、server4
?
?
?在server1、server4安装客户端fence
?查询fence设备
?
?
?
?查询fence设备的元数据
?
?
?在server1将server1、server4节点添加到fence
#server1:y1(主机名:虚拟机名)
?以看到haproxy和vip在server1,fence运行在server4
?关闭server1网卡
?
?成功切换
?
?让系统崩溃,执行后主机断点重启
server1接管
?
?
?
|