小阿轩yx-Haproxy搭建Web群集

小阿轩yx-Haproxy搭建Web群集

Haproxy 简介

  • 提供高可用性

  • 能做出标准的负载均衡

  • 支持虚拟主机

  • 具备健康检查能力

  • 能用于各式各样的代理

  • 轻量级代理环境

解决方案优势

  • 免费

  • 快速

  • 可靠

特性

  • 特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。

  • 运行在当前的硬件上,完全可以支持数以万计的并发连接。

  • 并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

  • 实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。

  • 多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。

  • 事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。

弊端

  • 在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。

案例分析

案例概述

Haproxy
  • 是目前比较流行的一种群集调度工具
  • 同类群集调度工具有很多,如 LVS 和Nginx。
  • 相比较而言,LVS 性能最好,但是搭建相对复杂;
  • Nginx的upstream模块支持群集功能,但是对群集节点健康检查功能不强,高并发性能没有 Haproxy 好。

官方网站

http://www.haproxy.org/

案例前置知识点

HTTP 请求
  • 通过 URL,访问网站使用的协议是 HTTP 协议,此类请求一般称为 HTTP 请求。
  • 当使用浏览器访问某一个 URL,会根据请求 URL 返回状态码
  • 通常正常的状态码为 2xx、3xx(如200、301),如果出现异常会返回 4xx、5xx(如 400、500)。

请求的两种方式

  • GET方式
  • POST方式
负载均衡常用调度算法
LVS、Haproxy、Nginx最常用的调度算法有三种

RR(Round Robin)

  • 是最简单最常用的一种算法,即轮询调度

LC(Least Connections)

  • 即最小连接数算法,根据后端的节点连接数大小动态分配前端请求

SH(Source Hashing)

  • 即基于来源访问调度算法,此算法用于一些有 Session 会话记录在服务器端的场景,可以基于来源的 IP、 Cookie 等做群集调度
常见的 Web 群集调度器

分为两种

  • 软件
  • 硬件

软件

  • 通常使用开源的 LVS 、Haproxy、Nginx

硬件

  • 一般使用比较多的是 F5
  • 也有很多人使用国内的一些产品,如梭子鱼、绿盟等

案例环境

案例需求
  • 安装 nginx 、haproxy
  • Haproxy、nginx 配置
案例实施

关闭防火墙、内核机制

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0

编译安装 nginx 服务器

[root@localhost ~]# yum -y install pcre-devel zlib-devel gcc*

添加一个用户

[root@localhost ~]# useradd -M -s /sbin/nologin nginx

解压 nginx

[root@localhost ~]# tar zxvf nginx-1.12.0.tar.gz

进入

[root@localhost ~]# cd nginx-1.12.0/

配置

