Haproxy搭建 Web 群集实现负载均衡

1 Haproxy HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。HAProxy非常适用于并发大(并发达1w以上)web站点,这些站点通常又需要会话保持或七层处理。HAProxy的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护web服务器不被暴露到网络上。

1.1 HAProxy的主要特性

●可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美;

●最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s;

●支持多达8种负载均衡算法

●支持Session会话保持,Cookie的引导;

●支持通过获取指定的url来检测后端服务器的状态;

●支持虚机主机功能,从而实现web负载均衡更加灵活;

●支持连接拒绝、全透明代理等独特的功能;

●拥有强大的ACL支持,用于访问控制;

●支持TCP和HTTP协议的负载均衡转发;

●支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成;

1.2 HAProxy负载均衡策略

常见的有如下8种:

(1)roundrobin,表示简单的轮询

(2)static-rr,表示根据权重

(3)leastconn,表示最少连接者先处理

(4)source,表示根据请求源IP

(5)uri,表示根据请求的URI,做cdn需使用;

(6)url_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name (7)hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;

(8)rdp-cookie(name),表示根据cookie(name)来锁定并哈希每一次TCP请求。

1.3 LVS、Nginx、HAproxy的区别 ●LVS基于Linux操作系统内核实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡;

●LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术,HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案;

●LVS因为工作在ISO模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方式;

●HAProxy功能强大,单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。但整体性能低于4层模式的LVS负载均衡;

●Nginx主要用于Web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是性能没有LVS和Haproxy好,对群集节点健康检查功能不强,只支持通过端口来检测,不支持通过URL来检测。

2 Haproxy搭建 Web 群集

Haproxy服务器:192.168.30.105

Nginx 服务器1:192.168.30.107

Nginx 服务器2:192.168.30.109

客户端:192.168.30.115

2.1 haproxy 服务器部署

2.1.1 关闭防火墙


systemctl stop firewalld setenforce 0

2.1.2 内核配置(实验环境可有可无)

vim  /etc/sysctl.conf

net.ipv4.tcp_tw_reuse = 1

#启用端口重用,允许一个服务器进程在进行完一个连接后立即再次使用相同的连接端口。
net.ipv4.ip_local_port_range = 1024 65023 #本地端口范围。指定可用于本地TCP/UDP端口的端口号范围。
net.ipv4.tcp_max_syn_backlog = 10240 #TCP半连接请求的最大长度,如果超过这个值,对方就会收到RST响应。
net.ipv4.tcp_max_tw_buckets = 400000 #系统中同时保持TIME_WAIT状态的最大数量,一般设置为TCP建立连接次数的2倍。
net.ipv4.tcp_max_orphans = 60000 #系统中允许存在的最大orphan连接数(没有对应的socket文件),这个数字越大,系统支持的TCP连接数也越多。
net.ipv4.tcp_synack_retries = 3 #尝试发送SYN+ACK应答报文的最大次数。
net.core.somaxconn = 10000 #服务器套接字排队长度的最大值

2.1.3 安装 Haproxy

//编译安装
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make tar zxvf haproxy-2.2.11.tar.gz
cd haproxy-2.2.11/
make TARGET=linux31 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy ---------------------参数说明---------------------------------------------------------------------------
TARGET=linux26 #内核版本, #使用uname -r查看内核,如:2.6.18-371.el5,此时该参数用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628

安装依赖环境

编译安装HAproxy

2.1.4 Haproxy服务器配置

useradd -M -s /sbin/nologin haproxy
mkdir -p /usr/local/haproxy/conf
cd /usr/local/haproxy/conf

HAProxy 的配置文件共有 5 个域:

●global:用于配置全局参数
●default:用于配置所有frontend和backend的默认属性
●frontend:用于配置前端服务(即HAProxy自身提供的服务)实例
●backend:用于配置后端服务(即HAProxy后面接的服务)实例组

