haproxy编译安装

news2024/9/29 22:51:45

一、haproxy简介

HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。

HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter和 Tuenti在内的知名网站,及亚马逊网络服务系统都使用了HAProxy。

二、负载均衡

二层负载均衡(mac)

用于虚拟mac地址方式,外部对虚拟mac地址请求,负载均衡接收后分配给后端实际的mac地址响应。

三层负载均衡(ip)

一般用于虚拟ip地址的方式,外部对虚拟ip地址请求,负载均衡接收后分配给后端实际的ip地址响应。

四层负载均衡(tcp)

在三层负载均衡的基础上,用ip+port接收请求,在转发到对应的机器上。
产品大概有:F5,lvs,nginx,haproxy…

七层负载均衡(http)

根据虚拟的url或者ip,主机名接收请求,在转发到相应的处理服务器上。
产品大概有:haproxy,nginx,apache,mysql proxy…

三、编译安装

环境:

三台rockylinux9虚拟机,使用xshell连接
192.168.100.111  dr   搭建haproxy
192.168.100.112  rs1  安装httpd服务,做网站,测试用
192.168.100.114  rs2  安装httpd服务,做网站,测试用
192.168.100.115  client  作为客户端进行访问验证

//全部主机都安装基础工具包
[root@dr ~]# yum -y install tar lrzsz chrony
[root@dr ~]# systemctl restart chronyd; systemctl enable chronyd; hwclock -w

1、rs1,rs2安装httpd

rs1

[root@rs1 ~]# mount /dev/cdrom /mnt/
mount: /mnt: WARNING: source write-protected, mounted read-only.
[root@rs1 ~]# yum -y install httpd
[root@rs1 ~]# echo rs1 > /var/www/html/index.html
[root@rs1 ~]# systemctl restart httpd
[root@rs1 ~]# systemctl enable httpd

rs2

[root@rs2 ~]# mount /dev/cdrom /mnt/
mount: /mnt: WARNING: source write-protected, mounted read-only.
[root@rs2 ~]# yum -y install httpd
[root@rs2 ~]# echo rs2 > /var/www/html/index.html
[root@rs2 ~]# systemctl restart httpd
[root@rs2 ~]# systemctl enable httpd

client测试

[root@client ~]# curl http://192.168.100.112
rs1
[root@client ~]# curl http://192.168.100.114
rs2

2、配置安装环境

//先创建软件压缩包存放位置
[root@dr ~]# mkdir /opt/software
[root@dr ~]# cd /opt/software/
[root@dr software]# rz -E
rz waiting to receive.
[root@dr software]# ls
haproxy-3.0.3.tar.gz

//安装编译环境
[root@dr software]# yum -y install make gcc pcre-devel bzip2-devel openssl-devel systemd-devel gcc-c++ zlib-devel lua

3、创建用户,解压包文件

[root@dr software]# useradd -r -M -s /sbin/nologin haproxy
[root@dr software]# id haproxy
uid=996(haproxy) gid=993(haproxy) groups=993(haproxy)

[root@dr software]# tar -zxvf haproxy-3.0.3.tar.gz
[root@dr software]# ls
haproxy-3.0.3  haproxy-3.0.3.tar.gz

4、编译安装

[root@dr software]# cd haproxy-3.0.3/
[root@dr haproxy-3.0.3]# make clean
[root@dr haproxy-3.0.3]# grep processor /proc/cpuinfo 
processor	: 0
[root@dr haproxy-3.0.3]# grep processor /proc/cpuinfo | wc -l
1
[root@dr haproxy-3.0.3]# make -j $(grep 'processor' /proc/cpuinfo |wc -l)  \
> TARGET=linux-glibc  \
> USE_OPENSSL=1  \
> USE_ZLIB=1  \
> USE_PCRE=1  \
> USE_SYSTEMD=1

[root@dr haproxy-3.0.3]# make install prefix=/usr/local/haproxy
[root@dr haproxy-3.0.3]# cp haproxy /usr/sbin/

5、配置内核参数

[root@dr haproxy-3.0.3]# vim /etc/sysctl.conf 
//在文件最后添加两行信息
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1

6、编辑haproxy配置文件

[root@dr haproxy-3.0.3]# mkdir /etc/haproxy
[root@dr haproxy-3.0.3]# vim /etc/haproxy/haproxy.cfg
global
    log 127.0.0.1 local0  info
    #log loghost local0 info
    maxconn 20480
#chroot /usr/local/haproxy
    pidfile /var/run/haproxy.pid
    #maxconn 4000
    user haproxy
    group haproxy
    daemon
