Haproxy负载均衡

简介: Haproxy负载均衡

软件:haproxy---主要是做负载均衡的7层,也可以做4层负载均衡

apache也可以做7层负载均衡,但是很麻烦。实际工作中没有人用。

负载均衡是通过OSI协议对应的

7层负载均衡:用的7层http协议,

4层负载均衡:用的是tcp协议加端口号做的负载均衡


ha-proxy概述

ha-proxy是一款高性能的负载均衡软件。因为其专注于负载均衡这一些事情,因此与nginx比起来在负载均衡这件事情上做更好,更专业。


ha-proxy的特点

ha-proxy 作为目前流行的负载均衡软件,必须有其出色的一面。下面介绍一下ha-proxy相对LVS,Nginx等负载均衡软件的优点。


•支持tcp / http 两种协议层的负载均衡,使得其负载均衡功能非常丰富。

•支持8种左右的负载均衡算法,尤其是在http模式时,有许多非常实在的负载均衡算法,适用各种需求。

•性能非常优秀,基于事件驱动的链接处理模式及单进程处理模式(和Nginx类似)让其性能卓越。

•拥有一个功能出色的监控页面,实时了解系统的当前状况。

•功能强大的ACL支持,给用户极大的方便。


haproxy算法:

1.roundrobin

基于权重进行轮询,在服务器的处理时间保持均匀分布时,这是最平衡,最公平的算法.此算法是动态的,这表示其权重可以在运行时进行调整.不过在设计上,每个后端服务器仅能最多接受4128个连接

2.static-rr

基于权重进行轮询,与roundrobin类似,但是为静态方法,在运行时调整其服务器权重不会生效.不过,其在后端服务器连接数上没有限制

3.leastconn

新的连接请求被派发至具有最少连接数目的后端服务器.


Haproxy 实现七层负载

Keepalived + Haproxy


/etc/haproxy/haproxy.cfg

global                                                      //关于进程的全局参数

   log             127.0.0.1 local2 info  #日志服务器

   pidfile         /var/run/haproxy.pid  #pid文件

   maxconn         4000     #最大连接数

   user            haproxy   #用户

   group           haproxy      #组

   daemon            #守护进程方式后台运行

   nbproc 1        #工作进程数量  cpu内核是几就写几

 

   defaults        用于为其它配置段提供默认参数

   listen          是frontend和backend的结合体

   frontend        虚拟服务VIrtual Server

   backend         真实服务器Real Server


实验准备俩台提供后端服务页面的nginx服务器,一台安装haproxy的服务器。这台服务器就是负载均衡,客户端通过访问这台负载均衡服务器来访问后端页面


安装haproxy服务器:192.168.231.190


后端服务器:192.168.231.185


                      192.168.231.183


后端服务器:

服务器1:

yum -y install nginx

echo "server--1" > /usr/share/nginx/html/index.html

systemctl start nginx

服务器2:

yum -y install nginx

echo "server--2" > /usr/share/nginx/html/index.html

systemctl start nginx

安装haproxy的服务器:

安装haproxy

yum -y install haproxy

修改haproxy的配置文件

vim /etc/haproxy/haproxy.cfg

global

   log         127.0.0.1 local2 info

   pidfile     /var/run/haproxy.pid

   maxconn     4000   #优先级低

   user        haproxy

   group       haproxy

   daemon               #以后台形式运行ha-proxy

   nbproc 1      #工作进程数量  cpu内核是几就写几

defaults

   mode                    http  #工作模式 http ,tcp 是 4 层,http是 7 层

   log                     global

   retries                 3     #健康检查。3次连接失败就认为服务器不可用,主要通过后面的check检查

   option                  redispatch  #服务不可用后重定向到其他健康服务器。

   maxconn                 4000  #优先级中

   contimeout             5000  #ha服务器与后端服务器连接超时时间,单位毫秒ms

   clitimeout             50000 #客户端超时

   srvtimeout             50000 #后端服务器超时

listen stats

   bind           *:81    

   stats                   enable

   stats uri               /haproxy

   stats auth            qianfeng:123

frontend  web

   mode                    http  

   bind                    *:80   #监听哪个ip和什么端口

   option                  httplog  #日志类别 http 日志格式

   acl html url_reg  -i  \.html$  #1.访问控制列表名称html。规则要求访问以html结尾的url

   use_backend httpservers if  html #2.如果满足acl html规则,则推送给后端服务器httpservers

   default_backend    httpservers   #默认使用的服务器组

backend httpservers    #名字要与上面的名字必须一样

   balance     roundrobin  #负载均衡的方式

   server  http1 192.168.231.185:80 maxconn 2000 weight 1  check inter 1s rise 2 fall 2

   server  http2 192.168.231.183:80 maxconn 2000 weight 1  check inter 1s rise 2 fall 2


