当前位置: 首页 > news >正文

高效多用的群集-Haproxy搭建Web集群

Haproxy搭建 Web 群集

一、Haproxy前言

  • HAProxy是一个使用c语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TcP和HrrP的应用程序代理。
  • HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。EAPrcxp运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。
  • HAProxy实现了一种事件驱动,单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space)实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作。
  • 包括GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter和 Tuenti在内的知名网站,及亚马逊网络服务系统都使用了HAProxy。

二、常见的Web集群调度器

  • 目前常见的Web集群调度器分为软件和硬件
    软件通常使用开源的LVS、Haproxy、Nginx
  • LVS性能最好,但是搭建相对复杂;Nginx的upstream模块支持集群功能,但是对集群节点健康检查功能不强,高并发没有Haproxy好
  • 硬件一般使用的比较多的是F5,也有很多人使用梭子鱼、绿盟等国内产品

三、Haproxy应用分析

  • LVS在企业应用中抗负载能力很强,但存在不足
    • LVS不支持正则处理,不能实现动静分离
    • 对于大型网站,LVS的实施配置复杂,维护成功相对较高
  • Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理的软件
    • 适用于负载大的Web站点
    • 运行在硬件上可支持数万计的并发连接的连接请求

四、Haproxy高性能负载均衡主要优点

  • Haproxy在负载均衡速度和并发处理上是优于
  • NginxHaproxy支持虚拟主机,可以工作在4、7层
  • 能够补充Nginx的一些缺点,比如session的保持、cookie的引导等工作
  • 支持url检测后端的服务器的状态
  • Haproxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡
  • 支持很多负载均衡算法,Round-robin(轮询)、weight-round-robin(加权轮询)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)

五、四层与七层负载均衡的主要区别

  • 四层负载均衡器是通过分析IP层及TCP/UDP层的流量实现的基于"IP +端口"的负载均衡,主要通过报文的目标地址和端口配合负载均衡算法选择后端真实服务器,确定是否需要对报文进行修改(根据需求,可能会修改目标地址、源地址、MAc地址等)并将数据转发至选出的后端真实服务器。
  • 七层负载均衡器是基于应用层信息(如URI、Cookies等)的负载均衡。主要依据报文的内容配合负载均衡算法选择后端真实服务器,然后再分发请求到真实服务器进行处理,也称"内容交换器"。客户端与负载均衡器、负载均衡器与后端真实服务器之间会分别建立CP连接。

六、LVS和Haproxy应用分析

  • LVS在企业应用中抗负载均衡能力很强,但存在不足
  • LVS不支持正则处理(因为是应用层),不能实现动静分离对于大型网站,LVS的实施配置复杂,维护成本相对较高
  • Haproxy是一块可提供高可用性、负载均衡及基于rCP和HTTP应用的代理软件特别适合于负载特别大的web站点(可以承受高并发,可与Nginx配合)
  • 运行在当前的硬件上可支持数以万计的并发连接请求

七、Nginx和LVS和Haproxy有什么区别

  • 支持正则
  • 只支持基于端口的健康检查
  • 不支持session 的直接保持,但能通过Ip _hash来解决
  • 对网络稳定性要求不高
  • 反向代理能力强
  • nginx 社区活跃

2、LVS

  • 只能基于四层端口转发
  • 在四层做分发作用,抗负载能力强
  • 应用范围广(几乎可以对所有应用做负载)

3、Haproxy

  • 支持8种负教均衡策略
  • 仅做负载均衡软件使用,在高并发情况下性能优于Nginx
  • 支持URL健康检测、支持session保持

八、Haproxy搭建 Web 群集

Haproxy服务器192.168.50.41

Nginx服务器 192.168.50.57

Nginx服务器 192.168.50.59

1、部署haproxy服务器(192.168.50.41)

systemctl stop firewalld
setenforce 0cd /opt
haproxy-1.5.19.tar.gz
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 install

2、Haproxy服务器配置

mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/cd /etc/haproxy/
vim haproxy.cfgglobal		#全局配置,主要用于定义全局参数,属于进程级的配置,通常和操作系统配置有关
--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.50.57:80 check inter 2000 fall 3		#定义在线节点server inst2 192.168.50.59:80 check inter 2000 fall 3---------------------参数说明---------------------------------------------------------------------------
balance roundrobin		#负载均衡调度算法
#轮询算法:roundrobin;最小连接数算法:leastconn;来源访问调度算法:source,类似于nginx的ip_hashcheck inter 2000		#表示启用对此后端服务器执行健康检查,设置健康状态检查的时间间隔,单位为毫秒连续三次检测不到心跳频率则认为该
fall 3					#表示节点失效
若节点配置后带有“backup”表示该节点只是个备份节点,仅在所有在线节点都失效该节点才启用。不携带“backup”,表示为主节点,和其它在线节点共同提供服务。

3、编译安装Nginx服务器(192.168.50.57、192.168.50.59)

192.168.50.57

echo "this is qf web" > /usr/local/nginx/html/test.html

192.168.50.59

echo "this is lc web" > /usr/local/nginx/html/test.html

4、启动Haproxy服务(192.168.50.41)

cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
cd /etc/init.d/
ls
chmod +x haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxyservice haproxy start	或	/etc/init.d/haproxy start

5、测试

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

 

 

相关文章:

高效多用的群集-Haproxy搭建Web集群

Haproxy搭建 Web 群集 一、Haproxy前言 HAProxy是一个使用c语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TcP和HrrP的应用程序代理。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。…...

aws的s3匿名公开访问

