小阿轩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//日志级别为noticelog 127.0.0.1   local1 notice#log loghost    local0 info//最大连接数maxconn 4096//用户uiduid 99//用户gidgid 99//以守护进程的方式运行daemon//调试模式,输出启动信息到标准输出#debug//安静模式,启动时无输出#quietdefaults//使用globle中定义的日志log     global//模式为httpmode    http//采用http的格式记录日志option  httplog//保证HAProxy不记录上级负载均衡发送过来的用于检测状态数据的心跳包option  dontlognull//检查节点连接失败的次数,超过3次认为节点不可用retries 3//当负载很高时,自动结束当前队列处理比较久的连接# redispatch   //最大连接数       maxconn 2000//连接超时时间ms(毫秒)contimeout      5000//客户端超时时间msclitimeout      50000//服务器超时时间mssrvtimeout      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 1server  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 infomaxconn 4096chroot /usr/share/haproxyuid 99gid 99daemon#debug#quietlog /dev/log local0 infolog /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
globallog 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.mzph.cn/bicheng/42888.shtml

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

相关文章

前端面试题24(css3)

下面是一些常见的 CSS3 面试题,这些问题可以帮助你评估应聘者对 CSS3 的掌握程度: 1. 解释 CSS3 中的动画关键帧(keyframes)和它们是如何工作的? 回答要点:keyframes 规则用于创建动画,它可以…

后端之路——文件本地上传

一、基础原理 文件上传是一个很基础的知识点&#xff0c;尤其是本地上传&#xff0c;在现实开发基本都是云上传&#xff0c;但是作为一个基础要简单了解一下 首先前端我就不多讲解了&#xff0c;网页开发里用<form>表单可以上传文件&#xff0c;只需要加上这三属性&…

pytest系列——pytest_runtest_makereport钩子函数获取测试用例执行结果

前言 pytest测试框架提供的很多钩子函数方便我们对测试框架进行二次开发&#xff0c;可以根据自己的需求进行改造。 例如&#xff1a;钩子方法&#xff1a;pytest_runtest_makereport &#xff0c;可以更清晰的了解测试用例的执行过程&#xff0c;并获取到每个测试用例的执行…

(译文)IRIG-B对时编码快速入门

原文 PDF&#xff1a;https://ww1.microchip.com/downloads/aemDocuments/documents/FTD/tekron/tekronwhitepapers/221223-A-guide-to-IRIG-B.pdf IRIG-B3 概论 Inter-Range Instrument Group 时间码&#xff08;简称IRIG&#xff09;是一系列标准时间码格式。用于将时间信…

使用Cloudflare免费开启全站https配置SSL证书

HTTPS 我的服务器和域名是在华为云&#xff0c;华为云SSL证书巨贵&#xff0c;通过Cloudflare可以将自己的网站免费设置成https。 Cloudflare注册 访问Cloudflare, 注册账号。 添加站点 添加你自己的站点&#xff0c;选择免费的套餐。 添加DNS 添加你的域名、子域名、…

PCB阻抗控制为何如此重要?

或许你在各个厂商打PCB板的时候&#xff0c;会遇到询问你是否需要阻抗的的下单需求&#xff1f; 在当今的应用中&#xff0c;设计通常变得越来越快&#xff0c;控制布局参数比以往任何时候都更加重要。 在PCB设计和生产过程中&#xff0c;有几种方法可以进行阻抗控制。最常见的…

轻松转换!两款AI工具让word秒变ppt!

想把Word文档一键生成PPT&#xff0c;过去有一个很常见的做法&#xff1a;先在Word文档中设置标题样式&#xff0c;通过标题样式来分隔每一部分&#xff0c;之后导出为PPT&#xff0c;就能得到一份PPT的雏形&#xff0c;但这种方法无法对PPT自动进行美化&#xff0c;即得到的只…

ZGC在三色指针中的应用

ZGC基于颜色指针的并发处理算法 ZGC初始化之后&#xff0c;整个内存空间的地址视图被设置为Remapped&#xff0c;当进入标记阶段时的视图转变为Marked0&#xff08;也称为M0&#xff09;或者Marked1&#xff08;也称为M1&#xff09;&#xff0c;从标记阶段结束进入转移阶段时…

计算机学生在大学四年应是以数据结构和算法为重还是技术为重?

