VMware vCenter Storage Monitoring Service failed

環境是 vSphere 5 與 VMware vCenter Server Appliance,監控 storage 的服務是 VMware vCenter Storage Monitoring Service 縮寫是 sms。

今天發現從 vCenter Service Status sms 一直 failed,也可以從 vCenter 的這個網址檢查是不是健康 https://vcenter/sms/health.xml。造成跟硬碟效能監控有關的圖都跑不出來,嚴重影響我的測試,十分不悅。

結果去 /var/log/vmware/vpx/sms.log 裡面看到如下的錯誤:

— Cause: org.h2.jdbc.JdbcSQLException: NULL not allowed for column “ENTITYID”; SQL statement:
INSERT INTO scsiTarget ( entityId, wwn, portWwn, nodeWwn, iscsiName, iscsiAlias, type, vendor
) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) [90006-147]
at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:91)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.insert(SqlMapExecutorDelegate.java:447)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.insert(SqlMapSessionImpl.java:82)
at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.insert(SqlMapClientImpl.java:59)
at com.vmware.vim.sms.provider.VcProviderImpl.populateScsiTargets(VcProviderImpl.java:849)
at com.vmware.vim.sms.provider.VcProviderImpl.access$300(VcProviderImpl.java:41)
at com.vmware.vim.sms.provider.VcProviderImpl$PopulateStorageInfoTask.run(VcProviderImpl.java:3006)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)

十分不悅 again..,是 vCenter 的 bug = =?

好險找到這篇文章最後一個回答是解答,這個表裡面有一筆 NULL 的資料因此出了問題。所以找個軟體來連進去資料庫,我這環境是用 oracle,Client 是用 Navicat Premium 登入 Oracle,按照順序檢查有沒有這筆空資料,有的話就刪除。

select * from VPX_PSA_TARGET_TRANSPORT where ISCSI_NAME is NULL AND VPX_TYPE=’vim.host.InternetScsiTargetTransport’;

delete from VPX_PSA_TARGET_TRANSPORT where ISCSI_NAME is NULL AND VPX_TYPE=’vim.host.InternetScsiTargetTransport’;

接著重開 ESXi Service 他就復活拉拉拉阿~~~~~

cisco Nexus 1000v 4.2(1)SV1(4a) 於 vSphere 5.0 安裝筆記

概念:

這張圖是官方附的網路圖,每一台 vSphere 5 上面都要裝 1000 VEM 的套件,而 1000v 的管理伺服器 VSM 跟 vCenter 則是獨立在這些跑 1000 VEM 的 host 外,要注意透過這樣設置會比較安全,最好這些設備是直接接在同一個實體 switch 上,否則跨 switch 的 VLAN 又要額外設置。

VSM 有分成三個網路卡,Management、Control、Packet,Management 是讓你可以透過 telnet or web 登入 Management 的網卡,相對其他兩個是比較不重要,可以透過實體網路連的到就好。而 Control 跟 Packet 則相對比較重要,這是 VSM 跟 VEM 溝通的橋樑,要確保他們之間的網路可以在運作 Cisco Discovery Protocol 時是順利的,否則後續的操作都會有問題。

因此 VSM 才要獨立在 Host 之外獨立跑在受管理的 VEM 之外,這樣才不會受制於網卡數量,而讓 VSM 連接到 VEM 的連線沒辦法額外透過 vSwitch 建立,否則 Control 連線應該是沒辦法跑在 1000v 的 vSwitch 上,有點雞生蛋,蛋生雞的問題。

安裝步驟:

  1. 替需要跑 dvs 的 vSphere host 安裝 cisco 1000v update (VEM),如果安裝成功應該可以在 host 用 vem status 檢查狀態。
  2. 用 ovf 佈署一台 1000v VM(VSM)
  3. 透過 1000v VEM web-java 介面初始化設定,包含連接 vCenter
  4. 登入(telnet or ssh) 1000v 用指令管理 distributed vSwitch
    1. show modules (檢查連接上的 vem 如果成功應該會自動加入 VEM)
    2. install license (安裝授權)
    3. port-profile type ethernet my-uplink ( 設定 uplink portgroup )..
    4. port-profile type vethernet my-portgroup ( 設定 port group )..

安裝 VEM

$ esxcli software vib install -d /vmfs/volumes/4f9bd234-8fe1e3a2-2f1d-e41f131cf84a/VEM500-201204133102-BG-release.zip

實際在安裝的時候比較需要注意的是當 1000v 開起來以後,可以進去 show module 查看有多少 VEM 自動連上了,他好像是透過 cisco discovery protocol 去自動尋找同個 switch 上的主機,只要 control 連線有辦法連到 VEM 應該就可以在 show module 裡面看到東西了,否則在 VEM 上面怎麼設 port-group 都不會通才對。
而且在初始化的時候會要求你選擇三種連線對應的 port-group 與 vlan 這邊要非常小心~我初始化了很多次才把設定弄對~我的 VSM 裝在與要管理的 VEM 不同主機上,我 VSM 的網路要接到有設定特定 vlan 的 port-group 上,然後再把 1000v uplink 的 port-profile 設成相同的 vlan,這個設定完成以後才會抓到。

