2013年5月16日

ubuntu 架設 LVS/DR in virtualbox 實作成功紀錄

LVS (linux virtual server) 是用來做 server 負載平衡的軟件。它有三種模式, 我挑了一種比較簡單的 Direct Routing (DR) 來試做, 需要同一網段的 IP, 利用 virtualbox 先裝了 3 台 ubuntu server 12.04

(A) 當入口的 VIP server: 192.168.0.64
    對外的 IP:  192.168.0.90


(B) Real server 1: 192.168.0.65
(C) Real server 1: 192.168.0.66

步驟:
1.安裝 ipvsadm
    apt-get install ipvsadm

2. 在 VIP server 新增一個虛擬網卡, 設成對外的 IP:  192.168.0.90
    修改 VIP server 的 ip 見以下內容
    我是用 dhcp 的方式取得 ip (在分享器設定分享固定 ip)
    下指令然後編輯 interfaces 檔:

sudo vi /etc/network/interfaces


# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth1
iface eth1 inet dhcp

auto eth1:0
iface eth1:0 inet static
address 192.168.0.90
netmask 255.255.255.255
broadcast 192.168.0.90

3. 在 VIP server 建立一個 sh 指令檔, 以執行 ipvsadm 指令 
(目前重開機以後要再執行一次,還沒弄清楚如何解決)
vi lvs.sh

sudo ipvsadm -C
route add -host 192.168.0.90 dev eth1:0
sudo ipvsadm -A -t 192.168.0.90:80 -s rr
sudo ipvsadm -a -t 192.168.0.90:80 -r 192.168.0.65:80 -g
sudo ipvsadm -a -t 192.168.0.90:80 -r 192.168.0.66:80 -g
sudo ipvsadm -S


4. 編輯 /etc/sysctl.conf, 在檔案最下方加入以下內容
sudo vi /etc/sysctl.conf

net.ipv4.ip_forward=0
net.ipv4.conf.all.send_redirects=1
net.ipv4.conf.default.send_redirects=1
net.ipv4.conf.eth1.send_redirects=1


5. 在 real server1 上 (已裝好 apache), 新增一個虛擬網卡 lo:0
可以下指令然後編輯 interfaces 檔:

sudo vi /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth1
iface eth1 inet dhcp

auto lo:0
iface lo:0 inet static
address 192.168.0.90
netmask 255.255.255.255
broadcast 192.168.0.90

改完重啟網卡 (我是重開機), 有網頁說還要加上這一行的指令, 但我發覺重開機後好像不用再下這個指令一次:


sudo route add -host 192.168.0.90 dev lo:0

最後,在 real server2 也做同樣的事。

6. VIP server 重開機後,要執行剛剛建的 lvs.sh 指令檔, 再下指令看看有沒有成功:
~$ ./lvs.sh
~$ sudo ipvsadm

看到以下結果,大致上應該成功了

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port       Forward Weight ActiveConn InActConn
TCP  192.168.0.90:http rr
  -> 192.168.0.65:http        Route   1      0          0
  -> 192.168.0.66:http        Route   1      0          0 



But ...

我卻發現從同網段的其它機器連不進來,ping 192.168.0.90 的結果,說是有重覆 ip, 不知問題何在?

~$ ping 192.168.0.90
PING 192.168.0.90 (192.168.0.90) 56(84) bytes of data.
64 bytes from 192.168.0.90: icmp_seq=1 ttl=64 time=67.9 ms
64 bytes from 192.168.0.90: icmp_seq=2 ttl=64 time=2.38 ms
64 bytes from 192.168.0.90: icmp_seq=1 ttl=64 time=1090 ms (DUP!)
64 bytes from 192.168.0.90: icmp_seq=2 ttl=64 time=88.7 ms (DUP!)
...


好像在 /etc/rc.local 中加入原來在 lvs.sh 中的指令就可以在開機後自動執行。

參考

沒有留言: