如果一台伺服器的能力不足以處理所有請求,而軟體廠商沒有提供負載平衡怎麼辦? 有很多選擇,從購買負載平衡器到限制請求數量。 哪一種正確,必須根據實際情況,結合現有條件來決定。 在本文中,我們將告訴您如果您的預算有限並且您有免費伺服器,您可以做什麼。
作為需要減輕其中一台伺服器負載的系統,我們選擇了InfoWatch的DLP(資訊外洩防護系統)。 該實施的一個特點是將平衡器功能放置在其中一台「戰鬥」伺服器上。
我們遇到的問題之一是無法使用來源 NAT (SNAT)。 為什麼需要這樣做以及問題是如何解決的,我們將進一步描述。
所以,最初現有系統的邏輯圖是這樣的:
來自使用者電腦的 ICAP 流量、SMTP 和事件均在 Traffic Monitor (TM) 伺服器上處理。 同時,資料庫伺服器處理完TM上的事件後的負載可以輕鬆應對,但TM本身的負載卻很重。 從裝置監視器 (DM) 伺服器上訊息佇列的出現以及 TM 上的 CPU 和記憶體負載可以明顯看出這一點。
乍一看,如果我們在這個方案中新增另一個TM伺服器,那麼ICAP或DM都可以切換到它,但我們決定不使用這種方法,因為容錯能力降低了。
解決方案描述
在尋找合適的解決方案的過程中,我們選擇了免費分發的軟體
我們想要實現的目標(減少 TM 的負載並保持目前的容錯水準)應該按照以下方案進行:
檢查功能時發現,伺服器上安裝的自訂 RedHat 組件不支援 SNAT。 在我們的例子中,我們計劃使用 SNAT 來確保傳入資料包和對它們的回應是從相同 IP 位址發送的,否則我們將得到以下圖片:
這是無法接受的。 例如,已將封包傳送到虛擬 IP (VIP) 位址的代理伺服器將期望來自 VIP 的回應,但在這種情況下,對於傳送至備份的會話,它將來自 IP2。 找到了解決方法:需要在備份上再建立一個路由表,並用單獨的網路連接兩台TM伺服器,如下圖:
設置
我們將實施一個方案,其中兩台伺服器具有 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 上:
且備份中沒有 VIP:
使用 ping 指令,我們將檢查 VIP 的可用性:
現在您可以關閉 master 並再次執行命令 ping
.
結果應該保持不變,並且在備份時我們將看到 VIP:
檢查服務平衡
我們以 SMTP 為例。 讓我們同時啟動兩個到 10.20.20.105 的連線:
telnet 10.20.20.105 25
在 master 上我們應該看到兩個連線都處於活動狀態並且連接到不同的伺服器:
[root@tm6_1 ~]#watch ipvsadm –Ln
因此,我們透過在其中一台 TM 伺服器上安裝平衡器來實現 TM 服務的容錯配置。 對於我們的系統來說,這將TM的負載減少了一半,從而可以解決系統缺乏水平擴展的問題。
在大多數情況下,該解決方案可以快速實施且無需額外成本,但有時在配置方面存在許多限制和困難,例如在平衡 UDP 流量時。
來源: www.habr.com