haproxy的监控端口是80,与后端nginx的端口重复,更改配置文件,


listen  stats


bind  *.90


#check inter 2000          检测心跳频率

#rise 2     2 次正确认为服务器可用

#fall 2      2 次失败认为服务器不可用


启动haproxy

systemctl start haproxy

浏览器访问:192.168.231.190





由于设置的权重是相同的  因此会各自访问一次


查看监控



Haproxy与keepalived高可用

实验机器

后端提供服务的服务器:


192.168.231.185


192.168.231.183


负载均衡服务器:


192.168.231.190


192.168.231.191


实验步骤:

在俩台后端服务器上  都进行相同操作

yum -y install nginx

echo "server--1" > /usr/share/nginx/html/index.html

systemctl start nginx

俩台负载均衡服务器都进行操作:

yum -y install haproxy

vim /etc/haproxy/haproxy.cfg

global

   log         127.0.0.1 local2 info

   pidfile     /var/run/haproxy.pid

   maxconn     4000   #优先级低

   user        haproxy

   group       haproxy

   daemon               #以后台形式运行ha-proxy

   nbproc 1      #工作进程数量  cpu内核是几就写几

defaults

   mode                    http  #工作模式 http ,tcp 是 4 层,http是 7 层

   log                     global

   retries                 3     #健康检查。3次连接失败就认为服务器不可用,主要通过后面的check检查

   option                  redispatch  #服务不可用后重定向到其他健康服务器。

   maxconn                 4000  #优先级中

   contimeout             5000  #ha服务器与后端服务器连接超时时间,单位毫秒ms

   clitimeout             50000 #客户端超时

   srvtimeout             50000 #后端服务器超时

listen stats

   bind           *:81    

   stats                   enable

   stats uri               /haproxy

   stats auth            qianfeng:123

frontend  web

   mode                    http  

   bind                    *:80   #监听哪个ip和什么端口

   option                  httplog  #日志类别 http 日志格式

   acl html url_reg  -i  \.html$  #1.访问控制列表名称html。规则要求访问以html结尾的url

   use_backend httpservers if  html #2.如果满足acl html规则,则推送给后端服务器httpservers

   default_backend    httpservers   #默认使用的服务器组

backend httpservers    #名字要与上面的名字必须一样

   balance     roundrobin  #负载均衡的方式

   server  http1 192.168.231.185:80 maxconn 2000 weight 1  check inter 1s rise 2 fall 2

   server  http2 192.168.231.183:80 maxconn 2000 weight 1  check inter 1s rise 2 fall 2


在负载均衡服务器下载keepalived:

负载均衡服务器进行相同操作:

yum -y install keepalived

修改配置文件,在第一台负载均衡服务器上

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

  router_id director1

}

vrrp_instance VI_1 {

   state MASTER

   interface ens33

   virtual_router_id 80

   priority 100

   advert_int 1

   authentication {

       auth_type PASS

       auth_pass 1111

   }

   virtual_ipaddress {

       192.168.231.66/24

   }

}

修改第二台负载均衡服务器的配置文件

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

  router_id directory2

}

vrrp_instance VI_1 {

   state BACKUP

   interface ens33

   nopreempt

   virtual_router_id 80

   priority 50

   advert_int 1

   authentication {

       auth_type PASS

       auth_pass 1111

   }

   virtual_ipaddress {

       192.168.231.66/24

   }

}


这里定义的master的负载均衡服务器是192.168.231.190


定义的backup的负载均衡服务器是192.168.231.191


定义的虚拟ip是192.168.231.66


因此用户访问时访问的就是192.168.231.66


然后负载均衡服务器均启动keepalived,此时的虚拟ip 在master服务器上


systemctl start keepalived

浏览器访问:





扩展对调度器Haproxy健康检查

两台机器都做

让Keepalived以一定时间间隔执行一个外部脚本,脚本的功能是当Haproxy失败,则关闭本机的Keepalived


写一个脚本,然后在keepalived的配置文件内引用


在master服务器

a. script   这是脚本内容

[root@ha-proxy-master ~]# cat /etc/keepalived/check_haproxy_status.sh

#!/bin/bash                                                                                      /usr/bin/curl -I http://localhost &>/dev/null  

if [ $? -ne 0 ];then                                                                            

#       /etc/init.d/keepalived stop

       systemctl stop keepalived

fi  

                   

[root@ha-proxy-master ~]# chmod a+x /etc/keepalived/check_haproxy_status.sh

b. keepalived使用script

[root@ha-proxy-master keepalived]# vim keepalived.conf

! Configuration File for keepalived

global_defs {

  router_id director1

}

