Haproxy搭建Web群集(群集)

news2024/9/26 5:24:18

HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。

HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

HAProxy实现了一种事件驱动**, **单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。

包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter和 Tuenti在内的知名网站,及亚马逊网络服务系统都使用了HAProxy。

负载均衡

二层负载均衡(Mac)

用于虚拟mac地址方式,外部对虚拟mac地址请求,负载均衡接收后分配给后端实际的mac地址相应。

三层负载均衡(IP)

一般用于虚拟ip地址的方式,外部对虚拟IP地址请求,负载均衡接收后分配给后端实际的的IP地址相应。

四层负载均衡(Tcp)

在三层负载均衡的基础上,用IP+Port接收请求,再转发到对应的机器上。

七层负载均衡(Http)

根据虚拟的url或者IP,主机名接收请求,再转发到相应的处理服务器上。

实验图:

利用haproxy实现web服务器的代理及高可用,负载均衡;

实验主机:101 102 103 104

101:haproxy服务器

102:web01

103:web02

104:客户端进行测试

首先配置两台web服务器,这里采用源码包的方式进行安装nginx;因为两个网站的步骤大致一样,就是测试文件不一样;

开启同步会话;仅限102 103

安装编译环境及用到的工具;

再创建程序用户并指定登录shell;

将源码包拉到两个服务器开始解压等操作;

cd到解压目录开始配置;

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

然后编译及编译后安装;

命令优化;

然后取消同步会话功能;创建各自的测试文件;

然后关闭两个服务器的防火墙及内核安全机制;

检查配置文件语句是否有错误,然后开启该服务,并进行查询;

开始配置haproxy;

先关闭防护墙及内核安全机制;

安装编译环境;

把压缩包拉进去开始解压及编译;

解压后cd到解压目录开始编译,且编译的时候需要指定内核的版本;


然后编译后安装;make install

建立haproxy的配置文件;

然后创建服务脚本;

给这个系统管理脚本一个执行权;并设置成系统服务;

修改haproxy的配置文件;

把listen模块的删除掉,自己写语句;

补充:里面的单位都是毫秒;1秒等于1000毫秒;

语句解释:

各个语句的解释

global

        log 127.0.0.1   local0     \\配置日志记录,local0为日志设备,默认是系统日志

        log 127.0.0.1   local1 notice      \\日志级别为notice

        #log loghost    local0 info    

        maxconn 4096       \\最大连接数

        uid 99           \\用户uid

        gid 99           \\用户gid

        daemon        \\以守护进程的方式运行

        #debug      \\调试模式,输出启动信息到标准输出

        #quiet     \\安静模式,启动时无输出

defaults

        log     global           \\使用globle中定义的日志

        mode    http           \\模式为http

        option  httplog         \\采用http的格式记录日志

        option  dontlognull     \\保证HAProxy不记录上级负载均衡发送过来的用于检测状态数据的心跳包

        retries 3             \\检查节点连接失败的次数,超过3次认为节点不可用

       # redispatch         \\当负载很高时,自动结束当前队列处理比较久的连接

        maxconn 2000      \\最大连接数

        contimeout      5000         \\连接超时时间ms

        clitimeout      50000        客户端超时时间ms

        srvtimeout      50000              服务器超时时间ms

listen  webcluster 0.0.0.0:80        \\定义群集和监听的端口号

        option  httpchk GET /index.html    \\检查服务器的index.html文件,心跳检测URL设置

        balance roundrobin      \\负载均衡的调度算法为轮询

        server  inst1 192.168.1.61:80 check inter 2000 fall 3        \\定义在线节点

        server  inst2 192.168.1.62:80 check inter 2000 fall 3          

check inter 2000是检测心跳频率(每2000ms检测一次),fall 3是3次失败认为服务器不可用

在新版本中,超时的设置做了调整,具体如下

contimeout 被 timeout connect取代:定义haproxy将客户端请求转发至后端服务器所等待的超时时长

clitimeout 被timeout client取代:客户端非活动状态的超时时长,是 app 连接 haproxy的时间  

srvtimeout 被timeout server取代:客户端与服务器端建立连接后,等待服务器端的超时时长,是haproxy 连接后端web服务器的时间.

注释:

haproxy共有八种调度算法

