負載均衡集群的方式設定和腳本
通過前面我們對LVS的安裝和負載均衡算法的介紹,相信大家已經對這些輕車熟路了。那么我們現在就開始介紹重點內容——lvs下的負載均衡集群配置問題了。那么首先是設定方式,當然還要了解NAT的含義和它的基本架構圖。那么具體內容還請大家看下文。
理解了上述關于請求轉發方式和調度算法的基本概念后,就可以運用LVS來具體實現幾種不同方式的負載均衡的集群系統。LVS的配置是通過前面所安裝的IP虛擬服務器軟件ipvsadm來實現的。ipvsadm與LVS的關系類似于iptables和NetFilter的關系,前者只是一個建立和修改規則的工具,這些命令的作用在系統重新啟動后就消失了,所以應該將這些命令寫到一個腳本里,然后讓它在系統啟動后自動執行。網上有不少配置LVS的工具,有的甚至可以自動生成腳本。但是自己手工編寫有助于更深入地了解,所以本文的安裝沒有利用其它第三方提供的腳本,而是純粹使用ipvsadm命令來配置。
下面就介紹一下如何配置LVS/NAT、LVS/TUN、LVS/DR方式的負載均衡集群。
設定LVS/NAT方式的負載均衡集群
NAT是指Network Address Translation,它的轉發流程是:Director機器收到外界請求,改寫數據包的目標地址,按相應的調度算法將其發送到相應Real Server上,Real Server處理完該請求后,將結果數據包返回到其默認網關,即Director機器上,Director機器再改寫數據包的源地址,***將其返回給外界。這樣就完成一次負載調度。
構架一個最簡單的LVS/NAT方式的負載均衡集群下圖所示。
LVS/NAT方式的集群簡圖
Real Server可以是任何的操作系統,而且無需做任何特殊的設定,惟一要做的就是將其默認網關指向Director機器。Real Server可以使用局域網的內部IP(192.168.0.0/24)。Director要有兩塊網卡,一塊網卡綁定一個外部IP地址(10.0.0.1),另一塊網卡綁定局域網的內部IP(192.168.0.254),作為Real Server的默認網關。#p#
這里將所有LVS的配置命令寫到一個可執行腳本中,腳本如下:
- #!/bin/bash
- # Open IP Forwarding
- echo 1 > /proc/sys/net/ipv4/ip_forward
- # To make the load balancer forward the masquerading packets
- iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -d 0.0.0.0/0 -o eth0 -j MASQUERADE
- ipvsadm -C
- # Choose the Weighted Round Robing
- ipvsadm -A -t 10.0.0.1:80 -s wrr
- # Set Real Server
- ipvsadm -a -t 10.0.0.1:80 -r 192.168.0.1:873 -m -w 2
- ipvsadm -a -t 10.0.0.1:80 -r 192.168.0.2:873 -m -w 3
- ipvsadm
將該腳本保存為/root/lvs_nat.sh,然后加上可執行屬性,執行它:
- # chmod a+x /root/lvs_nat.sh
- # /root/lvs_nat.sh
運行該腳本后,一個簡單的LVS/NAT方式的負載均衡集群已經成功架設。模擬多個用戶從外界訪問10.0.0.1的80端口,用ipvsadm可以觀看到以下信息:
- # ipvsadm
- IP Virtual Server version 1.0.9 (size=4096)
- Prot LocalAddress:Port Scheduler Flags
- -> RemoteAddress:Port Forward Weight ActiveConn InActConn
- TCP 10.0.0.1:http wrr
- -> 192.168.0.1:http Masq 3 2 0
- -> 192.168.0.2:http Masq 2 1 0
其中ActiveConn表示對應的Real Server當前有多少個正在活動的連接,InActConn表示不活動的連接數。從這里我們可以看到有3個HTTP請求,被分別分配在不同的Real Server上,表明這個負載均衡集群正在成功運行中。
本例完成了這樣一個簡單的LVS/NAT集群,由此可以看出,LVS/NAT方式實現起來最為簡單,而且Real Server使用的是內部IP,可以節省Real IP的開銷。但因為執行NAT需要重寫流經Director的數據包,在速度上有一定延遲;另外,當用戶的請求非常短,而服務器的回應非常大的情況下,會對Director形成很大壓力,成為新的瓶頸,從而使整個系統的性能受到限制。