[root@localhost nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module

执行 make

[root@localhost nginx-1.12.0]# make && make install

安装完后的默认信息

  • 默认安装目录:/usr/local/nginx
  • 默认日志:/usr/local/nginx/logs/
  • 默认监听:80
  • 默认 Web 日录: /usr/local/nginx/html

 建立连接

[root@localhost nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

进入目录

[root@localhost nginx-1.12.0]# cd /usr/local/nginx/html/

建立测试页面

[root@localhost html]# echo "test web01" > test.html

显示是否安装成功

[root@localhost ~]# nginx -t

开启 nginx 进程

[root@localhost ~]# nginx

查看状态信息

[root@localhost ~]# netstat -anpt | grep nginx

编译安装 Haproxy

关闭防火墙、内核机制

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0

使用 haproxy-1.5.19.tar.gz安装包进行编译安装

[root@localhost ~]# yum -y install pcre-devel bzip2-devel gcc*

解压

[root@localhost ~]# tar zxvf haproxy-1.5.19.tar.gz

进入 haproxy

[root@localhost ~]# cd haproxy-1.5.19/

make 执行

[root@localhost haproxy-1.5.19]# make TARGET=linux26
  •  TARGET=linux26 #内核版本,使用uname -r查看内核,如:2.6.18-371.el5,此时该参数就为linux26;kernel 大于2.6.28的用:TARGET=linux2628
  • ARCH=x86_64 #系统位数
  • PREFIX=/usr/local/haprpxy #/usr/local/haprpxy为haprpxy安装路径
[root@localhost haproxy-1.5.19]# make install
Haproxy 服务器配置

建立 haproxy 配置文件

创建配置文件目录

[root@localhost haproxy-1.5.19]# mkdir /etc/haproxy

复制文件

[root@localhost haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/

将 haproxy.cfg 文件复制到配置文件目录

[root@localhost haproxy-1.5.19]# cp examples/haproxy.init /etc/init.d/haproxy

建立链接

[root@localhost haproxy-1.5.19]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

添加执行权限

[root@localhost ~]# chmod +x /etc/init.d/haproxy

添加为系统服务

[root@localhost ~]# chkconfig --add haproxy

开机自启

[root@localhost ~]# chkconfig haproxy on

Haproxy 配置介绍

[root@localhost haproxy-1.5.19]# vim /etc/haproxy/haproxy.cfg 
global
        //配置日志记录,local0为日志设备,默认是系统日志
        log 127.0.0.1   local0
        //日志级别为notice
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        //最大连接数
        maxconn 4096
        //用户uid
        uid 99
        //用户gid
        gid 99
        //以守护进程的方式运行
        daemon
        //调试模式,输出启动信息到标准输出
        #debug
        //安静模式,启动时无输出
        #quiet

defaults
        //使用globle中定义的日志
        log     global
        //模式为http
        mode    http
        //采用http的格式记录日志
        option  httplog
        //保证HAProxy不记录上级负载均衡发送过来的用于检测状态数据的心跳包
        option  dontlognull
        //检查节点连接失败的次数,超过3次认为节点不可用
        retries 3
        //当负载很高时,自动结束当前队列处理比较久的连接
       # redispatch   
        //最大连接数       
        maxconn 2000
        //连接超时时间ms(毫秒)
        contimeout      5000
        //客户端超时时间ms
        clitimeout      50000
        //服务器超时时间ms
        srvtimeout      50000

//定义群集和监听的端口号
listen  webcluster 0.0.0.0:80
        //检查服务器的index.html文件,心跳检测URL设置
        option  httpchk GET /index.html
        //负载均衡的调度算法为轮询
        balance roundrobin
        //定义在线节点
        //可在每个服务器后加weight设置权重值
        server  inst1 192.168.1.61:80 check inter 2000 fall 3 weight 1
        server  inst2 192.168.1.62:80 check inter 2000 fall 3 weight 2
  • check inter 2000是检测心跳频率(每2000ms检测一次),fall 33次失败认为服务器不可用 

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

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

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

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

 haproxy共有八种调度算法

  • balance leastconn   最少连接数
  • balance roundrobin  轮询
  • balance source      根据客户端IP进行哈希的方式
  • static-rr    根据权重
  • uri    根据请求的URI
  • url_param    根据请求的URl参数
  • hdr(name)   根据HTTP请求头来锁定每一次HTTP请求
  • rdp-cookie(name)   根据cookie(name)来锁定并哈希每一次TCP请求

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

启动服务

[root@localhost ~]# systemctl start haproxy

 测试 Web 群集

[root@localhost ~]# curl 192.168.1.60
test web01

方法一

[root@localhost haproxy-1.4.24]# vim /etc/haproxy/haproxy.cfg
global
        #log 127.0.0.1   local0
        #log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096
        chroot /usr/share/haproxy
        uid 99
        gid 99
        daemon
        #debug
        #quiet
        log /dev/log local0 info
        log /dev/log local0 notice
[root@localhost haproxy-1.4.24]# touch /etc/rsyslog.d/haproxy.conf
[root@localhost haproxy-1.4.24]# vi /etc/rsyslog.d/haproxy.conf
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
    then -/var/log/haproxy/haproxy-info.log & ~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
    then -/var/log/haproxy/haproxy-notice.log & ~

重启服务

[root@localhost haproxy-1.4.24]# service rsyslog restart
[root@localhost ~]# /etc/init.d/haproxy restar

查看消息日志

[root@localhost ~]# cat /var/log/haproxy/haproxy-info.log

方法二

编辑/etc/haproxy/haproxy.conf

[root@localhost ~]# vi /etc/haproxy/haproxy.cfg
global
 log 127.0.0.1 local3

#local3是设备,对应于 /etc/rsyslog.conf中的配置,默认回收info的日志级别

编写haproxy日志文件

[root@localhost ~]# vim  /etc/rsyslog.d/haproxy.conf
$ModLoad imudp
$UDPServerRun 514
local3.* /var/log/haproxy.log

$ModLoad imudp   采集日志的协议UDP

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

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

配置rsyslog的主配置文件,开启远程日志(可以不配)

[root@localhost ~]# vim /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS=”-c 2 -r -m 0″
  • #-c 2 使用兼容模式,默认是 -c 5
  • #-r 开启远程日志
  • #-m 0 标记时间戳。单位是分钟,为0时,表示禁用该功能

重启haproxy和rsyslog服务

[root@localhost ~]# systemctl restart rsyslog
[root@localhost ~]# systemctl restart haproxy

访问网站后查看日志

[root@localhost ~]# cat /var/log/haproxy.log

小阿轩yx-Haproxy搭建Web群集

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

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

相关文章

明明已经安装了python中的某个库,但是还是报错ModuleNotFoundError: No module named ‘sklearn‘

问题: 明明已经安装了python中的某个库,但是还是报错ModuleNotFoundError: No module named sklearn 解决方法: 卸载重新安装一下即可 pip uninstall scikit-learn pip install scikit-learn 成功解决!!&#xff…

高创新 | CEEMDAN-VMD-GRU-Attention双重分解+门控循环单元+注意力机制多元时间序列预测

目录 效果一览基本介绍模型设计程序设计参考资料 效果一览 基本介绍 高创新 | CEEMDAN-VMD-GRU-Attention双重分解门控循环单元注意力机制多元时间序列预测 本文提出一种基于CEEMDAN 的二次分解方法,通过样本熵重构CEEMDAN 分解后的序列,复杂序列通过VMD…

【Threejs进阶教程-着色器篇】1. Shader入门(ShadertoyShader和ThreejsShader入门)

ThreejsShader入门 关于本Shader教程认识ShaderShader和Threejs的关系WebGLShaderThreejsShaderShadertoyShader其他Shader 再次劝退数学不好的人从ShaderToy开始Shader的代码是强类型glsl的类型,变量,内置函数,关键字关于uv基于UV的颜色处理…

PCL 点云FPFH特征描述子

点云FPFH特征描述子 一、概述1.1 FPFH概念1.2 基本原理1.3 PFH和FPFH的区别二、代码实现三、结果示例一、概述 1.1 FPFH概念 快速点特征直方图(FPFH)描述子:计算 PFH 特征的效率其实是十分低的,这样的算法复杂度无法实现实时或接近实时的应用。因此,这篇文章将介绍 PFH 的简…

【java web 01】3小时快速学习前端知识(收藏备用)

3小时快速学习前端知识【全栈专用】 一、教程简介1.1 Java 开发为何学Web技术1.2 课程设计1.3 课前准备 二、HTML2.1 Html简介2.1.1 HTML、CSS、JS分别有什么作用2.1.2 什么是HTML2.1.3 什么是标记语言 2.2 Hello,Html2.2.1 HTML基础结构2.2.2 专业词汇2.2.3 语法细…

面试经典150题

合并两个有序数组 两个按非递减顺序排列的整数数组nums1和nums,另有两个整数m和n,分别表示nums1和nums2中的元素数组。 请合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。 直接合并后排序 class Solution { public:void merge(…

解码Python字符串:‘r‘、‘b‘、‘u‘和‘f‘前缀的全面指南

📖 正文 1 字符串前加’r’ 表示原始字符串,消除转义 print(abc\nde) # abc # deprint(rabc\nde) # abc\nde在下面这个列子中,如果不在路径字符串前面加r那么,路径中的空格就会出现问题 print(rD:\01 programming\09python\py…

【ARM系列】GIC600AE功能安全

GIC600AE功能安全 1.GIC600AE主要安全机制分布图:2.Fault Management Unit1.GIC block的错误如何上报到FMU?2.汇总到FMU的错误如何上报?3.Error Record format4.Safety Mechanism GIC600AE在原GIC600版本基础上增加了FuSa功能,所增…

RIP环境下的MGRE网络

首先将LSP的IP地址进行配置 其他端口也进行同样的配置 将serial3/0/1配置25.0.0.2 24 将serial4/0/0配置35.0.0.2 24 将GE0/0/0配置45.0.0.2 24 进行第二步 R1与R5之间使用ppp的pap认证 在R5中进行配置 在aaa空间中创建账号和密码 将这个账号和密码使用在ppp协议中 然后…

zdppy+onlyoffice+vue3解决文档加载和文档强制保存时弹出警告的问题

解决过程 第一次排查 最开始排查的是官方文档说的 https://api.onlyoffice.com/editors/troubleshooting#key 解决方案。参考的是官方的 https://github.com/ONLYOFFICE/document-server-integration/releases/latest/download/Python.Example.zip 基于Django的Python代码。 …

使用 Hugging Face 模型时遇到的问题

题意: I load a float32 Hugging Face model, cast it to float16, and save it. How can I load it as float16? 我加载了一个float32的Hugging Face模型,将其转换为float16,并保存了。我该如何以float16的形式加载它呢? 问题…

2.硬盘和内存区别

2.2 磁盘比内存慢几万倍? 存储器方面的设备,分类比较多,那我们肯定不能只买一种存储器,比如你除了要买内存,还要买硬盘,而针对硬盘我们还可以选择是固态硬盘还是机械硬盘。 相信大家都知道内存和硬盘都属…

【大模型LLM面试合集】大语言模型架构_attention

1.attention 1.Attention 1.1 讲讲对Attention的理解? Attention机制是一种在处理时序相关问题的时候常用的技术,主要用于处理序列数据。 核心思想是在处理序列数据时,网络应该更关注输入中的重要部分,而忽略不重要的部分&…

java webservice 根据wsdl文件生成客户端代码;webservice可视化测试工具SOAPUI;

背景 最近要对接HIS系统,对方提供的接口是webservice的(有点古老),对方是webservice的提供方,提供了wsdl文件,我方需要根据wsdl文件生成java代码,intellij idea生成webservice客户端代码支持的…

复分析——第10章——Θ函数应用(E.M. Stein R. Shakarchi)

第10章 Θ函数的应用 (Applications of Theta Functions) The problem of the representation of an integer n as the sum of a given number k of integral squares is one of the most celebrated in the theory of numbers. Its history may be traced back to Diopha…

列表渲染 v-for

列表渲染v-for 使用v-for指令基于数组渲染一个列表&#xff0c;v-for指令的值需要使用item in/of items形式的特殊语法&#xff0c;其中items是源数据的数组&#xff0c;而item是迭代的别名。 代码实例&#xff1a; <template> <div><p v-for"item in na…

Java基础概念

1.注释和关键字 &#xff08;1&#xff09;注释 什么是注释&#xff1f;注释就是对代码进行解释说明的文字 注释的分类&#xff1f;单行注释&#xff0c;多行注释&#xff0c;文档注释 注释的使用细节&#xff1f; 注释的内容不会参与编译和运行&#xff0c;仅仅是对代码的…

使用vllm部署大语言模型

vLLM是一个快速且易于使用的库&#xff0c;用于LLM&#xff08;大型语言模型&#xff09;推理和服务。通过PagedAttention技术&#xff0c;vLLM可以有效地管理注意力键和值内存&#xff0c;降低内存占用和提高计算效率。vLLM能够将多个传入的请求进行连续批处理&#xff0c;从而…

智能视频监控如何助力体育场馆安全管理:安防监控EasyCVR视频综合管理方案

近期有新闻报道&#xff0c;6月30日&#xff0c;17岁的中国国家羽毛球运动员在亚洲青年羽毛球锦标赛中&#xff0c;突然晕倒并抽搐&#xff0c;尽管被送往医院抢救&#xff0c;该运动员仍在当晚不幸离世。运动猝死不仅发生于职业运动员身上&#xff0c;在普通健身者中也时有发生…