linux————haproxy

news/2025/2/14 6:08:54/

一、概述

        HAProxy是一个免费的负载均衡软件,可以运行于大部分主流的Linux操作系统上(CentOS、Ubuntu、Debian、OpenSUSE、Fedora、麒麟、欧拉、UOS)。

        HAProxy提供了L4(TCP)和L7(HTTP)两种负载均衡能力,具备丰富的功能。HAProxy具备媲美商用负载均衡器的性能和稳定性。

核心功能

        负载均衡:L4和L7两种模式,支持RR/静态RR/LC/IP Hash/URI Hash/URL_PARAM Hash/HTTP_HEADER Hash等丰富的负载均衡算法
         健康检查:支持TCP和HTTP两种健康检查模式
        会话保持:对于未实现会话共享的应用集群,可通过Insert Cookie/Rewrite Cookie/Prefix Cookie,以及上述的多种Hash方式实现会话保持
        SSL:HAProxy可以解析HTTPS协议,并能够将请求解密为HTTP后向后端传输
        HTTP请求重写与重定向
        监控与统计:HAProxy提供了基于Web的统计信息页面,展现健康状态和流量数据。基于此功能,使用者可以开发监控程序来监控HAProxy的状态

关键特性

        采用单线程、事件驱动、非阻塞模型,减少上下文切换的消耗,能在1ms内处理数百个请求。并且每个会话只占用数KB的内存。
        大量精细的性能优化,如O(1)复杂度的事件检查器、延迟更新技术、Single-buffereing、Zero-copy forwarding等等,这些技术使得HAProxy在中等负载下只占用极低的CPU资源。
        HAProxy大量利用操作系统本身的功能特性,使得其在处理请求时能发挥极高的性能,通常情况下,HAProxy自身只占用15%的处理时间,剩余的85%都是在系统内核层完成的。
        HAProxy作者在8年前(2009)年使用1.4版本进行了一次测试,单个HAProxy进程的处理能力突破了10万请求/秒,并轻松占满了10Gbps的网络带宽。

应用场景

        高并发要求较高的场合下

二、安装

一、环境内核配置

可有可无(vim /etc/sysctl.conf)

net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65023
net.ipv4.tcp_max_syn_backlog = 10240
net.ipv4.tcp_max_tw_buckets = 400000
net.ipv4.tcp_max_orphans = 60000
net.ipv4.tcp_synack_retries = 3
net.core.somaxconn = 10000

二、编译安装

wget https://www.haproxy.org/download/1.7/src/haproxy-1.7.2.tar.gz

cd /haproxy-1.7.2/
make PREFIX=/usr/local/haproxy TARGET=linux2628
make install PREFIX=/usr/local/haproxy

三、建立配置文件

从haproxy的源码包中的examples下的init.haproxy中获得配置文件的路“/etc/haproxy/haproxy.cfg”
mkdir /etc/haproxy
touch /etc/haproxy/haproxy.cfg

添加系统服务

vim  /etc/init.d/haproxy
chmod +x /etc/init.d/haproxyd
chkconfig --add /etc/init.d/haproxy

添加3和5运行级别下自启动

chkconfig haproxy --level 35 on
chkconfig --list 

 配置文件

三、 启动haproxy

 service haproxy  start
service haproxy  stop
service haproxy  restart  | reload
systemctl  daemon-reload

也可以使用systemctl 启动

配置web

安装epel-release                yum install -y epel-release 

安装nginx                            yum install -y  nginx 

修改配置文件 并启动           echo   nginx1 > /usr/share/nginx/html/index.html  (web1)

                                             echo   nginx2 > /usr/share/nginx/html/index.html  (web1)

                                            systemctl start nginx 

 四、调度算法

        roundrobin:表示简单的轮询。
        static-rr:表示根据权重。
        leastconn:表示最少连接者先处理。
        source:表示根据请求的源 IP,类似 Nginx 的 IP_hash 机制。
        ri:表示根据请求的 URI。
        rl_param:表示根据 HTTP 请求头来锁定每一次 HTTP 请求。
        rdp-cookie(name):表示根据据 cookie(name)来锁定并哈希每一次 TCP 请求。

五、负载均衡

一、七层负载

配置负载

global 
    daemon  
    maxconn 256  
    pidfile /var/run/haproxy/haproxy.pid   
defaults 
    mode http  
    timeout connect 5000ms  
    timeout client 50000ms  
    timeout server 50000ms 
frontend http-in 
    bind *:8080  
    default_backend servers  
backend servers 
    server server1 127.0.0.1:8000 maxconn 32  
    server server2 127.0.0.1:8090 maxconn 32

配置监控页面

listen stats    #定义监控页面    
bind *:1080                   #绑定端口1080    
stats refresh 30s             #每30秒更新监控数据    
stats uri /stats              #访问监控页面的uri    
stats realm HAProxy\ Stats    #监控页面的认证提示    
stats auth admin:admin        #监控页面的用户名和密码

 

 二、四层负载