#---------------------------------------------------------------------
#common defaults that all the 'listen' and 'backend' sections will
#use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode http
    log global
    option dontlognull
    option httpclose
    option httplog
    #option forwardfor
    option redispatch
    balance roundrobin
    timeout connect 10s
    timeout client 10s
    timeout server 10s
    timeout check 10s
    maxconn 60000
    retries 3
#--------------统计页面配置------------------
listen admin_stats
    bind 0.0.0.0:8189
    stats enable
    mode http
    log global
    stats uri /haproxy_stats
    stats realm Haproxy\ Statistics
    stats auth admin:admin
    #stats hide-version
    stats admin if TRUE
    stats refresh 30s
#---------------web设置-----------------------
listen webcluster
    bind 0.0.0.0:80
    mode http
    #option httpchk GET /index.html
    log global
    maxconn 3000
    balance roundrobin
    cookie SESSION_COOKIE insert indirect nocache
//下面两台配置信息要改为刚刚配置的两台httpd服务的ip
    server rs1 192.168.100.112:80 check
    server rs2 192.168.100.114:80 check

7、启动haproxy,配置haproxy.service服务单元文件

[root@dr haproxy-3.0.3]# vim /usr/lib/systemd/system/haproxy.service
//在文件中写入以下内容
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target

[Service]
ExecStartPre=/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg   -c -q
ExecStart=/usr/local/haproxy/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg  -p /var/run/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

[root@dr haproxy-3.0.3]# make install PREFIX=/usr/local/haproxy
[root@dr haproxy-3.0.3]# systemctl daemon-reload
[root@dr haproxy]# systemctl restart haproxy.service 
[root@dr haproxy]# systemctl enable haproxy.service 

[root@dr haproxy-3.0.3]# make install PREFIX=/usr/local/haproxy

8、测试

[root@client ~]# curl http://192.168.100.111
rs1
[root@client ~]# curl http://192.168.100.111
rs2
[root@client ~]# curl http://192.168.100.111
rs1
[root@client ~]# curl http://192.168.100.111
rs2

四、配置文件解析

haproxy 的配置文件由两部分组成:全局设定和对代理的设定,共分为五段:global,defaults,frontend,backend,listen

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

default: 配置默认参数,这些参数可以被用到frontend,backend,Listen组件。

frontend:接收请求的前端虚拟节点,frontend可以指定具体使用后端backend。

backend : 后端服务集群的配置,真实服务器,一个backend对应一个或者多个实体服务器。

listen: fronted和backend的组合体,比如haproxy实例状态监控部分配Haproxy1.3之前的唯一配置方式。

1、时间格式

一些包含了值的参数表示时间,如超时时长。这些值一般以毫秒为单位,但也可以使用其它的时间单位后缀
us: 微秒(microseconds),即1/1000000秒;

ms: 毫秒(milliseconds),即1/1000秒;

s: 秒(seconds);

m: 分钟(minutes);

h:小时(hours);

d: 天(days);

2、全局global配置

global
log 127.0.0.1 local0 info //定义haproxy日志输出设置

#log loghost local0 info    //定义haproxy日志级别

maxconn 20480         //定义最大连接数

#chroot /usr/local/haproxy //chroot运行路径

pidfile /var/run/haproxy.pid //haproxy进程PID文件

#maxconn 4000

user haproxy //运行haproxy用户,可用uid代替

group haproxy //运行haproxy用户组,可用gid代替

daemon //以后台形式运行haproxy

在这里插入图片描述

3、defaults配置

用于设置配置默认参数,这些参数可以被用到frontend,backend,listen组件。

在此部分中设置的参数值,默认会自动引用到下面的frontend、backend、listen部分中。如果某些参数属于公用的配置,只需要在defaults部分添加一次即可。而如果frontend、backend、listen部分也配置了与defaults部分一样的参数,defaults部分参数对应的值自动被覆盖。

defaults
    mode http   //所处理的类别(7层代理http,4层代理tcp)
    log global   //引入global定义的日志格式
    option dontlognull   //不记录健康检查日志信息
    option httpclose  //每次请求完毕后主动关闭http通道,haproxy不支持keep-alive模式
    option httplog  //日志类别为http日志格式
    #option forwardfor  //如果后端服务器需要获取客户端的真实ip,需要配置的参数,可以从http header中获取客户端的ip
    option redispatch
    balance roundrobin  //设置默认负载均衡方式,轮询方式
    timeout connect 10s  //默认连接超时时间
    timeout client 10s   //默认客户端超时时间
    timeout server 10s  //默认服务器超时时间
    timeout check 10s  //设置超时检查超时时间 
    maxconn 60000  //最大连接数
    retries 3   //3次连接失败就认为服务器不可用,也可以通过后面设置

mode http:设置haproxy的运行模式,有三种{http|tcp|health}。注意:如果haproxy中还要使用4层的应用(mode tcp)的话,不建议在此定义haproxy的运行模式。

