Haproxy搭建 Web 群集实现负载均衡
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 群集实现负载均衡的更多相关文章
- 24.Haproxy搭建Web群集
Haproxy搭建Web群集 目录 Haproxy搭建Web群集 Haproxy简介 常见的Web集群调度器 软件类 硬件类 Haproxy应用分析 HAProxy的主要特性 HAProxy常见的8种 ...
- mysql MHA扩展haproxy搭建从库只读负载均衡
[环境介绍] 系统环境:Red Hat Enterprise Linux 7 + 5.7.18 + MHA version 0.57 MHA架构中从库之间的负责均衡可选择mysql_route& ...
- Haproxy搭建Web群集
一.Haproxy与LVS LVS不支持正则处理,不能实现动静分离,对于大型网站,LVS的实施配置复杂,维护成本相对较高 Harpoxy是一款可提供高可用性,负载均衡.及基于TCP和HTTP应用的代理 ...
- Haproxy搭建web集群
目录: 一.常见的web集群调度器 二.Haproxy应用分析 三.Haproxy调度算法原理 四.Haproxy特性 五.Haproxy搭建 Web 群集 一.常见的web集群调度器 目前常见的we ...
- Haproxy+Keepalived搭建Weblogic高可用负载均衡集群
配置环境说明: KVM虚拟机配置 用途 数量 IP地址 机器名 虚拟IP地址 硬件 内存3G 系统盘20G cpu 4核 Haproxy keepalived 2台 192.168.1.10 192 ...
- RabbitMQ3.6.3集群搭建+HAProxy1.6做负载均衡
目录 [TOC] 1.基本概念 1.1.RabbitMQ集群概述 通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服 ...
- RabbitMQ3.6.3集群搭建+HAProxy1.6做负载均衡
目录 目录 1.基本概念 1.1.RabbitMQ集群概述 1.2.软件负载均衡器HAProxy 2.RabbitMQ的配置步骤 2.1.安装 Erlang.RabbitMQ 2.2.修改 /etc/ ...
- haproxy+keepalived实现高可用负载均衡
软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现.LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. HA ...
- 用apache和tomcat搭建集群,实现负载均衡
型的企业应用每天都需要承受巨大的访问量,在着巨大访问量的背后有数台服务器支撑着,如果一台服务器崩溃了,那么其他服务器可以使企业应用继续运行,用户对服务器的运作是透明化的,如何实现这种透明化呢?由如下问 ...
- haproxy+keepalived实现高可用负载均衡(转)
软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现.LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. ...
随机推荐
- 可视化生信分析利器 Galaxy 之 Docker 部署
Galaxy Project(https://galaxyproject.org/)是很多年前在云计算背景下诞生的一个生物信息学可视化分析开源项目, 是目前生物医学研究领域最受欢迎的在线生物信息分析工 ...
- 如何在.net6webapi中实现自动依赖注入
IOC/DI IOC(Inversion of Control)控制反转:控制反正是一种设计思想,旨在将程序中的控制权从程序员转移到了容器中.容器负责管理对象之间的依赖关系,使得对象不再直接依赖于其他 ...
- 如何吃透一个Java项目?
现在Austin的文档我觉得还是比较全的,但到了看代码的时候,可能有的同学就不知道应该怎么看,有想知道模块之间的调用链路,有想一点一点把细节给全看了.这时候就很可能在项目里犯迷糊了,绕不出不来了. J ...
- 眼观四海:自动驾驶&4D成像毫米波雷达 如今几何?
写在前面 笔者做这项工作的目的是希望为课题组寻找毫米波雷达+智慧驾驶领域寻找可行的趋势与方向,尽可能贴近工业界需求.在这项工作中,笔者总结了以多级联(大陆,博世,森斯泰克等).集成芯片(Arbe,Mo ...
- Redis系列16:聊聊布隆过滤器(原理篇)
Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5: ...
- ChatGPT小型平替之ChatGLM-6B本地化部署、接入本地知识库体验
本文期望通过本地化部署一个基于LLM模型的应用,能让大家对构建一个完整的应用有一个基本认知.包括基本的软硬环境依赖.底层的LLM模型.中间的基础框架及最上层的展示组件,最终能达到在本地零编码体验的目的 ...
- 前端Vue非常简单实用商品分类展示组件 侧边商品分类组件
前端vue非常简单实用商品分类展示组件 侧边商品分类组件 , 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id=13084 效果图如下 ...
- NoSQL数据库系统原理:从概念到实现
目录 1. 引言 2. 技术原理及概念 2.1 基本概念解释 2.2 技术原理介绍 2.3 相关技术比较 3. 实现步骤与流程 3.1 准备工作:环境配置与依赖安装 3.2. 核心模块实现 3.3. ...
- sql server注入rce实践
背景:在漏洞挖掘中,合理的利用sql注入,可以把注入转换成rce,使一个高危漏洞变成严重漏洞.在红蓝对抗中,利用注入rce,实现内网横向移动.笔者基于漏洞挖掘和红蓝对抗上遇到的sql server注入 ...
- Avalonia开发Markdown编辑器
Avalonia开发Markdown编辑器 今天熟悉Avalonia UI,做一个Markdown的文本编辑器. 代码我上传了Github,地址: https://github.com/raokun/ ...