我个人的Haproxy-1.7.9实践:安装,编译与测试(1)(★firecat推荐,针对TCP四层负载均衡★)

简介: 我个人的Haproxy-1.7.9实践:安装,编译与测试(★firecat推荐,针对TCP四层负载均衡★)

https://www.haproxy.com/

http://pkgs.fedoraproject.org/repo/pkgs/haproxy/ ftp下载

http://cbonte.github.io/haproxy-dconv/ 官方文档

一、先来看看Haproxy的原理


以常见的TCP应用为例,负载均衡器在接收到第一个来自客户端的SYN请求时,会通过设定的负载均衡算法选择一个最佳的后端服务器,同时将报文中目标IP地址修改为后端服务器IP,然后直接转发给该后端服务器,这样一个负载均衡请求就完成了。从这个过程来看,一个TCP连接是客户端和服务器直接建立的,而负载均衡器只不过完成了一个类似路由器的转发动作。在某些负载均衡策略中,为保证后端服务器返回的报文可以正确传递给负载均衡器,在转发报文的同时可能还会对报文原来的源地址进行修改。整个过程下图所示。


wKioL1dfXEiy30hCAABEn10fvd8185.png

同理,七层负载均衡器也称为七层交换机,位于OSI的最高层,即应用层,此时负载均衡器支持多种应用协议,常见的有HTTP、FTP、SMTP等。七层负载均衡器可以根据报文内容,再配合负载均衡算法来选择后端服务器,因此也称为“内容交换器”。比如,对于Web服务器的负载均衡,七层负载均衡器不但可以根据“IP+端口”的方式进行负载分流,还可以根据网站的URL、访问域名、浏览器类别、语言等决定负载均衡的策略。例如,有两台Web服务器分别对应中英文两个网站,两个域名分别是A、B,要实现访问A域名时进入中文网站,访问B域名时进入英文网站,这在四层负载均衡器中几乎是无法实现的,而七层负载均衡可以根据客户端访问域名的不同选择对应的网页进行负载均衡处理。常见的七层负载均衡器有HAproxy、Nginx等。


这里仍以常见的TCP应用为例,由于负载均衡器要获取到报文的内容,因此只能先代替后端服务器和客户端建立连接,接着,才能收到客户端发送过来的报文内容,然后再根据该报文中特定字段加上负载均衡器中设置的负载均衡算法来决定最终选择的内部服务器。纵观整个过程,七层负载均衡器在这种情况下类似于一个代理服务器。整个过程如下图所示。



对比四层负载均衡和七层负载均衡运行的整个过程,可以看出,在七层负载均衡模式下,负载均衡器与客户端及后端的服务器会分别建立一次TCP连接,而在四层负载均衡模式下,仅建立一次TCP连接。由此可知,七层负载均衡对负载均衡设备的要求更高,而七层负载均衡的处理能力也必然低于四层模式的负载均衡。


二、源码编译与安装


1、tar -zxf haproxy-1.7.9.tar.gz


2、cd haproxy-1.7.9


3、make TARGET=linux2628 PREFIX=/usr/local/haproxy


TARGET应该怎么填?TARGET指定编译对应的os对应的内核版本,通过命令”uname -r”查询Linux内核版本。源文件夹readme有针对平台的定义:

- linux22     for Linux 2.2
  - linux24     for Linux 2.4 and above (default)
  - linux24e    for Linux 2.4 with support for a working epoll (> 0.21)
  - linux26     for Linux 2.6 and above
  - linux2628   for Linux 2.6.28, 3.x, and above (enables splice and tproxy)
  - solaris     for Solaris 8 or 10 (others untested)
  - freebsd     for FreeBSD 5 to 10 (others untested)
  - netbsd      for NetBSD
  - osx         for Mac OS/X
  - openbsd     for OpenBSD 5.7 and above
  - aix51       for AIX 5.1
  - aix52       for AIX 5.2
  - cygwin      for Cygwin
  - haiku       for Haiku
  - generic     for any other OS or version.
  - custom      to manually adjust every setting


4、make install PREFIX=/usr/local/haproxy


5、mkdir /usr/local/haproxy/conf


cd /usr/local/haproxy/conf


6、haproxy默认是不带配置文件的,需要自己在conf文件夹里新建和编辑配置文件

touch haproxy.cfg,内容如下


global #全局属性
    log 127.0.0.1 local0 info
    daemon  #以daemon方式在后台运行,推荐
    nbproc 1 #HAProxy启动时作为守护运行可创建的进程数,配合daemon参数使用,默认只启动一个进程,该值应小于cpu核数。
    maxconn 102400  #最大同时*连接
    pidfile /usr/local/haproxy/conf/haproxy.pid  #指定保存HAProxy进程号的文件
    stats socket /usr/local/haproxy/stats  #定义统计信息保存位置
defaults #默认参数
    mode tcp  #tcp/http模式
    retries 3
    timeout connect 5s  #连接server端超时5s
    timeout client 300s  #客户端响应超时50s
    timeout server 300s  #server端响应超时50s
    timeout check 300s   #设置对后端服务器检测超时时间,即心跳50s
frontend my-tcp-in #前端服务tcp-in
    mode tcp
    bind 0.0.0.0:1884  #监听1884端口
    log global
    default_backend my-servers  #请求转发至名为"my-servers"的后端服务
backend my-servers #后端服务servers
    balance roundrobin #使用RR负载均衡算法
    server server1 172.16.6.161:1883 maxconn 10000  #backend servers中只有一个后端服务,名字叫server1,启在本机的1883端口,HAProxy同时最多向这个服务发起?个连接
    server server2 172.16.6.161:1888 maxconn 10000
    server server3 172.16.6.162:1888 maxconn 10000 check inter 3000 rise 2 fall 3
