Mar 9
VMware 筆記
icon1 Anson | icon2 VM | icon4 03 9th, 2018| icon1 8,186 views | icon3No Comments »

【vSphere HA】
vSphere HA必須在ESXi主機發生故障損壞事件時才會在HA Cluster中其他存活的ESXi主機將存放在共享儲存資源中的VM虛擬主機重新啟動

若是底層的ESXi主機並未發生故障損壞事件而是vCenter Server虛擬主機內本身所運作的服務停止的時候那麼vSphere HA高可用性機制是幫不上忙的。 (故可以靠Watchdog補足)

【Watchdog】(6.0以上才支援預設情況會自動啟用)
vCenter Server 6.0新增了「Watchdog」監控機制當運作的服務發生故障事件而停止運作前2次發生時Watchdog會嘗試重新啟動服務倘若第3次仍無法重新啟動服務便會將VM虛擬主機重新啟動

【參考連結】

——
【VMware Data Recovery】
VMware Data Recovery(vDR)屬於Disk-based的備份方式具有簡單操作及容易部署的特性(因為它也是一台虛擬主機)支援Windows VSS(Volume Shadow Copy)備份方式也支援簡單的重複資料刪除功能(Data De-duplication)

但是此備份工具有如下的相關功能限制

·備份環境中必須具備vCenter Server才可使用此備份工具
·屬於Disk-based因此無法使用File Level或Block Level備份方式
·每台vDR僅能備份100台虛擬主機
·無法運作於IPv6網路環境上
·僅支援備份運作Windows作業系統(Windows 2000/XP/Vista/7Windows Server 2003/2008)的虛擬主機不支援其他作業系統如LinuxSolaris等虛擬主機

【參考連結】

——
【VMware Fault Tolerance】
如果企業無法接受VMware HA機制啟動時虛擬主機有短暫的停機時間則VMware FT可能是一個解決的方案但是啟用VMware FT有許多先決條件例如該虛擬主機不能進行快照(Snapshot)無法使用Stoarge vMotion功能該虛擬主機只能使用一個vCPU等等條件限制

VMware FT機制會於2台不同的Host上分別建立Primary和Secondary虛擬主機並且採用vLockstep技術以ESX/ESXi Host上的VMkernel Port來傳送Primary虛擬主機的資料至Secondary虛擬主機上但是Secondary不會有實際I/O的寫入行為

當Primary虛擬主機所處的ESX/ESXi Host故障損壞時則Secondary虛擬主機會馬上接手相關作業並且成為Primary虛擬主機此時會在另一台ESX/ESXi Host上再度建立一台新的Secondary虛擬主機來與Primary虛擬主機同步資料

【總結】
·vMotion/DRS此機制適合用於「計畫性」停機例如當ESX/ESXi Host實體伺服器發生記憶體硬碟故障或者需要停機進行韌體(Firmware)更新及歲修時這種排定好的計畫性工作可以使用此技術將運作於虛擬化平台上的虛擬主機遷移到其他台ESX/ESXi Host上讓企業可在服務不中斷的情況下維修實體主機

·HA/FT此機制為適合用於「非計畫性」停機當ESX/ESXi Host實體伺服器電力系統出問題而不當斷電或者實體主機的主機板損壞導致實體主機故障而這些非人為因素損壞之非計畫性故障狀況發生時透過此機制可以使虛擬主機自動遷移到其他台ESX/ESXi Host上繼續開機運作

但很重要的一點是這些機制都僅僅是保護ESX/ESXi Host Level層級而已而並非虛擬主機的作業系統層級(OS Level)以及作業系統上的應用程式層級(Application Level)

例如先前提到的VMware HA機制當ESX/ESXi Host故障損壞時等於運作於其上的虛擬主機也是被不當關機雖然虛擬主機可以在其他台Host上再度開機但很有可能虛擬主機的作業系統已經因為不當關機而造成作業系統損壞因此即使已經遷移到別台Host上也無法順利開機成功所以作業系統的備份作業有其必要性

