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=linux2628ARCH=x86_64 	#系统位数,64位系统1.关闭防火墙,将安装Haproxy所需软件包传到/opt目录下
systemctl stop firewalld
setenforce 0haproxy-1.5.19.tar.gz2.编译安装 Haproxy
yum install -y pcre-devel bzip2-devel gcc gcc-c++ maketar zxvf haproxy-1.5.19.tar.gz
cd haproxy-1.5.19/
make TARGET=linux2628 ARCH=x86_64
make install3.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 infomaxconn 4096			#最大连接数,需考虑ulimit -n限制,推荐使用10240
--8行--注释,chroot运行路径,为该服务自设置的根目录,一般需将此行注释掉#chroot /usr/share/haproxyuid 99					#用户UIDgid 99					#用户GIDdaemon					#守护进程模式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				#负载均衡调度算法使用轮询算法roundrobinserver inst1 192.168.10.16:80 check inter 2000 fall 3		#定义在线节点server inst2 192.168.10.17:80 check inter 2000 fall 34.添加haproxy 系统服务
cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
chmod +x haproxy
chkconfig --add /etc/init.d/haproxyln -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++ make2、创建运行用户
useradd -M -s /sbin/nologin nginx3、编译安装
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_modulemake && make install4、优化路径
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.htmlln -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 ,不断刷新浏览器测试负载均衡效果

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV + CLion在windows环境下使用CMake编译, 出现Mutex相关的错误的解决办法

最近在windows下面用cmake编译OpenCV的项目代码,但是一直碰到找不到mutex的问题,百思不得其解, Executing task: g -g -o bin/debug.exe src/main.cppC:\MinGW\lib\opencv\build\include/opencv2/core/utility.hpp:697:14: error: recursive_mutex in namespace st…

ssl卸载原理

SSL卸载,也称为SSL解密,是一种将SSL加密数据流卸成非加密的明文数据流的过程。SSL卸载通常在负载均衡器、代理服务器、WAF等设备中实现,可以提高传输效率和安全性。 SSL卸载的原理是将SSL数据流拦截下来,通过设备内置的证书进行解…

图为科技-边缘计算在智慧医疗领域的作用

边缘计算在智慧医疗领域的作用 随着科技的进步,智慧医疗已成为医疗行业的重要发展趋势。边缘计算作为新兴技术,在智慧医疗领域发挥着越来越重要的作用。本文将介绍边缘计算在智慧医疗领域的应用及其优势,并探讨未来发展方向。 一、边缘计算…

androidstudio Please specify a signing configuration for this variant (release)

当直接运行release版本时,报错Error: The apk for your currently selected variant cannot be signed. Please specify a signing configuration for this variant (package64-release). 解决报错:添加签名,signingConfigs 写在buildTypes前…

知道吗?微软将Python集成到Excel中,国产软件“抄作业”了

Excel集成Python 众所周知哦,VBA是一种基于微软的Visual Basic语言的宏编程语言,专为在Office应用程序中执行自动化任务而设计。 VBA适用于Excel、Word、PowerPoint等Office套件中的宏编程,可直接操作和控制Office应用程序的对象模型。 我们…

appium2.0+ 单点触控和多点触控新的解决方案

在 appium2.0 之前,在移动端设备上的触屏操作,单手指触屏和多手指触屏分别是由 TouchAction 类,Multiaction 类实现的。 在 appium2.0 之后,这 2 个方法将会被舍弃。 "[Deprecated] TouchAction action is deprecated. Ple…

Docker 搭建 LNMP + Wordpress(详细步骤)

目录 一、项目模拟 1. 项目环境 2. 服务器环境 3.任务需求 二、Linux 系统基础镜像 三、Nginx 1. 建立工作目录 2. 编写 Dockerfile 脚本 3. 准备 nginx.conf 配置文件 4. 生成镜像 5. 创建自定义网络 6. 启动镜像容器 7. 验证 nginx 四、Mysql 1.…

无脑入门pytorch系列(五)—— nn.Dropout

本系列教程适用于没有任何pytorch的同学(简单的python语法还是要的),从代码的表层出发挖掘代码的深层含义,理解具体的意思和内涵。pytorch的很多函数看着非常简单,但是其中包含了很多内容,不了解其中的意思…

PySide6学习笔记--gui小模版使用