我给你说点比较实在的吧&#xff0c;不管你是不是计算机专业科班出身的大学生&#xff0c;不管你在不在本科大学&#xff0c;不管你的出身和背景如何&#xff0c;想要走上计算机工作岗位&#xff0c;那必须得有拿得出手的一技之长&#xff0c;这个行业是靠技术吃饭的。 刚好我有…

Kotlin算法:把一个整数向上取值为最接近的2的幂指数值

Kotlin算法&#xff1a;把一个整数向上取值为最接近的2的幂指数值 import kotlin.math.ln import kotlin.math.powfun main(args: Array<String>) {val number intArrayOf(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)number.forEach {println("$…

一.1 信息就是位+上下文

hello程序的生命周期是从一个源程序&#xff08;或者说源文件&#xff09;开始的&#xff0c;即程序员通过编辑器创建并保存的文本文件&#xff0c;文件名是hello.c。源程序实际上就是一个由0和1组成的位&#xff08;又称为比特&#xff09;序列&#xff0c;8个位被组织成一组&…

python读取指定文件夹下的图片(glob获取)

python读取指定文件夹下的图片&#xff08;glob获取&#xff09; 定义traverse_images函数&#xff0c;仅需要改变下根路径即可 glob是python中用来查找符合特定规则的文件路径名的函数 import os from glob import globdef traverse_images (folder_path):image_formats …

ESIX配置备份和恢复

ESIX虽然重装很快&#xff0c;但是原本配置就丢失了&#xff0c;在硬件不变的情况下&#xff0c;可以使用配置备份和配置恢复的方法。 1、备份配置 1.1、执行以下两条命令 vim-cmd hostsvc/firmware/sync_configvim-cmd hostsvc/firmware/backup_config如下图&#xff0c;只需…

7月6日 VueConf 技术大会即将在深圳举办

7月6日&#xff0c;VueConf 2024 即将在深圳召开&#xff0c;本次大会正值 Vue.js 十周年&#xff0c;旨在聚焦 Vue.js 社区的成员&#xff0c;分享最新的技术动态、经验以及创新实践。 本次参与 VueConf 大会的是来自全球 Vue.js 核心团队成员、行业专家及前端开发者。其中&a…

Elasticsearch:Node.js ECS 日志记录 - Winston

这是继上一篇文章 “Elasticsearch&#xff1a;Node.js ECS 日志记录 - Pino” 的续篇。我们继续上一篇文章来讲述使用 Winston 包来针对 Node.js 应用生成 ECS 向匹配的日子。此 Node.js 软件包为 winston 记录器提供了格式化程序&#xff0c;与 Elastic Common Schema (ECS) …

【MySQL】MySQL连接池原理与简易网站数据流动是如何进行

MySQL连接池原理与简易网站数据流动是如何进行 1.MySQL连接池原理2.简易网站数据流动是如何进行 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f60…

SSM高校学生综合测评系统-计算机毕业设计源码16154

摘要 随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个BS 结构的高校学生综合测评系统,会使高校学生综合测评系统工作系统化、规范化,也会提高高校学生综合测评系统平台形象,提高管理效率。 本学生综合测评系统是针对目前高校学生…

君方智能设计平台-对象持久化技术方案

1.背景介绍 1.1序列化功能 序列化是将复杂的图形对象、数据结构或对象转换成一种可被存储、传输或分享的格式的过程。这个格式通常是二进制或文本形式&#xff0c;能够轻松地保存在文件中或通过网络发送到其他应用程序。序列化的目的是将数据持久化&#xff0c;使其在不同时间…

服务器本地部署文件服务器minio

minio类似于阿里云的OSS&#xff0c;为不方便把图、文、日志等形式的文件保存在公有云上的&#xff0c;可以在自己的服务器上部署文件服务器 看过本人前几个文章的&#xff0c;使用docker就会很快上手部署&#xff0c;直接上所有代码 #添加镜像 docker search minio docker p…

怎么给电子文档批量盖骑缝章或公章?

怎么给电子文档批量盖骑缝章或公章?假如你有100个PDF电子文档要同时盖缝章&#xff0c;如果不借助专业的盖电子骑缝章软件&#xff0c;还真不好干。下面讲述如何利用e-章宝批量盖电子骑缝章。 1.在软件中导入待批量盖章的PDF文件 如下图&#xff0c;在“待盖章PDF文件”区域…