Haproxy搭建 Web 群集实现负载均衡

news2025/2/27 4:56:53

目录

1 Haproxy

1.1 HAProxy的主要特性

1.2 HAProxy负载均衡策略

1.3 LVS、Nginx、HAproxy的区别

2 Haproxy搭建 Web 群集

2.1 haproxy 服务器部署

2.1.1 关闭防火墙

2.1.2 内核配置(实验环境可有可无)

​2.1.3 安装 Haproxy

2.1.4 Haproxy服务器配置

2.1.4 添加为系统服务

​2.2 节点服务器部署

2.3 测试 Web群集


1 Haproxy

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

1.1 HAProxy的主要特性

 ●可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美;

●最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s;

●支持多达8种负载均衡算法

●支持Session会话保持,Cookie的引导;

●支持通过获取指定的url来检测后端服务器的状态;

●支持虚机主机功能,从而实现web负载均衡更加灵活;

●支持连接拒绝、全透明代理等独特的功能;

●拥有强大的ACL支持,用于访问控制;

●支持TCP和HTTP协议的负载均衡转发;

●支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成

1.2 HAProxy负载均衡策略

常见的有如下8种:

(1)roundrobin,表示简单的轮询

(2)static-rr,表示根据权重

(3)leastconn,表示最少连接者先处理

(4)source,表示根据请求源IP

(5)uri,表示根据请求的URI,做cdn需使用;

(6)url_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name (7)hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;

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

1.3 LVS、Nginx、HAproxy的区别

 ●LVS基于Linux操作系统内核实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡;

●LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术,HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案;

●LVS因为工作在ISO模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方式;

●HAProxy功能强大,单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。但整体性能低于4层模式的LVS负载均衡;

●Nginx主要用于Web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是性能没有LVS和Haproxy好,对群集节点健康检查功能不强,只支持通过端口来检测,不支持通过URL来检测。

2 Haproxy搭建 Web 群集

Haproxy服务器:192.168.30.105

Nginx 服务器1:192.168.30.107

Nginx 服务器2:192.168.30.109

客户端:192.168.30.115

2.1 haproxy 服务器部署

2.1.1 关闭防火墙

​
systemctl stop firewalld

setenforce 0


​

2.1.2 内核配置(实验环境可有可无)

vim  /etc/sysctl.conf

net.ipv4.tcp_tw_reuse = 1

#启用端口重用,允许一个服务器进程在进行完一个连接后立即再次使用相同的连接端口。
net.ipv4.ip_local_port_range = 1024 65023

#本地端口范围。指定可用于本地TCP/UDP端口的端口号范围。
net.ipv4.tcp_max_syn_backlog = 10240

#TCP半连接请求的最大长度,如果超过这个值,对方就会收到RST响应。
net.ipv4.tcp_max_tw_buckets = 400000

#系统中同时保持TIME_WAIT状态的最大数量,一般设置为TCP建立连接次数的2倍。
net.ipv4.tcp_max_orphans = 60000

#系统中允许存在的最大orphan连接数(没有对应的socket文件),这个数字越大,系统支持的TCP连接数也越多。
net.ipv4.tcp_synack_retries = 3

#尝试发送SYN+ACK应答报文的最大次数。
net.core.somaxconn = 10000

#服务器套接字排队长度的最大值

2.1.3 安装 Haproxy

//编译安装
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make

tar zxvf haproxy-2.2.11.tar.gz
cd haproxy-2.2.11/
make TARGET=linux31 PREFIX=/usr/local/haproxy 
make install PREFIX=/usr/local/haproxy

---------------------参数说明---------------------------------------------------------------------------
TARGET=linux26	#内核版本,

#使用uname -r查看内核,如:2.6.18-371.el5,此时该参数用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628

安装依赖环境

编译安装HAproxy

2.1.4 Haproxy服务器配置

useradd -M -s /sbin/nologin haproxy
mkdir -p /usr/local/haproxy/conf
cd /usr/local/haproxy/conf

HAProxy 的配置文件共有 5 个域:

●global:用于配置全局参数
●default:用于配置所有frontend和backend的默认属性
●frontend:用于配置前端服务(即HAProxy自身提供的服务)实例
●backend:用于配置后端服务(即HAProxy后面接的服务)实例组

●listen:frontend + backend的组合配置,可以理解成更简洁的配置方法,frontend域和backend域中所有的配置都可以配置在listen域下

global          #全局配置,主要用于定义全局参数,属于进程级的配置,通常和操作系统配置有关
    log 127.0.0.1 local1 warning

    daemon                                      #让haproxy以守护进程的方式工作于后台
    option  dontlognull         #不在日志中记录空连接
    option  abortonclose    #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
    maxconn 20000                       #最大连接数,“defaults”中的值不能超过“global”段中的定义
    timeout queue 3s        #默认客户端请求在队列中的最大时长
    timeout connect 1s          #默认haproxy和服务端建立连接的最大时长,新版本中替代contimeout,该参数向后兼容

