Haproxy原理及部署

一、Haproxy简介

1、Haproxy应用分析

LVS在企业中康复在能力很强,但存在不足:

  • LVS不支持正则处理,不能实现动静分离
  • 对于大型网站LVS的事实配置较为复杂,维护成本相对较高

Haproxy是一款可以供高可用性、负载均衡和基于TCP和HTTP应用的代理软件 

  • 非常适用于并发大(并发达1w以上)web站点
  • 可保持站点的会话保持或七层处理

2、Haproxy的特性 

  1. 可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美
  2. 最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s
  3. 支持多达8 种负载均衡算法,同时也支持会话保持
  4. 支持虚拟主机功能,从而实现web负载均衡更加灵活
  5. 支持连接拒绝、全透明代理等独特功能
  6. 拥有强大的ACL支持,用于访问控制
  7. 其独特的弹性二叉树数据结构,使数据结构的复杂性上升到了0(1),即数据的查询速度不会随着数据条目的增加而速度有所下降
  8. 支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源量费,让多个请求在一个tcp连接中完成
  9. 支持TCP加速,零复制功能,类似于mmap机制
  10. 支持响应池(response buffering)
  11. 支持RDP协议
  12. 基于源的粘性,类似于nginx的ip_hash功能,把来自同一客户端的请求在一定时间内始终调度到上游的同一服务器
  13. 更好统计数据接口,其web接口显示后端冀全中各个服务器的接受、发送、拒绝、错误等数据的统计信息
  14.  详细的健康状态检测,web接口中有关对上流服务器的健康检测状态,并提供了一定的管理功能
  15. 基于流量的健康评估机制
  16. 基于http认证
  17. 基于命令行的管理接口
  18. 日志分析器,可对日志进行分析
     

3、常见的负载均衡策略 

  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请求。

4、 常见的Web集群调度服务器

  • 目前常见的Web集群调度器分为软件和硬件
  • 软件通常使用开源的LVS、Haproxy、Nginx
  • 硬件一般使用比较多的是F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟等

5、LVS、Haproxy、Nginx区别 

  • LVS基于Linux操作系统内核实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡;
  • LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术,HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案;
  • LVS因为工作在ISO模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方式;
  • HAProxy功能强大,但整体性能低于4层模式的LVS负载均衡。
  • Nginx主要用于Web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是对群集节点健康检查功能不强,性能没有Haproxy好。

nginx
① 支持正则
② 只支持基于端口的健康检查
③ 不支持session直接保持、但能通过ip_hash来解决
④ 对网络稳定性要求不高
⑤ 反向代理能力强

LVS
① 只能基于四层端口转发
② 尽在四层做分发作用 抗负载能力强
③ 应用范围广

haproxy
① 支持8中负载均衡策略
② 仅作负载均衡软件使用,在高并发情况下性能优于nginx
③ 支持URL检测  支持session保持
 

二、 Haproxy搭建 Web 群集

Haproxy服务器:192.168.247.21    
Nginx 服务器1:192.168.247.22  
Nginx 服务器2:192.168.247.23  
客户端:192.168.247.80

1、Haproxy服务器搭建

#参数要求:
TARGET=linux26	#内核版本,
#使用uname -r查看内核,如:2.6.18-371.el5,此时该参数用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628

ARCH=x86_64 	#系统位数,64位系统

1.关闭防火墙,将安装Haproxy所需软件包传到/opt目录下
systemctl stop firewalld
setenforce 0

haproxy-1.5.19.tar.gz

2.编译安装 Haproxy
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make

tar zxvf haproxy-1.5.19.tar.gz
cd haproxy-1.5.19/
make TARGET=linux2628 ARCH=x86_64
make install

3.Haproxy服务器配置
mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/

cd /etc/haproxy/
vim haproxy.cfg
global		#全局配置,主要用于定义全局参数,属于进程级的配置,通常和操作系统配置有关
--4~5行--修改,定义haproxy日志输出设置和日志级别,local0为日志设备,默认存放到系统日志
		log /dev/log   local0 info		#修改
        log /dev/log   local0 notice	#修改
        #log loghost    local0 info
        maxconn 4096			#最大连接数,需考虑ulimit -n限制,推荐使用10240
--8行--注释,chroot运行路径,为该服务自设置的根目录,一般需将此行注释掉
        #chroot /usr/share/haproxy
        uid 99					#用户UID
        gid 99					#用户GID
        daemon					#守护进程模式
		nbproc 1				#添加,设置并发进程数,建议与当前服务器CPU核数相等或为其2倍