一、界面绘制 1.desiner画图 2.画图代码 # -*- coding: utf-8 -*-################################################################################ ## Form generated from reading UI file t1gui.ui ## ## Created by: Qt User Interface Compiler version 6.5.2 ## ##…

备份服务器搭建

备份服务器搭建 1、背景2、作用3、选型4、环境5、部署5.1、服务端部署5.1.1、安装5.1.2、配置 5.2、客户端部署5.3、备份策略5.3.1、定时备份策略5.3.2、文件变动备份 6、参考 1、背景 随着项目的推进,备份服务器被提上了工作日程,等保、密评和接入测评…

优化指南:带宽限制的可行策略

大家好!作为一名专业的爬虫程序员,我们经常面临的一个挑战就是带宽限制。尤其是在需要快速采集大量数据时,带宽限制成为了我们提升爬虫速度的一大阻碍。今天,我将和大家分享一些解决带宽限制的可行策略,希望能帮助大家…

postman接口自动化测试框架实战!

什么是自动化测试 把人对软件的测试行为转化为由机器执行测试行为的一种实践。 例如GUI自动化测试,模拟人去操作软件界面,把人从简单重复的劳动中解放出来。 本质是用代码去测试另一段代码,属于一种软件开发工作,已经开发完成的用…

MongoDB【CRUD练习-条件查询-文档关系】

练习1-CRUD // 进入test数据库 use test; // 查询文档内容 db.students.find(); // 显示当前数据库中所有集合 show collections; // 向数据库的user集合中插入一个文档 db.users.insertOne({username: "lyh"} ); // 查看当前数据库中所有的集合 发现users集合被创建…

JVM——类加载与字节码技术—编译期处理+类加载阶段

3.编译期处理 编译期优化称为语法糖 3.1 默认构造器 3.2 自动拆装箱 java基本类型和包装类型之间的自动转换。 3.3泛型集合取值 在字节码中可以看见,泛型擦除就是字节码中的执行代码不区分是String还是Integer了,统一用Object. 对于取出的Object&…

ElasticSearch常用方法

ElasticSearch:是一个储存、检索、数据分析引擎。 在互联网项目中我们经常会按一定的条件去索引我们指定的数据,但是在大量的数据中我们如果直接查询数据库效率是非常低的,ElasticSearch就可以很好的帮我们完成检索。 es封装了api提供给我我们直接操作…

Ajax+Vue+ElementUI

文章目录 1.Ajax1.1 介绍1.2 Ajax快速入门1.3 案例-用户注册时,检测用户名是否数据库已经存在1.4 Axios1.4.1 Axios快速入门1.4.2 请求别名 1.5 JSON1.5.1 Json的基础语法1.5.2 FastJson的使用5.3.2 Fastjson 使用 2. Vue2.1 介绍2.2 Vue快速入门2.3 Vue常用指令和生…

Linux安装rabbitmq整合版本

rabbitmq和erlang对应版本 https://www.rabbitmq.com/which-erlang.html erlang下载地址 Otp 24.1.7 - Erlang/OTP wget https://github.com/erlang/otp/releases/download/OTP-24.1.7/otp_src_24.1.7.tar.gz socat下载地址 RPM resource socat(x86-64) (rpmfind.net) rab…

微信小程序列表加载更多

概述 基于小程序开发的列表加载更多例子。 详细 一、前言 基于小程序开发的列表加载更多例子。 二、运行效果 运行效果(演示的小视频,点击播放即可) 三、实现过程 总体思路如何: 1、通过scroll-view组件提供的bindscroll方法…

Ext JS 之Microloader(微加载器)

“Microloader”是 Sencha 数据驱动的 JavaScript 和 CSS 动态加载器的名称。 清单 app.json 用于应用的设置,Sencha Cmd 在构建的时候会读取这个文件。 Sencha Cmd 转换“app.json”的内容并将生成的清单传递给 Microloader 以在运行时使用。 最后,Ext JS 本身也会查阅运…

2023年Java毕业设计题目推荐,怎样选题?500道毕业设计题目推荐

大家好,我是程序员徐师兄,最近有很多同学咨询,说毕业设计了,不知道选怎么题目好,有哪些是想需要注意的。 今天,我整理了一些Java毕业设计的题目,可以参考一下,希望对大家有所帮助 文章目录 一、…