##EasyReadMore##

2013年6月25日 星期二

[VMWare] vCenter無法連結到ESXi主機


前幾天有一台 ESXi 無法連接上一開始是這樣這台 Host 下面的 VM 都呈現灰色但是還是有在運作。



後來就手動 Connect,依舊失敗,出現了以下的錯誤訊息


有去這台 ESXi重新啟動 vpxa 服務但還是無法重啟
也去重新啟動過 Management-agent,還是一樣


之後就去查 VMWare KB,發現可能是以下問題產生的

  1. 此台 ESXi 上面的 VM Snapshot 數太多 (不能超過 32)
  2. 此台 ESXi 的硬碟空間剩餘不多
  3. ESXi 的版本跟 vCenter 不同


遺憾的是這三項跟我都不符合,只好開 Case

更遺憾的是開了 CaseVMWare 工程師也請我查了一堆原因,但都不是真正的原因,所以最後用 vpxa 服務起不來為主因,建議我重開機……

好了,跟大家的預期一樣,重開機之後就好了
這幾年的感想……Hyper-V VMWare 沒有誰穩的問題,只有運氣好壞的問題….. 是該買幾包乖乖放在 ESXi 主機上了!




附錄
----------------------------------------------------------------------------------
ESXi 5.X 重新啟動 management-agent 還有 vpxa 的方法

GUI 介面:
  1. 用 Console 連接
  2. 按 F2, root 登入
  3. Troubleshooting Options-->Restart Management Agents.
  4. F11 確定 restart the services.
SSH 介面: 連接 SSH 到 ESXi (記得先打開 SSH)
----------------------------------------------------
/etc/init.d/hostd restart
/etc/init.d/vpxa restart

但是也可以從 vSphere Client 連接到 ESXi Configuration 裡面找到 Security ProfileService 裡面選擇右上方的 Properties然後在裡面找到 vpxa就可以 Restart 了。
-----------------------------------------------------------------------------------------


2013年6月13日 星期四

[VMWare] Deploy Virtual Machine from this template 出現 since it is locked 的異常訊息



今天就如往常一樣,要建一個新的 VM,但是從 Template Deploy 的時候出現了異常訊息




此訊息表示無法存取 Template 的 vmdk 檔,因為被鎖定,但 Template 應該是不會有人去存取才是,理論上不會出現鎖定的行為,我就 Google 了一下,試過一些方法:

1. 把 Template 轉成 VM,無法開機,錯誤訊息一樣


2. 建立 Snapshot,然後再去 Snapshot 管理員選擇 Delete all,這個方法也沒用




後來終於發現問題所在,因為我上次用這個 Template Deploy 出來的 VM(之後都簡稱 MyVM),我去看他的 VMDK,赫然發現這個 MyVM 掛的硬碟竟然是 Template 的 VMDK 檔,真是哪門子的爛 Bug!




還好這個 MyVM 還沒交付給 User,只是個乾淨的 Windows,於是我就把這個硬碟從 MyVM 移除,把原本屬於他的掛上去,然後就正常了。

事情當然還沒結束,身為一個工程師,不能不了解原因就這樣放他過去,不然以後還是會發生,當我把 MyVM 的硬碟移除後,Template 也正常了,結果 Template 的硬碟變成 MyVM 之前的那顆,因為我之前在 Windows 裡面有建一個帳號,結果這個帳號出現在 Template 裡面,讓我只好重做一個乾淨的 Template,所以總結以上,正確的處理方式應該是:


  1. 關閉 MyVM,把 Hard Disk Remove
  2. 把 Template Convert 為 VM,把Hard Disk Remove
  3. 把 Template 的 Hard Disk Copy 到 MyVM 的 Datastore
  4. 把 MyVM 的 Hard Disk Copy 到 Template 的 Datastore
  5. 把原本 Template 的 VMDK 掛給 MyVM
  6. 把原本 MyVM 的 VMDK 掛給 Template
  7. MyVM 開機,應該就會跟之前一樣
  8. Template 重新 Convert 為 Template

Buttttttttttttttttttttttt,為什麼會出現這個爛 Bug 啊,不能這樣啊,不然以後我從 template Deploy VM 出來都要去檢查 VMDK 位置的話不就太蠢了!

所以我又實驗了一次 Deploy,很幸運的試了出來:



只要你在 Deploy VM from this template 的時候,有改硬碟大小,那這個 VM 就會掛到原本 Template 的 VMDK!




結論是,如果你要改新的 VM 硬碟大小,請 Deploy 成功之後再改……..


2013年6月11日 星期二