defaults   	#配置默认参数,这些参数可以被用到Listen,frontend,backend组件     
		log     global			#引入global定义的日志格式
        mode    http			#模式为http(7层代理http,4层代理tcp)
        option  httplog			#日志类别为http日志格式
        option  dontlognull		#不记录健康检查日志信息
        retries 3				#检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
        redispatch				#当服务器负载很高时,自动结束当前队列处理比较久的连接
        maxconn 2000			#最大连接数,“defaults”中的值不能超过“global”段中的定义
        #contimeout 5000        #设置连接超时时间,默认单位是毫秒
        #clitimeout 50000       #设置客户端超时时间,默认单位是毫秒
        #srvtimeout 50000       #设置服务器超时时间,默认单位是毫秒
        timeout http-request 10s 	#默认http请求超时时间
        timeout queue 1m   		#默认队列超时时间
        timeout connect 10s		#默认连接超时时间,新版本中替代contimeout,该参数向后兼容
        timeout client 1m		#默认客户端超时时间,新版本中替代clitimeout,该参数向后兼容
        timeout server 1m		#默认服务器超时时间,新版本中替代srvtimeout,该参数向后兼容
        timeout http-keep-alive 10s		#默认持久连接超时时间
        timeout check 10s		#设置心跳检查超时时间


--删除下面所有listen项--,添加
listen  webcluster 0.0.0.0:80	#haproxy实例状态监控部分配置,定义一个名为webcluster的应用
        option httpchk GET /test.html	#检查服务器的test.html文件
        balance roundrobin				#负载均衡调度算法使用轮询算法roundrobin
        server inst1 192.168.10.16:80 check inter 2000 fall 3		#定义在线节点
        server inst2 192.168.10.17:80 check inter 2000 fall 3

4.添加haproxy 系统服务
cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
chmod +x haproxy
chkconfig --add /etc/init.d/haproxy

ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
service haproxy start	或	/etc/init.d/haproxy start

 

2、节点服务器部署

#关闭防火墙和安全机制
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
1、安装依赖包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make

2、创建运行用户
useradd -M -s /sbin/nologin nginx

3、编译安装
cd /opt
tar zxvf nginx-1.22.0.tar.gz -C /opt/

cd nginx-1.22.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

make && make install

4、优化路径
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

5、添加 Nginx 系统服务
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target


--192.168.247.22---
echo "this is kgc web" > /usr/local/nginx/html/test.html

--192.168.247.23---
echo "this is benet web" > /usr/local/nginx/html/test.html

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

systemctl start nginx     #启动nginx 服务

安装Nginx服务过程省略,2台服务器节点安装过程相同,按照上述步骤安装

192.168.247.22 

192.168.247.23 

 验证:客户端访问192.168.247.21/test.html ,不断刷新浏览器测试负载均衡效果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/83010.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Three.js 实现模型材质局部辉光效果和解决辉光影响场景背景图显示的问题

1.Three.js 实现模型材质局部辉光效果 2.解决辉光效果影响场景背景图显示的问题 相关API的使用: 1. EffectComposer(渲染后处理的通用框架,用于将多个渲染通道(pass)组合在一起创建特定的视觉效果) 2. …

Linux 内核与架构速查

Linux 内核与架构速查 博主博客 https://blog.uso6.comhttps://blog.csdn.net/dxk539687357 本文主要记录查询 Linux 计算机的内核与架构, 用于下载对应架构的第三方软件。 一、介绍 如上图所示, 有时候我们下载一些第三方软件, 软件会有很…

Qt应用开发(基础篇)——选项卡窗口 QTabWidget

一、前言 QTabWidget类继承于QWidget,是一个拥有选项卡的窗口部件。 QTabWidget类有一个选项卡栏QTabBar和一个页面区域,用来显示和选项卡相关联的界面。用户通过点击选项卡或者自定义快捷方式(ALTKey)切换页面。 二、QTabWidget类 1、count 该属…

Redis实战:Redis的安装及简单使用

本片将介绍 Redis 的安装及简单使用 文章目录 1、Redis安装1.1、Windows下Redis的安装1.2、Linux下Redis的安装1.3、Mac下Redis的安装(使用Homebrew) 2、Redis使用2.1、启动服务端客户端2.2、Redis简单命令 3、Redis命令大全 1、Redis安装 1.1、Windows…

Linux问题--docker启动mysql时提示3306端口被占用

问题描述: 解决方法: 1.如果需要kill掉mysqld服务可以先通过 lsof -i :3306 2. 查询到占用3306的PID,随后使用 kill -15 PID 来kill掉mysqld服务。 最后结果

软件工程模型-架构师之路(四)