而VMware FT機制是讓2台虛擬主機資料一模一樣進行運作因此若是Primary虛擬主機發生當機的狀況時例如Windows作業系統發生藍色當機畫面(Blue Screen Of DeathBSOD)此時將會因為vLockstep同步機制而使得Secondary虛擬主機也發生系統當機的狀況

至於應用程式層級的保護機制目前也有許多廠商研發相關機制例如Symantec以Veritas Cluster技術開發的Application HA便是可以保護虛擬主機上運作的應用程式如MSSQLExchangeOracleSAP等等

【參考連結】

—–
【VMware DRS】
自動根據實體主機的負載 , 自動調度虛擬系統的位置 , 也就是當某台實體主機負載較高 , 可以透過 DRS 將部份子系統透過 VMotion 搬到負載較輕的實體主機

Feb 26

  前年買了一台HP ProLiant Server這是第一次自己在HP伺服器安裝系統(以往都是買IBM),第一次使用iLO時覺得比IBM的ServerGuide機制方便許多至少我不用上網去尋找ServerGuide的版本及下載燒錄等但有發現操作的過程似乎有點異常的慢由於是第一次使用iLO加上後續也正常裝進OS了便也沒再研究
繼續瀏覽 »

Feb 22
//MVC3開始,新增Razer語法,不同於先前的<%...%>括號語法,使用At Sgin(@)敘述程式碼片段。

//在Razer檢視中,使用@*...*@進行程式註解。

//在程式碼中,要輸出內容,要加@或@(...)
//在html標籤中,要輸出內容,要加@
//在程式碼中,要輸出純文字,要加@:
@if(true)
{
    String strPrint = "這是測試輸出文字";
    @strPrint<br/>
    <span>strPring</span><br />
    <span>@strPrint</span><br />
}

@{string strl = "測試";}
@(strl)輸出文字<br />

@{ string strHtml1 = "<ul><li>項目一</li></ul>";}
@Html.Raw(strHtml1)<br />

Feb 13

  中午在幫公司一台x3650 M5安裝Windows Update並重開機後就再也喚醒不能一度懷疑是不是Updates的bug造成畢竟近期Updates的問題出現的有點頻繁把機殼打開後除了一顆LED 163亮error外看到SYS BRD ERROR這顆也亮了很想直接宣判死刑請DBA同仁趕緊進行後續補救措施不過同事外出吃飯加上這台是公司主要的DB Server如果放棄這台補救時間起碼要兩小時且早上建的資料都要重來了因此還是急切的尋找喚醒它的機會

繼續瀏覽 »

Feb 5
//在測試Controller與View時,如果因為設中斷點導致網頁顯示不完整而無法進行測試,
//可以試著點選"跳離函式(Shift+F11)",讓頁面完整顯示,以進行測試。

//先於Model設計好欄位變數等,
//再於Controller設定執行時,透過剛設計的Model樣板,進行各個變數的處理(遞交資料)
//如從網頁欄位A讀取資料到變數X,再把X送到網頁的欄位B
//最後於View設計各欄位的顯示情形
Feb 4
//Controllers\HomeController.cs
public ActionResult Index()
        {
            TempData["Message"] = "修改此範本即可開始著手進行您的ASP.NET MVC應用程式。";
            return View();
        }
<!--Views\Home\Index.cshtml-->
<h2>@TempData["Message"]</h2>
Feb 3
    //資料模型一對多關聯
    public class Guestbook
    {
        public int Id { get; set; }
        public string Content { get; set; }
        public DateTime CreateTime { get; set; }
        public Member Member { get; set; }
    }

    public class Member
    {
        [Key]
        public string Username { get; set; }
        public string Password { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }

        public ICollection<Guestbook> Guestbook { get; set; }
    }
    //Code First 就是在Model定義好各欄位後,其他的Controller、View都會自動幫你產生,
    //很神奇的功能,讓你專注在寫Model的部分就好