[Windows] Windows的機器在超過497天未重開後的詭異事件



      在大家心目中Server 就是不用常常在重開的雖說不可能永遠不重開但是一兩個月不重開也不是什麼大不了的事情我們單位的 Windows Server 機器占了大多數所以經驗值累積的比較多有幾次的事件是這樣:

(1)   有天某人打來說 SQL 資料庫沒辦法跟其他資料庫同步但是只有跟一台沒辦法同步一問之下怪了那台資料庫正常從其他台連 1433 Port 過去都是通的唯獨就是從我們的資料庫沒辦法過去 1433 Port實在太詭異還好是建置在容錯移轉叢集上因此先把資料庫的 Instance 移到另外一台上重開那台 host神奇的事情發生了問題竟然解決了!
(2)   有天某個使用者跟我說無法連到一台 VM我也連不進去Host 上面的 VM 只有這台有問題結果最後重開了結果是一切就正常了……


        其實一直以來我每次開 Case 也有跟微軟工程師說我覺得你們的 OS 大概一年半左右沒有重開會有問題……(我自己測大概是 490~500 天左右)之後重開就可以解決當然微軟的工程師不會說是自己的 Bug ~~~~~


    過了一年後我們又出現這種情形雖然我們已經很習慣要重開了但還是不免俗的開了一下 Case沒想到這次微軟說 Patch 已經出囉是針對 497 天沒有重開的機器有可能你的 TCP/IP Port 都處在 TIME_WAIT 的狀態導致無法連線主要發生在 Windows Server 2008 Windows Server 2008R2,這樣一想起來,真的每次出問題的都是 2008 的機器所以我們就趁這個機會趕快把這個 Patch 裝上去囉~~~~


強烈建議以下使用者快裝:

(1) 有裝 Hyper-V Cluster 者 --> 不然超過 500 天有可能 HOST 整個死掉
(2) 有裝 SQL Server Cluster 者 --> 有可能某些連線出問題
(3) 重要的網站服務 --> 有可能網站失效 此時你重開 IIS 都沒用


Patch 網址如下:


2013年6月10日 星期一

Hyper-V 3.0 與 vSphere 5.1 虛擬硬碟效能比較 VHDX V.S VMDK

        虛擬化越來越普遍也就代表效能與實體機越來越近現在的 CPU 與記憶體速度都算相當的快CPU 最少也有 2Ghz多數時間也在閒置Memory 也到了 1600Mhz 的速度但硬碟的速度就是起不來就像是三兄弟去跑步大哥二哥 always 在等小弟。

        所以虛擬化之後就算效能有削減一點點但根本的速度差別還是在硬碟往往換顆更快的硬碟比你換什麼頂級的 CPU 有意義的多今天就拿最常見的 Hypervisor 來比較一下兩者的差別。

        VHDX 最大可支援到 64TBVMDK 只有 2TB現在很多需求是大量的 D如果今天 VM 需要一個 8TB 的空間 VMWare 環境我就只能建立 4 VMDK組成一個跨距磁碟區這會是比較麻煩的地方其餘就還好,兩者的效能部分,VMDK VHDX 號稱在動態大小 (Thin Provision)固定大小效能沒什麼差,這部分之後的測試會再報告,這次主要比較 VMDK VHD 的效能比較。

  • Storage : Infortrend R2850 FC 8Gb
  • 硬碟 : SAS 600GB 15K 轉速 RAID 5
  • 實體機器 : IBM X3650 M4
  • Guest OS : Windows Server 2008R2 SP1 Std
  • 硬碟大小 : 127GB Thin Provision
  • 測試軟體 : CrystalDisk 3.0.2 (I/OMeter 也可以) 因為只是小小測試 所以都用預設來跑
實體機器

VMDK

VHDX


測出來後我自己都嚇了一跳,因為 Hyper-V 的效能超乎想像的好

竟然還超越了實體機器,不知道微軟有沒有做什麼奇怪的加速

VMware 好像就弱了一點,實際來看看開機速度差更多

VMWare vSphere 5.1 VM 開機速度


Hyper-V 3.0 VM 開機速度


        實際比起來 Hyper-V 3.0 的速度快了非常多,第一次玩 Windows 有像 Linux 的開機速度,竟然不到十秒就開完了,但是 Windows-based 的 OS 在 VMWare 就慢了一些些,實際測試起來,在 Hyper-V 3.0 運作 Windows -based的虛擬機器感覺很良好,速度飛快,比 Hyper-V 2.0 好很多,竟然還比 VMWare 快,於是乎現在我都在 Hyper-V 環境建 Windows VM,在 VMWare 環境建立 Linux VM,以上測試給大家一個參考,改天再放更專業的測試 !







2013年6月7日 星期五

從Hyper-V 2.0(2008R2) 搬VM到Hyper-V3.0的注意事項



