云计算学习之路——haproxy介绍与实战

haproxy负载均衡

一、haproxy介绍

haproxy是一款高性能的负载均衡软件,主要做七层负载均衡使用,也支持四层负载均衡。
七层负载均衡:使用的是7层http协议;
四层负载均衡:使用的是tcp协议加端口的方式。
因为其专注于负载均衡这一些事情,因此与nginx比起来在负载均衡这件事情上做更好,更专业。

二、haproxy特点

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

①支持tcp / http 两种协议层的负载均衡,使得其负载均衡功能非常丰富。
②支持8种左右的负载均衡算法,尤其是在http模式时,有许多非常实在③的负载均衡算法,适用各种需求。
④性能非常优秀,基于事件驱动的链接处理模式及单进程处理模式(和Nginx类似)让其性能卓越。
⑤拥有一个功能出色的监控页面,实时了解系统的当前状况。
功能强大的ACL支持,给用户极大的方便。

三、LVS、Haproxy、Nginx三者的区别

①LVS基于Linux操作系统实现软负载均衡,而Haproxy和Nginx是基于第三方应用实现的软负载均衡
②LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而Haproxy和Nginx都可以实现4层和7层技术,Haproxy可提供TCP和Http应用的负载均衡综合解决方案
③LVS因为工作在ISO模型的第四层,其状态监测功能单一,而Haproxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态监测方式
④Haproxy功能强大,但整体性能低于4层模式的LVS负载均衡
⑤Nginx主要用于web服务器或缓存服务器

四、haproxy调度算法

去官方文档查看haproxy的负载均衡调度算法

算法有很多,这里介绍常用的几种:

① roundrobin

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

② static-rr

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

③ leastconn

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

④ source

将请求的源地址进行hash运算,并由后端服务器的权重总数相除后派发至某匹配的服务器.这可以使得同一个客户端IP的请求始终被派发至某特定的服务器.

五、实战:haproxy负载均衡的实现

1、实验环境

共需四台虚拟机:
虚拟机1,虚拟机2:安装nginx,作为真正的web服务器。
虚拟机3:安装haproxy,实现haproxy的负载均衡。
虚拟机4:客户端,用于测试整个集群,无需任何配置。

2、准备两台web服务器

虚拟机1进行如下操作:

安装并开启nginx,并在nginx默认发布目录中写入测试内容

[root@web-1 ~]# yum -y install nginx
[root@web-1 ~]# systemctl start nginx
[root@web-1 ~]# echo web-1 > /usr/share/nginx/html/index.html

虚拟机2进行如下操作:

同虚拟机1 的操作一样

[root@web-2 ~]# yum -y install nginx
[root@web-2 ~]# systemctl start nginx
[root@web-2 ~]# echo web-2 > /usr/share/nginx/html/index.html

虚拟机4进行如下操作

验证两台web服务器是否搭建好
在这里插入图片描述

3、haproxy负载均衡的配置

虚拟机3做如下操作:

1)安装haproxy

[root@localhost ~]# yum -y install haproxy

2)修改haproxy的配置文件

[root@localhost ~]# cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak#先做备份
[root@localhost ~]# vim /etc/haproxy/haproxy.cfg
在这里插入图片描述

配置文件内容和解释如下:

global  #全局配置
        log 127.0.0.1 local3          #日志配置
        maxconn 4096                  #最大连接限制
        uid nobody
        gid nobody
        daemon                         #守护进程模式
        nbproc 1                       #haproxy进程数
defaults  #默认配置
        log        global              #日志使用全局配置
        mode       http                #使用七层负载均衡时指定为http
        maxconn 2048  #最大连接数
        retries  3                     #健康检测。3次连接失败就认为服务不可用
        option  redispatch             #服务不可用后的操作,重定向到其他健康服务器
        stats   uri  /haproxy          #web页面状态模块功能开启,
        stats auth          zzyy:123   #状态模块认证,设置用户和密码
        contimeout      5000           #定义haproxy将客户端!!!请求!!!转发至后端服务器,所等待的超时时长
        clitimeout      50000          #haproxy作为客户,和后端服务器之间!!!空闲连接!!!的超时时间,到时候发送fin指令
        srvtimeout      50000          #haproxy作为服务器,和用户之间空闲连接的超时时间,到时候发送fin指令
#timeout connect 5000 #上面三条超时设置,也可以替换为下面这三条,作用相同。
#timeout client 50000
#timeout server 50000

frontend http-in                       #前端配置块。面对用户侧
        bind 0.0.0.0:80                #面对用户监听地址和端口
        mode http                      #http模式的负载均衡
        log global                     #日志使用全局配置
        option httplog                 #默认日志格式非常简陋,仅包括源地址、目标地址和实例名称,而“option httplog参数将会使得日志格式变得丰富许多,其通常包括但不限于HTTP请求、连接计时器、会话状态、连接数、捕获的首部及cookie、“frontend”、“backend”及服务器名称,当然也包括源地址和端口号等。
        option httpclose               #每次请求完毕后,关闭http通道
        acl html url_reg  -i  \.html$     #1. acl访问控制列表的名称设置为html。url_reg -i 指定规则:要求访问以html结尾的url时
        use_backend html-server if  html  #2.如果满足acl html规则,则推送给后端服务器 html-server
        default_backend html-server       #3:默认的后端服务器是 html-server

