Posts
  • David Ziembicki on Infrastructure Architecture

    Architecting a Microsoft Private Cloud

    • 0 Comments

    The first part of a four-part article series titled Architecting a Microsoft Private Cloud, by myself and my colleague Adam Fazio (@adamfazio) has been published in TechNet Magazine here:

    http://technet.microsoft.com/en-us/magazine/hh127072.aspx

    Microsoft Services has designed, built and implemented a Private Cloud/IaaS reference implementation using Windows Server, Hyper-V and System Center. Our goal throughout this four-part series will be to show how you can integrate and deploy each of the component products as a solution while providing the essential cloud attributes such as elasticity, resource pooling and self-service.

    In this first article, we’ll define Private Cloud/IaaS, describe the cloud attributes and datacenter design principles used as requirements, then detail the reference architecture created to meet those requirements. In parts two and three, we’ll describe the detailed design of the reference architecture, each of the layers and products contained within, as well as the process and workflow automation. Finally, in part four we’ll describe the deployment automation created using the Microsoft Deployment Toolkit and Hydration Framework for consistent and repeatable implementations.

    For more information about the architecture, see the Hyper-V Cloud Deployment Guides here (also co-authored by Adam and I) and the MCS Datacenter Services Solution here. Stay tuned for the remaining three articles...

  • David Ziembicki on Infrastructure Architecture

    Demo any Virtualization Scenario with this Portable Setup

    • 0 Comments

    This week I had some folks ask me about the hardware and setup I use for customer meetings and demonstrations. Since I’m in the Consulting side of the business, usually my customer discussions are multi-product scenarios or solution-oriented, not just single product scenarios so I need to have a pretty robust and well-integrated setup because that is the real value of Microsoft’s virtualization stack. Here’s how I do that.

    My general requirements are:

    • Portability (I never check bags so the rig must fit in a laptop bag plus carry-on)
    • Ability to function without any Internet connectivity (never know what type of customer environment I’ll run into)
    • Ability to support multiple primary scenarios (Server Virtualization/Private Cloud, VDI, etc.)
    • Modularity: For more complicated scenarios, I need to be able to add machines without lots of rebuilding
    • Also function as my primary CorpNet machine

    So the solution that works for me is one really powerful laptop augmented as needed by additional laptops/netbooks and supporting hardware. My primary laptop is a Dell M6400 with Quad Core mobile processor, 16GB of RAM, an internal 240GB SSD, and an internal 320GB 7200RPM drive. It also has an E-SATA port for an external hard drive. I dual boot between Windows 7 and Windows Server 2008 R2 partitions on the SSD. The Windows 7 install is my day-to-day OS for CorpNet access, email, etc. This runs Bitlocker and everything else required for compliance with Microsoft policies. The Windows Server 2008 R2 partition is my demo environment and runs a number of roles and applications in the parent partition (Hyper-V, AD, SQL, VMM, OpsMgr, iSCSI Target). Even with all that running in the parent, I still have plenty of resources for running VMs.

    My VMs fall into one of two categories: Integrated demo VMs where they are members of "my" AD domain in the parent partition or stand-alone VMs where they don't integrate with my parent partition and services. The two integrated scenarios I have are Server Virtualization / Private Cloud and VDI. Below is the setup for my VDI scenario. My demo laptop is augmented by a Netbook and a wireless access point. For VMs, I’m running the full stack required to show all of the joint Microsoft + Citrix VDI solution. With this setup I can show Server, Desktop, Application, and Presentation virtualization with full fidelity user experience including HD video over a wireless connection. I will soon be augmenting this with Dynamic Memory and RemoteFX when SP1 comes out.

     

    image

    The next scenario, Server Virtualization / Private Cloud, requires some more gear. Since I want to be able to show all of the Hyper-V and VMM capabilities like failover clustering, Live Migration, etc. I need to have a host cluster of at least two machines. So I add two more laptops to the demo rig. Ideally these would be the smallest laptops that support Hyper-V. In my case, they are two Dell D820s. Now that Hyper-V R2 supports dissimilar cluster nodes via processor compatibility mode, the two machines don’t have to be identical anymore, they just need to have the same processor vendor (i.e. all Intel or all AMD). To create a host cluster you need shared storage and the simplest way to do this is to put a software iSCSI target in the main demo laptop. If you have MSDN access you can get Windows Storage Server and the MS iSCSI target for this purpose or there are a number of 3rd party options, just remember that you will need one that supports connections from multiple servers since there will be two in the cluster. All three laptops get connected to a small Ethernet switch, and a Hyper-V host cluster is configured using the two additional laptops. The cluster is added to the VMM 2008 R2 console, added into Operations Manager, etc. I also have both the VMM Self-Service Portal 2.0 (SSPv2) release candidate as well as the Dynamic Datacenter Toolkit for Hosters (DDTK-H) installed to show a variety of self-service VM provisioning scenarios.

    The diagram below illustrates what this looks like. The only downside to this setup is the weight, 3 machines plus accessories, and the funny looks you get from airport security when you’re at the end of the X-Ray machine and taking every laptop that comes out Smile However, with this setup you can demo pretty much every single capability the Microsoft stack provides including Live Migration, Performance and Resource Optimization (PRO), Failover Clustering, etc.

     

    image

    As a preview of blog posts to come, note the inclusion of System Center Service Manager 2010 and Opalis in my demo rig. I’ve mentioned in my recent posts the work I’m doing with a bunch of other top folks in Microsoft Services around new offerings related to private cloud and infrastructure as a service (IaaS) using our current products. Using all of the products above, we’re doing some pretty amazing orchestration and automation of physical and virtual resources. For a conceptual overview of what this is all about, see my Architecture Journal paper. I’ll be detailing our efforts a lot more in the coming weeks and months.

  • David Ziembicki on Infrastructure Architecture

    VMM 2008 R2 in a Multi-Forest Environment

    • 0 Comments

    In my continuing work on building a private cloud offering with Hyper-V and System Center, I started work on a scenario today where the “fabric” management infrastructure is in a different Active Directory forest than the fabric hosts. This would be something you could see in a multi-tenant hosting scenario or similar situation where you have groups of hosts in different forests that you want to manage with a common infrastructure.

    I knew Virtual Machine Manager 2008 R2 can work in this type of scenario but not having looked at it in depth before, I had to do some digging to get around a few problems, hence this post.

    First, the couple issues I ran into would have been avoided if I had read all the documentation first. Since none of us ever do that, it was Bing to the rescue.

    So here are the three main things to remember when trying to add Hyper-V host clusters in one forest, to a Virtual Machine Manager 2008 R2 installation in a different forest:

    • A Windows Server-based host can be in a domain separate from the VMM server's domain and a host can be in a domain with a two-way trust with the VMM server’s domain or in a domain that does not have a two-way trust with the VMM server’s domain.

    This I knew and I configured a two-way forest trust between my two forests.

    • VMM does not support managing a host cluster on a perimeter network or in an AD domain that does not have a two-way trust with the VMM server’s AD domain.

    This I did not know, but I had configured correctly already.

    • Before you add a host cluster that is in a disjointed namespace to a VMM server that is not in a disjointed namespace, you must add the DNS suffix for the host cluster to the TCP/IP connection settings on the VMM server.

    This was the main issue I ran into. DNS was otherwise configured correctly, the trust verified, but when I went to add the hosts and/or host cluster to VMM, I got an error 404 “The requested name is valid, but no data of the required type was found”. It was able to search AD for the server names but failed trying to add them. Following the documentation above, adding the DNS suffix to VMM for the domain the hosts was in resolved the issue and allowed me to add the hosts.

    The following documentation links provide all the info needed for this scenario:

    http://technet.microsoft.com/en-us/library/cc764275.aspx

    http://technet.microsoft.com/en-us/library/cc917879.aspx

    http://technet.microsoft.com/en-us/library/ee236431.aspx

  • David Ziembicki on Infrastructure Architecture

    Managing Virtual Switches and Networks Across Hyper-V Hosts

    • 0 Comments

    I was asked a question this morning about the following customer requirement:

    “Managing virtual switches should be done from a central point and the configuration should be automatically distributed to the host operating system in such a way as to eliminate the need for a separate configuration switches for each of the hosts.”

    The requirement to “manage” is pretty generic, that could mean anything. Minimally I’d assume it means create/update/delete virtual switches. The System Center Virtual Machine Manager 2008 R2 GUI supports these operations but only on a host by host basis. Here’s what you can do per host:

    clip_image001

    So per host you can create, update, and delete virtual switches. Since this is VMM, anything you can do in the GUI you can do via PowerShell and extend. Scripts can be stored in the VMM library and executed from there:

    clip_image0015

    Now when these run, you get presented with a PowerShell shell that you can interact with if needed or just have the script run without input. You can prompt for user input or get fancy with a menu system. There are multiple cmdlets that let you do things with virtual networks and switches like New-VirtualNetwork, Set-VirtualNetwork, Get-VirtualNetwork, Remove-VirtualNetwork. From the VMM PowerShell console, you can do a get-help on these or see the reference document linked below. 

    So for anything you need to do in a distributed fashion across multiple hosts, like “add new vNetwork to all hosts, set it as External, and connect to the Broadcom NIC” you can create a script to do so then any list of hosts you pipe to that script would have the script run against it. If you feed it all hosts, then it would run on all hosts. Here’s an example:

    Get-VMMServer -ComputerName "VMMServer1.Contoso.com"
    $VMHost = Get-VMHost -ComputerName "VMHost01.Contoso.com"
    $HostAdapter = Get-VMHostNetworkAdapter –VMMServer “VMMServer1.Contoso.com” | where { $_.Name -match "Broadcom" }
    New-VirtualNetwork -Name "External" -VMHost $VMHost -VMHostNetworkAdapter $HostAdapter

    This is the code for a single host, so would execute against VMHost01. The selection criteria for which physical NIC to bind the virtual network to can be any attribute of the network adapter object such as Name(the physical adapter name), MAC, IP, etc. There are several methods that could be used to run this against multiple servers. This code fragment could be turned into a function with parameters, it could be executed inside of a loop or pipeline etc. To execute against all hosts in a particular host group, you could do something like this:

    $VMHostGroup = Get-VMHostGroup -Name "MyHostGroup" -VMMServer "VMMServer1.Contoso.com"
    $VMHosts = Get-VMHost -VMHostGroup $VMHostGroup
    ForEach ($VMHost in $VMHosts) {

        #Anything you want to run on all hosts in the $VMHostGroup

    }

    The above would work for a host group of stand-alone hosts. Where this gets a bit complicated is that hosts groups, host clusters, and hosts are arranged hierarchically and can be nested. So if you have a larger structure with multiple host groups, each containing multiple clusters, and so on, you would need to use a few additional techniques.

    To get all stand-alone hosts in a host group with child host groups, you can use:

    $VMHosts = $VMHostGroup.AllChildGroups | Get-VMHost 

    To get the host clusters in a host group, you can use:

    $VMHostClusters = $VMHostGroup.AllChildGroups | Get-VMHostCluster

    To get the hosts in a host cluster, you can use:

    $VMHosts = Get-VMHost -VMHostCluster $VMHostCluster

    So to be sure that you get all hosts from a given level of the hierarchy down, you need something like this (since this starts at All Hosts, it should run against every host in the hierarchy):

    $VMHostGroup = Get-VMHostGroup -Name "All Hosts" -VMMServer "VMMServer1.Contoso.com"
    if ($VMHostGroup.AllChildGroups -ne $null)
    {
         $VMHosts = $VMHostGroup.AllChildGroups | Get-VMHost
         $VMHostClusters = $VMHostGroup.AllChildGroups | Get-VMHostCluster
         ForEach ($VMHost in $VMHosts)
         {
            #Anything you want to run on all hosts in the $VMHostGroup and all its child host groups
         }
    }
    else
    {
         $VMHosts = Get-VMHost -VMHostGroup $VMHostGroup
         $VMHostClusters = $VMHostGroup | Get-VMHostCluster
         ForEach ($VMHost in $VMHosts)
         {
            #Anything you want to run on all hosts in the $VMHostGroup
         }
    }
    if ($VMHostClusters -ne $null)
    {   
         foreach ($VMHostCluster in $VMHostClusters)
         {
               $VMHosts = Get-VMHost -VMHostCluster $VMHostCluster
               ForEach ($VMHost in $VMHosts)
               {
                    #Anything you want to run on all hosts in the $VMHostCluster
               }
         }
    }

    For details on what you can do with the VMM and Failover Cluster cmdlets, here’s some links:

    VMM 2008 R2 Cmdlet Reference

    http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=08a9eeb9-86ff-4a4f-8dfa-165bd701aba9

    Failover Cluster Cmdlet Reference

    http://technet.microsoft.com/en-us/library/ee461009.aspx

    If there’s something that can’t be done from VMM, then check out the Hyper-V PowerShell Library on CodePlex:

    http://pshyperv.codeplex.com/releases/view/38769

  • David Ziembicki on Infrastructure Architecture

    10 VDI Resources for Microsoft + Citrix Implementations

    • 0 Comments

    While preparing for an upcoming VDI project I went through my archives and inventoried some trusted blogs for architecture, scale, and implementation guidance for the Microsoft + Citrix VDI solution which consists of Hyper-V, VMM, and APP-V from Microsoft and the XenDesktop suite from Citrix. A year or so ago, I created a VDI module for Microsoft’s Server Virtualization with Advanced Management (SVAM) offering using these technologies so I wanted to see if anything had changed with the newer versions of each product. Below is a list of very good resources on this topic. Note that some of these may require registration or a My Citrix login which can be requested by signing up at citrix.com. Also note, most of these sources are non-Microsoft so you should verify supportability, functionality, and applicability to your specific environment.

    XD Design Handbook

    Link

    XenDesktop Modular Reference Architecture

    Link

    Best Practices for Scaling Virtual Desktops (webinar)

    Link

    TechTalk: Hyper-V Planning for XenDesktop (webinar)

    Link

    RD Virtualization Host Capacity Planning in Windows Server 2008 R2

    Link

    Windows 7 Optimization – Disable Services

    Link

    Windows 7 Registry Optimizations for Virtual Desktops

    Link

    XenDesktop on Microsoft Website

    Link

    Blog Series on VDI storage with NetApp

    Link

    Advanced Memory and Storage Considerations for Provisioning Services

    Link

Page 1 of 29 (144 items) 12345»