3 月 9
VMware 筆記
icon1 Anson | icon2 VM | icon4 03 9th, 2018| icon1 8,073 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/7、Windows Server 2003/2008)的虛擬主機,不支援其他作業系統,如Linux、Solaris等虛擬主機。

【參考連結】

——
【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 Death,BSOD),此時將會因為vLockstep同步機制,而使得Secondary虛擬主機也發生系統當機的狀況。

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

【參考連結】

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

2 月 26

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

2 月 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 />

2 月 13

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

繼續瀏覽 »

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

//先於Model設計好欄位變數等,
//再於Controller設定執行時,透過剛設計的Model樣板,進行各個變數的處理(遞交資料)
//如從網頁欄位A讀取資料到變數X,再把X送到網頁的欄位B
//最後於View設計各欄位的顯示情形
2 月 4
//Controllers\HomeController.cs
public ActionResult Index()
        {
            TempData["Message"] = "修改此範本即可開始著手進行您的ASP.NET MVC應用程式。";
            return View();
        }
<!--Views\Home\Index.cshtml-->
<h2>@TempData["Message"]</h2>
2 月 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的部分就好
1 月 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; }
            }
        }
    }
1 月 31

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

繼續瀏覽 »

1 月 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; }
    }