Haproxy实现七层负载均衡

目录

Haproxy概述

haproxy算法:

Haproxy实现七层负载

①部署nginx-server测试页面

②(主/备)部署负载均衡器

③部署keepalived高可用

④增加对haproxy健康检查

⑤测试


Haproxy概述

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

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

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

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

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

haproxy算法:

1.roundrobin

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

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

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

Haproxy实现七层负载

keepalived+haproxy

192.168.134.165 master

192.168.134.166 slave

192.168.134.163 nginx-server

192.168.134.164 nginx-server

192.168.134.160 VIP(虚拟IP)

①部署nginx-server测试页面

两台nginx都部署方便测试

复制代码
[root@server03 ~]# yum -y install nginx
[root@server03 ~]# systemctl  start nginx
[root@server03 ~]# echo "webserver01..." > /usr/share/nginx/html/index.html 

[root@server04 ~]# yum -y install nginx
[root@server04 ~]# systemctl  start nginx
[root@server04 ~]# echo "webserver02..." > /usr/share/nginx/html/index.html
②(主/备)部署负载均衡器
复制代码
[root@server01 ~]# yum -y install haproxy
[root@server01 ~]# 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
    nbproc 1
defaults
    mode                    http
    log                     global
    retries                 3
    option                  redispatch
    maxconn                 4000
    contimeout              5000
    clitimeout              50000
    srvtimeout              50000
listen stats
    bind                        *:81
    stats                       enable
    stats uri                   /haproxy
    stats auth                  aren:123
frontend  web
    mode                        http
    bind                            *:80
    option                  httplog
    acl html url_reg  -i  \.html$
    use_backend httpservers if  html
    default_backend    httpservers
backend httpservers
    balance     roundrobin
    server  http1 192.168.134.163:80 maxconn 2000 weight 1  check inter 1s rise 2 fall 2
    server  http2 192.168.134.164:80 maxconn 2000 weight 1  check inter 1s rise 2 fall 2

[root@server01 ~]# systemctl  start haproxy

浏览器访问haproxy监控

master:

slave:

页面主要参数解释

Queue

Cur: current queued requests //当前的队列请求数量

Max:max queued requests //最大的队列请求数量

Limit: //队列限制数量

Errors

Req:request errors //错误请求

Conn:connection errors //错误的连接

Server列表:

Status:状态,包括up(后端机活动)和down(后端机挂掉)两种状态

LastChk: 持续检查后端服务器的时间

Wght: (weight) : 权重

③部署keepalived高可用

注意:master和slave的优先级不一样,但虚拟路由id(virtual_router_id)保持一致;并且slave配置 nopreempt(不抢占资源)

master:

复制代码
[root@server01 ~]# yum -y install keepalived
[root@server01 ~]# 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.134.160/24
    }
}

[root@server01 ~]# systemctl  start keepalived

slaver:

复制代码
[root@localhost ~]# yum -y install keepalived
[root@localhost ~]# 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.134.160/24
    }
}
[root@localhost ~]# systemctl  start keepalived

查看IP

④增加对haproxy健康检查

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

复制代码
[root@server01 ~]# vim /etc/keepalived/check.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@server01 ~]# chmod a+x /etc/keepalived/check.sh

在keepalived增加健康检查配置vrrp_script check_haproxy并且用 track_script调用。

复制代码
! Configuration File for keepalived

global_defs {
   router_id director1
}
vrrp_script check_haproxy {
   script "/etc/keepalived/check.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.134.160/24
    }
 track_script {
        check_haproxy
    }
}

重启keepalived

复制代码
[root@server01 ~]# systemctl  restart keepalived
⑤测试

关闭master的haproxy服务可以发现master的keepalived服务也关闭,此时master上的VIP转移到slave上

  • 关闭master的服务并查看VIP
  • 查看slave的IP可以发现VIP跳转至此。
  • 在web界面查看服务是否正常

第一次刷新

第二次刷新

相关推荐
可可嘻嘻大老虎4 小时前
nginx无法访问后端服务问题
运维·nginx
阳光九叶草LXGZXJ5 小时前
达梦数据库-学习-47-DmDrs控制台命令(LSN、启停、装载)
linux·运维·数据库·sql·学习
无忧智库6 小时前
某市“十五五“地下综合管廊智能化运维管理平台建设全案解析:从数字孪生到信创适配的深度实践(WORD)
运维·智慧城市
珠海西格6 小时前
“主动预防” vs “事后补救”:分布式光伏防逆流技术的代际革命,西格电力给出标准答案
大数据·运维·服务器·分布式·云计算·能源
阿波罗尼亚6 小时前
Kubectl 命令记录
linux·运维·服务器
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.7 小时前
Keepalived单播模式配置与实战指南
linux·服务器·负载均衡
IDC02_FEIYA7 小时前
Linux文件搜索命令有哪些?Linux常用命令之文件搜索命令find详解
linux·运维·服务器
犀思云7 小时前
如何通过网络即服务平台实现企业数字化转型?
运维·网络·人工智能·系统架构·机器人
江畔何人初7 小时前
kubectl apply与kubectl create的区别
linux·运维·云原生
M158227690557 小时前
四通道全能组网!SG-Canet-410 CAN转以太网网关,破解工业CAN通信瓶颈
linux·运维·服务器