linux|Linux企业化运维--8.haproxy

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和设置身份验证
linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

stats uri /status#设置统计页面的uri为/status
stats auth admin:westos#身份验证用户名密码
frontend main *:80#监听地址为80
default_backendapp#默认的请求转发地址,名为app
backend app#定义一个名为app的后端部分,需要与frontend的配置项default_backend 值相一致,算法为轮询,将动态请求转到以下两台服务器的任意一台
server app1 172.25.33.2:80 check#定义的多个后端
server app2 172.25.33.3:80 check#定义的多个后端
linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片
linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

2.自定义路由监控器
自定义设置符合条件的url监控,并把请求转发到指定服务器
当访问路径以/static /images等开头,以.jpg .gif等结尾时,跳入backend static模块,由该模块内server提供服务
linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片


如果图片在浏览器中访问不到有可能是权限不够
3.指定日志存放
linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

systemctl restart rsyslog.service
systemctl start haproxy.service
linux|Linux企业化运维--8.haproxy
文章图片

避免产生两次日志,增加负担 linux|Linux企业化运维--8.haproxy
文章图片

4.自定义路由监控器
linux|Linux企业化运维--8.haproxy
文章图片

把来自172.25.134.250的访问拒绝linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

添加错误代码,把相应错误代码转发至其他路径
linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

5. 访问重定向

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

6.读写分离
linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

把2作为只读服务器,提供页面linux|Linux企业化运维--8.haproxy
文章图片

把server3作为存储服务器,在server3的httpd服务中创建上传页面,并赋予写入权限linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

设置文件大小限制
linux|Linux企业化运维--8.haproxy
文章图片


linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

在server3中也给upload777权限
linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

上传后文件到server3中,server2为空
linux|Linux企业化运维--8.haproxy
文章图片
4.HAProxy高可用
linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

server1生成免密操作密钥,发送给server4
linux|Linux企业化运维--8.haproxy
文章图片

配置软件仓库,安装高可用插件linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片
将server1的仓库配置文件发送给server4
安装高可用插件linux|Linux企业化运维--8.haproxy
文章图片

开启server1和server4的pcsd服务
linux|Linux企业化运维--8.haproxy
文章图片

修改server1和server4的hacluster认证密码,然后认证linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

认证
linux|Linux企业化运维--8.haproxy
文章图片

设定集群的名称为mycluster,集群内有server1和server4两个设备linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

启动集群内所有服务节点
linux|Linux企业化运维--8.haproxy
文章图片

验证配置,出现报错,这个因为没有Fencing设备时,没有禁用stonith功能
【linux|Linux企业化运维--8.haproxy】 禁用功能linux|Linux企业化运维--8.haproxy
文章图片

crm_mon是监控集群状态的主要命令crm status是一样的效果
linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

访问网页172.25.134.1/status可以查看到状态,查看端口可以显示80端口被监听
配置集群管理VIP
设定VIP,查看状态显示获取到了VIP信息
linux|Linux企业化运维--8.haproxy
文章图片

关闭server1、server4的haproxy服务
linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

将haproxy 添加到集群管理linux|Linux企业化运维--8.haproxy
文章图片

查看状态发现vip运行在server1节点,haproxy运行在server4节点linux|Linux企业化运维--8.haproxy
文章图片

将vip和haproxy 放入同一个组中解决不同步的问题linux|Linux企业化运维--8.haproxy
文章图片

pcs statuslinux|Linux企业化运维--8.haproxy
文章图片

手动删除vip,查看集群运行状态,运行出现了错误和警告linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

VIP自动添加linux|Linux企业化运维--8.haproxy
文章图片

关闭server1的haproxylinux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

节点自动切换linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

设置集群节点为备用节点,以及重新上线
linux|Linux企业化运维--8.haproxy
文章图片

节点自动切换linux|Linux企业化运维--8.haproxy
文章图片

5.防止脑裂 Fence主要作用是防止两个系统同时向资源写数据
破坏资源的安全性和一致性从而导致脑裂
真实主机安装fence插件
linux|Linux企业化运维--8.haproxy
文章图片
建立fence_xvm.key的存放目录
linux|Linux企业化运维--8.haproxy
文章图片

配置fence,只有在网桥的时候选择br0接口,其余回车即可)
linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

此处可以看到之后要生成的fence_xvm.key文件的存放位置linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

生成fence_xvm.key文件linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片
linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

关闭火墙linux|Linux企业化运维--8.haproxy
文章图片

将生成的密钥文件发送给server1、server4linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

在server1、server4安装客户端fencelinux|Linux企业化运维--8.haproxy
文章图片

查询fence设备
linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

查询fence设备的元数据linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

在server1将server1、server4节点添加到fence
#server1:y1(主机名:虚拟机名)
linux|Linux企业化运维--8.haproxy
文章图片

以看到haproxy和vip在server1,fence运行在server4linux|Linux企业化运维--8.haproxy
文章图片

关闭server1网卡
linux|Linux企业化运维--8.haproxy
文章图片

成功切换linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片

让系统崩溃,执行后主机断点重启
linux|Linux企业化运维--8.haproxy
文章图片
server1接管 linux|Linux企业化运维--8.haproxy
文章图片

linux|Linux企业化运维--8.haproxy
文章图片



    推荐阅读