這幾天搬了一台 Hyper-V 2.0 的 VM 到 3.0 的環境

搬 VHD 檔還好但是要考慮幾件事情


  1. 是否要把 VHD 檔轉成 VHDX?


Ans: 強烈建議要轉 !VHDX 在動態大小硬碟方面的效能逼近固定大小而且可以調整大小到 64TB~ VHD 檔在動態大小跟固定大小的效能有差,最大只能 2TB


  1. 開機就可以直接用嗎?

Ans: 不太建議,因為整合服務還沒更新,2.0 跟 3.0 的整合服務不同,一定要升級,不然網路會有問題,但是你一開機,會發現網路一直繞圈圈,此時請不要裝整合服務,不然 Explorer 容易當掉需要等一段時間等到網路圖示斷線才可以安裝整合服務,裝了之後就會覺得速度有明顯變快了!

How to migrate ADFS Configuration database from Windows Internal Database (WID) to SQL Server


真不知道寫這個在台灣會有誰用到不過過程真的太艱辛了要寫一篇來紀念一下

ADFS AD Federation Service主要就是讓外部的服務可以透過 FS 主機利用 AD 去進行驗證達到 Single Sign On 的目標 Windows Server 裡面的一個角色:





      預設裝起來的話很快就裝好了你甚至可以把 ADFS 第二台第三台加進去讓他變成一個同盟可以同時提供高可用性的服務這在 2008R2 比較難因為 2008R2 預設是 ADFS 1.0必須另外獨立裝 ADFS2.0Server 2012 就好多了直接內建 2.0
那為什麼要把 Configuration 資料搬到 SQL Server 呢?

         因為預設的 Configuration 資料是放在 WID 的,就是 Windows Internal Database,內建的小資料庫,微軟很不夠意思的在官網上講,如果你把 ADFS 的資料放在 WID 的話....... 我們來看一下官方的解釋:


  • No more than five federation servers should be added to a federation server farm deployment. If you need more federation servers to support higher performance in farm deployment, use SQL Server instead.
  • No more than 100 trust relationships of the same type (either claims provider trusts or relying party trusts) can be supported. For example, you can have up to 100 claims provider trusts and 100 relying party trusts with a Windows Internal Database deployment, but to exceed this number for either category of trusts, use SQL Server instead.


         第一點還好就是不能放超過五台同盟我也不知道什麼巨大規模需要超過五台我們學校四五萬人我估個四台都覺得太高估了但是第二點頭就比較大了他竟然不能超過一百筆的信任關係一個網址進來進行認證就算一個我們學校的校務系統加上其他三姑六婆一定都超過一百組那就會造成很大的困擾只好咬牙開始轉移了!



首先你要先準備以下的材料:

  • ADFS Server 2~4: 就是乾淨的 Server 2012 加上 ADFS 的角色還不要加同盟喔推薦千萬要先快照 (Snapshot) 一次這樣就算做錯大不了重來就好Hyper-V 3.0 快照超快不用省這幾秒。
  • 在第一台 ADFS SQL Server Management Studio : 我們需要用到 sqlcmd 這個小工具所以要先花時間裝一下Express 或是正式版都可以可以到微軟下載 Express 版
  • SQL Server 一台: 建議開啟 SQL 驗證,不然跨網域就有點麻煩了!





Step.1 ADFS 的服務停止,並將資料庫檔案卸載並搬出
--------------------------------------------------------------------------------
開啟工程師的好朋友 Command Prompt,記得要按右鍵"以系統管理員身分執行",然後輸入:

net stop adfssrv

ADFS 的服務停掉,沒有用系統管理員身分就會存取被拒,其實直接去服務關掉也是可以,沒辦法,打指令比較帥嘛~~

接下來要把 WID 上面的資料庫先卸載,打開 PowerShell,輸入以下指令:

    sqlcmd -S \\.\pipe\MICROSOFT##WID\tsql\query
    use master
    go         
    sp_detach_db 'adfsconfiguration'
    go
    sp_detach_db 'adfsartifactstore'
    go

微軟非常認 (ㄐㄧㄢ) (ㄓㄚˋ) 的把 WID 目錄在 Server 2012 改了,如果各位有去 Google 就會發現,以下是差別:

Server 2008R2:
sqlcmd -S \\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query

Server 2012:
sqlcmd -S \\.\pipe\MICROSOFT##WID\tsql\query


如果你在 2012 執行,會發現下了根本沒反應,因為路徑根本就換了啊~~~~,以前是在 C:\Windows\SYSMSI\SSEE\MSSQL.2005\MSSQL\Data
現在的路徑已經改到了 C:\Windows\WID\Data 下面,由此可見,很多指令都要重找,不然一定會常常碰壁。