tcp模式:在此模式下,客户端和服务器端之前将建立一个全双工的连接,不会对七层报文做任何检查,默认为tcp模式,经常用于SSL、SSH、SMTP等应用。
http模式:在此模式下,客户端请求在转发至后端服务器之前将会被深度分板,所有不与RFC格式兼容的请求都会被拒绝。
health:已基本不用了。

4、frontend配置

frontend是在haproxy 1.3版本以后才引入的一个组件,同时引入的还有backend组件。通过引入这些组件,在很大程度上简化了haproxy配置文件的复杂性。forntend可以根据ACL规则直接指定要使用的后端backend。
如:
frontend http_80_in 
bind 0.0.0.0:80   //设置侦听端口,即haproxy提供的web服务端口,和lvs的vip类似
mode http	
log  global   
 	option httpclose  
    option httplog  
option forwardfor
default_backend  wwwpool  //设置请求默认转发的后端服务池

5、backend配置

用来定义后端服务集群的配置,真实服务器,一个Backend对应一个或者多个实体服务器
backend  wwwpool    //定义wwwpool服务器组
mode  http
option  redispath
option  abortonclose
balancer  source   //负载均衡的方式,源哈希算法
cookie  SERVERID  //允许插入serverid到cookie中,serverid后面可以定义
option  httpdchk  GET  /test.html    //心跳测试
server  web1  10.1.1.2:80  cookie  2 weight  3  check  inter 2000  rise 2 fall 3 maconn 8

6、listen配置

常常用于状态页面监控,以及后端server检查,是Fronted和backend的组合体。
listen admin_stats     //frontend和backend的组合体,监控组的名称,按需自定义名称
    bind 0.0.0.0:8189      //侦听端口
    stats enable      //开启监控
    mode http
    log global
    stats uri /haproxy_stats    //监控页面的url访问路径
    stats realm Haproxy\ Statistics  //监控页面的提示信息
    stats auth admin:admin  //监控页面的用户和密码
    #stats hide-version   //隐藏统计页面上的haproxy版本信息
    stats admin if TRUE  //手工启用/禁用,后端服务器haproxy
    stats refresh 30s   //每个30秒自动刷新监控页面

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

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

相关文章

Ubuntu 22.04中MySQL 8 设置忽略大小

Ubuntu 22.04中MySQL 8 设置忽略大小 一、解决完整流程 //根据官网内容说的大概意思就是不能安装完了修改忽略大小写了,只能在初始化的时候做修改。我用的版本是8.0.39//更新软件包 1、sudo apt update //安装MySQL 如果安装了可以忽略这个步骤 2、sudo apt insta…

【计算机三级-数据库技术】数据库及数据库对象

数据库及数据库对象 第一节 创建及维护数据库 一、SQL server数据库分类 1)系统数据库(系统自动创建): master、msdb、tempdb、model、resource 2)用户数据库 保存与用户业务有关的数据。 二、SQL server数据库组成…

【660线代】线性代数一刷错题整理

线代一阶 2024.8.7日 1. 2. 2024.8.8日 1. 2024.8.9日 1. 2. 3. 2024.8.12日 1. 2. 2024.8.13日 1. 2. 3. 2024.8.15日 1. 2. 3. 4. 5. 6. 线代二阶 2024.8.17日 1. 2. 3. 2024.8.18日 1. 至此,660线性代数部分完成。 祝各位一战成硕!

鸿蒙关于可以实现滚动效果的容器组件的相关知识

一、滚动的用途 生活中,我们在使用各种APP应用的过程中,总是可以看到一些轮播图、内容页面的滑动、组件切换的效果等,这些都是为了提高用户的体验而设计的功能。在编程中,滚动的用途非常广泛,我们经常用在用户界面的交…

Umi-OCR 文字识别工具

免费开源的离线orc识别功能 git地址 感谢大佬的贡献 Umi-OCR 文字识别工具 使用说明 • 下载地址 • 更新日志 • 提交Bug 免费,开源,可批量的离线OCR软件 适用于 Windows7 x64 、Linux x64 免费:本项目所有代码开源&#x…

C++ 程序寻找通过 2 个点的线(Program to find line passing through 2 Points)

在数学和计算机科学中,找到通过两个点的线的方程是一个基础问题。假设我们有两个点 P1​(x1​,y1​) 和 P2​(x2​,y2​),我们想要找到通过这两个点的直线方程。 直线方程的形式 直线的方程通常表示为 ymxb,其中 m 是斜率,b 是 …

PMP核心知识点—之项目管理基础

知识点1:项目的临时性 项目的临时性是指项目有明确的开始时间和结束时间,但并不能表示项目的周期短,项目的周期从几个月、几年到几十年都有。 知识点2:项目的独特性 独特的产品、服务或成果。 知识点3:项目创造商业价值…