例如 control vlan 設定 100 的範例:

 # 用來連接 control 的 uplink 網卡接上去以後才可以從 show module 看到 VEM
 $ port-profile type ethernet uplink
 (config-port-profile) $ vmware port-group
 (config-port-profile) $ switchport mode trunk
 (config-port-profile) $ switchport trunk allowed vlan all
 (config-port-profile) $ no shutdown
 (config-port-profile) $ system vlan 100
 (config-port-profile) $ state enabled
 (config-port-profile) $ exit
 # 無 vlan 的 port-group 要設 vlan 應該是加上 system vlan x
 $ port-profile type vethernet portgroup
 (config-port-profile) $ vmware port-group
 (config-port-profile) $ switchport mode access
 (config-port-profile) $ switchport trunk allowed vlan all
 (config-port-profile) $ no shutdown
 (config-port-profile) $ state enabled
 (config-port-profile) $ exit

1000v 的設定都在 VEM 上做,在 vCenter 上面只能檢視一些相關的資料與設定 VM 與 port-group 的對應, 1000v 比較強項的地方應該是可以透過 cisco 的作業系統來管理虛擬網路,而且能對相同 host 內 vm 之間做網路管制,而且能讓管理網路跟管理系統的人分工不互相影響。

瀏覽與刪除 dVS 的範例

 # 檢視跟 vCenter 的連線資訊
 $ show svs connection
connection vcenter:
  ip address : 1.2.3.4
  remote port : 80
  protocol : vmware-vim https
  ...
 $ config
 VSM (config)# svs connection vcenter
 # 刪除 dvs
 VSM (config-svs-conn)# no vmware dvs
 # 中斷 svs 連線
 VSM (config-svs-conn)# no connect
 VSM (config-svs-conn)# exit
 # 移除跟 vCenter 的連線,可以重跑 web 的初始化精靈
 VSM (config)# no svs connection vcenter

 隔了許久在設一次
這次把 vlan 都設成 1,設定都如上,本來是設 100 怎麼樣都不通,不知道是有哪裡弄錯,後來把 port-profile uplink 的 system vlan 設成 1 以後突然就可以了…真囧,只是代表那 system vlan 很重要。

額外學到一點是 trouble 手冊裡面 VSM and VEM Modules 的章節有超多指令可以慢慢測試是什麼問題,從 vsm vem 的角度一步一步檢查,之前是連 uplink 都不通,這次是 uplink 偵測到了。

最重要的是在 vsm 上 show module 會看到 vem。或者是檢查 portgroup 裡面的 uplink 跟 vmkernl 的 port 是否有綠色,這次一開始是 uplink 綠色了,但是 vmkernel 不會通,vem 跟 vsm 接起來以後才會通,大概就是 control 跟 packet 這兩條路的問題。

port 的驚嘆號裡面也有一些資訊能看,如果是一般的 portgroup 通常就是 port 被 blocked 住(或許代表 packet 還沒通?),或是 uplink port 沒有 cisco discovery protocol 資訊的問題(control 沒通?)。

列出一些 vem 能看的指令正確的狀態


$ vem status

VEM modules are loaded

Switch Name Num Ports Used Ports Configured Ports MTU Uplinks
vSwitch0 128 4 128 1500 vmnic0
vSwitch1 128 1 128 1500
DVS Name Num Ports Used Ports Configured Ports MTU Uplinks
nexus 256 13 256 1500 vmnic1
VEM Agent (vemdpa) is running

$ vemcmd show port
 LTL VSM Port Admin Link State PC-LTL SGID Vem Port
 18 Eth3/2 UP UP FWD 0 vmnic1
49 Veth1 UP UP FWD 0 vmk1

$ vemcmd show card
Card UUID type 2: 22f0c278-f963-11df-a639-e41f131cd438
Card name: 1-2-3-4
Switch name: nexus
Switch alias: DvsPortset-0
Switch uuid: d7 b5 10 50 bc 8e 97 8a-0a f6 cd b9 7f 3b 87 16
Card domain: 1
Card slot: 3
VEM Tunnel Mode: L2 Mode
VEM Control (AIPC) MAC: 00:02:3d:10:01:02
VEM Packet (Inband) MAC: 00:02:3d:20:01:02
VEM Control Agent (DPA) MAC: 00:02:3d:40:01:02
VEM SPAN MAC: 00:02:3d:30:01:02
Primary VSM MAC : 00:50:56:90:29:4e
Primary VSM PKT MAC : 00:50:56:90:29:50
Primary VSM MGMT MAC : 00:50:56:90:29:4f
Standby VSM CTRL MAC : ff:ff:ff:ff:ff:ff
Management IPv4 address: 1.2.3.4
Management IPv6 address: 0000:0000:0000:0000:0000:0000:0000:0000
Secondary VSM MAC : 00:00:00:00:00:00
Secondary L3 Control IPv4 address: 0.0.0.0
Upgrade : Default
Max physical ports: 32
Max virtual ports: 216
Card control VLAN: 1
Card packet VLAN: 1
Card Headless Mode : No
 Processors: 16
 Processor Cores: 8