1) balance leastconn   最少连接数

2) balance roundrobin  轮询

3) balance source      根据客户端IP进行哈希的方式

4) static-rr    根据权重

5) uri    根据请求的URI

6) url_param    根据请求的URl参数

7) hdr(name)   根据HTTP请求头来锁定每一次HTTP请求

8) rdp-cookie(name)   根据cookie(name)来锁定并哈希每一次TCP请求

chroot /usr/share/haproxy  \\也就是改变程序执行时所参考的根目录位置,如果有此代码,需要创建此目录

关于日志级别

static Level DEBUG

DEBUG Level指出细粒度信息事件对调试应用程序是非常有帮助的。

static Level INFO

INFO level表明 消息在粗粒度级别上突出强调应用程序的运行过程。

static Level WARN

WARN level表明会出现潜在错误的情形。

static Level ERROR

ERROR level指出虽然发生错误事件,但仍然不影响系统的继续运行。

static Level FATAL

FATAL level指出每个严重的错误事件将会导致应用程序的退出。

另外,还有两个可用的特别的日志记录级别:

static Level ALL

ALL Level是最低等级的,用于打开所有日志记录。

static Level OFF

OFF Level是最高等级的,用于关闭所有日志记录。

启动该服务;

再开启另外的客户机进行测试;104

对于haporxy的日志进行设置;

添加lcoal3的语句;

编写haproxy日志文件;

注释:

$ModLoad imudp   采集日志的协议UDP

$UDPServerRun 514    指定日志采集使用的端口号

local3.*     /var/log/haproxy.log   指定日志存放位置

最后重启采集日志的服务(rsyslog)及haproxy服务;

再用客户机进行试验;并检查haproxy上的日志文件中有没有采集到信息;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“订单循环激励:企业增长新引擎“

在当今竞争白热化的市场洪流中,如何独辟蹊径,让您的企业成为万众瞩目的焦点,吸引并留住海量用户的心?今天,让我们深入探索一种革命性的营销新策略——“订单循环激励模式”,它不仅能够激发用户的参与热情&a…

【大模型学习】快速下载大模型权重和评估大模型占用显存

一、下载模型 1.1 使用Hugging Face Hub下载模型 首先,我们需要设置环境变量以使用镜像站点加速下载。 主要要先安装相应的函数库: pip install huggingface_hub import os os.environ[HF_ENDPOINT] https://hf-mirror.com from huggingface_hub i…

【Redis】持久化机制最全解析

RDB持久化 RDB全称Redis Database Backup file(Redis数据备份文件)。通过将Redis数据集的快照保存到磁盘上的二进制文件中来实现。生成 RDB 文件的过程可以通过手动命令或自动触发。 实现原理 开始 BGSAVE: Redis 主进程接收到 BGSAVE 命…

【数据结构】五、树:2.二叉树(完全二叉树、前中后序遍历)

二、二叉树Binary tree 文章目录 二、二叉树Binary tree1.逻辑结构1.1斜树1.2满二叉树❗1.3完全二叉树1.4排序二叉树BST1.5平衡二叉树AVL1.6线索二叉树 2.性质3.存储结构3.1顺序存储3.2链式存储 4.遍历4.1前序遍历4.1.1前序非递归方式 4.2中序遍历4.2.1中序非递归方式 4.3后序遍…

java 解析 PDF OFD 发票 部分文字缺失

1、pdfbox https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox 到这里用最新的版本 最近碰到发票各式各样,千奇百怪:记录其中一个 解析出来是:缺少一个通字 发票好几处都缺少文字,解析出来的是 一个 圆点 原因&…

赋能未来园区:TSINGSEE视频AI智能管理平台如何引领园区管理智慧化转型

一、建设背景 随着经济的不断发展,园区产业集聚发展已成为趋势,园区逐渐成为产业聚集的重要载体。目前,国内现有的大部分园区的管理方式比较粗放、单一,范围局限于安全、环境等方面且不成体系,并且没有覆盖到应急、消…

计算机网络408考研 2014

1 计算机网络408考研2014年真题解析_哔哩哔哩_bilibili 1 111 1 11

电脑怎么格式化清除所有数据

