小白带你学习linux的HAproxy

简介: 小白带你学习linux的HAproxy

一、概述

2、简介

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

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

2、核心功能

负载均衡: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的状态

3、关键特性

采用单线程、事件驱动、非阻塞模型,减少上下文切换的消耗,能在1ms内处理数百个请求。并且每个会话只占用数KB的内存。

大量精细的性能优化,如O(1)复杂度的事件检查器、延迟更新技术、Single-buffereing、Zero-copy forwarding等等,这些技术使得HAProxy在中等负载下只占用极低的CPU资源。

HAProxy大量利用操作系统本身的功能特性,使得其在处理请求时能发挥极高的性能,通常情况下,HAProxy自身只占用15%的处理时间,剩余的85%都是在系统内核层完成的。

HAProxy作者在8年前(2009)年使用1.4版本进行了一次测试,单个HAProxy进程的处理能力突破了10万请求/秒,并轻松占满了10Gbps的网络带宽。

4、应用场景

高并发要求较高的场合下

二、安装

1、内核配置

       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

2、编译安装

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

下载完事解压缩

tar xf haproxy-1.7.2.tar.gz 
 cd haproxy-1.7.2/
 make PREFIX=/usr/local/haproxy TARGET=linux2628

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

make install PREFIX=/usr/local/haproxy

3、建立配置文件

从haproxy的源码包中的examples下的init.haproxy中获得配置文件的路径

“/etc/haproxy/haproxy.cfg”

ls
 cd examples/
 vim init.haproxy

 

 

mkdir /etc/haproxy
touch /etc/haproxy/haproxy.cfg
vim /etc/haproxy/haproxy.cfg 
添加文件内容
global #全局属性
    daemon  #以daemon方式在后台运行
    maxconn 256  #最大同时256连接
    pidfile /usr/local/haproxy/run/haproxy.pid  #指定保存HAProxy进程号的文件
defaults #默认参数
    mode http  #http模式
    timeout connect 5000ms  #连接server端超时5s
    timeout client 50000ms  #客户端响应超时50s
    timeout server 50000ms  #server端响应超时50s
frontend http-in #前端服务http-in
    bind *:80  #监听8080端口
    default_backend servers  #请求转发至名为"servers"的后端服务
backend servers #后端服务servers
    server server1 192.168.28.4:80 maxconn 32  #backend servers中只有一个后端
服务,名字叫server1,起在本机的8000端口,HAProxy同时最多向这个服务发起32个连>接
    server server2 192.168.28.5:80 maxconn 32  #backend servers中只有一个后端
服务,名字叫server1,起在本机的8000端口,HAProxy同时最多向这个服务发起32个连>接

4、添加为系统服务

 

cp /root/haproxy-1.7.2/examples/haproxy.init /etc/init.d/haproxy
vim  /etc/init.d/haproxy

修改: 35行 内容为 BIN=/usr/local/haproxy/sbin/$BASENAME

注释掉26行

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

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

chkconfig haproxy --level 35 on
chkconfig --list

6、启动haproxy

service haproxy  start

service haproxy  stop

service haproxy  restart  | reload

systemctl  daemon-reload

也可以使用systemctl进行启停

三、调度算法

roundrobin:表示简单的轮询。

static-rr:表示根据权重。

leastconn:表示最少连接者先处理。

source:表示根据请求的源 IP,类似 Nginx 的 IP_hash 机制。

ri:表示根据请求的 URI。

rl_param:表示根据 HTTP 请求头来锁定每一次 HTTP 请求。

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

四、配置文件

配置项

五、负载均衡

1、7层负载

配置负载

这步骤的时候就已经做完了

 

global #全局属性

   daemon  #以daemon方式在后台运行

   maxconn 256  #最大同时256连接

   pidfile /usr/local/haproxy/run/haproxy.pid  #指定保存HAProxy进程号的文件

defaults #默认参数

   mode http  #http模式

   timeout connect 5000ms  #连接server端超时5s

   timeout client 50000ms  #客户端响应超时50s

   timeout server 50000ms  #server端响应超时50s

frontend http-in #前端服务http-in

   bind *:80  #监听8080端口

   default_backend servers  #请求转发至名为"servers"的后端服务

backend servers #后端服务servers

   server server1 192.168.28.4:80 maxconn 32  #backend servers中只有一个后端

服务,名字叫server1,起在本机的8000端口,HAProxy同时最多向这个服务发起32个连>接

   server server2 192.168.28.5:80 maxconn 32  #backend servers中只有一个后端

服务,名字叫server1,起在本机的8000端口,HAProxy同时最多向这个服务发起32个连>接

 

配置监控页面

添加到配置负载的下边

listen stats    #定义监控页面    

bind *:1080                   #绑定端口1080    

stats refresh 30s             #每30秒更新监控数据    

stats uri /stats              #访问监控页面的uri    

stats realm HAProxy\ Stats    #监控页面的认证提示    

