在 InfoWatch Traffic Monitor 上设置负载平衡

在 InfoWatch Traffic Monitor 上设置负载平衡

如果一台服务器的能力不足以处理所有请求,并且软件厂商没有提供负载均衡怎么办? 有很多选择,从购买负载均衡器到限制请求数量。 哪一种正确,必须根据实际情况,结合现有条件来确定。 在本文中,我们将告诉您如果您的预算有限并且您有免费服务器,您可以做什么。

作为需要减轻其中一台服务器负载的系统,我们选择了InfoWatch的DLP(信息泄露防护系统)。 该实施的一个特点是将平衡器功能放置在其中一台“战斗”服务器上。

我们遇到的问题之一是无法使用源 NAT (SNAT)。 为什么需要这样做以及问题是如何解决的,我们将进一步描述。

所以,最初现有系统的逻辑图是这样的:

在 InfoWatch Traffic Monitor 上设置负载平衡

来自用户计算机的 ICAP 流量、SMTP 和事件均在 Traffic Monitor (TM) 服务器上进行处理。 同时,数据库服务器处理完TM上的事件后的负载可以轻松应对,但TM本身的负载却很重。 从设备监视器 (DM) 服务器上消息队列的出现以及 TM 上的 CPU 和内存负载可以明显看出这一点。

乍一看,如果我们在这个方案中添加另一个TM服务器,那么ICAP或DM都可以切换到它,但我们决定不使用这种方法,因为容错能力降低了。

解决方案描述

在寻找合适的解决方案的过程中,我们选择了免费软件 保活 连同 LVS。 因为keepalived解决了创建故障转移集群的问题,还可以管理LVS均衡器。

我们想要实现的目标(减少 TM 的负载并保持当前的容错水平)应该按照以下方案进行:

在 InfoWatch Traffic Monitor 上设置负载平衡

检查功能时发现,服务器上安装的自定义 RedHat 程序集不支持 SNAT。 在我们的例子中,我们计划使用 SNAT 来确保传入数据包和对它们的响应是从同一 IP 地址发送的,否则我们将得到以下图片:

在 InfoWatch Traffic Monitor 上设置负载平衡

这是无法接受的。 例如,已将数据包发送到虚拟 IP (VIP) 地址的代理服务器将期望来自 VIP 的响应,但在这种情况下,对于发送到备份的会话,它将来自 IP2。 找到了解决办法:需要在备份上再创建一个路由表,并用单独的网络连接两台TM服务器,如下图:

在 InfoWatch Traffic Monitor 上设置负载平衡

设置

我们将实施一个方案,其中两台服务器具有 ICAP、SMTP、TCP 9100 服务,并在其中一台上安装负载均衡器。

我们有两台 RHEL6 服务器,其中标准存储库和一些软件包已被删除。

我们需要平衡的服务:

• ICAP – TCP 1344;

• SMTP – TCP 25。

来自 DM 的流量传输服务 – TCP 9100。

首先,我们需要规划网络。

虚拟IP地址(VIP):

• IP:10.20.20.105。

服务器TM6_1:

• 外部IP:10.20.20.101;

• 内部IP:192.168.1.101。

服务器TM6_2:

• 外部IP:10.20.20.102;

• 内部IP:192.168.1.102。

然后我们在两台TM服务器上启用IP转发。 RedHat 上描述了如何执行此操作 这里.

我们决定哪一台服务器是主服务器,哪一台服务器是备份服务器。 设主控为TM6_1,备份为TM6_2。

在备份时,我们创建一个新的平衡器路由表和路由规则:

[root@tm6_2 ~]echo 101 balancer >> /etc/iproute2/rt_tables
[root@tm6_2 ~]ip rule add from 192.168.1.102 table balancer
[root@tm6_2 ~]ip route add default via 192.168.1.101 table balancer

上述命令一直有效,直到系统重新启动。 为了确保重启后保留路由,您可以将它们输入 /etc/rc.d/rc.local,但更好通过设置文件 /etc/sysconfig/network-scripts/route-eth1 (注意:这里使用不同的语法)。

在两台 TM 服务器上安装 keepalived。 我们使用 rpmfind.net 作为分发源:

[root@tm6_1 ~]#yum install https://rpmfind.net/linux/centos/6.10/os/x86_64/Packages/keepalived-1.2.13-5.el6_6.x86_64.rpm

在 keepalived 设置中,我们将其中一台服务器指定为主服务器,另一台服务器指定为备份服务器。 然后我们设置VIP和服务进行负载均衡。 设置文件通常位于此处: /etc/keepalived/keepalived.conf.

