haproxy实现代理和负载均衡

HaProxy介绍:

haproxy是法国开发者威利塔罗在2000年使用C语言开发的一个开源软件,是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计,目前最新TLS版本为2.2。

haproxy是可提供可用性、负载均衡以及基于TCP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。haproxy非常适用于并发大(并发达1W以上)web站点,这些站点通常又需要会话保持或七层处理,haproxy的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护web服务器不被暴露到网络上。

LVS,nginx,haproxy对比:

LVS是内核中的功能,nginx和haproxy是第三方实现的功能。

LVS只能提供四层负载均衡无法提供七层负载,(无法控制7层协议http头部url等),功能单一。

nginx,haproxy可以实现4层和7层负载,功能较多,但是性能不如LVS,LVS>haproxy>nginx

haproxy对比nginx性能优越,功能单一,haproxy只做反向代理。

LVS没有后端服务器健康性检测,nginx和haproxy有后端服务器健康性检测。

安装haproxy:

三种方式:yum,rpm和编译

yum安装:yum install -y haproxy

[root@Node1 ~]#:yum install -y haproxy                #安装

[root@Node1 ~]#:systemctl start haproxy                #启动

[root@Node1 ~]#:systtemctl status haproxy                #查看是否启动

可以rpm -qc haproxy查看配置文件

rpm安装:

错误:软件包:rh-haproxy18-haproxy-1.8.24-3.el7.x86_64 (/rh-haproxy18-haproxy-1.8.24-3.el7.x86_64)
rpm安装haproxy需要需要:rh-haproxy18-runtime

需要依赖包

[root@Node1 ~]#:mkdir /hprxy; cd /phrxy

#准备一个runtime包,直接拖进来到目录下,然后下载haproxy包

[root@Node1 hprxy]#:wget http://mirror.centos.org/centos/7/sclo/x86_64/rh/Packages/r/rh-haproxy18-haproxy-1.8.24-3.el7.x86_64.rpm

[root@Node1 hprxy]#:ls
rh-haproxy18-haproxy-1.8.24-3.el7.x86_64.rpm  rh-haproxy18-runtime-3.1-2.el7.x86_64.rpm

[root@Node1 hprxy]#:yum install -y rh-haproxy18-runtime-3.1-2.el7.x86_64.rpm
[root@Node1 hprxy]#:yum install -y rh-haproxy18-haproxy-1.8.24-3.el7.x86_64.rpm

#启动服务
[root@Node1 hprxy]#:systemctl start rh-haproxy18-haproxy.service

查看状态:systemctl status rh-haproxy18-haproxy.service发现启动了

可以通过rpm -qc 服务名;rpm -ql 服务名,查看配置文件和列出文件相关文件。

编译安装haproxy:

在第二台机器7-2上编译安装,7-1和7-3作为web真实服务器

由于CentOS7 之前版本自带的lua版本比较低并不符合haproxy要求的lua最低版本(5.3)的要求,因此需要编译安装较新版本的lua环境,然后才能编译安装haproxy,所以需要先安装lua环境。

[root@Node2 ~]#:mkdir /data ; cd /data

#查看当前lua版本,是5.1版本的。

[root@Node2 data]#:lua -v
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
#可以现在安装lua新版本:wget https://www.lua.org/ftp/lua-5.4.6.tar.gz
[root@Node2 data]#:wget https://www.lua.org/ftp/lua-5.4.6.tar.gz

#准备安装包:haproxy-2.4.25.tar,直接拖进来/data/下

[root@Node2 data]#:ls
haproxy-2.4.25.tar.gz  lua-5.4.6.tar.gz

#解压

[root@Node2 data]#:tar xf lua-5.4.4.tar.gz

#做个软链接
[root@Node2 data]#:ln -s lua-5.4.6 lua
[root@Node2 data]#:cd lua-5.4.4/src/
[root@Node2 src]#:make all test
#查看版本信息
[root@Node2 src]#:./lua -v
Lua 5.4.6  Copyright (C) 1994-2023 Lua.org, PUC-Rio                #5.4版本

#安装haproxy

#安装依赖环境:

