在 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 流量時。

來源: www.habr.com

添加評論