Step.2 把資料庫檔案移動到 SQL SERVER 資料庫主機下
------------------------------------------------------------------------------
卸載了之後,到 C:\Windows\WID\Data 下,把兩個資料庫檔案跟兩個 LOG

adfsconfiguration.mdf
adfsconfiguration_log.ldf
adfsartifactstore.mdf
adfsartifactstore_log.ldf

這四個檔複製到 SQL Server 的目錄下,看要哪裡都可以,跟其他 MDF 放在一起也可以。




Step.3 ADFS 的資料庫在 SQL Server 掛載起來
------------------------------------------------------------------------------

麻煩打開 Windows 工程師另外一個好朋友 Powershell,輸入以下指令:

sqlcmd -S \\.\pipe\MICROSOFT##WID\tsql\query  --Server2012
use master
go
sp_attach_db 'adfsconfiguration', 'F:\MSSQL11.MSSQLSERVER\MSSQL\DATA\adfsconfiguration.mdf', 'F:\MSSQL11.MSSQLSERVER\MSSQL\DATA\adfsconfiguration_log.ldf'
go
sp_attach_db 'adfsartifactstore', 'F:\MSSQL11.MSSQLSERVER\MSSQL\DATA\adfsartifactstore.mdf', 'F:\MSSQL11.MSSQLSERVER\MSSQL\DATA\adfsartifactstore_log.ldf'
go
alter database AdfsConfiguration set enable_broker with rollback immediate
go

* 裡面的路徑就是你放 mdf 檔跟 ldf 檔的地方喔

成功的話,就可以在你的 SQL Server 下面看到 configuration 跟 artifactstore 資料庫了!






Step.4 ADFS 的 Configuration 資料庫設定切到 SQL Server
------------------------------------------------------------------------------
做了這個步驟 ADFS 才會去存取 SQL Server 的資料庫 請用系統管理員身分執行 Powershell 輸入:

$temp=GEt-WmiObject -namespace root/ADFS -class SecurityTokenService
$temp.ConfigurationdatabaseConnectionstring="data source=yourdatasource;initial catalog=adfsconfiguration;User ID=username;Password=password;"
$temp.put()


這邊記住一定要以系統管理員身分執行,不然最後 $temp.put() 會說傳了一個無效值 0,其實就是權限不足,這邊困擾我好久,還想說用別的方法改設定,最後沒想到是這麼簡單的解決方法!



Step.5 啟動 ADFS 服務
------------------------------------------------------------------------------
以系統管理員身分執行 Command Prompt輸入

net start adfssrv

可以啟動代表你剛剛切換有成功!



Step.6  ADFS artifactdbconnection 設定切到 SQL Server
------------------------------------------------------------------------------
記得我們剛剛移轉了兩個資料庫嗎? 現在要把另外一個設定也切過去請用系統管理員身分執行 Powershell 輸入:

Add-pssnapin microsoft.adfs.powershell
Set-adfsproperties –artifactdbconnection “data source=DATASOURCE; initial catalog=adfsartifactstore;integrated security=true”



Step.7  重新啟動 ADFS 服務
------------------------------------------------------------------------------
以系統管理員身分執行 Command Prompt,輸入

net stop adfssrv
net start adfssrv

成功的話代表兩個資料庫都切換到 SQL Server! 恭喜!



Step.8  ADFS Server 加入同盟伺服器
------------------------------------------------------------------------------
剛剛只做了第一台,現在要把其他幾台也加進去同盟伺服器
請確定以下事情都準備好了:

  • 有加入網域
  • ADFS 角色安裝完畢
  • ADFS 憑證有 import 進去且是正常的
  • IIS 把憑證繫結 Default Web Site 443 PORT


第三點的意思是,你要在憑證管理裡面看到憑證是沒有問題的才 OK



第四點沒有做好等一下加入同盟伺服器會有警告出現。


因為如果把 Cofig 資料搬到 SQL Server 的話,就不能用精靈加入同盟,一定要利用指令方式使用 ADFS 目錄下的 FsConfig.exe 裡面的 JoinSqlFarm 指令才可以加入,請用管理員身分打開 Command Prompt,到 ADFS 所在的目錄下 C:\Windows\ADFS  輸入:

FsConfig.exe JoinSQLFarm /ServiceAccount Domain\AccountName /ServiceAccountPassword Password /SQLConnectionString "data source=YourDataSource;initial catalog=adfsconfiguration;User ID=username;Password=password;"


如果之前沒有在 IIS 把憑證繫結成功 會有以下錯誤畫面:



成功的話就像以下這樣:


接下來就把剩下的 ADFS 主機一一加入,就大功告成!!