软件工程模型 敏捷开发: 个体和交互 胜过 过程和工具、可以工作的软件 胜过 面面俱到的文件、客户合作胜过合同谈判、响应变化 胜过 循序计划。(适应需求变化,积极响应) 敏捷开发与其他结构化方法区别特点:面向人的…

网络面试题(172.22.141.231/26,该IP位于哪个网段? 该网段拥有多少可用IP地址?广播地址是多少?)

此题面试中常被问到,一定要会172.22.141.231/26,该IP位于哪个网段? 该网段拥有多少可用IP地址?广播地址是多少? 解题思路: 网络地址:172.22.141.192 10101100.00010110.10001101.11000000 广播…

Linux驱动开发(Day4)

思维导图: 字符设备驱动分步注册:

开学有哪些好用电容笔值得买?ipad触控笔推荐平价

因为有了Apple Pencil,使得iPad就成了一款便携的生产力配件,其优势在于,电容笔搭配上iPad可以让专业的绘画师在iPad上作画,而且还能画出各种粗细不一的线条,对于有书写需求的学生党来讲,还是很有帮助的。但本人不敢想像…

干货!一文告诉你SCRM和CRM有什么区别和联系?

在现代商业领域,我们经常听到两个缩写词,即"SCRM"和"CRM"。它们都与客户关系管理有关,但具体是什么意思?本文将用通俗易懂的方式解释这两个概念,以实例分析SCRM和CRM的功能并探讨它们之间的区别和…

验证评估守护关基安全 赛宁数字孪生靶场创新实践

​​近日,由赛宁网安主办,ISC互联网安全大会组委会协办的第十一届互联网安全大会(ISC 2023)安全运营实践论坛圆满结束。赛宁网安产品总监史崯出席并作出主题演讲:《基于数字孪生靶场如何开展验证评估》,同时…

linux 移动mv命令(实战案例)

linux 移动命令(你真的会用吗???) 第一种情况:移动文件 例如: 将/gdda_file 文件下的 zlib-devel-1.2.7-18el7.x86_64.rpm 移动到 /root/ces/tools文件下 解决方法: mv /gdda_fi…

微服务-GateWay(网关)

所谓网关是什么意思? 相当于就是你们小区家的保安,进出小区都得获得保安的同意,守护你们小区的生命财产健康,网关也是如此,对每个请求都严格把关,将合法的或者是获得权限的请求进入服务器 网关的功能&…

AIGC|万字长文!带你了解AI大模型技术演进

一、AI的起源 在下面这张图中,我们可以看到两个人物:图中左边的人物是一位演员,他出演了一部名为《模仿游戏》的电影。而这部电影实际上讲述的是图中右边的人物,他就是是人工智能之父图灵(Alan Turing)。 …

vue2.x项目从0到1(七)之用户权限

此章节偏理论知识 对于小一点的项目 比如说角色都是平级的 那我们直接像之前 vue2.x项目从0到1(二)之后台管理侧边栏(动态渲染路由以及高亮)_vue动态渲染侧边栏_关忆北_的博客-CSDN博客这样渲染就行了 但是一旦项目大了 …

# 快速评估立功科技基于S32K324的TMS方案

文章目录 1.前言2.立功科技的TMS方案介绍2.1 介绍资料2.2 简要介绍 3.S32K3_TriMotor评估板测试3.1 环境搭建S32 Design Studio for S32 Platform 3.4安装RTD 2.0.0安装Freemaster 3.2 3.2 例程测试3.3 例程适配3.4 双核烧录3.5 测试 1.前言 最近和一些做汽车水泵/风机的客户交…

【论文阅读】 Model Sparsity Can Simplify Machine Unlearning

Model Sparsity Can Simplify Machine Unlearning 背景主要内容Contribution Ⅰ:对Machine Unlearning的一个全面的理解Contribution Ⅱ:说明model sparsity对Machine Unlearning的好处Pruning方法的选择sparse-aware的unlearning framework Experiments…

stm32控制蜂鸣器源代码(附带proteus线路图)

说明: 1 PB0输出0时,蜂鸣器发生; 2 蜂鸣器电阻值如果太大会导致电流太小,发不出声音; 3蜂鸣器额定电压需要设置得低一点,可以是2V,但不能高于3V,这更右上角的电阻值有关系&#x…

每天一道leetcode:剑指 Offer 34. 二叉树中和为某一值的路径(中等图论深度优先遍历递归)

今日份题目: 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例1 输入:root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSu…

数据结构 - 基本概念和术语

基础概念之间的关系大致如下: 一、数据、数据元素、数据项和数据对象 数据 > 数据对象 > 数据元素 > 数据项 类比数据库,这四个概念代表的含义如下所示: 数据:整个数据库的所有数据数据对象:这个数据库的…