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层Nginx特点
支持Session共享、Cookies引导
支持通过URL健康检测
支持8种负载均衡策略
支持心跳检测
支持Http协议,工作在网络7层说明:对于Http协议,Haproxy处理效率比Nginx高。所以,没有特殊要求的时候或者一般场景,建议使用Haproxy来做Http协议负载!但如果是Web,那么建议使用Nginx!
支持通过端口健康检测
支持强大的正则匹配规则
支持WebSocket协议
支持Http Cache
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_backendapp#默认的请求转发地址,名为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功能
【linux|Linux企业化运维--8.haproxy】 禁用功能

文章图片
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接管

文章图片

文章图片
推荐阅读
- Linux下面如何查看tomcat已经使用多少线程
- Beego打包部署到Linux
- Linux|109 个实用 shell 脚本
- linux定时任务contab
- 芯灵思SinlinxA33开发板Linux内核定时器编程
- day16-Linux|day16-Linux 软件管理
- 如何在阿里云linux上部署java项目
- mac|mac 链接linux服务器 如何在Mac上连接服务器
- Linux|Linux 服务器nginx相关命令
- linux笔记|linux 常用命令汇总(面向面试)