使用Keepalived在CentOS 6.5上直接路由负载均衡器群集

时间:2020-01-09 10:38:08  来源:igfitidea点击:

说明

Keepalived是一种轻巧轻便的快速负载平衡器。它也是CentOS和Red Hat Enterprise Linux可用的唯一负载平衡器之一,而不仅仅是反向代理。在对大型文件和多媒体进行负载平衡时,这是一个重要的区别。

反向代理负载均衡器(例如HAProxy和Nginx)通过自身来汇集所有传入和传出流量。这意味着负载均衡器必须具有足够的网络容量来处理所有传入和传出请求。对于提供HTML,Javascript,CSS和小型图像文件的标准网站,这不是问题。但是,在处理大文件时,反向代理负载平衡器会带来缩放问题。

反向代理负载均衡器需要平衡4个节点(每个节点具有10 Gb的流量),这需要40 GbE的网络连接来保持正常运行。直接路由平衡器仅需要足够的网络即可转发到初始请求。然后,后端Web服务器直接响应客户端提出的内容请求。这就是为什么它们在处理大数据时工作得很好的原因。

本教程将向我们展示如何使用Keepalived部署主动\被动负载均衡器。

目标

  • 在CentOS 6.5上安装Keepalived。
  • 配置单个虚拟服务器实例。
  • 使用直接路由将流量平衡到两个后端Web服务器。

创建负载均衡器集群

两个负载均衡器将具有以下配置。这些仅用于演示,因为环境要求可能会有所不同。最重要的组件将是网络,其次是CPU,然后是RAM。因为我们使用的是直接路由,所以对网络的要求很小。

主机名IPCPURAMNIC角色
lb01172.30.0.2011 GB1Gb主动均衡器
lb02172.30.0.2111Gb1Gb被动均衡器

我们为两个服务器创建的负载平衡集群将被分配一个虚拟IP地址。此IP允许我们连接到群集实体中的活动节点。

虚拟IPDNS主机名
172.30.0.22lb-cluster1.theitroad.test

创建群集的虚拟IP

我们需要为负载均衡器集群分配一个IP地址。这使我们可以连接到群集的活动节点,无论何时都可以。我们实质上是在网络上创建其实体。要添加虚拟IP,我们需要将其添加到现有的网络接口。

在此示例中,ETH0将是我们将虚拟IP添加到的网络接口。根据硬件,接口名称可能会不同。

  • 使用与将虚拟IP添加到的接口相同的名称创建一个新的网络接口文件,并添加":"和一个数字。在我们的示例中,由于我们使用的是ETH0,这是我们的第一个虚拟IP,因此该接口将被称为ETH0:0。
touch /etc/sysconfig/network-scripts/eth0:0
  • 在文本编辑器(如Nano或者VI)中打开新的界面文件。
vi /etc/sysconfig/network-scripts/eth0:0
  • 修改文件,使其看起来像下面的示例。切记将设置与环境相匹配。
DEVICE=eth0:0
TYPE=Ethernet
ONBOOT=yes
IPV6INIT=no
NM_CONTROLLED=no
BOOTPROTO=none
IPADDR=172.30.0.22
PREFIX=24
GATEWAY=172.30.0.1
  • 保存更改并退出编辑器。
  • 使新界面联机。
ifup eth0:0
  • 使用ifconfig命令,我们应该看到新的网络接口。
eth0:0    Link encap:Ethernet  HWaddr 00:50:56:8E:13:88
          inet addr:172.30.0.22  Bcast:172.30.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
  • 在要在此群集中使用的所有负载均衡器上执行此操作。

启用数据包转发

直接路由式负载均衡器是必不可少的第3层路由器。他们接收传入的请求,然后将其重新路由到后端服务器之一。默认情况下,CentOS和Red Hat都不允许转发。我们需要在所有负载均衡器上启用它。

  • 在文本编辑器中打开/ etc / sysctl.conf
  • 查找以下选项。如果不存在,则添加它。
net.ipv4.ip_forward
  • 将其值设置为1以启用转发。
net.ipv4.ip_forward = 1
  • 保存更改。它们将立即应用。

安装Keepalived

  • 登录到第一个负载均衡器。
  • 从CentOS基本存储库安装Keepalived。
yum install keepalived
  • 配置Keepalived以在系统引导时启动。
chkconfig keepalived on
  • 启动Keepalived服务(守护程序)。
service keepalived start
  • 在第二个负载平衡器上重复这些步骤。

在第一个负载均衡器节点上创建集群

  • 登录到第一个负载均衡器。
  • 备份默认的keepalived配置文件。
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.old
  • 创建一个新的Keepalived配置文件。