backend html-server                      #后端服务器名称为html-server
        mode http                        #设置为七层的负载均衡http
        balance roundrobin               #调度算法,rr轮叫调度
        option httpchk GET /index.html   #允许用http协议检查server 的健康
        cookie SERVERID insert indirect nocache  #轮询的同时,根据插入的cookie SERVERID  的值来做会话保持,将相同的用户请求,转发给相同的真实服务器。
        server html-A 192.168.58.155:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
        server html-B 192.168.58.162:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5   #cookie 3 服务器ID,避免rr算法将客户机请求转发给其他服务器 ,对后端服务器的健康状况检查间隔为2000毫秒,连续2次健康检查成功,则认为是有效的,连续5次健康检查失败,则认为服务器宕机

3)开启haproxy

[root@localhost ~]# systemctl start haproxy

4)验证

使用虚拟机4进行验证
在这里插入图片描述
访问haproxy负载均衡服务器的IP地址,循环显示了两台web服务器的内容,说明haproxy负载均衡成功。

4、启用haproxy的日志

①在haproxy的配置文件中定义日志对象,语法:log 127.0.0.1(接收方IP)local3(对象),上面的配置文件中已经定义过了
在这里插入图片描述
②修改日志配置文件/etc/rsyslog.conf(开启UDP和TCP接口,并添加日志规则:对象.级别 存放位置)

[root@localhost ~]# vim /etc/rsyslog.conf
在这里插入图片描述
在这里插入图片描述

③重启日志服务和haproxy

[root@localhost ~]# systemctl restart rsyslog [root@localhost ~]# systemctl restart haproxy

④访问haproxy负载均衡服务器时,会产生访问日志
在这里插入图片描述

六、实战:Keepalived+haproxy

使用Keepalived实现haproxy负载均衡的高可用

1、实验环境

共需五台虚拟机
虚拟机1,虚拟机2:安装nginx,作为真正的web服务器。
虚拟机3、虚拟机4:1、安装haproxy,实现haproxy的负载均衡。2、安装keepalived,实现负载均衡的高可用
虚拟机5:客户端,用于测试整个集群,无需任何配置。

2、web服务器的搭建

在虚拟机1、虚拟机2中配置真正的web服务器,与第五部分实战中的配置相同。

3、haproxy负载均衡的配置

虚拟机3与第五部分实战中的配置相同,虚拟机4的配置与虚拟机3相同。

4、keepalived实现haproxy高可用

虚拟机3,虚拟机4在上述基础上,再安装keepalived实现haproxy负载均衡的高可用。虚拟机3,虚拟机4进行操作如下,

1)安装keepalived

[root@haproxy-master ~]# yum -y install keepalived

2)编写配置文件

[root@haproxy-master ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak#先备份
[root@haproxy-master ~]# vim /etc/keepalived/keepalived.conf

master服务器的配置文件内容为:

! Configuration File for keepalived

global_defs {
    
    
   router_id directory1
}

vrrp_instance VI_1 {
    
    
    state MASTER
    interface ens33
    nopreempt
    virtual_router_id 80
    priority 100
    advert_int 1
    authentication {
    
    
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    
    
        192.168.58.140/24
    }
}

backup服务器的配置文件内容为:

! 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.58.140/24
    }
}

3)开启keepalived

[root@haproxy-master ~]# systemctl start keepalived

在这里插入图片描述
4)验证

在这里插入图片描述
访问成功,haproxy负载均衡的高可用搭建层成功。

5、keepalived实现haproxy高可用

编写健康检测脚本,脚本功能是当haproxy宕机时,关闭keepalived,实现vip的漂移。虚拟机3,虚拟机4都完成下列操作。

1)脚本编写,并赋予执行权限

[root@haproxy-master ~]# vim /etc/keepalived/check_haproxy_status.sh
[root@haproxy-master ~]# ls /etc/keepalived/check_haproxy_status.sh
在这里插入图片描述
脚本含义:
 在haproxy宕机后,先重新启动haproxy,若不能重启,就关闭keepalived。

脚本内容为:

#!/bin/bash
count=`ps -C haproxy --no-heading | wc -l`
if [ $count -eq 0 ];then
        systemctl start haproxy
        count=`ps -C haproxy --no-heading | wc -l`
        if [ $count -eq 0 ];then
                systemctl stop keepalived
        fi
fi

2)在keepalived的配置文件中引入健康检测模块

[root@haproxy-master ~]# vim /etc/keepalived/keepalived.conf
在这里插入图片描述

3)重启keepalived

[root@haproxy-master ~]# systemctl restart keepalived

4)验证

关闭haproxy,模拟haproxy宕机,脚本生效,重新启动了haproxy。
在这里插入图片描述
故意将haproxy的配置文件改错,模拟haproxy不能重启的情况。
在这里插入图片描述

在这里插入图片描述
健康检测脚本生效,当haproxy宕机,并且不能重新启动时,master关闭keeplaived服务,实现vip的漂移。

猜你喜欢

转载自blog.csdn.net/weixin_44178770/article/details/124549860
今日推荐