高效多用的群集-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 ,不断刷新浏览器测试负载均衡效果

 

 

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

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

相关文章

jmeter模拟多用户并发

一、100个真实的用户 1、一个账号模拟100虚拟用户同时登录和100账号同时登录 区别 (1)1个账号100个人用,同时登录; (2)100个人100个账号,同时登录。 相同 (1)两个都…

【ES6】—数组的扩展

一、类数组/ 伪数组 1. 类/伪数组: 并不是真正意义的数组,有长度的属性,但无法使用Array原型上的方法 let divs document.getElementsByTagName(div) console.log(divs) // HTMLCollection []let divs2 document.getElementsByClassName("xxx&q…

【业务功能篇73】分布式ID解决方案

业界实现方案 1. 基于UUID2. 基于DB数据库多种模式(自增主键、segment)3. 基于Redis4. 基于ZK、ETCD5. 基于SnowFlake6. 美团Leaf(DB-Segment、zkSnowFlake)7. 百度uid-generator() 1.基于UUID生成唯一ID UUID:UUID长度128bit,32个16进制字符,占用存储空…

Kdab QML (part9)自由缩放时钟

文章目录 Kdab QML (part9)自由缩放时钟代码详细解释运行截图 Kdab QML (part9)自由缩放时钟 代码 import QtQuick 2.15 import QtQuick.Window 2.15Window {id: rootwidth: 500height: 500visible: truecolor: "lightgrey"title: qsTr("Hello World")It…

springboot2+redis 订阅发布,解决接收消息累计线程到内存溢出,使用自定义线程池接收消息

pom 添加redis <!-- redis 缓存操作 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> 发布消息 import lombok.extern.slf4j.Slf4j; import o…

【一】ubuntu20.04上搭建containerd版( 1.2.4 以上)k8s及kuboard V3

k8s 部署全程在超级用户下进行 sudo su本文请根据大纲顺序阅读&#xff01; 一、配置基础环境&#xff08;在全部节点执行&#xff09; 1、安装docker 使用apt安装containerd 新版k8s已经弃用docker转为containerd&#xff0c;如果要将docker改为containerd详见&#xff1a…

21.1 CSS 文字样式

1. 字体倾斜 font-style属性: 为文本设置字体样式.常用取值: normal: 正常显示文本. 快捷键: fstab. italic: 显示斜体文本. 快捷键: fsntab.<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>fo…

MySQL高级篇——MySQL架构篇3(用户与权限管理)

目录 1 用户管理1.1 登录MySQL服务器1.2 创建用户1.3 修改用户1.4 删除用户1.5 设置当前用户密码1.6 修改其它用户密码1.7 MySQL8密码管理(了解) 2 权限管理2.1 权限列表2.2 授予权限的原则2.3 授予权限2.4 查看权限2.5 收回权限 3 权限表3.1 user表3.2 db表3.3 tables_priv表和…

实现外网访问本地服务

最近开发需要其他项目组的人访问我本地服务测试,但又不在同一个地方,不能使用内网访问,所以需要外网访问本地服务功能. 条件: 1.需要一台具备公网IP的服务器 我用的服务器是windows,电脑也是Windows系统 2.下载frp 软件,只需要下载一份就可以了,分别放到服务器上和本地目录既…

Python - 面向对象的属性,类方法,静态方法,实例方法的区别及用法详解

一. 前言 在Python的面向对象编程中&#xff0c;类属性和实例属性是两个不同的概念&#xff0c;它们在作用域和使用方式上有所区别。在Python中的面向对象编程中有三种方法&#xff1a;实例方法、类方法和静态方法&#xff0c;它们之间的差异主要体现在参数传递和调用方式上。…

BDA初级分析——可视化基础

一、可视化的作用 数据可视化——利用各种图形方式更加直观地呈现数据的过程 可视化的作用 1、更快地理解数据&#xff0c;找出数据的规律和异常 2、讲出数据背后的故事&#xff0c;辅助做出业务决策 3、给非专业人士提供数据探索的能力 数据分析问题如何通过可视化呈现&am…

基于前端技术原生HTML、JS、CSS 电子病历编辑器源码

电子病历系统采取结构化与自由式录入的新模式&#xff0c;自由书写&#xff0c;轻松录入。实现病人医疗记录&#xff08;包含有首页、病程记录、检查检验结果、医嘱、手术记录、护理记录等等。&#xff09;的保存、管理、传输和重现&#xff0c;取代手写纸张病历。不仅实现了纸…

混币器——隐私交易的天堂,还是洗钱犯罪的聚集地?

据美国财政部官网&#xff0c;Tornado Cash 联创 Roman Storm 已被 FBI 和国税局逮捕&#xff0c;罪名是串谋洗钱、串谋经营未经许可的资金传输业务以及串谋违反制裁规定&#xff0c;另一创始人 Roman Semenov仍然在逃。 FBI局长Christopher A. Wray说&#xff1a;“今天的公告…

音视频FAQ(二)视频直播延时高

摘要 延时高是实时互动技术中常见的问题之一&#xff0c;解决延时高问题需要综合考虑网络、设备、编解码算法等多个因素。解决方案包括优化设备端延时、优化网络传输延时和使用UDP进行音视频传输等。在选择音视频传输协议时&#xff0c;需要综合考虑实际需求和网络条件&#x…

MyBatis进阶:告别SQL注入!MyBatis分页与特殊字符的正确使用方式

目录 引言 一、使用正确的方式实现分页 1.1.什么是分页 1.2.MyBatis中的分页实现方式 1.3.避免SQL注入的技巧 二、特殊字符的正确使用方式 2.1.什么是特殊字符 2.2.特殊字符在SQL查询中的作用 2.3.如何避免特殊字符引起的问题 2.3.1.使用CDATA区段 2.3.2.使用实体引…

Docker容器与虚拟化技术:Dockerfile部署LNMP

目录 一、理论 1.LNMP架构 2.背景 3.Dockerfile部署LNMP 3.构建Nginx镜像 4.构建MySQL容器 5.构建PHP镜像 6.启动 wordpress 服务 二、实验 1.环境准备 2.构建Nginx镜像 3.构建MySQL容器 4.构建PHP镜像 5.启动 wordpress 服务 三、问题 1.构建nginx镜像报错 …

“解放 Arweave“优惠:4EVERLAND的无缝上传教程

为了进一步展示 Arweave 的能力&#xff0c;4EVERLAND 骄傲地推出了“解放 Arweave”活动。我们认识到 Arweave 在数据完整性、抗审查性以及长期保存方面的无与伦比的优势&#xff0c;因此我们与这个去中心化的存储巨头建立了强大的集成。 克服了过去与加密货币支付逻辑相关的…

常见的数据库备份方法,常用的数据库备份方法有哪三种

数据库作为存储和管理这些信息的核心&#xff0c;其安全性和稳定性尤为重要。因此&#xff0c;定期进行数据库备份是保护数据完整性的重要途径。下面我们就详细介绍几种常见的数据库备份方法。 1.全量备份 全备份是指备份数据库中的所有数据和元数据。这种方法通常用于开发或测…

如何获取旧版本的谷歌浏览器

1、明确自己要的版本号 2、访问Chromium History Versions Download ↓ 3、选择系统&#xff0c;选择版本号 4、下载安装

防火墙组建双击热备后老是主备自动切换怎么处理?

环境: 2台主备防火墙 8.0.75 AF-2000-FH2130B-SC 核心交换机 H3C S6520-26Q-SI version 7.1.070, Release 6326 问题描述: 防火墙组建双击热备后老是主备自动切换怎么处理? 查看切换日志,本地故障值小于对端,经常自动切换导致eth3接口业务老是自动断开,切换频率,…