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和设置身份验证

 

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     #定义的多个后端

 Linux企业化运维--8.haproxy_第1张图片

 

 

 Linux企业化运维--8.haproxy_第2张图片

 Linux企业化运维--8.haproxy_第3张图片

 Linux企业化运维--8.haproxy_第4张图片

 Linux企业化运维--8.haproxy_第5张图片

 Linux企业化运维--8.haproxy_第6张图片

 Linux企业化运维--8.haproxy_第7张图片

2.自定义路由监控器

自定义设置符合条件的url监控,并把请求转发到指定服务器

当访问路径以/static /images等开头,以.jpg .gif等结尾时,跳入backend static模块,由该模块内server提供服务

 Linux企业化运维--8.haproxy_第8张图片

Linux企业化运维--8.haproxy_第9张图片

 Linux企业化运维--8.haproxy_第10张图片

 

 如果图片在浏览器中访问不到有可能是权限不够

 3.指定日志存放

 

 

systemctl restart rsyslog.service
systemctl start haproxy.service

 

避免产生两次日志,增加负担

4.自定义路由监控器

 把来自172.25.134.250的访问拒绝Linux企业化运维--8.haproxy_第11张图片

 

 添加错误代码,把相应错误代码转发至其他路径

Linux企业化运维--8.haproxy_第12张图片

 

 Linux企业化运维--8.haproxy_第13张图片

5. 访问重定向
 

 

 

6.读写分离

 Linux企业化运维--8.haproxy_第14张图片

 把2作为只读服务器,提供页面

 把server3作为存储服务器,在server3的httpd服务中创建上传页面,并赋予写入权限

 Linux企业化运维--8.haproxy_第15张图片

 

设置文件大小限制

 

 

 Linux企业化运维--8.haproxy_第16张图片

 Linux企业化运维--8.haproxy_第17张图片

 在server3中也给upload777权限

Linux企业化运维--8.haproxy_第18张图片

 Linux企业化运维--8.haproxy_第19张图片

上传后文件到server3中,server2为空

 Linux企业化运维--8.haproxy_第20张图片

4.HAProxy高可用

 

 

 

 

 

 server1生成免密操作密钥,发送给server4

 

 配置软件仓库,安装高可用插件Linux企业化运维--8.haproxy_第21张图片

 Linux企业化运维--8.haproxy_第22张图片将server1的仓库配置文件发送给server4

 安装高可用插件

 开启server1和server4的pcsd服务
Linux企业化运维--8.haproxy_第23张图片

 修改server1和server4的hacluster认证密码,然后认证

 

 认证

 Linux企业化运维--8.haproxy_第24张图片

 设定集群的名称为mycluster,集群内有server1和server4两个设备

 Linux企业化运维--8.haproxy_第25张图片

 启动集群内所有服务节点

 Linux企业化运维--8.haproxy_第26张图片

验证配置,出现报错,这个因为没有Fencing设备时,没有禁用stonith功能

 禁用功能Linux企业化运维--8.haproxy_第27张图片

crm_mon是监控集群状态的主要命令crm status是一样的效果

 

 Linux企业化运维--8.haproxy_第28张图片

 Linux企业化运维--8.haproxy_第29张图片 

 访问网页172.25.134.1/status可以查看到状态,查看端口可以显示80端口被监听

 配置集群管理VIP

设定VIP,查看状态显示获取到了VIP信息

Linux企业化运维--8.haproxy_第30张图片

关闭server1、server4的haproxy服务

 

 

 将haproxy 添加到集群管理

 查看状态发现vip运行在server1节点,haproxy运行在server4节点Linux企业化运维--8.haproxy_第31张图片

 将vip和haproxy 放入同一个组中解决不同步的问题

pcs status  Linux企业化运维--8.haproxy_第32张图片

 手动删除vip,查看集群运行状态,运行出现了错误和警告Linux企业化运维--8.haproxy_第33张图片

 

 VIP自动添加Linux企业化运维--8.haproxy_第34张图片

 关闭server1的haproxy

 

节点自动切换Linux企业化运维--8.haproxy_第35张图片

 Linux企业化运维--8.haproxy_第36张图片

设置集群节点为备用节点,以及重新上线

 Linux企业化运维--8.haproxy_第37张图片

 节点自动切换Linux企业化运维--8.haproxy_第38张图片

 5.防止脑裂

Fence主要作用是防止两个系统同时向资源写数据
破坏资源的安全性和一致性从而导致脑裂

 真实主机安装fence插件

 建立fence_xvm.key的存放目录

 

 配置fence,只有在网桥的时候选择br0接口,其余回车即可)

 Linux企业化运维--8.haproxy_第39张图片

 Linux企业化运维--8.haproxy_第40张图片

 

 Linux企业化运维--8.haproxy_第41张图片

 

 

 

 此处可以看到之后要生成的fence_xvm.key文件的存放位置Linux企业化运维--8.haproxy_第42张图片

 

 生成fence_xvm.key文件Linux企业化运维--8.haproxy_第43张图片

 

 

 

 关闭火墙

 将生成的密钥文件发送给server1、server4Linux企业化运维--8.haproxy_第44张图片

 

 Linux企业化运维--8.haproxy_第45张图片

 在server1、server4安装客户端fence

 查询fence设备

 

 

 

 查询fence设备的元数据

 

 

 在server1将server1、server4节点添加到fence

#server1:y1(主机名:虚拟机名)

 以看到haproxy和vip在server1,fence运行在server4Linux企业化运维--8.haproxy_第46张图片

 关闭server1网卡

 

 成功切换Linux企业化运维--8.haproxy_第47张图片

 

 让系统崩溃,执行后主机断点重启

server1接管 Linux企业化运维--8.haproxy_第48张图片

 

 

 

你可能感兴趣的