frontend http-in
    bind *:80

    acl url_jsp  path_end  -i .jsp

    use_backend tomcat_server if url_jsp

    default_backend nginx_server

backend nginx_server
    balance  roundrobin
    option httpchk  GET /test.html

    server ngx01 192.168.30.107:80 check inter 2000 fall 3 rise 2
    server ngx02 192.168.30.109:80 check inter 2000 fall 3 rise 2

backend tomcat_server
    balance  roundrobin
    option http-server-close
    cookie HA_STICKY_dy insert indirect nocache
    server tomcat01 192.168.30.107:8080 cookie tomcat01 check inter 2000 fall 3 rise 2
    server tomcat02 192.168.30.109:8080 cookie tomcat02 check inter 2000 fall 3 rise 2

listen stats
    bind *:1080
    stats enable
    stats refresh 30s
    stats uri /stats
    stats realm HAProxy\ Stats
    stats auth admin:admin

2.1.4 添加为系统服务

添加执行的权限

chmod   +x  /etc/init.d/haproxy

将 /etc/init.d/haproxy 脚本添加到 chkconfig 管理工具中

chkconfig --add /etc/init.d/haproxy
chkconfig --level 35 haproxy on
chkconfig --level 35 haproxy on
service haproxy start

开启haproxy服务

!!!注意!!!

HAProxy默认使用端口80来监听HTTP流量

2.2 节点服务器部署

systemctl stop firewalld
setenforce 0

yum install -y pcre-devel zlib-devel gcc gcc-c++ make 

useradd -M -s /sbin/nologin nginx

cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/

cd nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install

make && make install

--192.168.80.100---
echo "this is kgc web" > /usr/local/nginx/html/test.html

--192.168.80.101---
echo "this is benet web" > /usr/local/nginx/html/test.html

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

nginx      #启动nginx 服务

                                            ---Nginx 服务器1:192.168.30.107---

                                             ---Nginx 服务器1:192.168.30.109---

2.3 测试 Web群集

在客户端使用浏览器打开 http://192.168.30.105 ,不断刷新浏览器测试负载均衡效果

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

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

相关文章

数额结构(6.1~6.8)

