如何通過XCP管理Xen服務器的網絡

先解釋點解用ovs-vsctl打任何command,一reboot就乜Q都無嗮。事因係openvswitch呢家嘢係被虐待狂,好喜歡比人控制。而XCP就係幕後黑手,當XCP啟動時,就會清空任何XCP嘅setting,任何用自己個database去setup嘅network。

好啦!問題好明顯,就係點樣喺XCP設定network。咁小弟就講幾招,夠你呃餐飯食架啦。

若貴server有兩個LAN(依家一般都有),又有個有翻咁上下嘅switch(無去淘寶或eBay買啦)想用盡佢點解決?行bonding + trunk 是也。唔好研究安全問題,通都唔通咁安全同唔安全係無分別嘅,呢個哲學問題,唔係技術問題。

 

刪除舊config

盤古初開,安裝好Xen同XCP之後,個局應該係有xenbr0, xenbr1,... 視乎有幾個LAN PORT。要delete佢都要費幾大氣力。先睇睇有幾多LAN PORT:

xe pif-list

你要做嘅就係產咗所有萬惡嘅xenbr?,可能要重複執行下面幾個command,參數不離上面pif list嘅結果,可能會有啲warning或error,唔好理啦,盡做:


xe pif-unplug uuid=...
xe network-destroy uuid=...
xe pif-forget uuid=...
xe pif-introduce device=eth?   # 呢個係delete過龍後再搵翻啲LAN PORT出嚟嘅方法

可以嘗試以下script,唔包生仔!

netdev=eth
ip -o link | gawk -F ': +' '{print $2}' | grep ^${netdev} > /var/tmp/ethlist
for dev in `cat /var/tmp/ethlist`
do
  nid=$(xe pif-list device=$dev --minimal)
  nwid=$(xe pif-list device=eth0 | grep network-uuid | gawk -F ': ' '{print $2}')
  echo try to remove $dev configuration nic=$nid, network=$nwid
  xe pif-unplug uuid=$nid 
  xe pif-forget uuid=$nid
  xe network-destroy uuid=$nwid 
done

 

建立Bonding

喺建立一個Bonding前,先要建立一個Network,XCP乜Q嘢都要有個Network嚟承托,所以先做network後做bonding。而bonding最緊要就係pif-uuids,將所有真LAN PORT入嗮去(估你都唔多,得嗰兩個)。

SWID=$(xe network-create name-label=vswitch name-description="Master Switch on $HOSTNAME")

eth0=$(xe pif-list device=eth0 --minimal)
eth1=$(xe pif-list device=eth1 --minimal)
# more...
bond=$(xe bond-create network-uuid=$SWID mode=balance-slb pif-uuids=$eth0,$eth1)

其中balance-slb係好一般嘅用法,兩條cable可以接兩個switch行redundant都得。而另一個可以考慮嘅mode係lacp,呢家嘢要個switch支持lacp(802.3ad)先得。有要識得set,用port-channel group 1 mode passive比較好。

當搞掂條大水喉,就要分身家,建立vlan,喺vlan上面辦實事。假設public network用vlan2,private network用vlan3:

bondid=$(xe pif-list device=bond0 network-uuid=$SWID --minimal)

publicnet=$(xe network-create name-label=publicnet)
xe vlan-create network-uuid=$publicnet vlan=2 pif-uuid=$bondid 

privnet=$(xe network-create name-label=privnet)
xe vlan-create network-uuid=$privnet vlan=3 pif-uuid=$bondid

 

Set IP

咁樣搞咗三個network出嚟,vswitch, publicnet, privnet。通過 xe pif-list device=bond0 就可以見到你咋vlan。好啦!要set ip啦,ip係set喺pif度嘅,所以教大家點搵。


# management network
NETWORK=vswitch
nwid=$(xe network-list name-label=$NETWORK --minimal)
nic=$(xe pif-list network-uuid=$nwid --minimal)
xe pif-reconfigure-ip uuid=$nic IP=192.168.1.201 netmask=255.255.255.0 gateway=192.168.1.1 DNS=8.8.8.8,8.8.4.4 mode=static

# private network
NETWORK=privnet
nwid=$(xe network-list name-label=$NETWORK --minimal) 
nic=$(xe pif-list network-uuid=$nwid --minimal)
xe pif-reconfigure-ip uuid=$nic IP=10.5.5.201 netmask=255.255.192.0 mode=static

set完至講,要記住只要個 network set 好咗就得,唔一定要IP嘅,要唔要呢個係哲學問題。理論上只要搞翻通個 management network 可以被管理得倒就OK。

可以自己寫個 script 去處理呢四句偈。

 

清洗 O/S network configuration

呢個好重要,打開/etc/network/interfaces,將已經歸到XCP管嘅nic全部註釋。跟著reboot一次,必須經歷一下考驗。假如網絡能正常操作,咁你就發達啦,至於點樣至係正常操作,就要自己諗諗。