ARCGIS 纸质小班XY坐标转电子要素面

1、准备好excel 坐标 小班号、点位链接的顺序、X、Y 4个缺一不可,需要注意的是,点位顺序的格式最好为数字,若为其他格式可能会出现排序混乱,会以1-9 11-19等字符串的排序连接。 excel文件转为csv才能识别,CSV只能保留第…

错过了游科的黑神话?别急,国内这些公司也在招聘中,都是做3A游戏的,速来!

近日,由游戏科学工作室打造的3A游戏——《黑神话:悟空》,不仅在国内引起了前所未有的关注,在全球范围内也引发了巨大轰动。 游戏玩家们举国欢庆的同时,无数游戏从业者也点燃了对国产3A游戏的憧憬与期待! 据说游科在某…

Java 通用代码生成器光,电音之王尝鲜版八,完善数据库自动反射功能和多对多候选功能

Java 通用代码生成器光,电音之王尝鲜版八,完善数据库自动反射功能和多对多候选功能 Java 通用代码生成器光,电音之王尝鲜版八,此版本完善了数据库自动反射功能。完善了多对多候选功能。尝鲜版八在以前的版本上修复了大量缺陷和功…

PDF文件切割,无大小限制

前言 公司让学习一个东西,让写一个学习总结,我想这不是AI的拿手好戏,直接把近100M的PDF喂给他,然后他说吃不下,太大了 小事,那么多在线PDF工具网站,分分钟拆开,然后找了半天也都是…

Java开发笔记-小程序微信支付接入

步骤: 1.注册微信商户,开通小程序支付业务,获得必要接入参数。(Certificate、PrivateKey、merchantId、SerialNumbe、apiV3Key) 2.微信商户号关联小程序(需目标小程序审核) 3.java使用接入参数发起下单,获取下单参数。 4.小程…

新手设计师看一看!2024年PDF转CAD软件TOP4

在现在这个啥都能数字化的时代,文件格式得来回换已经成了我们工作的日常,特别是把PDF转成CAD,对工程师、设计师还有搞建筑的人来说,这事儿特别重要。技术越发展,市面上就出现了好些又快又方便的工具。今天,…

AI+新质生产力,化敌为友的新未来

“新质生产力”是今年的“高频词”。如何将“新质生产力”落到实处,业内纷纷瞄准了同一个关键词:“人工智能”,特别是 “人工智能” ,这个小小的""号代表着无限的可能性。人工智能正在成为现代社会的基础设施&#xff0…

便签内容转移新设备攻略

在桌面使用便签软件记录工作和生活中的点点滴滴,已成为许多人的习惯。它不仅能帮助我们捕捉灵感、记录待办事项,还能提醒我们重要的日程安排。然而,随着设备的更新换代或工作地点的变更,我们有时需要将便签内容从一个设备转移到另…

多门店多端平台系统小程序源码

🔥【健身新纪元】多门店多端分开健身系统,打造你的个性化健身体验🌟 🏋️‍♀️ 一、告别单一,拥抱多元化健身时代 你还在为找不到合适的健身房而烦恼吗?或是想要随时随地开启健身模式,却受限…

聚水潭ERP集成用友NC(用友NC主供应链)

源系统成集云目标系统 用友NC介绍 用友NC是用友NC产品的全新系列,是面向集团企业的世界级高端管理软件。它以“全球化集团管控、行业化解决方案、全程化电子商务、平台化应用集成”的管理业务理念而设计,采用J2EE架构和先进开放的集团级开发平台UAP&am…

UDS 诊断 - ReadDataByPeriodicIdentifier(按周期性标识符读取数据)(0x2A)服务

UDS 诊断服务系列文章目录 诊断和通信管理功能单元 UDS 诊断 - DiagnosticSessionControl(诊断会话控制)(0x10)服务 UDS 诊断 - ECUReset(ECU重置)(0x11)服务 UDS 诊断 - SecurityA…

5个网络监控神器,别说老网工藏私不发给你

前言 是2022年度的精选网络工具安利贴,你都看了没? 现在啊,很多企业公司都有不少的网络硬件,而这些网络硬件设备根据不同的功能,会分散在不同的物理位置上。 可能有些网络硬件设备是集中式管理,有些只能…

2024年掏耳勺买什么样的好?四款优良产品推荐,不可错过

21世纪的到来,全民生活品质得到了飞跃进步,大家逐渐开始关注耳道的健康清洁。传统挖耳勺因直径大、材质硬、无法看清耳道等因素,往往很难满足大部分人群的清洁需求,甚至带来不可逆转的伤害。可视挖耳勺的出现,具备可视…