Linux企业运维——haproxy负载均衡

本文详细介绍了HAProxy的原理、优缺点,对比了它与Nginx的特性。通过实例展示了如何配置和部署HAProxy实现负载均衡,包括身份验证、自定义路由监控、权重设置、备份服务器、访问控制及读写分离。此外,还讨论了HAProxy的高可用性配置,包括集群管理VIP和防止脑裂的fence策略。
摘要由CSDN通过智能技术生成

一、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应用程序服务器。
在这里插入图片描述

Nginx和Haproxy对比

Haproxy特点

支持TCP与Http协议,工作在网络4层和7层 
支持Session共享、Cookies引导 
支持通过URL健康检测 
支持8种负载均衡策略 
支持心跳检测

Nginx特点

支持Http协议,工作在网络7层 
支持通过端口健康检测 
支持强大的正则匹配规则 
支持WebSocket协议 
支持Http Cache

说明:对于Http协议,Haproxy处理效率比Nginx高。所以,没有特殊要求的时候或者一般场景,建议使用Haproxy来做Http协议负载!但如果是Web,那么建议使用Nginx!

二、HAProxy工作原理

HAProxy有前端(frontend)和后端(backend),前端和后端都可以有多个,也可以只有一个listen块来同时实现前端和后端。
前端(frontend)区域可以根据HTTP请求的header信息来定义一些规则,然后将符合某规则的请求转发到相应后端(backend)进行处理。因此HAProxy可以实现动静分离(动静分离简单来说就是指将静态请求转发到对应的静态资源服务器,将动态请求转发到动态资源服务器),我们上篇说过的LVS就没有此功能。

三、实现HAProxy负载均衡

1.配置部署haproxy

在server1上安装haproxy
编辑haproxy的配置文件

yum install -y haproxy

vim /etc/haproxy/haproxy.cfg
\\\
stats uri /status                     #设置统计页面的uri为/status
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     #定义的多个后端
\\\

在这里插入图片描述

server1启动haproxy服务,看到端口处于监听状态

systemctl restart haproxy.service
netstat -antlp

在这里插入图片描述
server2和server3安装http,在网页发布文件分别写入server2/server3,然后启动httpd服务

 #server2
 echo server2 > /var/www/html/index.html
 systemctl restart httpd
 #server3
  echo server3 > /var/www/html/index.html
 systemctl restart httpd

真机访问172.25.7.1进行测试,看到轮询请求

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值