Processor Sockets: 2
 Kernel Memory: 20959704
Port link-up delay: 5s
Global UUFB: DISABLED
Heartbeat Set: True
PC LB Algo: source-mac
Datapath portset event in progress : no

# 可以檢查 control mac, packet mac ,這個通了不代表可以了,那如果不通就..
$ vem-health  check  00:02:3d:10:01:02
VSM Control MAC address: 00:02:3d:10:01:02
Control VLAN: 1
DPA MAC: 00:02:3d:40:01:02
The VEM-VSM connectivity seems to be fine.

刪除幽靈 dvs :

 如果沒有按照上述的刪除 dvs 步驟來 no vmware dvs,就把 VSM 砍掉就會產生一個無法修改的幽靈 dvs,超礙眼的,只是剛開始不懂的時候一定會不小心犯這個錯誤,目前已經累積兩名受害者。

後來找到這個 removing-orphaned-nexus-dvs 才知道關鍵字是 orphaned dvs,按照他的步驟我就順利的移除了這個失去控制的 dvs 囉!

小紀錄一下文章內的步驟

  1. 建立一個新的 VSM (借屍還魂用)
  2. 初始化他去建立一個新的 dvs 
  3. 用 no vmware dvs 刪除此 VSM 建立的 dvs,但是不去除連線
  4. 透過 web mob 找到舊的 extension-key,跟新的 extension-key
  5. 透過網頁把新的 extension-key  unregister
  6. 設定好 VSM 的 datacenter-name 跟 hostname 變成幽靈 dvs name 
  7. 去 VSM 暫時中斷與 vCenter 的連線把 extension-key 改成舊的
  8. 去 VSM 網頁抓有替代過後 extension-key 的 extension.xml 抓下來到 vCenter plugin 註冊
  9. VSM 重新連線(svs connection;connect;)
  10. 成功借屍還魂
  11. 不爽就把幽靈 dvs 刪除吧!(svs connection;no vmware dvs)
參考資源:
sysadmintutorials step by step 教學

part-1 part-2 part-3

官方影片教學 vimeo
官方文件
Cisco Nexus 1000V Release 4.2(1)SV1(4a)

VMware vSphere vSwitch

VMware vSphere vSwitch 的 port 可以增加三種介面

Service Console

vSphere host 本身的 IP,實際上就是透過這個 IP 連入 vSphere 來管理,因此這個設定相當重要,通常也不太會需要更動,如果有需要做容錯,可以用兩個網卡分別在不同的 vSwitch 設定不同的 Service Console 來避免一個網段或網卡的故障。

VMKernel

作為 vMotion iScsi nfs 的網路介面,類似在 host 新增一個虛擬網卡,作用跟 Service Console 很像,但是用途不一樣,多一個彈性讓 host 可以像是擁有很多個網卡一樣,在不同網卡設定不同 ip,可以用這個 IP 來連接需要透過網路的 storage,可以走 nfs or iscsi 都需要有一個虛擬 IP,也可以透過這個 VMKernel 的 IP 在 storage 上指定讀寫權限。

vmotion 也需要透過增加這個介面來讓虛擬機進行同步,因此在增加時有 vmotion or fault tolerance 的選項能設定。

Virtual Machine(port group)

一個 vSwitch 上面可以有很多個 port group 就是透過新增一個 virtual machine 來執行,可以用來管理流量或安全策略的設定,分屬同一個 port group 的設定將會一致。因此在 vmotion 時需要將兩台 host 的 vSwitch and port group 設定都一致才能順利的移轉,這也是虛擬機對應 port 的承載介面,每個虛擬機的網卡指定的 port 位置就是一個 port group。

可以透過 host profile 來同步管理數台機器的網路設定。

Fedora KVM Networking

這幾天在自己電腦上安裝了 fedora 15 除了感受一下 gnome3 嶄新的使用者界面外,

順便也玩一下整合很完整的 KVM,用 dvd 裝完以後有勾選虛擬化,就會把相關軟體一次都裝好了(kvm,qemu,libvirtd…) ,只要透過虛擬機管理員就可以輕鬆的建立 vm,並且使用了~感覺很愜意呢~

只是想要瞭解他相關網路的設定,好像就沒有很簡單了…原本網路概念就有一點模糊,順便重新整理自己網路的知識… Continue reading…