点击桶权限 ,添加策略 {"Version": "2012-10-17","Statement": [{"Sid": "AddPerm","Effect": "Allow","Principal": "*","Action": "s3:GetObject&qu…...

2023科隆游戏展:虚幻5游戏百花齐放,云渲染助力虚幻5高速渲染

8月23日,欧洲权威级游戏展示会——科隆游戏展拉开帷幕。今年的参展游戏也相当给力,数十款游戏新预告片在展会上公布,其中有不少游戏使用虚幻5引擎制作,开创了游戏开发新纪元。 虚幻5游戏百花齐放,渲染堪比电影级效果 …...

Spark大数据分析与实战笔记(第一章 Scala语言基础-2)

文章目录 章节概要1.2 Scala的基础语法1.2.1 声明值和变量1.2.2 数据类型1.2.3 算术和操作符重载1.2.4 控制结构语句1.2.5 方法和函数 章节概要 Spark是专为大规模数据处理而设计的快速通用的计算引擎,它是由Scala语言开发实现的,关于大数据技术&#xf…...

Linux 下 Mysql 的使用(Ubuntu20.04)

文章目录 一、安装二、使用2.1 登录2.2 数据库操作2.2.1 创建数据库2.2.2 删除数据库2.2.3 创建数据表 参考文档 一、安装 Linux 下 Mysql 的安装非常简单,一个命令即可: sudo apt install mysql-server检查安装是否成功,输入: …...

牛客练习赛114

A.最后有0得数肯定是10得倍数&#xff0c;然后直接排序即可 #include<bits/stdc.h> using namespace std; const int N 1e610,mod1e97; int n; void solve(){cin>>n;vector<int> a(n);for(auto&i:a) cin>>i;sort(a.begin(),a.end(),greater<&g…...

Http与Https

1.简单介绍 HTTP&#xff1a;最广泛应用的网络通信协议&#xff0c;基于TCP&#xff0c;数据传输简单高效&#xff0c;数据是明文。 HTTPS&#xff1a;是HTTP的加强版&#xff0c;是HTTPSSL。在HTTP的基础上加了安全机制&#xff0c;一方面保证数据的安全传输&#xff0c;另一…...

前端通信(渲染、http、缓存、异步、跨域)自用笔记

SSR/CSR&#xff1a;HTML拼接&#xff1f;网页源码&#xff1f;SEO/交互性 SSR &#xff08;server side render&#xff09;服务端渲染&#xff0c;是指由服务侧&#xff08;server side&#xff09;完成页面的DOM结构拼接&#xff0c;然后发送到浏览器&#xff0c;为其绑定状…...

43.227.198.x怎么检查服务器里是否中毒情况?

要检查43.227.198.1服务器是否中毒&#xff0c;可以执行以下步骤&#xff1a; 运行杀毒软件&#xff1a;运行已安装的杀毒软件进行全盘扫描&#xff0c;查看是否有病毒或恶意软件。如果发现病毒或恶意软件&#xff0c;立即将其删除或隔离。 检查系统文件&#xff1a;检查服务器…...

Sentinel dashboard无法查询到应用的限流配置问题以及解决

一。问题引入 使用sentinle-dashboard控制台 项目整体升级后&#xff0c;发现控制台上无法看到流控规则了 之前的问题是无法注册上来 现在是注册上来了。结果看不到流控规则配置了。 关于注册不上来的问题&#xff0c;可以看另一篇文章 https://blog.csdn.net/a15835774652/…...

【Spring Boot】社交网站中验证用户登录的checkUser方法

public boolean checkUser(User user) {User userInDb userRepository.findByUsername(user.getUsername());if (userInDb ! null && userInDb.getPassword().equals(user.getPassword())) {return true;} else {return false;}} } 这段代码是UserService类中的checkU…...

edge浏览器进行qq截图过保爆决过程

edge浏览器进行qq截图过保解决过程 参考&#xff1a;电脑截屏曝光特别高怎么解决&#xff1f; - 知乎 问题展示 饱和度过高&#xff0c;刺眼 1. 在chrome地址栏输入chrome://flags/ 2. 在页面的搜索栏搜索force color profile 3. 在选项中选择所对应的颜色管理。&#xff08…...

【Linux】Linux在防火墙firewall中开放或删除某端口

在生产中往往是不能关闭防火墙firewall的&#xff08;以下操作是在linux中执行的&#xff09; #补充一下查看防火墙的命令 #查看防火墙状态 systemctl status firewalld #关闭防火墙 systemctl stop firewalld #重启防火墙 systemctl restart firewalld #启动防火墙 systemctl …...

C++构造函数初始化列表

构造函数的一项重要功能是对成员变量进行初始化&#xff0c;为了达到这个目的&#xff0c;可以在构造函数的函数体中对成员变量一一赋值&#xff0c;还可以采用初始化列表。 C构造函数的初始化列表使得代码更加简洁&#xff0c;请看下面的例子&#xff1a; #include <iostre…...

c语言调用mciSendString播放音乐

如下所示&#xff0c;这是一个使用c语言调用系统方法mciSendString()&#xff0c;让系统播放音乐的示例&#xff1a; baihuaxiang 代码&#xff1a; #include <graphics.h> #include <Windows.h> #include <mmsystem.h>#pragma comment(lib,"WINMM.LIB…...

Qt:qRegisterMetaType为Qt信号和槽添加自定义参数类型

背景 qt信号和槽之间的参数传递默认只能传递qt内部已有的类型&#xff0c;例如QString等&#xff0c;若我们自定义类型作为参数时&#xff0c;虽然编译不会报错&#xff0c;但运行时会提示connect无效&#xff0c;无法识别自定义的类。 此时需要我们将自定义类进行注册&#…...

ffmpeg rtp发送video和audio并播放

发送h264 video ffmpeg -re -stream_loop -1 -i h264.mp4 -vcodec h264 -f rtp rtp://127.0.0.1:5006SDP: v0 o- 0 0 IN IP4 127.0.0.1 sNo Name cIN IP4 127.0.0.1 t0 0 atool:libavformat LIBAVFORMAT_VERSION mvideo 5006 RTP/AVP 96 artpmap:96 H264/90000 afmtp:96 packe…...

CSS打字回删效果动画源码

<!DOCTYPE html> <html lang="en"> <head><meta charset...

Vue全局后置守卫

全局后置守卫 一、在 router 目录下的 index.js 文件中配置全局后置守卫。 import Vue from vue import VueRouter from vue-router Vue.use(VueRouter)import Home from ../views/Home.vue import About from ../views/About.vue import Login from ../views/Login.vueconst…...

【Go语言】基于Socket编程的P2P通信程序示例

Go语言的Socket编程实现为开发者提供了一种高效且强大的方式来实现网络通信。通过Go语言的并发模型和内置的网络库&#xff0c;如net包&#xff0c;开发者可以轻松地创建基于套接字的通信应用。Go语言的goroutine和channel机制使并发处理变得简单&#xff0c;能够轻松处理多个连…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...