HaProxy+Keepalived 高可用负载均衡集群架构

发布于 2021-11-25  113 次阅读


运维项目中的高可用的场景会出现很多,大部分都是 keepalived+nginx/lvs/HAProxy 来使用,或者直接h使用网络设备F5来实现

我重点把HAProxy+Keepalived 知识总结下,方便自己去深入学习

---四层:lvs:快,应付更大的流量
---七层:nginx :慢于四层:能够看懂客户端请求的资源
---四层,七层:HaProxy:快

一.keepalived 高可用

Keepalived 为负载平衡和高可用性提供了框架。负载平衡框架依赖于众所周知且广泛使用的 Linux 虚拟服务器 (IPVS) 内核模块,keepalived.conf里配置就能够实现LVS的功能

该模块提供第 4 层负载平衡。Keepalived 实现了一组健康检查器,以根据其健康状况动态和自适应地维护和管理负载平衡的服务器池。
其实keepalived 是为了lvs 负载均衡而研发出来的,目前广泛被应用于载平衡和高可用性框架

Keepalived 官方文档地址是:https://www.keepalived.org/doc/

1.1 keepalived服务介绍

Keepalived 起初是专门为LVS 设计的,专门用来监控LVS集群系统中各个服务节点的状态,后又加入VRRP(虚拟路由器冗余协议 的缩写)功能,因此keepalived 广泛应用于(nginx haproxy)等高可用软件,VRRP出现的目的就是为了解决静态路由出现单点故障问题,它保证网站稳定运行。keepalived 服务有两大功能:healthcheck 和failover

1.2 keepalived failover 功能

failover 功能:实Master主机和Backup主机之间故障转移和自动切换

当主节点keepalived(Master)失效或者出现故障时,备节点keepalived(Backup)将自动接管主负载均衡器的所有工作(vip 资源及相应服务):一旦主节点keepalived故障修复,Master又会接管回它原来处理的工作,而备节点keepalived(Backup)会释放master 失效时接管的工作,此时两者恢复到最初角色

1.3 keepalived healthchecks 功能

healthchecks 功能:keepalived 定期检查负载均衡器的可用性在决定是否分发请求。

1.4 VRRP 协议简介

VRRP协议,全称: virtual route redundent protocol  中文名:虚拟路由冗余协议

keepalived是vrrp协议在Linux上的实现

VRRP出现就是为了解决静态路由单点故障,VRRP是一种竞选协议机制来将路由任务交给某台VRRP 路由器。

  1. VRRP协议,全称Virtual Router Redundancy Protocol,中文名,虛拟路由器冗余协议,VRRP的出现就是为了解决静态路由的单点故障。。
  2. VRRP是通过一种竞选协议机制来将路由任务交给某台VRRP路由器。。.
  3. VRRP是用过IP多播的方式实现通信。。
  4. 主发包,备接包,当备接不到主发的包的时候,就启动接管程序接管主的资源。备可以有多个,通过优先级竞选。。
  5. VRRP使用了加密协议。

keepalived高可用服务器之间通过VRRP协议通信,VRRP协议通过竞争机制来确定主备的,主的优先级高于备,因此,工作时主会获得所有的资源,备节点等待状态,当主节点服务关闭,或者宕机时,备节点接管主机点的资源,然后顶替主节点对外提供服务。

VRRP协议介绍   http://www.h3c.com/cn/d_200802/335873_30003_0.htm 
VRRP技术白皮书

二.HaProxy 负载均衡

Keepalived 为负载平衡和高可用性提供了框架。负载平衡框架依赖于众所周知且广泛使用的 Linux 虚拟服务器 (IPVS) 内核模块,

global 
    maxconn 51200 #最大连接数
    chroot /usr/local/haproxy #改变当前工作目录
    uid 99
    gid 99
    daemon #后台方式运行
    #quiet
    nbproc 1  #并发进程数
    pidfile /usr/local/haproxy/logs/haproxy.pid     #定义haproxy的pid


defaults  #默认部分的定义
        mode http #mode {http|tcp|health} 。
                  #http是七层模式,tcp是四层模式,health是健康检测返回OK
        #retries 2
        option redispatch
        option abortonclose
        timeout connect 5000ms   #连接超时
        timeout client 30000ms   #客户端超时
        timeout server 30000ms   #服务器超时
        #timeout check 2000      #心跳检测超时
        log 127.0.0.1 local0 err #[err warning info debug]
            #使用本机syslog服务的local3设备记录错误信息
        balance roundrobin
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  app 
     mode tcp
     bind *:8081
     option tcplog
     default_backend      app
#    acl url_static       path_beg       -i /static /images /javascript /stylesheets
#    acl url_static       path_end       -i .jpg .gif .png .css .js
#    use_backend static          if url_static
#    default_backend             app

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend app
    balance     roundrobin
    server      10.203.19.23 10.203.19.23:80 check
    server      10.203.19.24 10.203.19.24:80 check

#######################################################################
#-------------------------------k8s master up------------------------------
frontend k8s-master
  bind *:6443
  mode tcp
  option tcplog
  tcp-request inspect-delay 5s
  default_backend k8s-master

backend k8s-master
  mode tcp
  option tcplog
  option tcp-check
  balance roundrobin
  default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
  server k8s-master-01    10.138.130.51:6443  check
  server k8s-master-02    10.138.130.52:6443  check
  server k8s-master-03    10.138.130.53:6443  check
#-------------------------------k8s master end-----------------------------



#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
listen stats
    bind *:1080
    stats auth admin:Admin@123
    stats refresh 5s
    stats realm HAProxy\ Statistics
    stats uri /admin
####主从Ha配置文件一致

参考文章: Keepalived及VRRP原理介绍