在出售、捐赠或维修电脑之前或需要处理敏感数据时,格式化硬盘并彻底清除所有数据还是很有必要的。本篇文章将详细介绍如何安全、彻底地格式化你的电脑。 一、准备工作 在开始格式化之前,有一些重要的准备工作需要完成。这些步骤为了能帮你顺利进行格式化…

Java并发编程——线程创建的4种常见方式

文章目录 一、继承 Thread 类创建创建线程类1.1 Thread 类解析1.2 使用方法1.3 优缺点 二、实现 Runable 接口创建线程类2.1 Runable 接口解析2.2 使用方法2.3 优缺点 三、使用 Callable 和 FutureTask 创建线程3.1 Callable 接口解析3.2 RunnableFuture 接口解析3.3 Future 接…

CV/NLP【面经】

CV/NLP【面经】 1x1conv的作用多头注意力与普通注意力的区别:过拟合怎么解决随机森林和GBDT的区别决策树是怎么做回归任务的注意力机制参数量和计算量 1x1conv的作用 1.首先我们需要明确卷积的输入输出不是一个平面,而是一个长方体。所以1x1conv实际上对…

CTFHUB-web-RCE-命令注入

开启题目 检查网页显示内容,可以直接看到源代码。大致意思是:检查用户输入的 GET 请求,判断用户是否输入了 ip 信息。如果输入了 ip 信息,则使用用户输入的这个 ip 数据执行一个 shell 命令 "ping -c 4" 。 在输入框中…

C语言----用指针数组构造字符串数组

用指针数组构造字符串数组 实例说明: 本实例实现输入一个星期中对应的第几天,可显示其英文写法。例如,输入“4”,则显示星期四所对应的英文名。 实现过程: (1)打开 Visual C 6.0开发环境,新建一个C源文件…

【Matlab】零阶保持法:连续状态空间方程(含噪声,非线性)离散化处理方法

常用的离散化方法:零阶保持器(zero-order hold,ZOH)、欧拉法(Euler)、一阶保持器(First-order hold,FOH)。最常用的是前两种。 0.零阶保持器(ZOH&#xff09…

软文写作必须掌握的技巧有哪些?

现代互联网飞速发展的时代,硬广逐渐变的效果越来越差,而软文推广已经成为网络营销的重要组成部分了,一篇好的软文往往能为你的产品、网站带来意想不到的效果。 用于做营销的软文,我们不能像写普通文章那样随意。一篇优质的软文会让…

AI面试:未来招聘的新常态?

一、引言:招聘变革的序章 在数字化浪潮的推动下,各行各业正经历着前所未有的变革,而人力资源管理作为企业发展的核心驱动力之一,也迎来了其转型升级的关键时刻。传统招聘流程中,简历筛选、初步面试、复试乃至终面&…

AI的IDE:Cursor配置虚拟python环境(conda)

AI的IDE:Cursor配置虚拟python环境(conda) Cursor是一个AI的IDE,是从VSCode源代码中fork出来的,专注于和AI一起Coding而生。https://www.cursor.com/是官方地址。最近开始逐渐的试用Cursor,之前一直是VSCod…

vue3数字动画插件countup.js

countup.js 是一个轻量级的 JavaScript 库,允许你为网站上显示统计数据或计数器时平滑地动画化数字。CountUp 类被用来创建计数器实例,可以平滑地从一个数值变化到另一个数值。 只是用户视觉更好一些。 1、安装插件 npm i countup.js2、个人是封装了组件…

前端性能优化-用户交互体验优化

前言 本文总结一些常见的用户交互体验优化的方法 骨架屏 使用 loading 图或者是骨架屏,可以一定程度上减少用户等待加载的焦虑感,让用户感觉没有等太久,这就是用户体验级的优化。 PS: 可以利用 webpack 实现骨架屏的自动生成 图…

Grafana动态视图在转转推送系统中的应用

1 背景 转转的推送系统为自研产物,实现过程简述为:对外提供一个接入层,以多次MQ转发形式进行多系统交互,内部包括:推送内容过滤、免打扰策略、厂商通道分发等逻辑,最终发起http请求至厂商通道,…

【Android Studio】新new UI老UI的切换

Android studio新版UI 风格和老版本风格切换: File-> Settings-> Appearance-> New UI-> Enable NewUI选项