Jan 31

    public class Index
    {
        [DisplayName("必選修")]
        //上面中括號這項非必要
        public string Required { get; set; }

        /*name只能有一個,所以這兩段先註解掉
        [Required(ErrorMessage = "學生姓名不得為空白")]
        public string Name { get; set; }

        [StringLength(10, ErrorMessage = "學生姓名不得超過10字元")]
        public string Name { get; set; }
        */

        [StringLength(10, ErrorMessage = "學生姓名必須介於2-10字元", MinimumLength = 2)]
        public string Name { get; set; }

        [Range(0, 100, ErrorMessage = "得分必須介於0~100之間")]
        public int Point { get; set; }

        [System.Web.Mvc.Compare("re_password", ErrorMessage = "兩次密碼輸入不一致")]
        //上面沒有using System.Web.Mvc的話,這邊就要打完整的命名空間
        public string Password { get; set; }
        public string Re_password { get; set; }

        [RegularExpression( @"^[0-9]{2,4}-?[0-9]{3,4}-?[0-9]{-4}$", ErrorMessage = "請輸入正確的電話號碼")]
        public string Phone { get; set; }

        [EmailAddress(ErrorMessage = "這不是E-mail格式")]
        public string Studentmail { get; set; }

        [Url(ErrorMessage = "這不是網址標準格式")]
        public string Url { get; set; }

        [FileExtensions(ErrorMessage = "所上傳的檔案不是圖片")]
        public string File { get; set; }

        [CreditCard(ErrorMessage = "這不是信用卡格式")]
        public string CreditCard { get; set; }

        [DataType(DataType.Date)]
        public string Date { get; set; }

        [Remote("RemoteTest", "Home", ErrorMessage = "Remote屬性測試")]
        public string For_Remote { get; set; }

        [MetadataType(typeof(ContentMetaData))]
        public partial class Content
        {
            private class ContentMetaData
            {
                [DisplayName("編號")]
                public int Id { get; set; }

                [DisplayName("姓名")]
                [Required(ErrorMessage = "請輸入性名")]
                [StringLength(10, ErrorMessage = "姓名不得超過10字元")]
                public string Name { get; set; }

                [DisplayName("內容")]
                [Required(ErrorMessage = "請輸入內容")]
                public string Content { get; set; }
            }
        }
    }
Jan 31

  早上遇到一個問題前晚在設定完Synology NAS的權限後今天遇到有人反應開啟NAS上的檔案時出現目錄名稱無效的錯誤確認NAS權限沒問題後就上網找資訊有找到一位網友遇到同樣的情形且看起來是Windows 10更新到1709後才發生查看手邊的電腦確實也是1709

繼續瀏覽 »

Jan 30
    public class Index
    {
        [DisplayName("必選修")]

        public string required { get; set; }

        /*name只能有一個,所以這兩段先註解掉
        [Required(ErrorMessage = "學生姓名不得為空白")]
        public string name { get; set; }

        [StringLength(10, ErrorMessage = "學生姓名不得超過10字元")]
        public string name { get; set; }
        */

        [StringLength(10, ErrorMessage = "學生姓名必須介於2-10字元", MinimumLength = 2)]
        public string name { get; set; }

        [Range(0, 100, ErrorMessage = "得分必須介於0~100之間")]
        public int point { get; set; }

        [System.Web.Mvc.Compare("re_password", ErrorMessage = "兩次密碼輸入不一致")]
        //上面沒有using System.Web.Mvc,所以這邊就要打完整的命名空間
        public string password { get; set; }
        public string re_password { get; set; }

        [RegularExpression( @"^[0-9]{2,4}-?[0-9]{3,4}-?[0-9]{-4}$", ErrorMessage = "請輸入正確的電話號碼")]
        public string phone { get; set; }

        [EmailAddress(ErrorMessage = "這不是E-mail格式")]
        public string studentmail { get; set; }

        [Url(ErrorMessage = "這不是網址標準格式")]
        public string url { get; set; }
    }