[root@Node2 data]#:yum -y install gcc openssl-devel pcre-devel systemd-devel

#解压
[root@Node2 data]#:tar xf haproxy-2.4.25.tar.gz
[root@Node2 data]#:cd haproxy-2.4.25/
#创建lua目录用于自动补全功能
[root@Node2 haproxy-2.4.25]#:mkdir /usr/local/lua
[root@Node2 haproxy-2.4.25]#:cp -r src/   /usr/local/lua/
[root@Node2 haproxy-2.4.25]#:make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/data/lua/src/  LUA_LIB=/data/lua/src/

#安装,指定路径
[root@Node2 haproxy-2.4.25]#:make install PREFIX=/apps/haproxy

#软链接,自动补全
[root@Node2 haproxy-2.4.25]#:ln -s /apps/haproxy/sbin/haproxy /usr/sbin/
#haproxy -v可以查看版本信息。haproxy -h查看帮助

#写一个自启动文件:

[root@Node2 haproxy-2.4.25]#:vim /usr/lib/systemd/system/haproxy.service

[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target
[Service]
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg  -c -q     #-c检查语法。-f指定配置文件,也可以跟文件夹
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid  #-p指定pid文件
ExecReload=/bin/kill -USR2 $MAINPID   #重新加载
LimitNOFILE=100000    #打开文件数
[Install]
WantedBy=multi-user.target
[root@Node2 haproxy-2.4.25]#:systemctl daemon-reload
#创建主配置文件目录。需要手动创建

[root@Node2 haproxy-2.4.25]#:mkdir /etc/haproxy

#创建主配置文件/etc/haproxy/haproxy.cfg

global:全局配置段

进程及安全配置相关的参数

性能调整相关参数

Debut参数

proxies:代理配置段

defaults:为frontend,backend,listen提供默认配置
frontend:前端,相当于nginx中的server{},定义虚拟机,监听分配请求
backend:后端,相当于nginx中的upstream{},真实服务器
listen:同时拥有前端和后端配置,配置简单,生产推荐使用,前端和后端,更简单。

主配置文件配置块:

[root@Node2 haproxy-2.4.25]#:vim /etc/haproxy/haproxy.cfg

#全局模块,

global
maxconn 100000                #最大连接数
chroot /apps/haproxy                #禁锢,haproxy进程,只可以访问,/apps/haroxy文件夹
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin         #指明sock文件的位置

#指明uid和gid

uid 99
gid 99
#后台方式,守护进程

daemon
#进程数, 开启几个进程

#nbproc 4                    #nbthread线程与nbproc进程不能同时指定
#cpu-map 1 0
#cpu-map 2 1
#cpu-map 3 2
#cpu-map 4 3
pidfile /var/lib/haproxy/haproxy.pid                #指定PID路径
log 127.0.0.1 local3 info                                #日志
 

defaults
option http-keep-alive
option  forwardfor
maxconn 100000
mode http
timeout connect 300000ms
timeout client  300000ms
timeout server  300000ms

#状态页

listen stats
mode http                支持7层http
bind 0.0.0.0:9999
stats enable
log global
stats uri     /haproxy-status        
stats auth    haadmin:123456                #用户名和密码

listen  web
bind 0.0.0.0:8899
mode http
log global

server web1  192.168.114.10:80
server web2  192.168.114.30:80

#指定一个pid路径

[root@Node2 haproxy-2.4.25]#:mkdir  /var/lib/haproxy

#创建用户haproxy

[root@Node2 haproxy-2.4.25]#:useradd -r -s /sbin/nologin  haproxy

#启动haproxy

[root@Node2 haproxy-2.4.25]#:systemctl enable --now haproxy

起来之后查看状态:

listen中说明了代理服务器,和后端真实服务器。

而frontend和backup就把两者分离出来。listen相当于两者的结合。

7-1和7-3作为web服务器。下载httpd:

yum install -y httpd

systemctl start httpd

7-1:echo 7-1 > /var/www/html/index.html

7-3:echo 7-3 > /var/www/html/index.html

systemctl status httpd查看状态是否都起来了。并且能curl通

测试是否实现了代理和负载均衡:在浏览器也可以在本台服务器上curl 192.168.114.20:8899要跟上端口号:8899。因为我们在listen中设置的就是8899端口号。

状态页:

在配置文件中有以下三个配置,端口号,uri,访问控制。在浏览器地址栏中输入:192.168.114.20:9999/haproxy-status

bind 0.0.0.0:9999

stats uri     /haproxy-status

stats auth    haadmin:123456


 

进程:发现进程是一个进程下三个线程

 修改进程配置,nbproc 4就是有四个进程:

重启systemctl restart haproxy。

通过进程树查看一下: 

日志:

vim /etc/rsyslog.conf打开文件开启15和16行。

在/etc/rsyslog.conf文件的73行下添加一行,指定local3,并制定日志文件路径在/var/log/haproxy.log

重启systemctl restart haproxy rsyslog

使用浏览器访问192.168.114.20:8899

在日志文件中tail -f /var/log/haproxy.log实时查看

不使用listen,而使用frontend和backup两个模块:相当于把listen分开写,frontend是代理端,backup是服务端,负载均衡的web服务器。把listen注释掉或者删除。

 测试:由于我们指定的80端口,直接是curl 192.168.114.20不需要加端口,默认就是80。

其中listen或者说frontend和backup可以放在子配置文件中:

创建一个子配置文件:mkdir /etc/haproxy/conf.d

直接写在子配置文件中,但haproxy不像nginx可以在主配置文件中写入include包含模块。haproxy主配置文件不支持include。需要将子配置文件写在/usr/lib/systemd/system/haproxy.service文件中指明。

 把主配置文件中的注释掉。修改文件:vim /usr/lib/systemd/system/haproxy.service

重新加载配置文件,重启服务:

[root@Node2 haproxy]#:systemctl daemon-reload
[root@Node2 haproxy]#:systemctl restart haproxy

访问测试:

haproxy也有跳转的功能,在server后加入check redir http://www.baidu.com

 自动跳转到百度主页,如果浏览器跳转不到(但也会显示标题头部是百度的),可以使用内置火狐浏览器:192.168.114.20。将自动跳转到百度首页。

---end---

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

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

相关文章

算法基础-----【递归回溯】

1、递归 递归是一种算法结构,递归会出现在子程序中自己调用自己或间接地自己调用自己。递归就是分为递去和归来。 递去:递归的问题必须可以分解为若干规模较小,与原问题相同的子问题,这些子问题可以用相同的解题思路解决。 归来…

[Go 微服务] Kratos 使用的简单总结

文章目录 1.Kratos 简介2.传输协议3.日志4.错误处理5.配置管理6.wire 1.Kratos 简介 Kratos并不绑定于特定的基础设施,不限定于某种注册中心,或数据库ORM等,所以您可以十分轻松地将任意库集成进项目里,与Kratos共同运作。 API -&…

【工具推荐】ONLYOFFICE 桌面编辑器 8.1:引入全新功能,提升文档处理体验

ONLYOFFICE 桌面编辑器 8.1 现已发布:功能完善的 PDF 编辑器、幻灯片版式、改进从右至左显示、新的本地化选项等 【工具推荐】ONLYOFFICE 桌面编辑器 8.1:引入全新功能,提升文档处理体验 一、什么是ONLYOFFICE? ONLYOFFICE 是…

Java新手启航:Windows下JDK安装,开启编程之旅

你是不是对编程充满好奇,想要迈入Java的世界,却不知道从何开始?别担心,每一个Java大师都是从安装JDK开始的,而今天,我将手把手教你如何轻松完成JDK的安装,让你迈出编程之旅的第一步! 接下来&am…

深入解析内容趋势:使用YouTube API获取视频数据信息

一、引言 YouTube,作为全球最大的视频分享平台之一,汇聚了无数优质的内容创作者和观众。从个人分享到专业制作,从教育科普到娱乐休闲,YouTube上的视频内容丰富多彩,满足了不同用户的需求。对于内容创作者、品牌以及希…

第三十六篇——最大熵原理:确定的答案找到之前,我们该做什么?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 又双叒叕一个伟大的原理,又双叒叕觉得太伟大了,知…

解释什么是lambda函数?它有什么好处?

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

数据分析-常用模型-漏斗模型

一、什么是漏斗模型 漏斗模型,其实应该叫做“流程式业务分析模型”。它是基于业务流程数据,对业务进行分析诊断的工具。因为销售端的业务,常常会出现“流程越长,用户流失越多的情况”。 比如网上购物,看到一个喜欢的…

综合评价 | 基于组合博弈赋权的物流系统综合评价(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 综合评价 | 基于组合博弈赋权的物流系统综合评价(Matlab) 组合博弈赋权(Weighted Sum)是一种常见的多目标决策方法,用于将多个目标指标进行综合评估和权衡…

【服务器部署】Jenkins配置前端工程自动化部署

作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是,产…

【eMTC】eMTC 的SIB1-BR是如何发送

1 概述 eMTC的系统消息发送和接收与LTE的有很大不同,主要原因是在某一个时刻终端只接收1.4M的带宽,无法接收LTE的大带宽,比如20M带宽的LTE小区,eMTC终端,在某一个子帧,只能够接收其中的1.4M 带宽。PBCH本身…

解锁亚马逊、Temu、速卖通成功密码:重视评论,做好测评自养号

在亚马逊平台上,产品评论至关重要,因其能帮助其他买家做出购买决策。然而,亚马逊上的买家留评率却很低。有趣的是,存在一些买家,他们并未实际购买产品,却能发表评论。这究竟是怎么回事呢?接下来…

最新!最全!元启发优化算法215个测试函数综述!【免费获取论文】

目录 1.摘要2.主要内容3.参考文献4.文章获取 1.摘要 这篇综述论文旨在利用对不同基准测试函数的研究,评估元启发优化算法(Metaheuristic optimization algorithms, MH)的性能。MH的性能是通过不同的数学基准测试函数和各种实际工程设计问题来评估,这些基…

【项目实战】Android Studio简单实现图书馆借阅管理系统

希望文章能给到你启发和灵感~ 点赞收藏关注 支持一下吧~ 阅读指南 序幕一、基础环境说明1.1 硬件环境1.2 软件环境 二、整体设计2.1 数据库逻辑处理:2.2 登录/注册模块2.3 功能界面初始化:2.4 图书管理模块2.5 图书租借服务2.6 读…

第一节:如何开发第一个spring boot3.x项目(自学Spring boot 3.x的第一天)

大家好,我是网创有方,从今天开始,我会记录每篇我自学spring boot3.x的经验。只要我不偷懒,学完应该很快,哈哈,更新速度尽可能快,想和大佬们一块讨论,如果需要讨论的欢迎一起评论区留…

MATLAB | 怎样绘制这样的环形柱状图

Hey, 各位又是好久不见,最近忙到后台消息都有些来不及看,非常抱歉,今天带来一个环形柱状图绘制的简易小代码,绘制效果如下: 下面直接给出完整代码,替换一下数据即可,代码都有注释的: 完整代码 …

OLMo:真正完全开源的大模型

最近,又有一家机构AI2(Allen Institute for AI)开源了一个LLM:OLMo,它的英文全称就叫Open Language Model。相比之前开源的大模型,OLMo的独特之处是完全开源,除了训练的模型,OLMo还开…

数据结构速成--查找

由于是速成专题,因此内容不会十分全面,只会涵盖考试重点,各学校课程要求不同 ,大家可以按照考纲复习,不全面的内容,可以看一下小编主页数据结构初阶的内容,找到对应专题详细学习一下。 目录 …

Unity制作一个简单抽卡系统(简单好抄)

业务流程:点击抽卡——>播放动画——>显示抽卡面板——>将随机结果添加到面板中——>关闭面板 1.准备素材并导入Unity中(包含2个抽卡动画,抽卡结果的图片,一个背景图片,一个你的展示图片) 2.给…

qt 开发笔记 动态链接库应用

1.概要 1.1 需求 库有两种,动态库和静态库,这里说的是动态库;动态库的加载方式有两种,一直是静态的一种是动态的,这里的静态加载是指静态加载动态,是一种加载动态库的方式。也有一种动态加载的方式&#…