TM1 服务器的设置

vrrp_sync_group VG1 { 
   group { 
      VI_1 
   } 
} 
vrrp_instance VI_1 { 
        state MASTER 
        interface eth0 

        lvs_sync_daemon_inteface eth0 
        virtual_router_id 51 
        priority 151 
        advert_int 1 
        authentication { 
                auth_type PASS 
                auth_pass example 
        } 

        virtual_ipaddress { 
                10.20.20.105 
        } 
}

virtual_server 10.20.20.105 1344 {
    delay_loop 6
    lb_algo wrr 
    lb_kind NAT
    protocol TCP

    real_server 192.168.1.101 1344 {
        weight 1
        TCP_CHECK { 
                connect_timeout 3 
            connect_port 1344
        nb_get_retry 3
        delay_before_retry 3
        }
    }

    real_server 192.168.1.102 1344 {
        weight 1
        TCP_CHECK { 
                connect_timeout 3 
            connect_port 1344
        nb_get_retry 3
        delay_before_retry 3
        }
    }
}

virtual_server 10.20.20.105 25 {
    delay_loop 6
    lb_algo wrr 
    lb_kind NAT
    protocol TCP

    real_server 192.168.1.101 25 {
        weight 1
        TCP_CHECK { 
                connect_timeout 3 
            connect_port 25
        nb_get_retry 3
        delay_before_retry 3
        }
    }

    real_server 192.168.1.102 25 {
        weight 1
        TCP_CHECK { 
                connect_timeout 3 
            connect_port 25
        nb_get_retry 3
        delay_before_retry 3
        }
    }
}

virtual_server 10.20.20.105 9100 {
    delay_loop 6
    lb_algo wrr 
    lb_kind NAT
    protocol TCP

    real_server 192.168.1.101 9100 {
        weight 1
        TCP_CHECK { 
                connect_timeout 3 
            connect_port 9100
        nb_get_retry 3
        delay_before_retry 3
        }
    }

    real_server 192.168.1.102 9100 {
        weight 1
        TCP_CHECK { 
                connect_timeout 3 
            connect_port 9100
        nb_get_retry 3
        delay_before_retry 3
        }
    }
}

TM2 服务器的设置

vrrp_sync_group VG1 { 
   group { 
      VI_1 
   } 
} 
vrrp_instance VI_1 { 
        state BACKUP 
        interface eth0 

        lvs_sync_daemon_inteface eth0 
        virtual_router_id 51 
        priority 100 
        advert_int 1 
        authentication { 
                auth_type PASS 
                auth_pass example 
        } 

        virtual_ipaddress { 
                10.20.20.105 
        } 
}

我们在master上安装LVS,这样可以均衡流量。 为第二台服务器安装平衡器是没有意义的,因为我们的配置中只有两台服务器。

[root@tm6_1 ~]##yum install https://rpmfind.net/linux/centos/6.10/os/x86_64/Packages/ipvsadm-1.26-4.el6.x86_64.rpm

平衡器将由我们已经配置的 keepalived 管理。

为了完成这个图,让我们将 keepalived 添加到两台服务器上的自动启动:

[root@tm6_1 ~]#chkconfig keepalived on

结论

检查结果

让我们在两台服务器上运行 keepalived:

service keepalived start

检查VRRP虚拟地址的可用性

让我们确保 VIP 位于 master 上:

在 InfoWatch Traffic Monitor 上设置负载平衡

并且备份中没有 VIP:

在 InfoWatch Traffic Monitor 上设置负载平衡

使用 ping 命令,我们将检查 VIP 的可用性:

在 InfoWatch Traffic Monitor 上设置负载平衡

现在您可以关闭 master 并再次运行命令 ping.

结果应该保持不变,并且在备份时我们将看到 VIP:

在 InfoWatch Traffic Monitor 上设置负载平衡

检查服务平衡

我们以 SMTP 为例。 让我们同时启动两个到 10.20.20.105 的连接:

telnet 10.20.20.105 25

在 master 上我们应该看到两个连接都处于活动状态并且连接到不同的服务器:

[root@tm6_1 ~]#watch ipvsadm –Ln

在 InfoWatch Traffic Monitor 上设置负载平衡

因此,我们通过在其中一台 TM 服务器上安装平衡器来实现 TM 服务的容错配置。 对于我们的系统来说,这将TM的负载减少了一半,从而可以解决系统缺乏水平扩展的问题。

在大多数情况下,该解决方案可以快速实施且无需额外成本,但有时在配置方面存在许多限制和困难,例如在平衡 UDP 流量时。

来源: habr.com

添加评论