listen admin_status #统计web页面配置, frontend和backend的组合体, 监控组的名称可按需自定义
    mode http #配置监控运行模式
    bind 0.0.0.0:1080 #配置统计页面访问端口
    maxconn 10 #统计页面默认最大连接数
    log 127.0.0.1 local0 err
    stats enable #开启统计
    stats refresh 30s #监控页面自动刷新时间
    stats uri /stats #统计页面访问url
    stats realm welcome login\ Haproxy #统计页面密码框提示文本
    stats auth admin:admin #监控页面的用户和密码:admin, 可设置多个用户名
    stats admin if TRUE #手工启动/禁用后端服务器, 可通过web管理节点



默认也没有日志文件,需要自己设置/etc/rsyslog,详情见参考文献。


Haproxy通过check可以对后端服务器定期进行“健康”检测,及时发现down掉的“机器”和重新up的“机器”。

1) 对于down掉的机器Haproxy不再对向其转发数据;

2) 对于重新up的机器Haproxy将恢复向其转发数据。

check inter 3000 rise 2 fall 3

设置检测时间为3000毫秒,如果连续2次成功则标记该机器是up的,如果连续3次失败则标记其为down。





相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
24天前
|
安全 Linux 测试技术
提升龙蜥内核测试能力!探究持续性模糊测试优化实践
清华大学软件学院对Anolis OS使用靶向模糊测试方法将测试工作引向修改的代码,进而提高对业务代码的测试能力。
|
3天前
|
分布式计算 Hadoop Scala
Spark【环境搭建 01】spark-3.0.0-without 单机版(安装+配置+测试案例)
【4月更文挑战第13天】Spark【环境搭建 01】spark-3.0.0-without 单机版(安装+配置+测试案例)
8 0
|
9天前
|
敏捷开发 监控 前端开发
深入理解自动化测试框架Selenium的架构与实践
【4月更文挑战第16天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加快迭代速度的关键手段。Selenium作为一种广泛使用的自动化测试工具,其开源、跨平台的特性使得它成为业界的首选之一。本文旨在剖析Selenium的核心架构,并结合实际案例探讨其在复杂Web应用测试中的高效实践方法。通过详细解读Selenium组件间的交互机制以及如何优化测试脚本,我们希望为读者提供深入理解Selenium并有效运用于日常测试工作的参考。
14 1
|
9天前
|
自然语言处理 测试技术 API
深入理解自动化测试框架Selenium的设计理念与实践
【4月更文挑战第15天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加速迭代的关键手段。Selenium作为一种广泛使用的自动化测试框架,提供了对多种浏览器和平台的支持,极大地促进了Web应用的功能测试。本文旨在剖析Selenium的核心设计理念,探讨其在实际项目中的应用,并指出常见的误区及最佳实践,以期帮助测试工程师更高效地利用Selenium进行测试工作。
|
18天前
|
安全 测试技术
深入理解白盒测试:方法、工具与实践
【4月更文挑战第7天】 在软件开发的质量控制过程中,白盒测试是确保代码逻辑正确性的关键步骤。不同于黑盒测试关注于功能和系统的外部行为,白盒测试深入到程序内部,检验程序结构和内部逻辑的正确性。本文将探讨白盒测试的核心技术,包括控制流测试、数据流测试以及静态分析等方法,同时介绍当前流行的白盒测试工具,并讨论如何在实际项目中有效实施白盒测试。文章的目标是为软件测试工程师提供一份综合性指南,帮助他们更好地理解和应用白盒测试技术。
|
30天前
|
敏捷开发 测试技术 持续交付
深入探索软件测试自动化:框架与实践
在快速演进的软件行业中,测试自动化已成为确保产品质量和加快上市速度的关键因素。本文将深入分析测试自动化框架的构建要点,探讨其在实际应用中的效益,以及实施过程中可能面临的挑战。通过对比手动测试与自动化测试的优势与局限,本文旨在为读者提供一套系统化的测试自动化实践指南,以支持更高效、可靠的软件开发周期。
11 0
|
30天前
|
负载均衡 网络协议 安全
slb监听协议tcp
SLB的TCP监听协议适用于WebSocket支持和通用TCP服务,如FTP、SMTP。配置时设定监听端口,健康检查通过TCP握手检测服务器可用性。会话保持基于源IP,可配置SSL/TLS卸载或端到端加密。注意特定HTTP头传递和平台限制。适用于需要传输层流量管理和不依赖HTTP的应用。
18 3
|
1月前
|
传感器 监控 算法
【软件设计师备考 专题 】模块测试的方法和实践
【软件设计师备考 专题 】模块测试的方法和实践
73 0
|
1月前
|
敏捷开发 IDE 测试技术
深入理解自动化测试框架Selenium的设计理念与实践
随着敏捷开发和持续集成的理念深入人心,自动化测试在软件开发周期中扮演着越来越重要的角色。Selenium作为一个广泛使用的自动化测试工具,其设计理念和实践对于提高测试效率和质量具有指导意义。本文将深入探讨Selenium的核心设计原则、架构以及最佳实践,旨在帮助读者构建更稳定、高效的自动化测试系统。
|
1月前
|
jenkins 测试技术 持续交付
深入理解自动化测试框架设计原则与实践
本文旨在探讨自动化测试框架的设计原则及其在实际项目中的应用。通过对自动化测试框架的系统剖析,我们揭示了有效构建和维持测试框架的核心要素,并提供了一套实用的指导方案来帮助读者实现高效、可靠的自动化测试流程。文章不仅聚焦于框架的技术细节,也强调了灵活性、可维护性和可扩展性在设计时的重要性,同时结合实际案例分析,展示了如何在不同测试环境中定制化和优化测试框架。