6-1链表的插入算法 题目: 代码 int InsertPost_link(LinkList llist,DataType x,DataType y) {LinkList mllist->next;LinkList n;while(m->data!x){mm->next;4if(mNULL){printf("not exist data %d\n",x);return 0;}}n(LinkList)malloc(si…

Navicat工具连接Oracle数据库

文章目录 准备工具NavicatNavicat的Oracle插件Oracle查看系统版本找到对应的工具版本下载 oci下载 sqlplus 步骤1.打开navicat,工具>选项>环境2.配置3.点击确定,并重启navicat4.创建oracle连接 准备工具 工欲善其事,必先利其器&#x…

《Python趣味工具》——自制emoji2(2)

今天,我们将会完成以下2个内容: 绘制静态emoji总结turtle中常用的绘图函数 文章目录 一、绘制静态emoji::sparkles: 画脸::sparkles:绘制嘴巴::sparkles:绘制眼白:绘制眼白-Part1:绘制眼白—pa…

算法之排序

文章目录 前言一、二分查找1、正常二分2、二分找第一个出现要查找的数的位置3、在旋转数组中找最小数字二分总结 一、归并排序1、正常归并2、小和问题归并总结 前言 之前我们学习了各种排序算法,今天来让我们看看在线OJ上的题目吧,有哪些排序算法有什么…

数据结构之美:如何优化内存和性能

文章目录 什么是数据结构?内存优化使用紧凑的数据类型避免冗余存储使用位运算压缩数据 性能优化使用适当的数据结构减少不必要的复制使用合适的算法 数据结构优化的案例分析结论 🎉欢迎来到数据结构学习专栏~探索数据结构之美:如何优化内存和…

滑动窗口 解题思路

文章目录 算法应用场景滑动窗口解题思路1. 寻找最长2. 寻找最短 算法应用场景 关键词: 满足 xxx 条件 (计算结果,出现次数,同时包含) 最长 / 最短 子串 / 子数组 / 子序列 例如:长度最短的子串 滑动窗口…

EasyX库的下载及基本作图函数的使用【VS编译器】

目录 1、EasyX库的下载 2、基本作图函数 2.1 initgraph() 2.2 setbkcolor() 2.3 circle() 2.4 rectangle(); 2.5 ellipse() 2.6 pie() 2.7 线line() 点putpixel() 多线ployline() 1、EasyX库的下载 直接在官方网站下载一个安装程序:EasyX 库https://easyx.c…

(八)VBA常用基础知识:workbooks操作之打开workbook

打开(六)创建的excel Function Open(FileName As String, [UpdateLinks], [ReadOnly], [Format], [Password], [WriteResPassword], [IgnoreReadOnlyRecommended], [Origin], [Delimiter], [Editable], [Notify], [Converter], [AddToMru], [Local], [C…

Selenium+python怎么搭建自动化测试框架、执行自动化测试用例、生成自动化测试报告、发送测试报告邮件

本人在网上查找了很多做自动化的教程和实例,偶然的一个机会接触到了selenium,觉得非常好用。后来就在网上查阅各种selenium的教程,但是网上的东西真的是太多了,以至于很多东西参考完后无法系统的学习和应用。 以下整理的只是书中…

学信息系统项目管理师第4版系列08_管理科学基础

1. 科学管理的实质 1.1. 反对凭经验、直觉、主观判断进行管理 1.2. 主张用最好的方法、最少的时间和支出,达到最高的工作效率和最大的效果 2. 资金的时间价值与等值计算 2.1. 资金的时间价值是指不同时间发生的等额资金在价值上的差别 2.2. 把资金存入银行&…

肖sir__mysql之视图__009

mysql之视图 一、什么是视图 视图是一个虚拟表(逻辑表),它不在数据库汇总以存储的形式保存(本身不包含数据),视图是动态生成 二、视图的作用? 1、解决数据库中的非常复杂的数据查询 比如&#…

Unity SteamVR 开发教程:用摇杆/触摸板控制人物持续移动(2.x 以上版本)

文章目录 📕教程说明📕场景搭建📕创建移动的动作📕移动脚本⭐移动⭐实时调整 CharacterController 的高度 📕取消手部和 CharacterController 的碰撞 持续移动是 VR 开发中的一个常用功能。一般是用户推动手柄摇杆&…

异步编程 - 14 异步、分布式、基于消息驱动的框架 Akka

文章目录 Akka概述传统编程模型存在的问题对封装特性的挑战对共享内存在现代计算机架构上的误解对调用堆栈的误解 Actor模型解决了传统编程模型的问题Actor模型使用消息传递避免锁和阻塞使用Actor优雅地处理错误 小结 Akka概述 Akka 是一个开源的并发、分布式、基于消息驱动的…

浅谈C++|类的封装篇

引子: C认为万事万物皆为对象,对象有其属性和行为。 人可以作为对象,属性有姓名,年龄,身高,体重等,行为有行走,吃饭,唱歌等。 车也可以作为一个对象,属性有轮…

学生信息登录系统(下)——判断循环语句(五)(for循环篇)

#include <iostream> using namespace std; int main() {bool student[46] 0; //student[0]空出不用int bianhao 0;cin >> bianhao;student[bianhao] 1;return 0; } /* 可是&#xff0c;这个程序只能执行一遍&#xff0c;一次只能录入一个学生&#xff0c;并…

网络请求【小程序】

一、get 二、post 1.获取相应数据 Page({/*** 页面的初始数据*/data: { inptValue:, isArr:[]},/*** 生命周期函数--监听页面加载*/onLoad(options) {},onSubmit(){// console.log(this.data.inptValue)//2.后台请求数据wx.request({url: https://tea.qingnian8.com/demoArt/…

esxi网卡直通后虚拟机无网

出现选网卡的时候无法选中&#xff0c;这里应该是一个bug。 解决方法如下&#xff1a; 1.先随便选择一个网卡 2.勾先取消再重新勾选 3.保存退出&#xff0c;重启虚拟机即可

机器学习 day34(机器学习项目的完整周期、精确度和召回率、F1)

机器学习项目的完整周期 第一步&#xff0c;决定项目是什么。第二步&#xff0c;收集数据。第三步&#xff0c;训练模型&#xff0c;进行错误分析并改进模型&#xff0c;可能会回到第二步。第四步&#xff0c;当模型足够好后&#xff0c;部署在生产环境中&#xff0c;继续监控…

竞赛选题 基于深度学习的人脸专注度检测计算系统 - opencv python cnn

文章目录 1 前言2 相关技术2.1CNN简介2.2 人脸识别算法2.3专注检测原理2.4 OpenCV 3 功能介绍3.1人脸录入功能3.2 人脸识别3.3 人脸专注度检测3.4 识别记录 4 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的人脸专注度…

阿里云服务器上CentOS 7.6使用rpm包安装MySQL 8.0.31

我这里下载的是最新版本&#xff0c;需要到MySQL官网最新版本下载地址。 要是想要下载以前的版本需要到MySQL以前版本网址中。 1&#xff09;先使用wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.31-1.el7.x86_64.rpm-bundle.tar&#xff08;这个网址现在已经不…