stats auth admin:admin        #监控页面的用户名和密码

这里我们的主机就配置完成了需要配置我们的web服务器了全部安装epel源和nginx

yum -y install epel-release
 yum -y install nginx

每台web上重启一下服务创建一下网站

systemctl restart nginx
 cd /usr/share/nginx/html/
 echo nginx2 > index.html
 echo nginx1 > index.html

回到主机curl 192.168.28.3

curl 192.168.28.3
curl 192.168.28.3

外部访问网站、

查看一下监控的网站

2、4层负载

配置负载

不支持监控状态

六、配置syslog日志

[root@mgt examples]# cd /etc/rsyslog.d/
[root@mgt rsyslog.d]# vim haproxy.conf
$ModLoad imudp
$UDPServerRun 514
$FileCreateMode 0644  #日志文件的权限
$FileOwner root  #日志文件的owner
local0.*     /var/log/haproxy.log  #local0接口对应的日志输出文件
local1.*     /var/log/haproxy_warn.log  #local1接口对应的日志输出文件

重启一下服务

systemctl restart rsyslog.service

七、keepalive+haproxy实现高可用

四台主机,两台keepalived和haproxy

 

keepalived配置

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.28.200

   }

   track_script {

       chk_haproxy        #对应的健康检查配置

   }

}

"/etc/keepalived/keepalive

备用

haproxy配置

主的配置不动备的下载haproxy

备用的haproxy的配置和主的一样,

分别重启两个服务

 

测试

停掉主的服务看备份的

 

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
1天前
|
存储 Linux
Linux的学习之路:16、文件(3)
Linux的学习之路:16、文件(3)
28 0
|
1天前
|
Linux C语言 C++
Linux的学习之路:14、文件(1)
Linux的学习之路:14、文件(1)
25 0
|
1天前
|
Linux 程序员 计算机视觉
【linux 学习】在Linux中经常用到的cmake、make、make install等命令解析
【linux 学习】在Linux中经常用到的cmake、make、make install等命令解析
14 0
|
1天前
|
自然语言处理 Java Linux
【Linux】开始学习进程替换吧!
通过学习进程替换,我们可以体会到多语言混搭的快乐,可以从C语言直接蹦到python ,也可以从c++里运行java代码。是不是很厉害!这是通过调度多个进程的效果,联系我们之前学习的进程,进程控制等概念。我们可以想要运行其他代码可以通过创建子进程来实现,但是这样也肯定是同一种语言,如果想要运行其他语言,那是不是有种方法可以调度一个进程来当做子进程呢??? 我们开始今天的学习吧!
11 0
|
1天前
|
Ubuntu 算法 Linux
嵌入式Linux的学习误区
该文指出了学习嵌入式Linux开发的两个常见误区。一是过分专注于学习桌面或服务器版Linux,而非关注嵌入式开发本身,实际上只需熟悉基本操作即可。二是试图在没有基础的情况下直接阅读Linux内核源代码,这是不切实际的,应先建立基础知识再进行源码学习。文章还提到了在嵌入式系统中获取和处理屏幕数据的示例,包括使用gsnap工具将framebuffer数据转为图像,以及涉及的交叉编译过程。
11 0
|
1天前
|
负载均衡 网络协议 应用服务中间件
【亮剑】在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。
【4月更文挑战第30天】本文介绍了在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。HAProxy是一个高性能的开源TCP和HTTP负载均衡器,适合处理大量并发连接;Nginx是一个多功能Web服务器和反向代理,支持HTTP、HTTPS和TCP负载均衡,同时提供缓存和SSL功能;Keepalived用于监控和故障切换,通过VRRP实现IP热备份,保证服务连续性。文中详细阐述了如何配置这三个工具实现负载均衡,包括安装、配置文件修改和启动服务,为构建可靠的负载均衡系统提供了指导。
|
1天前
|
编解码 Linux 数据安全/隐私保护
【Linux学习】​​学习Linux的准备工作和Linux的基本指令
【Linux学习】​​学习Linux的准备工作和Linux的基本指令
|
1天前
|
Linux Shell 虚拟化
【Linux学习】Linux 的虚拟化和容器化技术
【Linux学习】Linux 的虚拟化和容器化技术
|
1天前
|
运维 监控 安全
【专栏】11 个 Linux 网络命令学习和熟练运用这些命令是提升网络管理能力的基础
【4月更文挑战第28天】本文介绍了11个必备的Linux网络命令,包括ifconfig、ip、ping、traceroute、netstat、tcpdump、ss、telnet、ftp、ssh和nmap,这些命令在网络配置、故障排查和性能监控中发挥关键作用。通过实例分析,强调了它们在实际工作中的综合应用,帮助运维工程师提升效率和应对网络挑战。学习和熟练运用这些命令是提升网络管理能力的基础。
|
1天前
|
消息中间件 Unix Linux
Linux的学习之路:17、进程间通信(1)
Linux的学习之路:17、进程间通信(1)
27 1