●listen:frontend + backend的组合配置,可以理解成更简洁的配置方法,frontend域和backend域中所有的配置都可以配置在listen域下
global          #全局配置,主要用于定义全局参数,属于进程级的配置,通常和操作系统配置有关
  log 127.0.0.1 local1 warning   daemon                                      #让haproxy以守护进程的方式工作于后台
  option dontlognull         #不在日志中记录空连接
  option abortonclose    #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
  maxconn 20000                       #最大连接数,“defaults”中的值不能超过“global”段中的定义
  timeout queue 3s        #默认客户端请求在队列中的最大时长
  timeout connect 1s          #默认haproxy和服务端建立连接的最大时长,新版本中替代contimeout,该参数向后兼容 frontend http-in
  bind *:80   acl url_jsp path_end  -i .jsp   use_backend tomcat_server if url_jsp   default_backend nginx_server backend nginx_server
  balance roundrobin
  option httpchk GET /test.html   server ngx01 192.168.1.101:80 check inter 2000 fall 3 rise 2
  server ngx02 192.168.1.100:80 check inter 2000 fall 3 rise 2 backend tomcat_server
  balance roundrobin
  option http-server-close
  cookie HA_STICKY_dy insert indirect nocache
  server tomcat01 192.168.1.102:8080 cookie tomcat01 check inter 2000 fall 3 rise 2
  server tomcat02 192.168.1.150:8080 cookie tomcat02 check inter 2000 fall 3 rise 2 listen stats
  bind *:1080
  stats enable
  stats refresh 30s
  stats uri /stats
  stats realm HAProxy\ Stats
  stats auth admin:admin

2.1.4 添加为系统服务

添加执行的权限

chmod +x /etc/init.d/haproxy

将 /etc/init.d/haproxy 脚本添加到 chkconfig 管理工具中

chkconfig --add /etc/init.d/haproxy
chkconfig --level 35 haproxy on
chkconfig --level 35 haproxy on
service haproxy start

开启haproxy服务

2.2 节点服务器部署

systemctl stop firewalld
setenforce 0 yum install -y pcre-devel zlib-devel gcc gcc-c++ make useradd -M -s /sbin/nologin nginx cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/ cd nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install make && make install --192.168.1.100---
echo "this is kgc web" > /usr/local/nginx/html/test.html --192.168.1.101---
echo "this is benet web" > /usr/local/nginx/html/test.html ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ nginx      #启动nginx 服务

---Nginx 服务器1:192.168.1.100---

---Nginx 服务器1:192.168.1.101---

2.3 测试 Web群集

在客户端使用浏览器打开 http://192.168.30.150 ,不断刷新浏览器测试负载均衡效果

Haproxy搭建 Web 群集实现负载均衡的更多相关文章

  1. 24.Haproxy搭建Web群集

    Haproxy搭建Web群集 目录 Haproxy搭建Web群集 Haproxy简介 常见的Web集群调度器 软件类 硬件类 Haproxy应用分析 HAProxy的主要特性 HAProxy常见的8种 ...

  2. mysql MHA扩展haproxy搭建从库只读负载均衡

    [环境介绍] 系统环境:Red Hat Enterprise Linux 7 + 5.7.18 + MHA version 0.57 MHA架构中从库之间的负责均衡可选择mysql_route& ...

  3. Haproxy搭建Web群集

    一.Haproxy与LVS LVS不支持正则处理,不能实现动静分离,对于大型网站,LVS的实施配置复杂,维护成本相对较高 Harpoxy是一款可提供高可用性,负载均衡.及基于TCP和HTTP应用的代理 ...

  4. Haproxy搭建web集群

    目录: 一.常见的web集群调度器 二.Haproxy应用分析 三.Haproxy调度算法原理 四.Haproxy特性 五.Haproxy搭建 Web 群集 一.常见的web集群调度器 目前常见的we ...

  5. Haproxy+Keepalived搭建Weblogic高可用负载均衡集群

    配置环境说明: KVM虚拟机配置 用途 数量 IP地址 机器名 虚拟IP地址 硬件 内存3G  系统盘20G cpu 4核 Haproxy keepalived 2台 192.168.1.10 192 ...

  6. RabbitMQ3.6.3集群搭建+HAProxy1.6做负载均衡

    目录 [TOC] 1.基本概念 1.1.RabbitMQ集群概述   通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服 ...

  7.  RabbitMQ3.6.3集群搭建+HAProxy1.6做负载均衡

    目录 目录 1.基本概念 1.1.RabbitMQ集群概述 1.2.软件负载均衡器HAProxy 2.RabbitMQ的配置步骤 2.1.安装 Erlang.RabbitMQ 2.2.修改 /etc/ ...

  8. haproxy+keepalived实现高可用负载均衡

    软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现.LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. HA ...

  9. 用apache和tomcat搭建集群,实现负载均衡

    型的企业应用每天都需要承受巨大的访问量,在着巨大访问量的背后有数台服务器支撑着,如果一台服务器崩溃了,那么其他服务器可以使企业应用继续运行,用户对服务器的运作是透明化的,如何实现这种透明化呢?由如下问 ...

  10. haproxy+keepalived实现高可用负载均衡(转)

      软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现.LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. ...