touch /etc/keepalived/keepalived.conf
  • 在文本编辑器(如Nano或者VI)中打开配置文件。
vi /etc/keepalived/keepalived.conf
  • 定义全局默认值。这些将被为此群集配置的所有虚拟服务器使用。在全局默认值中,我们将配置电子邮件回执,用于发送警报的SMTP服务器以及负载平衡器群集的名称。
! Configuration File for keepalived

global_defs {
   notification_email {
::HL::     Hyman@localhost
::HL::     Hyman@localhost
::HL::     Hyman@localhost
   }
   notification_email_from Hyman@localhost
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LB_CLUSTER1
}
通知电子邮件
将从集群接收电子邮件状态通知的接收者列表
负载平衡器群集用于发送通知的电子邮件地址
电子邮件服务器或者中继服务器的IP地址
群集的名称。所有集群都应该有一个唯一的名称
  • 现在,我们将创建负载均衡器集群。这定义了集群及其节点的身份。在global_defs下添加以下内容。
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.0.23
    }
}
vrrp\实例VI\ U 1
创建虚拟服务器实例。值VI_1是它的名称。可能存在不同负载平衡集群的多个实例,但每个实例必须具有唯一的名称
群集将绑定到的网络接口。所有对集群的请求都将通过这个接口
负载平衡器群集的ID。每个集群必须有一个唯一的编号
负载平衡器群集节点的优先级。群集中具有最高优先级的负载平衡器是活动成员。被动负载平衡器节点的优先级较低
群集中每个负载平衡器使用的身份验证类型和密码。这允许集群中的每台服务器彼此安全地通信其状态
负载平衡器群集的IP地址。此IP地址将由群集中的所有节点共享,但我们只能使用它连接到活动节点
  • 指示Keepalived重新加载其配置以应用我们的更改。
service keepalived reload

将第二个负载均衡器添加到群集

添加第二个平衡器的步骤几乎与第一个平衡器相同。唯一不同的是优先级值,该值必须低于第一个平衡器上设置的值。

  • 请遵循与第一个平衡器相同的说明。完成后,请勿重新加载或者重新启动Keepalived服务。
  • 修改keepalived.conf文件中的优先级值。将其设置为小于第一台服务器的任何值。由于第一台服务器的优先级为100,因此我们将其设置为99.
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    ::HL::priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.0.23
    }
}
  • 保存更改。
  • 指示keepalived重新加载配置文件。
service keepalived reload

创建一个虚拟服务器

在负载平衡的上下文中,虚拟服务器是用户访问平衡服务时连接到的服务器。然后,虚拟服务器将请求发送到后端节点之一。对我们来说,那是一个托管视频资产的Web服务器。虚拟服务器的后端可以有任意数量的服务器。在此示例中,我们只有两个。

后端Web服务器配置

以下服务器将托管我们的Web服务。当负载平衡器收到我们的Web服务的连接请求时,它将被转发到这些服务器之一。

名称IP虚拟IPCPURAM角色
webnode01172.30.0.23172.16.55.10011 GBApache Web
webnode01172.30.0.24172.16.55.10011 GBApache Web

虚拟服务器

  • 在文本编辑器中打开keepalived配置文件。
  • 在global_defs和vrrp_instance下面,添加以下内容。
virtual_server 172.16.55.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
}
虚拟服务器192.168.200.100 80
定义一个虚拟服务器,它的IP地址和监听端口。这是将用于连接到要平衡的服务的IP地址。在我们的例子中,一个web服务监听端口80
用于平衡的算法。我们的示例使用循环(rr)
交通路线。我们使用直接路由(DR)来允许后端直接响应客户端
如果需要持久连接,则会设置使连接过期的超时。Persistents强制客户机始终连接到同一服务器,这是用户登录会话所必需的
  • 现在,我们将后端服务器添加为real_servers。
real_server 172.30.0.23 80 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
  • 在第一台服务器下方,我们添加了第二台真实服务器。
real_server 172.30.0.24 80 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

配置概述

大功告成本教程仅关注我们正在处理的部分配置。有时,更容易看到整个配置,因此,我在下面提供了整个配置文件供我们参考。

! Configuration File for keepalived

global_defs {
   notification_email {
     Hyman@localhost
     Hyman@localhost
     Hyman@localhost
   }
   notification_email_from Hyman@localhost
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LB_CLUSTER1
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.0.23
    }
}

virtual_server 172.16.55.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 172.30.0.23 80 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 172.30.0.24 80 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

}