小阿轩yx-Haproxy搭建Web群集

news2024/9/28 17:34:23

小阿轩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群集

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

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

相关文章

几种不同的方式禁止IP访问网站(PHP、Nginx、Apache设置方法)

1、PHP禁止IP和IP段访问 <?//禁止某个IP$banned_ip array ("127.0.0.1",//"119.6.20.66","192.168.1.4");if ( in_array( getenv("REMOTE_ADDR"), $banned_ip ) ){die ("您的IP禁止访问&#xff01;");}//禁止某个IP段…

01-图像基础-颜色空间

1.RGB颜色空间 RGB是一种常用的颜色空间&#xff0c;比如一幅720P的图像&#xff0c;所对应的像素点个数是1280*720&#xff0c;每一个像素点由三个分量构成&#xff0c;分别是R,G,B。 R代表红色分量&#xff0c;G代表绿色分量&#xff0c;B代表蓝色分量&#xff0c;以24位色来…

一网统管/视频汇聚/安防监控平台EasyCVR启动后无法访问是什么原因?

智慧城市/一网统管/视频汇聚/安防监控平台EasyCVR兼容性强&#xff0c;支持多协议接入&#xff0c;包括国标GB/T 28181协议、GA/T 1400协议、部标JT808协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SDK等&#xff0c;并能对外分…

插件更新了!

最近花了点时间&#xff0c;给网页插件添加了新功能&#xff0c;下面简单给大家介绍一下如何使用 我们安装好插件后&#xff0c;进入网页就可以看到一个带logo的按钮了&#xff0c;我们可以点一下就可以跳出快捷操作 不同页面点击会出现不同的功能&#xff0c;大家可以根据自己…

解析java128陷阱

一、提要 在java开发时&#xff0c;由于基本类型不能调用方法&#xff0c;在某些方面很不方便&#xff0c;因此产生了包装类。我们把基本类型和对应的包装类的转换叫装箱、拆箱。 1.装箱 基本类型转成包装类对象 关键字valueOf->装箱,可以指定进制&#xff1a; Integer…

2024年【道路运输企业主要负责人】考试内容及道路运输企业主要负责人找解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 道路运输企业主要负责人考试内容是安全生产模拟考试一点通生成的&#xff0c;道路运输企业主要负责人证模拟考试题库是根据道路运输企业主要负责人最新版教材汇编出道路运输企业主要负责人仿真模拟考试。2024年【道路…

俯卧撑计数器(Python)

通过 MediaPipe 检测人体姿态&#xff0c;计算俯卧撑角度和计数&#xff0c;并在图像上进行可视化展示 需要有cv2库和mediapipe库 mediapipe库&#xff1a; MediaPipe是Google开源的机器学习框架&#xff0c;用于构建实时音频、视频和多媒体处理应用程序。它提供了一组预训练的…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 7月9日,星期二

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年7月9日 星期二 农历六月初四 1、 最高检&#xff1a;对小摊小贩、小微企业处以高额罚款不符合法律精神。 2、 公安部&#xff1a;全国机动车保有量达4.4亿辆&#xff0c;驾驶人达5.32亿人。 3、 科技部&#xff1a;严禁将…

Echarts:渲染成Canvas还是SVG,该如何抉择?

ECharts 从初始一直使用 Canvas 绘制图表。而 ECharts v4.0 发布了 SVG 渲染器&#xff0c;从而提供了一种新的选择。在初始化图表实例时&#xff0c;只需设置 renderer 参数 为 canvas 或 svg 即可指定渲染器&#xff0c;比较方便。贝格前端工场带领大家看下如何选择。 一、C…

2024年【低压电工】最新解析及低压电工复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 低压电工最新解析根据新低压电工考试大纲要求&#xff0c;安全生产模拟考试一点通将低压电工模拟考试试题进行汇编&#xff0c;组成一套低压电工全真模拟考试试题&#xff0c;学员可通过低压电工复审考试全真模拟&…

为什么要学习Go?

目录 前言 一、Go 语言的发展史 Robert Griesemer Rob Pike Ken Thompson 二、Go语言全面分析 主要优势 主要挑战 三、Go 语言最佳实践 1. 云原生开发 2. 网络服务开发 3. 系统工具和实用程序 4. 数据处理和分析 四、哪些知名公司使用 Go 语言&#xff1f; Google …

16 - Python语言进阶

Python语言进阶 数据结构和算法 算法&#xff1a;解决问题的方法和步骤 评价算法的好坏&#xff1a;渐近时间复杂度和渐近空间复杂度。 渐近时间复杂度的大O标记&#xff1a; - 常量时间复杂度 - 布隆过滤器 / 哈希存储 - 对数时间复杂度 - 折半查找&#xff08;二分查找&am…

重点区域分布式无人机探测防御系统详解

重点区域分布式无人机探测防御系统采用模块化设计&#xff0c;结合先进的传感技术、通信技术和数据处理技术&#xff0c;实现对无人机的高效探测与防御。系统架构由无人机探测模块、数据分析中心、防御与反制模块以及用户交互界面四大部分组成。系统特点包括分布式部署、高灵敏…

在audio DSP中如何做软件固化

在audio DSP中&#xff0c; 软件的code和data主要放在3种不同的memory上&#xff0c;分别是片内的ITCM、DTCM和片外的memory&#xff08;比如DDR&#xff09;上。ITCM只能放code&#xff0c;DTCM只能放data&#xff0c;片外的memory既能放code也能放data。在写代码时要规划好哪…

【Java开发实训】day01

目录 1.Java开发步骤 2.目录的三个表达方法 3.Java的三种注释方法 4.文档注释的作用 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于CSDN&…

UML中用例之间的可视化表示

用例除了与参与者有关联关系外&#xff0c;用例之间也存在着一定的关系&#xff0c;如泛化关系、包含关系、扩展关系等。 4.2.1 包含关系 包含关系指的是两个用例之间的关系&#xff0c;其中一个用例&#xff08;称为基本用例&#xff0c;Base Use Case&#xff09;的行为包…

从零开始读RocketMq源码(二)Message的发送详解

目录 前言 准备 消息发送方式 深入源码 消息发送模式 选择发送方式 同步发送消息 校验消息体 获取Topic订阅信息 高级特性-消息重投 选择消息队列-负载均衡 装载消息体发送消息 压缩消息内容 构造发送message的请求的Header 更新broker故障信息 异步发送消息 …

根据空格、制表符、回车符等分割字符串re.split

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 根据空格、制表符、 回车符等分割字符串 re.split [太阳]选择题 根据给定的Python代码&#xff0c;哪个选项是正确的&#xff1f; import re pattern r\s print(f"【显示】pattern{…

软件工程面向对象 超市管理系统 需求分析 系统设计 课程设计报告

1、引言 系统简述 超市管理系统的功能主要有前台管理和后台管理两个大块。其使用对象 有超市管理人员和超市销售人员两类。超市管理系统主要为了实现商品输 入、 输出管理数据的自动化&#xff0c; 提高商品统计信息的实时性&#xff0c; 减轻人工劳动强 度从而节省人力成本。实…

国产操作系统安装配置auditd审计工具 _ 统信 _ 麒麟 _ 中科方德

原文链接&#xff1a;国产操作系统安装配置auditd审计工具 | 统信 | 麒麟 | 中科方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇在国产桌面操作系统上部署auditd审计工具的文章。auditd是Linux审计系统的核心守护进程&#xff0c;用于记录系统安全相关的事件和…