配置负载

global 
    daemon  
    maxconn 256  
    pidfile /var/run/haproxy/haproxy.pid  
defaults 
    mode tcp
    timeout connect 5000ms  
    timeout client 50000ms  
    timeout server 50000ms 
frontend http-in 
    bind *:8080  
    default_backend servers  
backend servers
    balance  roundrobin  #轮询
    #balance  source     #保持会话 
    server server1 127.0.0.1:8000 maxconn 32  
    server server2 127.0.0.1:8090 maxconn 32

六、keepalived+haproxy高可用

haproxy配置

(需要两台haproxy  配置内容一致)

global 
    daemon  
    maxconn 256  
    pidfile /var/run/haproxy/haproxy.pid  
defaults 
    mode http  
    timeout connect 5000ms  
    timeout client 50000ms  
    timeout server 50000ms 
frontend http-in 
    bind *:80 
    default_backend servers  
backend servers 
    server server1 192.168.115.128:80 maxconn 32  
    server server2 192.168.115.131:80  maxconn 32

配置keepalived

yum install -y  keepalived

vim  /etc/keepalived/keepalived.conf

global_defs {
   router_id LVS_DEVEL
}
#HAProxy健康检查配置
vrrp_script chk_haproxy {
    script "killall -0 haproxy"  #使用killall -0检查haproxy实例是否存在,性能高于ps命令
    interval 2   #脚本运行周期
    weight 2   #每次检查的加权权重值
}

vrrp_instance HA_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.115.200
    }
    track_script {
        chk_haproxy        #对应的健康检查配置
    }
}

 

 测试

 虚拟ip监控页面

 


http://www.ppmy.cn/news/1063663.html

相关文章

# Go学习-Day7

文章目录 断言文件打开/关闭文件读取文件写入文件 命令行参数解析Argsflag包 JSON 个人博客:CSDN博客 断言 type Node struct {x inty int }func main() {var a interface{}var n Node Node{1, 2}a nvar b Nodeb a.(Node)fmt.Println(b) }此处我们有一个结构体…

Linux学习笔记-Ubuntu系统下配置ssh免密访问

Ubuntu系统下配置ssh免密访问 一、基本信息二、ssh安装2.1 查看是否已经安装ssh2.2 安装ssh2.3 查看ssh安装状态 三、启动、停止,及开机自启动3.1 启动ssh3.2 关闭ssh3.3 使用systemctl设置ssh服务自启动3.4 使用systemctl关闭ssh开机启动 四、配置通过密钥进行免密…

每日一博 - 闲聊云原生和容器编排

文章目录 概念1. 云原生(Cloud Native):2. 容器编排(Container Orchestration): 小结 概念 云原生和容器编排是两个不同的概念,但它们之间有着密切的联系。下面将分别介绍这两个概念&#xff0…

小研究 - Android 字节码动态分析分布式框架(五)

安卓平台是个多进程同时运行的系统,它还缺少合适的动态分析接口。因此,在安卓平台上进行全面的动态分析具有高难度和挑战性。已有的研究大多是针对一些安全问题的分析方法或者框架,无法为实现更加灵活、通用的动态分析工具的开发提供支持。此…

【Git】测试持续集成——Git+Gitee+PyCharm

文章目录 概述一、使用Gitee1. 注册账号2. 绑定邮箱3. 新建仓库4. 查看项目地址 二、安装配置Git1. 下载安装包2. 校验是否安装成功。3. 配置Git4. Git命令5. Git实操 三、PyCharmGit1. 配置Git2. Clone项目3. 提交文件到服务器4. 从服务器拉取文件 概述 持续集成(…

项目---日志系统

目录 项目系统开发环境核心技术日志系统介绍为什么需要日志系统? 日志系统框架设计日志系统模块划分代码实现通用工具实现日志等级模块实现日志消息模块实现格式化模块实现落地模块实现日志器模块同步日志器异步日志器缓冲区实现异步工作器实现 回归异步日志器模块建造者模式日…

流处理详解

【今日】 目录 一 Stream接口简介 Optional类 Collectors类 二 数据过滤 1. filter()方法 2.distinct()方法 3.limit()方法 4.skip()方法 三 数据映射 四 数据查找 1. allMatch()方法 2. anyMatch()方法 3. noneMatch()方法 4. findFirst()方法 五 数据收集…

Unity Meta Quest MR 开发教程:(二)自定义透视 Passthrough【透视功能进阶】

文章目录 📕教程说明📕动态开启和关闭透视⭐方法一:OVRManager.instance.isInsightPassthroughEnabled⭐方法二:OVRPassthroughLayer 脚本中的 hidden 变量 📕透视风格 Passthrough Styling⭐Inspector 面板控制⭐代码…