vrrp_script check_haproxy {

  script "/etc/keepalived/check_haproxy_status.sh"

  interval 5

}

vrrp_instance VI_1 {

   state MASTER

   interface ens33

   virtual_router_id 80

   priority 100

   advert_int 1

   authentication {

       auth_type PASS

       auth_pass 1111

   }

   virtual_ipaddress {

       192.168.231.66/24

   }

   track_script {

       check_haproxy

   }

}


在backup服务器

将脚本复制到backup服务器,然后修改backup的keepalived的配置文件


[root@ha-proxy-slave keepalived]# vim keepalived.conf

! Configuration File for keepalived

global_defs {

  router_id directory2

}

vrrp_script check_haproxy {

  script "/etc/keepalived/check_haproxy_status.sh"

  interval 5

}

vrrp_instance VI_1 {

   state BACKUP

   interface ens33

   nopreempt

   virtual_router_id 80

   priority 50

   advert_int 1

   authentication {

       auth_type PASS

       auth_pass 1111

   }

   virtual_ipaddress {

       192.168.231.66/24

   }

   track_script {

       check_haproxy

   }

}


重启keepalived

[root@ha-proxy-master keepalived]# systemctl restart keepalived

[root@ha-proxy-slave keepalived]# systemctl restart keepalived

注:必须先启动haproxy,再启动keepalived

两台机器都配置haproxy的日志:需要打开注释并添加

[root@ha-proxy-master ~]# vim /etc/rsyslog.conf

# Provides UDP syslog reception  #由于haproxy的日志是用udp传输的,所以要启用rsyslog的udp监听

$ModLoad imudp

$UDPServerRun 514

找到  #### RULES ####   下面添加

local2.*                       /var/log/haproxy.log

[root@ha-proxy-master ~]# systemctl restart rsyslog

[root@ha-proxy-master ~]# systemctl restart haproxy

[root@ha-proxy-master ~]# tail -f /var/log/haproxy.log

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
6月前
|
负载均衡 算法 应用服务中间件
百度搜索:蓝易云【Linux系统如何使用 HAProxy、Nginx 和 Keepalived 进行负载均衡?】
通过上述步骤,你可以在Linux系统中使用HAProxy、Nginx和Keepalived来实现负载均衡。这些工具可以帮助你将流量分配到多个后端服务器上,提高系统的性能、可靠性和可扩展性。
90 0
|
消息中间件 存储 负载均衡
RabbitMQ使用docker搭建集群并使用Haproxy实现负载均衡(多机镜像模式)
RabbitMQ使用docker搭建集群并使用Haproxy实现负载均衡(多机镜像模式)
459 0
RabbitMQ使用docker搭建集群并使用Haproxy实现负载均衡(多机镜像模式)
|
5天前
|
负载均衡 监控 网络协议
使用haproxy实现负载均衡集群
【4月更文挑战第14天】HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,快速并且可靠的一种解决方案。
8 1
|
5月前
|
负载均衡 前端开发 网络协议
Keepalived+HAProxy 搭建高可用负载均衡(二)
Keepalived+HAProxy 搭建高可用负载均衡
|
5月前
|
负载均衡 算法 调度
Keepalived+HAProxy 搭建高可用负载均衡
Keepalived+HAProxy 搭建高可用负载均衡
227 0
|
6月前
|
负载均衡 前端开发 应用服务中间件
企业实战(22)基于Haproxy负载均衡+Keepalived高可用集群实战详解
企业实战(22)基于Haproxy负载均衡+Keepalived高可用集群实战详解
|
缓存 负载均衡 算法
Haproxy负载均衡集群(上)
一、常见的Web集群调度器 目前常见的Web集群调度器分为软件和硬件: 软件通常使用开源的LVS、Haproxy、 Nginx
151 0
|
11月前
|
运维 负载均衡 监控
在 Linux 中如何使用 HAProxy、Nginx 和 Keepalived 进行负载均衡?
在 Linux 中如何使用 HAProxy、Nginx 和 Keepalived 进行负载均衡?
673 0
在 Linux 中如何使用 HAProxy、Nginx 和 Keepalived 进行负载均衡?
|
负载均衡 网络协议 算法
配置 haproxy 负载均衡群集(二)
本文将要介绍一款比较流行的群集调度工具。首先介绍负载均衡常用调度算法,然后介绍Haproxy搭建web群集的方法。
配置 haproxy 负载均衡群集(二)
|
负载均衡 算法 网络协议
配置 haproxy 负载均衡群集(一)
本文将要介绍一款比较流行的群集调度工具。首先介绍负载均衡常用调度算法,然后介绍Haproxy搭建web群集的方法。
配置 haproxy 负载均衡群集(一)