Manuel Puron's System Center Blog

All examples are provided “AS IS” with no warranty expressed or implied. Run at your own risk. The opinions and views expressed in this blog are those of the author and do not necessarily state or reflect those of Microsoft.

Manuel Puron's System Center Blog

  • How to create a private cloud step by step with System Center part 2: VMM Setup

    In the second part of this series I will show you the basic installation of VMM, remember this is a test environment so you will need to separate SQL role and scale VMM to suit your needs.

    Prerequisites

    • I always create a SCAdmin account for my labs, so I have an administration account for all my System Center Servers, you should make it local admin in your servers and your admin groups, I usually do all mi installation and update tasks with this user.
    • VMMadmins for your VMM administrators – Local admin in VMM server
    • VMMaction to manage my Hyper-V hosts – Local administrator in all Hyper-V nodes to manage.
    • VMMservice to execute VMM local services – Local administrator in the VMM server.
    • SQLservice for SQL services.

    Installing SQL 2012 with Sp2:

    • It’s pretty straight forward to install SQL, so I will go through with the default I use for my test setup, in a production environment you should request advice from your DBA to follow best practices.
    • Because this is a local install you won’t need to disable your firewall or apply any rules to it.
    • Follow the setup until you get to the Setup Role page and select SQL Server Feature installation.
    • Select Database Engine and Management Tolls in the Feature Installation Page.
    • Leave the default instance for the installation to make it easy.
    • In Server Configuration  put the SQL Server Agent to Automatic and change the accounts to use your SQLservice account.
    • Check the collation is set to SQL_Latin1_General_CP1_CI_AS.
    • Add your SCadmin user to the SQL Server Administrators in the Database Engine Configuration page.
    • And press install when you are asked to.

    Installing VMM 2012 R2

    • Open the install media and open setup.exe if the install page doesn’t show when you double click.
    • Click the install link.
    • Select VMM Management Server and the Console will be selected by default, click next.
    • Insert your product key and click next.
    • Follow the setup making the selections that make more sense to you.
    • In the prerequisites page you will see an error for the deployment tools not being installed, follow this link because the one in the setup will not work.
    • Run the installer and just install Deployment Tools and Windows Preinstallation Enviroment (Windows PE)
    • Close the wizard when the installation is completed.
    • Go back to the VMM setup and click the Verify Prerequisites Again button, click next.
    • In database configuration, leave the defaults and just select your default instance form the drop down combo, click next.
    • Select Domain Account and put your VMMservice credentials in DOMAIN/User format.
    • We need to create the container for the VMM key to be stored for future recovery, update or if we are doing a cluster HA for VMM installation.
      • Go to your domain controller (DC01) and run ADSI Edit.
      • Remember that the container should be created in the same domain as your install user.
      • Right click over ADSI edit in the left pane and select connect, click ok with the defaults.
      • Double click in default naming context and in your domain name.
      • Right click in your domain name and select New and Object.
      • Select Container and click next.
      • In value use VMMK and click next.
      • Click finish.
      • Right click in the new CN=VMMK created item and select properties.
      • Select security, click Advanced.
      • In the Advanced Security window click Add
      • Click Select a principal and look for your installation account, click ok.
      • Give the following permissions: Read, Create all child objects and Write all properties.
    • Now that we have our container let´s go back to our VMM server and to the setup.
    • Check the box for Store my keys in Active Directory, it should be in this format, for example, if my domain is CONTOSO.com, it should be CN=VMMK,DC=CONTOSO,DC=com, click next.
    • Leave the defaults in ports and click next.
    • Leave the defaults for the library and click next.
    • Click installs

    In the next part we will prepare networking for WDS.

  • How to create a private cloud step by step with System Center part 1: Lab Setup

    Today I decided to start a series of post while I'm building my home lab from scratch again, in this series of post I will cover all the basic knowledge you need to set a private cloud in a lab environment.

     

    This series assumes you have a basic understanding of Hyper-V management and Virtual Machines manual deployment, basic Active Directory and DNS.

     

    This post series will be in Spanish and English for your convenience.

     

    When I went out to buy my setup components I had clear that I wanted a two node cluster and another machine for some administrative VMs and to be my storage provider with iSCSI to test the management capabilities for storage in VMM 2012 R2, and because I didn't need overclocking I found a pretty sweet deal in i7 4770 for the virtualization nodes and i5 4440 for the storage pc.

     

    I had a bunch of SATA 3 disks from the updates I've been doing to my gaming setup lately, so I decided to reuse them as follows:

     

    2 x Cluster Node PC:

    Processor:

    Core i7 4770

    RAM:

    32 gb 1600 Mhz

    Storage:

    500Gb HDD

    Network:

    3 Nics

     

    Storage:

    Processor:

    Core i5 4440

    RAM:

    32 gb 1600 Mhz

    Storage*:

    120 Gb SSD for Operating System

    2x120 Gb SSD + 240 Gb SSD for fast storage pool

    2x500 Gb HDD for slow storage pool

    Network:

    2 Nics

    *Notice I'm not going to use any RAID technology, just the storage pool capabilities of Windows Server.

     

    With this setup I'm able to deploy my private cloud with no problems and test some advanced new features of VMM 2012 R2.

     

    For the networking part I pretty much use my standard high end home router from linksys and the cheapest CISCO switch I could find that was managed and supports VLAN tagging in case I want it to test some VLAN isolation later on.

     

    Preparing the setup for VMM:

     

    1. Install Windows Server 2012 R2 in the Storage PC and apply all updates. 

     

    2. Install Hyper-Role in the Storage PC.

     

    3. Create a Directory to store your Virtual Machines and VHDX.

    clip_image001

    4. Create a blank VM Gen 2 called Template and Install Windows Server 2012 R2, this will be our template VHDX, you can also use this script to create your base VHDX.

     

    5. If you decided to go from scratch in your template you need to apply sysprep to generalize the image and make it usable as a template:

      1. Run CMD as administrator.
      2. Go to %Windir%\System32\Sysprep.
      3. Run Sysprep.exe
      4. In the windows select Out of the Box Experience and Generalize.

     

    6. Don't turn on the Template VM, go to the directory you created for your VMs and VHDX, and look for the VHDX of the VM Template you created and copy it to another subdirectory called DC and to another one called VMM, so we can have the base disks for our first two machines.

    clip_image002 

    clip_image003

    clip_image004

    7. Create 2 new VMs one called VMM and another one called DC01, and point them to the respective virtual disk you copied to each directory in the previous step.

    clip_image005

    8. Start both machines and logon as local administrator.

     

    9. Promote the DC01 as a domain controller and DNS Server.

     

    10. Create a virtual switch from one of the NICs, do not allow the management operating system to communicate through this, you have another Nic for management.

     

    11. Join the VMM Server and the Storage Server to the domain.

     

    After this basic setup we are ready to start installing our environment, I know a lot of you use differential disks for the lab setups, that's ok but I want to make this as real as possible so you can see some more detail in the process.

     

    Next post: Installing VMM

  • How to create a private cloud step by step with System Center part 4: Installing WDS for SCVMM

    In this fourth part of the series we will install, configure, and integrate WDS to SCVMM.

    Use a copy of the template disk we created in the first post of the series and create a new VM called WDS, change the name and join it to your domain.

    In server Manager go to Add roles and features:

    • Select Windows Deployment Services.
    • Accept the features required.
    • Proceed with the install.

    Now let’s go back to DC01 to setup DHCP:

    • Open the DHCP form Tools in Server Manager.
    • Go to IPv4, select your Internal Lan scope and Scope Options.

    image

    • Right click and Configure Options:
      • Select option 43 and set it to: 01 04 00 00 00 00 FF.
      • Option 66 and set it to your WDS Server name or IP: WDS.CloudMP.com
      • Option 67 and set it to: boot\x86\wdsnbp.com
      • It should look like this:

    image

    Now let’s go back to our WDS server and complete the setup:

    • Open Windows Deployment Services from tools in the Server manager.
    • Expand server in the left pane, right click in your server name and select Configure Server.
    • Click Next.
    • Select Standalone Server, click Next.
    • Leave the default in the folder value and click Next.
    • Leave the option for Do no respond to any client computers, this will be handled with SCVMM, click Next.
    • Uncheck the box to add Images now and finish the setup.
    • Add your SCadmin account to the local administrators.

    Now we are ready for the integration:

    • Go to your SCVMM Server and open your SCVMM Console.
    • Go to Fabric –> Infrastructure –> PXE Servers.
    • Right click and add PXE Server.
    • In computer name put your WDS server name.
    • Use an existing Run As Account and click browse.
    • Create a new runas account for the SCadmin user.
    • Click ok and add,
    • Check the jobs to check the integration with WDS.

    Note: Remember SCVMM uses RunAs Accounts which require CredSSP to run as expected, if you have this disabled by a policy for some reason, you will not be able to use RunAs Accounts.

    In the next post we will add a VHDX and deploy to our cluster nodes from baremetal.

  • How to create a private cloud step by step with System Center part 6: Bare Metal Deployment

    Now let’s check the prerequisites for the Bare Metal Deployment:

    • Your motherboard should support BMC (Baseboard Management Controller), I am actually using an old 2nd generation Xeon I had around to test this. you can get a SuperMicro MB and a Xeon CPU for less than $400, because my newer workstations doesn’t support it.
    • Intelligent Platform Management Interface (IPMI) versions 1.5 or 2.0.
    • Data Center Management Interface (DCMI) version 1.0
    • System Management Architecture for Server Hardware (SMASH) version 1.0 over WS-Management (WS-Man)
    • Custom protocols such as Integrated Lights-Out (iLO).

    Now that we have the prerequisites we will need a profile for our hosts:

    • You will need to copy our template VHDX to the library share in the SCVMM server.
    • From the host where you have the VHDX go to run and \\scvmm.
    • Copy the VHDX to the Library share.
    • Go to the SCVMM Server and open the Console.
    • Go to the Library tab.
    • Right click in profiles –> Create Physical Computer Profile.
    • Select a descriptive name and select VM Host, click next.
    • Click browse to find the VHDX you just imported, if you can’t find it just refresh the library, click next.
    • Leave the defaults, but remember that sometimes specially for newer hardware you will need to provide the drivers, and tag them to be used for certain models or manufacturers, click next.
    • Fill in the information for general settings and click next.
    • You can leave the placement path configuration for later, click next.
    • Review the options and finish.

    To deploy the new host:

    • In the Fabric Tab right click and select Add Hyper-V Hosts and Clusters.
    • Select Physical computers to be provisioned as virtual machine hosts, click Next.
    • Select a preconfigured run as account with the credentials for your BMC Interface and select the protocol for the Out of band Management, click Next.
    • Select the discovery scope, selecting your preferred one, I will use a specific IP address, click Next.
    • Select the host group to assign this host and the profile, click Next.
    • Select a computer Name, and Next.
    • Finish.

    That’s It, in the Next post we will add all the hosts and create our cluster.

  • Creating a monitor and rule from an SQL Query value, using oledbprobe module

    Last week a client ask me for help with a monitor and a rule based on the result of an SQL Query, in the past I’ve done this sometimes using a powershell script, but this time I want it to use the OleDbProbe module to accomplish my goal.

    After some research it was pretty straight forward to do it so I will post the sections of the code I used and explained the management pack part by part.

    First I created a simple class base on Windows Server Computer Role:

    <EntityTypes>
      < ClassTypes>
        < ClassType ID="test.Monitor.Class" Accessibility="Internal" Abstract="false" Base="Windows!Microsoft.Windows.ComputerRole" Hosted="true" Singleton="false" />
      </ClassTypes>
    < /EntityTypes>

    Now that we have the class I need to create a discovery for it, and because I’m just going to monitor this on one specific server I go with a WMI query for the machine name:

    <Discoveries>
      <Discovery ID="test.Monitor.Discovery" Enabled="true" Target="Windows!Microsoft.Windows.Server.Computer" ConfirmDelivery="false" Remotable="true" Priority="Normal">
        <Category>Discovery</Category>
        < DiscoveryTypes>
          < DiscoveryClass TypeID="test.Monitor.Class" />
        </DiscoveryTypes>
        <DataSource ID="DS" TypeID="Windows!Microsoft.Windows.WmiProviderWithClassSnapshotDataMapper">
          < NameSpace>root\cimv2</NameSpace>
          <Query>Select * from Win32_ComputerSystem where name like "XXXXXXXXXXX"</Query>
          <Frequency>60</Frequency>
          < ClassId>$MPElement[Name="test.Monitor.Class"]$</ClassId>
          < InstanceSettings>
            <Settings>
              <Setting>
                <Name>$MPElement[Name="Windows!Microsoft.Windows.Computer"]/PrincipalName$</Name>
                <Value>$Target/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$</Value>
              </Setting>
              <Setting>
                 <Name>$MPElement[Name="System!System.Entity"]/DisplayName$</Name>
                <Value>$Target/Property[Type="System!System.Entity"]/DisplayName$</Value>
              </Setting>
            </Settings>
          </InstanceSettings>
        </DataSource>
      </Discovery>
    < /Discoveries>

    Now that we have a class and a way to discover it, let’s get to the fun part of this post, we need to first create a probe action that it’s going to be the one that obtains the information we need, this one is going to be based on OleDbProbe module and it will receive a value for ConnectionString and Query, I’ll do it this way because it’s easier to reuse it when you need to create multiple different monitors and rules using different queries, then we need a datasource to use our probe action, notice that we can use a runas account to avoid giving priviledges to localsystem:

    <ModuleTypes>
      < DataSourceModuleType ID="test.Monitor.DataSource" Accessibility="Internal" RunAs="test.Monitor.DBAccessAccount" Batching="false">
        <Configuration>
          < xsd:element minOccurs="1" name="ConnectionString" type="xsd:string" />
          < xsd:element minOccurs="1" name="Query" type="xsd:string" />
          < xsd:element minOccurs="1" name="IntervalSeconds" type="xsd:integer" />
          < xsd:element minOccurs="0" name="SyncTime" type="xsd:string" />
         </Configuration>
        < OverrideableParameters>
          < OverrideableParameter ID="IntervalSeconds" Selector="$Config/IntervalSeconds$" ParameterType="int" />
          < OverrideableParameter ID="SyncTime" Selector="$Config/SyncTime$" ParameterType="string" />
        </OverrideableParameters>
        < ModuleImplementation Isolation="Any">
          <Composite>
            < MemberModules>
              < DataSource ID="Scheduler" TypeID="System!System.SimpleScheduler">
                <IntervalSeconds>$Config/IntervalSeconds$</IntervalSeconds>
                < SyncTime>$Config/SyncTime$</SyncTime>
               </DataSource>
              < ProbeAction ID="Probe" TypeID="test.monitor.OleDb.ProbeAction">
                < ConnectionString>$Config/ConnectionString$</ConnectionString>
                <Query>$Config/Query$</Query>
              </ProbeAction>
            </MemberModules>
            < Composition>
              <Node ID="Probe">
                <Node ID="Scheduler" />
              </Node>
            </Composition>
          </Composite>
        </ModuleImplementation>
        < OutputType>System!System.OleDbData</OutputType>
      </DataSourceModuleType>
      < ProbeActionModuleType ID="test.monitor.OleDb.ProbeAction" Accessibility="Public" RunAs="test.Monitor.DBAccessAccount" Batching="false" PassThrough="false">
        <Configuration>
          < xsd:element minOccurs="1" name="ConnectionString" type="xsd:string" />
          < xsd:element minOccurs="1" name="Query" type="xsd:string" />
        </Configuration>
         <OverrideableParameters>
          < OverrideableParameter ID="ConnectionString" Selector="$Config/ConnectionString$" ParameterType="string" />
          < OverrideableParameter ID="Query" Selector="$Config/Query$" ParameterType="string" />
        </OverrideableParameters>
        < ModuleImplementation Isolation="Any">
          <Composite>
            < MemberModules>
              < ProbeAction ID="OleDBPA" TypeID="System!System.OleDbProbe">
                < ConnectionString>$Config/ConnectionString$</ConnectionString>
                <Query>$Config/Query$</Query>
                < GetValue>true</GetValue>
                 <OneRowPerItem>false</OneRowPerItem>
              </ProbeAction>
            </MemberModules>
            <Composition>
               <Node ID="OleDBPA" />
            </Composition>
          </Composite>
        </ModuleImplementation>
        < OutputType>System!System.OleDbData</OutputType>
        < InputType>System!System.BaseData</InputType>
      </ProbeActionModuleType>
    < /ModuleTypes>

    So we have the base we need to get the information, now we just have to create a custom monitor type, so we can accomplish our monitoring goal, this monitor will have 3 states and will receive the Connection String and Query to execute, so every time we create a monitor we can define this two things, also we have some overridable parameters IntervalSeconds, SyncTime and Thresholds, noticed that when we use the OleDbProbe module we need to create an xpath query so we can get the value out of the oledb data that is return from our datasource, this comes in a format like this “Columns[x]/Column[y]”, where x is the row we need and y the column:

    <MonitorTypes>
      < UnitMonitorType ID="test.Monitor.MonitorType.testdbValue" Accessibility="Internal" RunAs="test.Monitor.DBAccessAccount">
        < MonitorTypeStates>
          < MonitorTypeState ID="UnderWarning" NoDetection="false" />
          < MonitorTypeState ID="OverWarning" NoDetection="false" />
          < MonitorTypeState ID="OverError" NoDetection="false" />
        </MonitorTypeStates>
        <Configuration>
          < xsd:element minOccurs="1" name="IntervalSeconds" type="xsd:integer" />
          < xsd:element minOccurs="1" name="Query" type="xsd:string" />
          < xsd:element minOccurs="1" name="ConnectionString" type="xsd:string" />
          < xsd:element minOccurs="0" name="SyncTime" type="xsd:string" />
          < xsd:element minOccurs="1" name="WarningThreshold" type="xsd:integer" />
          < xsd:element minOccurs="1" name="ErrorThreshold" type="xsd:integer" />
          < xsd:element minOccurs="1" name="ColumnsColumn" type="xsd:string" />
        </Configuration>
        < OverrideableParameters>
          < OverrideableParameter ID="IntervalSeconds" Selector="$Config/IntervalSeconds$" ParameterType="int" />
           <OverrideableParameter ID="SyncTime" Selector="$Config/SyncTime$" ParameterType="string" />
          < OverrideableParameter ID="WarningThreshold" Selector="$Config/WarningThreshold$" ParameterType="int" />
          < OverrideableParameter ID="ErrorThreshold" Selector="$Config/ErrorThreshold$" ParameterType="int" />
        </OverrideableParameters>
        < MonitorImplementation>
          < MemberModules>
            < DataSource ID="DataSource" TypeID="test.Monitor.DataSource">
              < ConnectionString>$Config/ConnectionString$</ConnectionString>
              <Query>$Config/Query$</Query>
               <IntervalSeconds>$Config/IntervalSeconds$</IntervalSeconds>
              < SyncTime>$Config/SyncTime$</SyncTime>
            </DataSource>
            < ProbeAction ID="Probe" TypeID="test.monitor.OleDb.ProbeAction">
              < ConnectionString>$Config/ConnectionString$</ConnectionString>
              <Query>$Config/Query$</Query>
            </ProbeAction>
            < ConditionDetection ID="FilterUnderWarning" TypeID="System!System.ExpressionFilter">
               <Expression>
                < SimpleExpression>
                  < ValueExpression>
                    < XPathQuery Type="Integer">Columns[1]/Column[1]</XPathQuery>
                  </ValueExpression>
                   <Operator>Less</Operator>
                  < ValueExpression>
                    <Value Type="Integer">$Config/WarningThreshold$</Value>
                  </ValueExpression>
                </SimpleExpression>
              </Expression>
            </ConditionDetection>
            < ConditionDetection ID="FilterOverWarning" TypeID="System!System.ExpressionFilter">
              <Expression>
                 <And>
                  <Expression>
                    < SimpleExpression>
                      < ValueExpression>
                        <XPathQuery Type="Integer">Columns[1]/Column[1]</XPathQuery>
                       </ValueExpression>
                      <Operator>GreaterEqual</Operator>
                      < ValueExpression>
                         <Value Type="Integer">$Config/WarningThreshold$</Value>
                      </ValueExpression>
                    </SimpleExpression>
                  </Expression>
                  <Expression>
                    < SimpleExpression>
                      < ValueExpression>
                        < XPathQuery Type="Integer">Columns[1]/Column[1]</XPathQuery>
                      </ValueExpression>
                      <Operator>Less</Operator>
                      <ValueExpression>
                        <Value Type="Integer">$Config/ErrorThreshold$</Value>
                      </ValueExpression>
                    </SimpleExpression>
                  </Expression>
                </And>
              </Expression>
            </ConditionDetection>
            < ConditionDetection ID="FilterOverError" TypeID="System!System.ExpressionFilter">
              <Expression>
                 <SimpleExpression>
                  < ValueExpression>
                     <XPathQuery Type="Integer">Columns[1]/Column[1]</XPathQuery>
                  </ValueExpression>
                  <Operator>GreaterEqual</Operator>
                  < ValueExpression>
                     <Value Type="Integer">$Config/ErrorThreshold$</Value>
                   </ValueExpression>
                </SimpleExpression>
              </Expression>
            </ConditionDetection>
          </MemberModules>
          < RegularDetections>
            < RegularDetection MonitorTypeStateID="UnderWarning">
              <Node ID="FilterUnderWarning">
                <Node ID="DataSource" />
              </Node>
            </RegularDetection>
            < RegularDetection MonitorTypeStateID="OverWarning">
              <Node ID="FilterOverWarning">
                <Node ID="DataSource" />
              </Node>
             </RegularDetection>
            < RegularDetection MonitorTypeStateID="OverError">
              <Node ID="FilterOverError">
                 <Node ID="DataSource" />
              </Node>
            </RegularDetection>
          </RegularDetections>
        </MonitorImplementation>
      </UnitMonitorType>
    < /MonitorTypes>

    Finally we will create a rule and monitor as the final step, I used a simple query to get a value from the OperationsManager DB, nothing complicated, use your own query for testing your management pack:

    <Rules>
      <Rule ID="test.Monitor.Performance.Rule" Enabled="true" Target="test.Monitor.Class" ConfirmDelivery="true" Remotable="true" Priority="Normal" DiscardLevel="100">
        <Category>PerformanceCollection</Category>
        <DataSources>
          < DataSource ID="DataSource" RunAs="test.Monitor.DBAccessAccount" TypeID="test.Monitor.DataSource">
             <ConnectionString>Provider=SQLOLEDB;Server=SQLSCOM;Database=OperationsManager;Integrated Security=SSPI</ConnectionString>
            <Query>SELECT TOP 1 [ConsoleTaskAccessibility] FROM [OperationsManager].[dbo].[ConsoleTask]</Query>
            < IntervalSeconds>60</IntervalSeconds>
          </DataSource>
        </DataSources>
        < ConditionDetection ID="MapToPerf" RunAs="test.Monitor.DBAccessAccount" TypeID="Performance!System.Performance.DataGenericMapper">
          < ObjectName>testdb</ObjectName>
          < CounterName>CountofErrors</CounterName>
          < InstanceName>testdb</InstanceName>
          <Value>$Data/Columns[1]/Column[1]$</Value>
        </ConditionDetection>
        < WriteActions>
          < WriteAction ID="WriteToDB" TypeID="SC!Microsoft.SystemCenter.CollectPerformanceData" />
          < WriteAction ID="WritToDW" TypeID="MicrosoftSystemCenterDataWarehouseLibrary!Microsoft.SystemCenter.DataWarehouse.PublishPerformanceData" />
        </WriteActions>
      </Rule>
    < /Rules>
    < Monitors>
      < UnitMonitor ID="test.Monitor.DBValue" Accessibility="Internal" Enabled="true" Target="test.Monitor.Class" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" RunAs="test.Monitor.DBAccessAccount" TypeID="test.Monitor.MonitorType.testdbValue" ConfirmDelivery="true">
        <Category>Custom</Category>
        < AlertSettings AlertMessage="test.Monitor.DBValue_AlertMessageResourceID">
          < AlertOnState>Warning</AlertOnState>
          < AutoResolve>true</AutoResolve>
          < AlertPriority>Normal</AlertPriority>
          < AlertSeverity>Error</AlertSeverity>
        </AlertSettings>
        < OperationalStates>
          < OperationalState ID="UIGeneratedOpStateId621f6fa1b92d4dc2bc9b2fc34d24af84" MonitorTypeStateID="UnderWarning" HealthState="Success" />
          < OperationalState ID="UIGeneratedOpStateId4b3e701018e04481bc82598d8c4a9446" MonitorTypeStateID="OverWarning" HealthState="Warning" />
          < OperationalState ID="UIGeneratedOpStateId005add145c944b9d9c29a4d4cbef8636" MonitorTypeStateID="OverError" HealthState="Error" />
        </OperationalStates>
        <Configuration>
          < IntervalSeconds>60</IntervalSeconds>
          <Query>SELECT TOP 1 [ConsoleTaskAccessibility] FROM [OperationsManager].[dbo].[ConsoleTask]</Query>
          < ConnectionString>Provider=SQLOLEDB;Server=SQLSCOM;Database=OperationsManager;Integrated Security=SSPI</ConnectionString>
          < WarningThreshold>2</WarningThreshold>
          < ErrorThreshold>3</ErrorThreshold>
          < ColumnsColumn>Valor</ColumnsColumn>
        </Configuration>
      </UnitMonitor>
    < /Monitors>

  • How to create a private cloud step by step with System Center Series

    I’m adding an index post so it’s easier for you to browse through this series of posts.

    How to create a private cloud step by step with System Center part 1: Lab Setup

    How to create a private cloud step by step with System Center part 2: VMM Setup

    How to create a private cloud step by step with System Center part 3: Preparing for WDS with VMM

    How to create a private cloud step by step with System Center part 4: Installing WDS for SCVMM

    How to create a private cloud step by step with System Center part 5: Setting up Networking

    How to create a private cloud step by step with System Center part 6: Bare Metal Deployment

    How to create a private cloud step by step with System Center part 7: Adding our hosts

    How to create a private cloud step by step with System Center part 8: Create a cluster from the console.

  • How to create a private cloud step by step with System Center part 3: Preparing for WDS with VMM

    So in the middle of making this third post I realized that my home router wasn’t able to handle and forward my PXE requests, and that’s a big problem because I’m planning in showing how to deploy our cluster entirely from SCVMM Console and I’m not planning to settle for less than that.

    So I needed to adjust my strategy a little bit, the changes I made are as follows:

    • I added a second switch so now my networking looks like this:

    image

    I have all configured with static IPs for the moment:

    • Storage Management Interface 10.1.1.2.
    • DC1 Nic1: 10.1.1.1.
    • DC1 Nic2: DHCP from my router.
    • SCVMM Nic1: 10.1.1.3.

    The plan now is to configure routing in my DC01 machine so I can share the internet connection with my other machines:

    • First go to your DC01 server and login as domain administrator:
    • Go to add roles and features in the server manager.
    • In roles select remote access.
    • In role services select routing and accept the other features required.
    • Proceed with the install.
    • Open the routing and remote access from tools in the server manager.
    • Right click in the name of your server and select Configure and Enable Routing and Remote Access.
    • Select NAT and configure your internet access interface.

    Now you should have internet access in all your servers that are pointing to this DNS.

    Now we need to set up the DHCP in DC01:

    • Go to add roles and features in the server manager.
    • Select DHCP Server and accept the features needed and proceed with install.
    • Click in the notification flag with the warning sign and select complete DHCP configuration.
    • Click next through the authorization and commit.
    • From tools in the server manager select DHCP.
    • Double click your server name in the left navigation tree.
    • Double click in IPv4.
    • Right click in IPv4 and select New Scope.
    • In the name put something descriptive like Internal LAN.
    • Put in your IP configuration for DHCP according to your preferences it should be the same segment as DC01 internal Nic, for example in my case 10.10.1.0 segment.
    • In the DHCP Options leave the Yes by default.
    • in the Gateway options put in your DC01 IP.
    • Your DNS will be your DC01 server too.
    • Leave WINS blank.
    • And at last activate the SCOPE.

    In the next post we will start working with VMM.

  • How to create a private cloud step by step with System Center part 7: Adding our hosts

    Hi all, thanks for being so supportive with this series, I’m really glad I can help and your support is keeping me going at a fast pace to deliver to you this series of posts.

    Now let’s get to the fun technical part, we will be adding 3 hosts, two of them doesn’t even have Hyper-V installed, so we will do this from the SCVMM Console and add our storage to SCVMM

    Prework:

    • Install Windows Server 2012 R2 Datacenter in my 2 nodes.
    • Add them to your domain.
    • Connect them to my private lab network, as shown in my 3rd post of the series.
    • Enable MPIO.
    • Start the iSCSI initiator, just by hitting the windows key and searching for iSCSI and open it.
    • You will need to install the storage provider in your storage server with this roles and features:

    image

    • And install MPIO.

    Adding the servers:

    • Go to the console and the Fabric Tab.
    • Right Click in the All Hosts Folder under Servers.
    • Select Create a Host Group and name it Standalone.
    • Repeat the process to create a Clusters group.
    • Right click in your Standalone group and Add Hyper-V Hosts and Clusters.
    • Select Windows Server computers in a trusted Active Directory domain and click Next.
    • Create and select your VMMaction Run As Account from browse and click next.
    • Remember to add as local admin your VMMaction account, this will be the one we use to manage the servers.
    • Fill in your Storage computer name and click Next.
    • Check the box to select your server and click Next.
    • In the Host Setting select your Standalone host group and click Next.
    • Finish and check the Jobs for success.
    • Repeat this steps for node1 and node2 computers.

    Creating the Storage Pools. I decided to go with 2 Storage Pools 1 for SSD and another for HDD, so let’s create them in the Storage server.

    • Go to your Storage server and open server manager.
    • Select File and Storage Services from the left pane.
    • Select Storage Pools.
    • In the right upper corner click tasks and New Storage Pool.
    • Click Next.
    • Name it, mine are Fast for SSD, and Slow for HDD, click Next.
    • Select the disks you want to add to the pool and click Next.
    • Create.
    • Repeat for all the pools you need.
    • Now go back to Storage Pool and from the tasks of virtual disks, select New Virtual Disk.
    • Click Next.
    • Select your storage pool and click Next.
    • Give it a descriptive name, click Next.
    • Select the type of layout by checking the description, I’m using simple for my lab, click Next.
    • Select Fixed and click Next.
    • Select the max size or the amount you want to assign, click Next.
    • Clock Create.
    • Go through the new volume wizard with all the defaults just changing the volume name.

    We have all our storage configuration in place.

    Now let’s add the storage to SCVMM:

    • Go to your SCVMM Server and open the Console.
    • Select the fabric tab, right click in File Servers under Storage and Add Storage Devices.
    • Select Windows-based file server, click Next.
    • Fill in your storage server name and select your VMMaction account from browse, and click Next.
    • Wait for the discovery and click Next.
    • select your Storage Device and click Next.
    • Finish.
    • Now right click providers and Add Storage Devices.
    • Select SAN and NAS devices discovered and managed by a SMI-S provider, click Next.
    • Select SMI-S WMI, fill in your storage server name and select your VMMaction account.
    • Wait for the discovery and select the device, click next.
    • Select the units for the virtual disks you created.
    • Create a classification like Gold and another like Silver, to differentiate our fast ssd pool from the HDD one.
    • Finish.

    image

    In the next post we will build the cluster from the console too, that’s really cool right?

  • How to create a private cloud step by step with System Center part 5: Setting up Networking

    Go to the Settings tab, to have more options for our networking a quick tip is to avoid the automatic creation of logical networks when you add a host:

    • Go to your SCVMM server and open the console.
    • Under Generaldouble click Network Settings and uncheck the Create logical networks automatically option., click ok.

    Now let’s create a logical Network:

    • In the SCVMM Console go to the Fabric tab.
    • Under Networking, right click in Logical Networks and select Create Logical Network.
    • Define a descriptive name, such as Lab or Prod.
    • Here is where the magic happens, and I am not going to get really deep into this because it’s a topic I prefer to show in a dedicated post.
    • For an easy startup just select the check for Create a VM network with the same name to allow virtual machines to access this logical network directly, and click next.
    • Click add and select your All Hosts Group.
    • I will create 1 subnets and VLAN 0 because I’m not using VLANS right now, click next.

    image

    • And finish.

    Now our Port Profile:

    • Right click in Port Profiles and Create Hyper-V Port profile.
    • Put a descriptive name such as Uplink for Lab.
    • Select Uplink port profile and click next.

    image

    • Select your Logical network and click next.
    • Finish.

    And to finish create a logical switch:

    • Right click on in Logical Switches and Create Logical Switch.
    • Next.
    • Descriptive name like Lab Logical Switch, click next.
    • Defaults and Next.
    • Select No Uplink Team, because we will not be teaming in this example.
    • Click add and select your Uplink previously created, click next.
    • Click Next.
    • And Finish.

    Next post

  • How to create a private cloud step by step with System Center part 9: WSUS Integration with SCVMM

    I’ve been quiet for some days now, there is a lot going on with some interesting projects, and I’m getting back to deliver the last parts of the series during the next two weeks, after that I will be working in a cloud monitoring series with some nice features I’ve been delivered the last two weeks with some customers.

    I got some feedback from a couple of you regarding how you want the next articles to be shaped, so I’m going to do them a little more graphical, if you have any suggestions please comment.

    The firs step is going to be use our SCVMM server as a WSUS too, so let’s login with our SCadmin account and start the installation:

    In the server manager go to “Add roles and features”:

    image

    Navigate trough the wizard to the server role page and select Windows Server Update Services:

    image

    Add the required features:

    image

    Continue with all the defaults until you reach the WSUS “Content” page, select a folder in your server to store updates:

    image

    Accept the defaults and confirm the install:

    image

    Wait a few minutes for the installation process and click close.

    Now go to the WSUS console in the server manager:

    image

    Launch the post installation tasks from the upper flag in the server manager:

    image

    Right clock in your server name and select “Windows Server Update Services”:

    image

    You will get a wizard:

    image

    Navigate with the defaults trough the wizard until you are in the “Specify proxy Server”,  you will need to connect to the upstream server to continue, click “Start Connecting”:

    image

    Wait for completion and click Next:

    image

    Leave the English default and click Next:

    image

    • Unselect office products.
    • Select System Center 2012 R2 – Virtual Machine Manager
    • Unselect Windows and just select Windows Server 2012 R2.
    • Click Next.

    image

    Select the classifications:

    image

    Select Synchronize Manually:

    image

    Select begin initial synchronization and finish:

    image

    Now go to SCVMM Console –> Fabric.

    Right click in update servers and Add Update Server:

    image 

    Use the following settings and add:

    image

    Note: If you have a remote WSUS you will need to install the WSUS console in the SCVMM servers.

    image

    In the next post I will show you how the compliance baselines for updates

  • How to create a private cloud step by step with System Center part 8: Create a cluster from the console.

    In this post we will provision the storage for our cluster, a disk from our SMI-S provider for the Quorum and create the Cluster.

    Assign the storage for cluster:

    • In the Fabric tab –> Servers –>All hosts –> Standalone, you should see your 3 machines.
    • Right click in each of your future cluster nodes and select Move to host Group.
    • Select the Clusters group you created previously and Ok.
    • Now you should have something like this:

    image

    • Right click the Clusters group folder and select properties.
    • In the right navigation list, click Storage.
    • Click the Allocate Storage Pools button.
    • Select your pools and add them.
    • Click Ok.
    • Click the Allocate Logical units button.
    • Click Ok.
    • Right click in your Node1 host and select properties.
    • Click storage from the left navigation list.
    • Click add and disk.
    • Click Create Logical Unit.
    • Name it Quorum and put it in your slow storage pool.
    • In the volume label type Quorum.
    • Select do not assign a drive letter or drive path.
    • Click Ok.

    Now to the cluster creation:

    • From the upper ribbon click Create–> Hyper-V Hyper-V Cluster, Click Next.
    • Fill in a descriptive name and select your VMMaction account from browse, click Next.
    • From the upper drop down list, select your Clusters group.
    • Add your Node1 host and click Next.
    • Select your Quorum and click next.
    • Click Next.
    • Create.
    • Wait for the cluster creation.
    • Back in the fabric right click in your new cluster and select, add cluster node.
    • Add Node 2 to the cluster and click Add.
    • Select your VMMaction credentials and click Ok.
    • Wait for the completion.

    If you get an error 25325 when creating the cluster, disable all Network Interfaces that have connectivity to the Storage server except one, so you only have one communication route.

    We provisioned storage and entirely created a cluster from the SCVMM Console, stay tuned for the next post.

  • Disaster Recovery Plan (DRP) without a secondary site using Microsoft Azure

    Today the System Center Team Blog publish an exciting post http://blogs.technet.com/b/systemcenter/archive/2014/07/01/microsoft-azure-site-recovery-your-dr-site-in-microsoft-azure.aspx 

    Let’s think a little bit the huge impact of this new functionality in Azure.

    DRP has been historically exclusive to large enterprises with enough capital to maintain two sites in different locations to failover into the other when there’s a problem with the primary site.

    Maintaining two sites is costly, even having servers or rented infrastructure in a service provider datacenter comes with a high price for an infrastructure we probably never use, and we need to maintain and renew for every hardware cycle we determine, because we don’t know when we will need it, so there must be warrantees in place and everything must be in compliance with our companies infrastructure policies.

    Today that model suffer a major knockout as the usual way to have a DRP, because with Azure we now can have a site in the cloud for all our critical vm replicas, I’m not going to go deep on this matter because the Team Blog post makes a great job explaining the functionality and general requirements.

    What this could mean to you?, you probably are looking for a cost effective DRP solution, well you got it, it doesn’t get better than this at this moment, you really pay for what you’re using, no more maintenance or technology refresh for a second site.

    Read through the product group article and leave a comment I would love to read some opinions about it.