随机推荐

  1. Hive执行计划之一文读懂Hive执行计划

    目录 概述 1.hive执行计划的查看 2.学会查看Hive执行计划的基本信息 3.执行计划步骤操作过程 4.explain extended 概述 Hive的执行计划描述了一个hiveSQL语句的具 ...

  2. spring-boot集成mybatis真的很简单吗?

    在日常的后端开发中,使用mybatis作为DAO层的持久框架已经是惯例.但很多时候都是在别人搭好的框架中进行开发,对怎么搭建环境是一知半解,今天就来实践下. 一.集成分哪些步骤 来看下集成mybati ...

  3. Scalpel:解构API复杂参数Fuzz的「手术刀」

    Scalpel简介 Scalpel是一款自动化Web/API漏洞Fuzz引擎,该工具采用被动扫描的方式,通过流量中解析Web/API参数结构,对参数编码进行自动识别与解码,并基于树结构灵活控制注入位点 ...

  4. 华为云新一代分布式数据库GaussDB,给世界一个更优选择

    摘要:与伙伴一起,共建繁荣开放的GaussDB数据库新生态. 本文分享自华为云社区<华为云新一代分布式数据库GaussDB,给世界一个更优选择>,作者:华为云头条. 6月7日,在华为全球智 ...

  5. EnhancingDecisionTreeswithGeographicInformationSystemsa

    目录 引言 在计算机科学领域,地理信息系统和( geographical information systems, GIS)已经成为了一个非常受欢迎的工具.GIS 可以用来处理和存储大量的地理数据,支 ...

  6. 我坚定的认为,这个源码肯定是有 BUG 的!

    你好呀,我是歪歪. 上周我不是发了<我试图给你分享一种自适应的负载均衡.>这篇文章嘛,里面一种叫做"自适应负载均衡"的负载均衡策略,核心思路就是从多个服务提供者中随机选 ...

  7. QOJ 6504. CCPC Final 2022 D Flower's Land 2题解

    QOJ 6504. CCPC Final 2022 D Flower's Land 2题解 题意简述 给你一个只含 \(0,1,2\) 的序列,相邻两个相同的数字可以直接消掉. 询问包含两种 区间所有 ...

  8. Blazor资源大全,很棒的Blazor

    Blazor资源大全 一个收集了很棒的Blazor资源的集合. Blazor是一个使用C#/Razor和HTML在浏览器中运行的.NET Web框架. 欢迎贡献!请先查看贡献指南.感谢所有的贡献者,你 ...

  9. 防缓存穿透利器-布隆滤器(BloomFilter)

    布隆过滤器 1.布隆过滤器原理 1.1 什么是布隆过滤器 1.2 使用场景 1.3 原理 1.4 布隆过滤器的优缺点 2.实现方式 2.1 初始化skuId的布隆过滤器 2.1.1 RedisCons ...

  10. GitHub搜索指令教程

    in:根据某个关键词来进行检索 关键词: name:项目名称 description:项目描述 readme:项目帮助文档 语法: 需要检索的内容:in:name或description或readme ...