haproxy+keepalived--原理篇→效率最高的负载均衡

haproxy+keepalived负载均衡—部署nginx

  • 负载均衡介绍
  • haproxy介绍
      • 为什么用haproxy?
      • HAproxy两种代理模式
      • HAProxy功能
      • Haproxy优点
      • HAproxy缺点
      • HAproxy组成
  • 实际操作
      • 安装keepalived
      • 部署haproxy
      • 部署nginx
      • 测试

负载均衡介绍

负载均衡是将网络流量分发到多个后台服务的一种机制。通过负载均衡的流量分发,降低了单台服务器的负载,减少了应用的响应时间。负载均衡服务是目前各类web应用的最基础设施之一。各大云服务商,比如阿里云和腾讯云均提供了负载均衡服务。
负载均衡管理服务器和终端设备之间的流量。这些终端设备可能是PC、笔记本或者智能手机。服务器则可能是公司内部服务器、数据中心或者公有云计算资源。服务器可以是物理机,也可以是虚拟机。负载均衡通过对服务器进行持续的健康检查来获得服务器的健康状态。负载均衡会自动将已经宕机的服务器移除,甚至可能会在负载增加情况下触发新虚拟计算资源的创建来达到自动扩容的目的。

haproxy介绍

负载均衡管理服务器和终端设备之间的流量。这些终端设备可能是PC、笔记本或者智能手机。服务器则可能是公司内部服务器、数据中心或者公有云计算资源。服务器可以是物理机,也可以是虚拟机。负载均衡通过对服务器进行持续的健康检查来获得服务器的健康状态。负载均衡会自动将已经宕机的服务器移除,甚至可能会在负载增加情况下触发新虚拟计算资源的创建来达到自动扩容的目的。

为什么用haproxy?

HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。 HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的 并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。根据官方文档,HAProxy最高支持10G并发流量。

HAproxy两种代理模式

TCP 即4层 (大多用于邮件服务器、内部协议通信服务器等),在4层模式下,HAProxy仅在客户端和服务器之间转发双向流量。 它主要是通过分析IP层及TCP/UDP层的流量实现的基于IP加端口的负载均衡。 仅建立一次TCP连接。

HTTP 即7层模式,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或删除请求 (request)或者回应(response)里指定内容来控制协议,七层负载均衡器可以根据报文内容,再配合负载均衡算法来选择后端服务器,因此也称为“内容交换器”。 负载均衡器与客户端及后端的服务器会分别建立一次TCP连接 七层负载均衡对负载均衡设备的要求更高,而七层负载均衡的处理能力也必然低于四层模式的负载均衡

HAProxy功能

  1. HAProxy是TCP / HTTP反向代理服务器,尤其适合于高可用性环境
  2. 可以针对HTTP请求添加cookie,进行路由后端服务器
  3. 可平衡负载至后端服务器,并支持持久连接
  4. 支持基于cookie进行调度
  5. 支持所有主服务器故障切换至备用服务器
  6. 支持专用端口实现监控服务
  7. 支持不影响现有连接情况下停止接受新连接请求
  8. 可以在双向添加,修改或删除HTTP报文首部
  9. 支持基于pattern实现连接请求的访问控制
  10. 通过特定的URI为授权用户提供详细的状态信息

Haproxy优点

  1. HAProxy是支持虚拟主机的,可以工作在4、7层(支持多网段)
  2. HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。
  3. HAProxy跟LVS类似,本身就只是一款负载均衡软件;单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
  4. HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡,对后端的MySQL节点进行检测和负载均衡。
  5. HAProxy负载均衡策略非常多,HAProxy的负载均衡算法有8种

HAproxy缺点

  1. 不支持POP/SMTP协议
  2. 不支持SPDY协议
  3. 不支持HTTP cache功能。现在不少开源的lb项目,都或多或少具备HTTP cache功能。
  4. 重载配置的功能需要重启进程,虽然也是soft restart,但没有Nginx的reaload更为平滑和友好。
  5. 多进程模式支持不够好

HAproxy组成

包名:haproxy
程序环境
主程序:/usr/sbin/haproxy
配置文件:/etc/haproxy/haproxy.cfg

实际操作

这里提示:一定要关掉防火墙和SELINUX
防火墙命令:systemctl stop firewalld
SELINUX命令:setenforce 0

安装keepalived

主keepalived上面的修改:

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL
}

vrrp_instance VI_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.182.100
    }
}

virtual_server 192.168.182.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
!    persistence_timeout 50
    protocol TCP

    real_server 192.168.182.199 80 {
        weight 1
        TCK_CHECK {
            connect_timeout 3
             nb_get_retry 3
            delay_before_retry 3
        }
    }
}
systemctl restart keepalived

从keepalived服务器上的修改:

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.182.100
    }
}

virtual_server 192.168.182.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
!    persistence_timeout 50
    protocol TCP

    real_server 192.168.182.200 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            connect_port 80
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
systemctl restart keepalived

通过ip a命令查看(ifconfig看不到),实际状态为MASTER的主服务器上将为ens33自动添加VIP地址。在主上:
haproxy+keepalived--原理篇→效率最高的负载均衡_第1张图片
写完之后重启keepalived后,最好测试一下VIP是否可以正常漂移。

部署haproxy

两台haproxy的修改一样,如下所示:

vim /etc/haproxy/haproxy.cfg
listen  webs    0.0.0.0:80
        option  httpchk GET /index.html
        balance roundrobin
        server  nginx1  192.168.182.201  check  inter 2000 fall 3
        server  nginx2  192.168.182.202  check  inter 2000 fall 3
systemctl restart haproxy

注意参数解释:inter 2000 心跳检测时间;rise 3 三次连接成功,表示服务器正常;fall 3 三次连接失败,表示服务器异常; weight 1 权重设置

部署nginx

两台haproxy的修改一样,如下所示:

  yum -y install gcc gcc-c++ pcre-devel zlib-devel openssl-devel 
  tar zxf nginx-1.12.2.tar.gz
  cd nginx-1.12.2
  ./configure
  make && make install 
  vim  /usr/local/nginx/html/index.html
  /usr/local/nginx/sbin/nginx

测试

外网测试即可(使用vip测试):
haproxy+keepalived--原理篇→效率最高的负载均衡_第2张图片
haproxy+keepalived--原理篇→效率最高的负载均衡_第3张图片

你可能感兴趣的:(负载均衡,haproxy)