Monday, June 27, 2011

Technical Deep Dive: XenApp Load Evaluators

By: Andy Paul

One of the often overlooked features of XenApp is truly understanding the load evaluators. As a consultant, I commonly see environments using only the Default Load Evaluator. If I am lucky, they might be using the Advanced Load Evaluator. Rarely do I find organizations actively monitoring or customizing their load evaluators.

Load Evaluators have not changed much since Presentation Server days, but amazingly they are not commonly optimized. Every environment and every workload is different, so whichever load evaluator is implemented may vary, but they should be customized and monitored.

Here is a screen shot of the XenApp 6 Advanced Load Evaluator, which is now the default assignment. It creates a load based on CPU Utilization, Load Throttling, Memory Usage and Page Swaps. The Default Load Evaluator (assigned by default in XenApp 5 and prior versions) measures Server User Load.

I generally recommend creating a custom load evaluator based on resources, usually CPU Utilization, Load Throttling, Memory Usage and possibly Server User Load. This way, I can spread the load across servers based on number of users, resource loads and help prevent login storms.

Understanding Loads
But assigning a Load Evaluator is only part of the battle. You must also understand what and how that load is calculated. A simple QFARM /LOAD will show you server loads (or QFARM /LTLOAD to see the server resource load without calculating Load Throttling.) However, if you are using a load evaluator with multiple components, what is causing the load? The base algorithm for establishing actual load is Highest_Load + (Average_Other_Loads * .1).

Assuming you have a load evaluator monitoring CPU Utilization, Memory Usage and Load Throttling, and you see a server with a 7800 load value, it may be dangerously close to 10000 (Full Load) since that 7800 is not the aggregate of all loads, but reflective of the highest load, which could be close to reporting full. In this case, perhaps that server is running at 78% Memory Usage, with a cap set to 80% in the load evaluator… one more process may send it over the edge.

Detailed Load Monitoring
So what can you do about it? Knowing your environment is key, as is monitoring actual loads and adjusting evaluators or adding capacity as necessary. To this end, you can run real-time analysis of the various components of a load evaluator using the QUERYDS tool from Citrix. Additional information is available under CTX112082. These were originally published for Presentation Server 4.0, but are still valid for all editions, including XenApp 6. Please note, the output from QUERYDS will be hex values, and will need to be converted. Most applications include a Hex-Decimal conversion function, or you can use a free online converter such as http://easycalculation.com/hex-converter.php

The following table identifies the code values of the different load evaluator properties:
a -- Application User Load
2 -- Context Switches
1 -- CPU Utilization
7 -- Disk Data l/O
8 -- Disk Operations
9 -- IP Range
d -- Load Throttling
3 -- Memory Usage
4 -- Page Faults
6 -- Page Swaps
5 -- Scheduling
b -- Server User Load

Using this information, take the sample below; consisting of three servers:

Server TEST02 has a load of 1610 (HEX 64a). This load is comprised of:
  • Server User Load: 2 (b:2)
  • Load Throttling: 0 (d:0)
  • Memory Usage: 16 (3:10)
  • CPU Utilization: 0 (1:0)
These are percentages of 100, so a Memory Usage load of 16 is a load value of 1600. Load Throttling is not calculated since there is no current logon event. That leaves the average of Server User Load and CPU Utilization (200+0)/2*.1 = 10. This makes the total load value of 1610.

Conclusion
Now that you have a way to view the load components (QUERYDS) and an understanding on how to interpret the results, these values can be read and automated into a monitoring solution - either real-time or historical. Once a baseline is established, alerts can be generated as values approach full loads. Based on this information, you can then decide if you should modify your evaluators or add capacity.


Additional Reading:

Read more!

Monday, March 7, 2011

XenDesktop 5 Deep Dive: Machine Creation Services on vSphere 4.1

By: Andy Paul

When XenDesktop Desktop Studio is configured, a hosting infrastructure and storage system is defined. This hosting infrastructure can be Citrix XenSerspver, VMWare ESX/vSphere, or Microsoft Hyper-V. Storage for use by XenDesktop is also defined, which can be local storage or shared storage. In a production vSphere environment, shared storage defined as VMWare Datastores is preferred.

When using Machine Creation Services (MCS) in XenDesktop 5 Desktop Studio, a Master Image is identified when a Catalog is created. MCS Catalogs can be designed for Dedicated or Pooled virtual desktops. Pooled Assignments can be set for static assignment or random access.

Dedicated Catalog virtual desktops retain all changes, including software installations and local data, in a local difference disk. Pooled Catalog virtual desktops do not retain changes, the difference disk is reset upon reboot, leaving only a copy of the master image. However, when using pooled desktops, the base image can be updated allowing changes from the master disk to be replicated to the deployed VMs, providing for centralized patch and application management. Each deployed image, whether pooled or dedicated, will also contain an identity disk; all deployments utilize thin provisioning.

The following chart highlights the benefits of each type of XenDesktop Catalog:

Graphic taken from CTX127587: XenDesktop 5 - Reference Architecture

During this test implementation, two Dedicated Catalogs are used to pilot XenDesktop 5. One catalog will be based on Windows XP, the other catalog will be based on Windows 7. These catalogs and the dedicated machines will be assigned to Desktop Groups for different business units.

Master Image Utilization
Once a master image is identified as part of the Catalog creation, a private-use clone of the VMDK is created for use by the catalog machines. This cloned disk is separate from the Master Image VM, allowing that VM to be updated or deleted with no impact on the MCS deployed virtual desktops.

This master image clone is copied to each Datastore defined during XenDesktop site setup. This site definition can be modified to include additional storage as it becomes available. If five datastores are defined the clone will be created on the first Datastore and then copied to the remaining four.

Each catalog is linked to its own master image clone. If multiple catalogs are defined, then multiple master clones will be generated. Any additional machines created within a catalog will use the defined master image. A master image can be changed to a different disk using the following command in PowerShell: Publish-ProvMasterVmImage (click here for an example of using this command if necessary.) This change would only impact new machines created in the catalog, not existing machines already generated.

Impact on Storage
Since MCS uses thin-provisioning, using Pooled or Dedicated desktops should require less storage than existing VM creations. On vSphere, the MCS service creates a snapshot for each VM called “Do Not Delete – Critical.” This snapshot is a reversion point back to initial deployment. For Dedicated desktops, additional snapshots can be created using vCenter’s Snapshot Manager functionality.

The master image, stored on each Datastore, becomes a private-use read-only VMDK for each MCS created VM. Depending on the NAS/SAN functionality, this image may be deduplicated or moved to high-utilization storage due to the increased read ratios.

For Pooled machines, the snapshot growth will be limited since it is reset at each reboot. Dedicated machine snapshots will grow over time as changes to the virtual desktop occur. It is recommended to incorporate profile management and data redirection where possible in either scenario to increase user flexibility and reduce data changes inside the images.

Determining Storage Requirements
Since MCS uses thin-provisioning, only the amount of space required is actually used, allowing for a potential of over-allocation of storage. When analyzing storage utilization, the key item to examine is the snapshot space utilized by each VM. Since the master image is shared, this is a “fixed” cost, where snapshot growth will be dynamic.

Please note, a snapshot can grow as large as the base disk, so if the master image is 40 GB in size, the associated snapshot for a dedicated machine can grow up to 40 GB in size; effectively doubling storage requirements if left unmanaged.

To see snapshot space utilized in vCenter, select the Datastore in question, select the Storage Views tab. This view will show the space used for each virtual machine as well as snapshot space used. For MCS created machines, the space used is misleading, since it is also counting the base image size. In the example below, the master image is 40 GB in size. For VXPXDTest002 (highlighted), the Space Used is 46.11 GB, but the actual space used is really 6.11 GB since 40 GB is for the shared master image. Of the 6.11 GB used, 4.09 GB is snapshot space.
To see more exact detail, you can browse the Datastore, examining the folder for VXPXDTest002, as shown below. Notice the total space used which is the active snapshot plus the memory swap file. The base image is stored in its own folder:

Sizing Wizard
Along with this analysis, I have created an Excel worksheet called
MCS Sizing Wizard. This worksheet will help determine the size required for MCS deployed dedicated machines. The basic formulas are:
    Determine size requirements for master image:
    ..... [VMDK Size] * [# of Datastores]
    Determine size requirements for deployed virtual machines:
    ..... Create estimates for low, medium, and high usage snapshots
    ..... Per machine: [identity disk] + [RAM swap file] + [estimated size of snapshot]
    ..... Total VM sizing: [# of VMs] * [Per Machine Estimates]
    Determine total storage requirements
    ..... Most likely storage: [Expected VM storage] + [Master image storage]
Using the worksheet, creating 120 Windows 7 dedicated machines, spread across 5 datastores, with a 40 GB master VMDK, 4 GB RAM and an average snapshot size of 15 GB would use 2.4 TB of storage out of a maximum provision of 5.4 TB of storage. If using standard (existing) VMs, the same number of machines would use approximately 5.1 TB of space, for a net savings of 2.8 TB of utilized SAN storage. Using the worksheet, creating 120 Windows 7 dedicated machines, spread across 5 datastores, with a 40 GB master VMDK, 4 GB RAM and an average snapshot size of 15 GB would use 2.4 TB of storage out of a maximum provision of 5.4 TB of storage. If using standard (existing) VMs, the same number of machines would use approximately 5.1 TB of space, for a net savings of 2.8 TB of utilized SAN storage.

About this Article
The purpose of this article is to summarize the underlying architecture and impact of using Machine Creation Services in a pilot environment. This article is not intended to replace the XenDesktop Admin Guide or the XenDesktop PoC Implementation Guide.

The scope of this article is to help understand and manage the virtual machines created by MCS as well as understanding the storage requirements when using MCS. The actual amount of storage will grow over time as the snapshots grow and should be managed appropriately. Any sizing numbers are for illustrative purposes only and are no way intended as definitive calculations.

To help with the additional planning, design and optimization areas, it is recommended to utilize the XenDesktop Design Handbook Success Kit.

Additional References
XenDesktop 5 hosted-virtual desktop architecture series
XenDesktop 5 scalability: Site Capacity
PVS or MCS: We Are Talking About IOPS Again
PVS or MCS: Operations Is Important
Provisioning Services or Machine Creation Services: Big Picture Matters
XenDesktop 5 Virtual Machine Creation Services on vSphere 4.1

Read more!

Friday, October 8, 2010

Bulk Create Exchange 2010 Databases

By:Rik Hoffelder


Here's a handy script I wrote to bulk create mailbox databases to follow a strict naming convention and consistent configuration. It was designed to work with Exchange 2010, however it works just as well with 2007. The intent is to help organizations maintain consistency using a simple process that can be performed by less skilled administrators.


Script itself uses several command line parameters to create the variables needed for the scripts. The following provides the script usage:


.\createdbs.ps1 2010Server NumberOfDatabases DatabaseStartNumber DatabaseDrive LogDrive WarningQuota SendQuota SendReceiveQuota DeletedItemRetention MailboxRetention Oab PfDb

The following is an example of proper usage:

.\CreateDbs.PS1 EX2010 4 1 E D 450MB 500MB Unlimited 30 14 "\Default Offline Address List" "Public Folder Database 1"

In the above example 4 databases are created on server EX2010 with the following names:

EX2010-DB01-0500
EX2010-DB02-0500
EX2010-DB03-0500
EX2010-DB04-0500

The database are created on drive E, with the log files on drive D. The mailbox store is set to issue size limit warnings at 450MB, prohibit send at 500MB, and prohibit send/receive is set to unlimited. Next deleted items are retained for 30 days, while deleted mailboxes are retained for 14. Finally the Offline Address book is set along with the public folder database used by each mailbox store.

So let's suppose we need to create 3 more databases, but this time on drive G, with the logs on drive H. Let's also set the mailbox size limit to 1GB. You would run the following:

.\CreateDbs.PS1 EX2010 3 5 G H 900MB 1GB 2GB 10 7 "\North America OAB" "Public Folder Database 2"

This would have created databases EX2010-DB05-1000, EX2010-DB06-1000, and EX2010-DB07-1000 with 10 day deleted item retention, 7 day delete mailbox retention, a warning limit of 900MB, prohibit send at 1GB and prohibit send/receive at 2 GB. The OAB would be set to North America OAB and use Public Folder Database 2.

Notice how the DBxx value began with DB05 and the last four digits are now 1000.
The DbStartNum parameter determine the beginning of the numbering scheme in the DBxx portion. The -XXXX at the end uses the ProhibitSend value to represent the mailbox send size limit, making it easy for administrators to identify where to place mailboxes by the database name. A size limit of 125MB would produce a name SERVER-DBXX-0125 and so forth.

It's simple and flexible. To run it simply copy it to a PS1 file then lanuch it from Exchange Management Shell.

CreateDatabases.PS1

### BEGIN SCRIPT ###
Param(
[string] $2010Server = "",
[decimal] $NumDatabases = "",
[decimal] $DbStartNum = "",
[string] $DbDrive = "",
[string] $LogDrive = "",
[string] $WarnQuota = "",
[string] $SendQuota = "",
[string] $SendReceiveQuota = "",
[string] $DeletedItemRetention = "",
[string] $MailboxRetention = "",
[string] $OAB = "",
[string] $PfDb = ""
)

# This function validates the scripts parameters
function ValidateParams
{
$validInputs = $true
$errorString = ""
if ($2010Server -eq "")
{
$validInputs = $false
$errorString += "`nMissing parameter: The 2010Server parameter is required. Please enter the name of the Exchange 2010 server to configure. Example KCCEX2010"
}
if ($NumDatabases -eq "")
{
$validInputs = $false
$errorString += "`nMissing parameter: The NumDatabases parameter is required. Please enter the number of mailbox databases that will be created on this Exchange 2010 server. Example 8."
}
if ($DbStartNum -eq "")
{
$validInputs = $false
$errorString += "`nMissing parameter: The DbStartNum parameter is required. Please enter the starting database number. Example 5."
}
if ($DbDrive -eq "")
{
$validInputs = $false
$errorString += "`nMissing parameter: The DbDrive parameter is required. Please enter the drive letter on which you will create mailbox databases. Example: E"
}
if ($LogDrive -eq "")
{
$validInputs = $false
$errorString += "`nMissing parameter: The LogDrive parameter is required. Please enter the drive letter on which you will create transaction logs. Example: D"
}
if ($WarnQuota -eq "")
{
$validInputs = $false
$errorString += "`nMissing parameter: The WarnQuota parameter is required. Please enter the vaule to issue mailbox size limit warning. Example: 450MB or 1.5GB"
}
if ($SendQuota -eq "")
{
$validInputs = $false
$errorString += "`nMissing parameter: The SendQuota parameter is required. Please enter the vaule to issue mailbox size limit exceeded. Example: 500MB or 1GB"
}
if ($SendReceiveQuota -eq "")
{
$validInputs = $false
$errorString += "`nMissing parameter: The SendReceiveQuota parameter is required. Please enter the vaule at which the mailbox stops accepting mail. Example: Unlimited or 550MB"
}

if ($DeletedItemRetention -eq "")
{
$validInputs = $false
$errorString += "`nMissing parameter: The DeletedItemRetention parameter is required. Please enter the vaule in days. Example: 14"
}
if ($MailboxRetention -eq "")
{
$validInputs = $false
$errorString += "`nMissing parameter: The MailboxRetention parameter is required. Please enter the vaule in days. Example: 30"
}
if ($OAB -eq "")
{
$validInputs = $false
$errorString += "`nMissing parameter: The OAB parameter is required. Please enter the name of the offline address list to be used by this mailbox database in quotes. Example: 'Corporate OAB' "
}
if ($PfDb -eq "")
{
$validInputs = $false
$errorString += "`nMissing parameter: The PfDb parameter is required. Please enter the name of the public folder database in quotes. Example: 'Pub Folders DB 1'"
}

if (!$validInputs)
{
Write-error "$errorString"
}
return $validInputs
}


### Validate the parameters ###
$ifValidParams = ValidateParams;

if (!$ifValidParams) { exit; }

### Define Script variables ###
$2010Server = $2010Server.ToUpper()
$b = $NumDatabases + $DbStartNum
$DeletedItemRetention = $DeletedItemRetention + ".00:00:00"
$MailboxRetention = $MailboxRetention + ".00:00:00"

$SendQuotaLen = $SendQuota.Length
$DBSize = $SendQuotaLen - 2
[decimal] $DBSizeNum = $SendQuota.substring(0,$DBSize)

If ($DbSizeNum -le 9) {$DbExName = [string] $DbSizeNum + "000"}
ElseIf ($DbSizeNum -ge 10 -and $DbSizeNum -le 99) {$DbExName = "00" + $DbSizeNum}
ElseIf ($DbSizeNum -ge 100) {$DbExName = "0" + $DbSizeNum}

If ($DbStartNum -gt 9) {$MdbName = $2010Server + "-DB" + $DbStartNum + "-" + $DbExName}
Else {$MdbName = $2010Server + "-DB0" + $DbStartNum + "-" + $DbExName}
$EdbFilePath = $DbDrive + ":\Exchange\Databases\" + $MdbName + "\" + $MdbName + ".EDB"
$LogFolderPath = $LogDrive + ":\Exchange\Logs\" + $MdbName
$MdbID = $2010Server + "\" + $MdbName

### Create Mailbox Databases Loop ###
Do {New-MailboxDatabase -Name $MdbName -Server $2010Server -EdbFilePath $EdbFilePath -LogFolderPath $LogFolderPath -OfflineAddressBook $OAB -PublicFolderDatabase $PfDb
;Mount-Database $MdbName
;Set-MailboxDatabase –Identity $MdbName –IssueWarningQuota $WarnQuota –ProhibitSendQuota $Sendquota –ProhibitSendReceiveQuota $SendReceiveQuota -DeletedItemRetention $DeletedItemRetention -MailboxRetention $MailboxRetention -RetainDeletedItemsUntilBackup $True
;$DbStartNum++
;If ($DbStartNum -gt 9) {$MdbName = $2010Server + "-DB" + $DbStartNum + "-" + $DbExName}
Else {$MdbName = $2010Server + "-DB0" + $DbStartNum + "-" + $DbExName}
;$EdbFilePath = $DbDrive + ":\Exchange\Databases\" + $MdbName + "\" + $MdbName + ".EDB"
;$LogFolderPath = $LogDrive + ":\Exchange\Logs\" + $MdbName
;$MdbID = $2010Server + "\" + $MdbName
}
Until ($DbStartNum -eq $b)
### END SCRIPT ###






More information on Exchange




Read more!

Monday, September 6, 2010

Pre-Logon Client Choices in Access Gateway Enterprise

By: Rick Rohne

This is an update to a previous article that I wrote about adding a pull-down menu with connection type choices on the logon page for Access Gateway Enterprise Edition. By default Access Gateway Enterprise Edition uses group extraction and EPA scans to determine what kind of connection a user can make. Access Gateway Enterprise also has a client choices screen after authentication that can provide end user selections. These policies may not always offer the best solution for your organization. Therefore configuring a pre-logon client choice may be the best option.

Background

The following are some reasons why you would give users a selection box before authentication:
1. Give users a choice to access their appliacations, desktops, or VPN sessions
2. Allow users to access Sharepoint, OWA, and other clientless web applications using the same url.
3. Allows users to have more control, reducing support calls.
4. Get more out of Access Gateway Enterprise.
I created this video to give you an idea on how this can be used:




Procedure


NOTE: The index.html file mentioned on this article is found under /netscaler/ns_gui/vpn

First create a cookie on the user's workstation

This procedure creates a cookie on the user's workstation which will be evaluated by the session policy. The name of the cookie is NSCookie

1. Download index.html to your workstation.
2. Open the file for editing with your preferred document editor software.
3. Locate the following section:

4. Add the following on the next available line


5. The next line should read:

6. Add storeValues(this);" so that it reads:


Next create the actual pull-down menu


1. On the same index.html page locate the line that reads:

 
2. Add the following code.



(Note: you can add as many OPTIONS as you wish. The Value’s m(x) will be used to match up against a session policy)


3. Save the changes and copy the file to the /netscaler/ns_gui/vpn directory
Note: make sure to backup the original file.


Create a procedure to allow the custom page to survive a reboot


1. Connect to the appliance using an SSH client such as PuTTY.
2. Type shell.
3. Make a directory on the hard drive to hold the custom file.
mkdir /var/customizations
4. Copy the modified page to the new directory.

cp /netscaler/ns_gui/vpn/index.html /var/customizations/


5. Create a startup script file called rc.netscaler under /nsconfig (if one is not already present).
cd /nsconfig
touch rc.netscaler

6. Copy the copy command into rc.netscaler.
echo cp /var/customizations/index.html /netscaler/ns_gui/vpn/index.html >> /nsconfig/rc.netscaler
Next you must modify the session policies to be based on the presence of the cookie instead of the default "true value".

The expression syntax would look similar to that shown in the screen shot below:

add vpn sessionPolicy xMyDT-pol "REQ.HTTP.HEADER Cookie CONTAINS MyDT" XD_ONLY


More Information



The user will then be given a drop down menu on the default logon page. The cookie will be placed on their workstation and evaluated by the session policies. MyDT is the default which should always match the users Default connection while others will match other session policies.



More information on Access Gateway Enterprise

Read more!

Sunday, July 25, 2010

IPad works as a Systems Administrator Tool

By: David Merrell
Last couple weeks I have been traveling back and forth to a client. During my trips I sat in the airport for several hours being bored and really did not want to break out the big 17 inch, 5 Pound laptop to get ahead of some work for a project I was working on. So I was needing something to help to accomplish this while waiting for my plane. The project I was working on was a XenDesktop, XenApp POC for a university in north Texas. My boss has an IPAD and was showing off the Citrix Receiver and Citrix Dazzle a few weeks earlier. I started thinking it would be nice to have a light weight easy to use tool to help me instead of the laptop. Next trip to Texas I picked up a 64 Gb IPAD. The sales guy was asking what I was going to use it for, I told him business mainly and of course he tried to sell me the 3G version. I figured I have an awesome HTC Touch Pro 2, Windows Mobile phone which acts as a wireless access point, so didn't need the 3G charge. Here is the scenario that I used the IPad as an administrator tool: I was able to remote into all the infrastructure servers using for the environment finish configuration using Desktop Connect. I was able to use the Citrix Receiver to connect to a published Citrix XenCenter to administer the XenServers. The Citrix Receiver also allowed me to test the published XenApp applications and desktops; it also allowed me to test the XenDestops. The IPad and the listed apps below is a great set of tools to allow me to provide better support to our customers and be more efficient on the projects I work on.


Here is a list of the apps and descriptions, I installed and use just for the purposes:

APP

Review

Desktop Connect

Desktop Connect is a fast, full-featured desktop viewer, optimized specifically for the IPad. View and control Windows, Mac OSX and Linux computers as if you were sitting in front of them, or observe others as if you were watching over their shoulder.

Desktop Connect is one of the best remote applications I have installed. As a systems administrator the RDP connection was easy to configure and use. The speed of the app is very efficient.

LogMeIn Ignition

One click on your iPad lets you remotely access one or more computers anywhere, anytime.

LogMeIn is a client based app that allows access to systems that may not have the ability to RDP or restricted by firewalls, I mainly use this app for my home network. This app provides another layer of security, it also was easy to setup and configure.

Citrix Receiver

Citrix Receiver for IPad is the perfect business solution for secure access to virtual desktops, applications and data.

As a Systems Engineer that works with XenDesktop, XenApp and XenServer setting up an administration group of apps and XenDesktop to support an environment the Citrix Receiver makes it easier to connect to tools such as the Citrix admin consoles.

Vtrace

Vtrace is a visual traceroute application that shows a list of the networks serves from your machine to a target ip address or hostname on a google map.

This application is a great visual traceroute program, it works well as a network troubleshooting app.

DNS Lookup Tool

DNS lookup tool to find A records, MX records, Name Servers and reverse DNS records for IP addresses and domains.

The description pretty much says it all. At the time of writing this article, this is only an IPhone up but works well with the IPad.

FreePing

FreePing is an ICMP Ping Application. It is designed to have a simple and intuitive user experience.

Again pretty much works as the description says, it also is only for the IPhone at the time of the writing.

Mocha Telnet Lite

Mocha Telnet provides access to servers via Telnet

This is a good tool to telnet to ports on servers to make sure all the necessary ports are accessible.

iXen

This App helps you administrate common tasks on virtual machines running on a Citrix XenServer.

The main functions of this app allow you to Boot, Shutdown, Suspend, Rest and Turn off virtual machines. This is a handy tool if you do not have access to the XenServer console.



Read more!

Monday, June 28, 2010

XenDesktop Deployments...Single or Multiple Hypervisor Infrastructure?

By:Jarian Gibson and Scott Lane


While working on a XenDesktop project in a huge VMware shop, I started thinking if a single hypervisor should be used or if multiple hypervisors should be used in XenDesktop deployments. Then I was on a conference call with Scott Lane, Senior Systems Engineer for Citrix in the Great Plains Area and also a co-author on this post, about the same XenDesktop project and we started discussing thoughts on this. A number of factors came to mind like cost of the hypervisor (VMware licenses for the XenDesktop project are adding a nice chunk of change to the cost of the deployment), hypervisor features, etc. In this blog post I am going to talk about things to consider about different hypervisors for XenDesktop deployments.

I often go into shops that already have large VMware infrastructures deployed and talk about XenDesktop. When I'm talking to the customer or potential customer about XenDesktop I always mention that with XenDesktop VDI, Enterprise, or Platinum Editions they will also get XenServer Enterprise Edition. This always gets mixed results. Most think I'm trying to push VMware out the door when I talk about XenServer. This is not the case at all. When I talk about XenServer I am focused on the XenDesktop environment and nothing else in their environment. I tell the customer that you may want to look at XenServer for the provisioned XenDesktop virtual Windows desktops and XenApp servers and then use their existing VMware infrastructure for the XenDesktop infrastructure components. Use XenServer that is included with XenDesktop for your XenDesktop Windows desktop and XenApp server infrastructure and continue to use your VMware infrastructure for everything else.

I also talk about the open architecture of XenDesktop and that they can choose between Citrix XenServer, Microsoft Hyper-V, and VMware vSphere hypervisors for the XenDesktop virtual desktops. I talk about Hyper-V as another option and the benefits of using Hyper-V for the hypervisor in XenDesktop deployments especially when the customer is talking about deploying Windows 7 and Windows 2008 virtual machines in their XenDesktop infrastructure. Some think that having multiple hypervisors is too much to manage or there is a big learning curve. Most customers I have worked with that are strong in virtualization find XenServer pretty easy to learn. With tools like System Center Virtual Machine Manager that can manage ESX/vSphere and Hyper-V from a single console make management of multiple hypervisors easy for multiple hypervisor deployments. When System Center Virtual Machine Manager supports management of XenServer, all three hypervisors will be managed from a single console.

XenDesktop deployments on Citrix XenServer considerations:
XenDesktop deployments on Microsoft Hyper-V R2 considerations:
  • System Center Virtual Machine Manager is needed to manage hosted virtual desktops

  • Server and Desktop administrators who already use System Center products will already be familiar with the look and feel of System Center Virtual Machine Manager console

  • System Center Essentials 2010 could be used for smaller XenDesktop deployments (for XenDesktop deployments under 500 seats when supported)

  • Management server (System Center Virtual Machine Manager or Essentials 2010) can be single point of failure for management of hosted virtual desktops

  • Microsoft Hyper-V Server 2008 R2 Edition is free with features like Live Migration, Host Clustering, etc but needs System Center Virtual Machine Manager or Essentials 2010 to manage hosted virtual desktops

  • System Center Virtual Machine Manager or Essentials 2010 console needs to be installed on XenDesktop Delivery Controllers and Provisioning Servers for management and for use with XenDesktop Setup Wizard

  • Windows 7 virtual desktops and XenApp servers running on Windows 2008 have integration components built-in to the operating system. No need for 3rd party virtual machine tools to install and maintain.

  • Hyper-V can direct boot VHD files to update Provisioning Services tools
  • Legacy NIC needed for network boot/Provisioning Services and Synthetic NIC for all other traffic

  • Network boot enabled in virtual machine settings

  • Windows 7 and Windows 2008 on Hyper-V are better together

  • Citrix and Microsoft relationship
  • System Center Virtual Machine Manager for mixed vSphere and Hyper-V deployments with XenServer support coming in the future for a possibly mixed environment of all 3 hypervisors

  • Having Hyper-V already in place makes you already prepared for RemoteFX and Dynamic Memory that are coming in service pack 1

XenDesktop deployments on VMware vSphere considerations:
So as you can see a number of factors come into play when choosing a hypervisor for your XenDesktop infrastructure. Some customers I have worked with have stayed with their current hypervisor and kept a single hypervisor infrastructure all on VMware vSphere. While other customers I have worked with have gone with multiple hypervisor infrastructures having the XenDesktop infrastructure components on VMware vSphere and the virtual desktops on Citrix XenServer. I have even had one customer put everything relating to Citrix on Citrix XenServer and kept the rest of their infrastructure on VMware vSphere. I will be doing an install next month in a pure XenServer environment (They have been running Xen since long before the Citrix acquisition). The demo lab at my office and what we use for workshops is a mix of Citrix XenServer for the virtual appliances and Microsoft Hyper-V R2 for everything else. Microsoft Hyper-V R2 is getting more consideration and interest lately and I expect to start doing more and more XenDesktop deployments on Hyper-V soon.

For XenDesktop deployments do you stick with a single or have multiple hypervisors? Every environment is different and everyone has their own take on this. With the way the economy has been customers are looking at other options instead of paying a premium for what they currently have. Especially since cost for and deployment of a XenDesktop infrastructure are a huge factors these days. Citrix XenServer and Microsoft Hyper-V R2 are getting more and more interest and gaining ground every day as the feature sets become more and more comparable with VMware vSphere. With XenDesktop having an open architecture you have options when it comes to the hypervisor. The hypervisor is becoming a commodity anyway, right?

If you have found this article interesting or if you have any other insights, please feel free to leave comments on this article.

Read more!

Thursday, June 3, 2010

Exchange 2007 Rollup Causes “Outlook Web Access was unable to initialize” errors

By:Rik Hoffelder
If you’re reading this chances are you have applied a rollup to Exchange 2007. In my case it was Rollup 4 for Exchange 2007 SP2. After applying the update OWA users began experiencing errors accessing the login page stating “Outlook Web Access was unable to initialize. Contact your administrator.”

When this occurred MSExchangeOWA wrote a FormsRegistry error with Event ID 4 into that application log. Specifically it stated the “More than one forms registry is named Premium” as shown below.



After researching the problem on the web and finding nothing I did a little investigating and found the problem to be a simple case of an installer not cleaning up after itself. In this case a directory named Copy of premium existed in the same sub-directory as the premium directory. This is typically located under C:\Program Files\Microsoft\Exchange Server\ClientAccess\Owa\forms.



To resolve the problem I simply deleted the Copy of premium directory then ran IISRESET /NOFORCE. This resolved the issue in my case. I can’t say it will work for everyone, but since there is very little information about this error anywhere, I thought I would share at least one solution.





More information on Exchange




Read more!

Friday, May 14, 2010

Replicate Public folders Between Exchange 2003 and 2010 Organizations Using the Interorg Replication Tool

By:Rik Hoffelder
I wrote in my article, Cross-Forest Migration with Exchange 2010 is a Piece of Cake! that it is possible to synchronize public folder and free/busy data between Exchange 2003 and Exchange 2010 Forests using the free Interorg Replication Tool. Since that time I have received a few questions on how I set that up and got it working. So by popular demand, here are the steps I used along with screenshots to help get you going.


First, a little background on the environment
In my lab, as was the case as the production enviroment, I had Exchange 2003 running in a single domain Windows 2003 forest, set at Windows 2003 Functional Level. Exchange 2010 is running in a single domain forest with Windows 2008 domain controllers, functional levels also set to 2003. A Cross-Forest Trust was established, SIDHistory filter security relaxed with the intent of migrating all domain resources to the new forest, including Exchange 2010. The Active Directory Migration Tool (ADMT 3.2) was used to migrate user accounts, groups etc as noted in Cross-Forest Migration with Exchange 2010 is a Piece of Cake! and mailbox GUIDs updated to prepare for the mailbox migration.

Setting Up Interorg Replication
To preform the steps outlined below I was running version 6.5.7408 of the Interorg Replication Tool from the Exchange 2003 Toolkit, Exchange 2003 SP2, and Exchange 2010 with Rollup 1, though it should work with Rollups 2 or 3.

1. Create a user account and mailbox to be used for the process in the Exchange 2003 organization. This account must be granted Owner rights on every public folder that you plan to replicate. For my purposes I used the EX2003\Administrator account, though not the most reocmmended for security reasons.

2. Create a user account and mailbox to be used for the process in the Exchange 2010 forest. This account must be granted Owner rights on every public folder that you plan to replicate. For my purposes I used the EX2010\Administrator account, though not the most reocmmended for security reasons. (NOTE: The public folder hierarchy must already exist in the Exchange 2010 forest, so you will need to pre-create the folders you will replicate from 2003.)

3. Create a top-level public folder named ExchsyncSecurityFolder in the Exchange 2003 organization. Assign the account created in step 1 Folder Visible rights only. Remove all other access rights for all other accounts.



4. Create a top-level public folder named ExchsyncSecurityFolder in the Exchange 2010 organization. Assign the account created in step 2 Folder Visible rights only. Remove all other access rights for all other accounts.



5. Install the Interorg Replication Tool replication service on the Exchange 2003 public folder server by running EXSSRV.EXE from the toolkit. Click the Create button which will install the service on the server. In my case I used the EX2003\Administrator account as the service account. I had problems when using local system. Administrator is also a local admin and Exchange Full Administrator



6. Open the Interorg Replication Configuration tool by running EXGCFG.EXE. Click File -> New to create a new Exchange Sync Configuration file (.esc). Click Session from the menu bar then click Add - Public Folder Replication.

7. In the Public Folder Session Configuration window enter PF 03 -> 10 in the title field to indicate 2003 public folders replicating to 2010. In the Publisher Organization section enter the Exchange 2003 public folder server and the mailbox name you created in step 1. In the Subscriber Organization section enter the name of the Exchange 2010 public folder server and the mailbox name you created in step 2.



8. Click the Advanced button under Publisher Organization then enter the credentials for the account you created in step 1. Click the Advanced button under Subscriber Organization then enter the credentials for the account you created in step 2.



9. Click the Folder List button. Click the Logon button under Publisher Public Folders and the Logon Button below Subscriber Public Folders. This will allow you to view the available folders in both organizations. Select a top-level folder under Publisher Public Folders and click the Add button. Repeat this for each top-level folder you plan to replicate.




10. Click Session from the menu bar then click Add - Schedule+ Free/Busy Replication. Repeat steps 7 through 9 to replicate free busy from 2003 to 2010.

11. Repeat steps 7 - 9 instead using Exchange 2010 as the Publisher and Exchange 2003 as the Subscriber to allow reverse replication. Do this for both public folders and free/busy. When the process is complete you will have at least 4 sessions in your configuration as shown below:



12. After completing this you can now monitor the process (I have mine running every five minutes in the lab, hourly in production) using the EXGSRV.EXE console.



For additional information on Interorg Replication Tool configuration and implementation I recommend checking out the full TechNet article here.



More information on Exchange



Read more!

Exchange 2010 – What to Know About Mailbox Import/Export

By:Rik Hoffelder
Exchange administrators are often asked to transfer e-mail data for various reasons and this usually involves PSTs. EXMERGE was always a great tool for this process; however Exchange 2007 introduced built-in functionality as a sort of replacement for EXMERGE. I say sort of because the Import-Mailbox and Export-Mailbox cmdlets don’t offer all of the same functionality as EXMERGE, specifically a GUI interface and multi-threaded mailbox export/import. That’s about the only downside to the cmdlets as they offer functionality not available to EXMERGE such as removing a message form mailbox and placing it another. Finding and removing messages from mailboxes, such as viruses (remember ISSCAN and ILOVEYOU?). It also works with mailbox recovery when using a recover storage group, not unlike EXMERGE, except I can recover a mailbox when the original user account was deleted, unlike the EXMERGE components of Exchange 2003 recovery.

Exchange 2010 Import-Mailbox and Export-Mailbox offer similar functionality as they did in Exchange 2007 with a few twists. The first big improvement is in security. In previous versions of Exchange an administrator required full mailbox access rights in order to import or export data using EXMERGE or Exchange 2007’s cmdlets. That is no longer the case with Exchange 2010. Among the new roles included with Role Based Access Control (RBAC) is the Mailbox Import Export role. This role is required for anyone who must perform this task, but it is not enabled by default for any user or group including members of Organization Management. As a result attempting to run the Import-Mailbox cmdlet will fail as an unrecognized command until the user is a member of the role group. An administrator can grant membership using the following cmdlet:

New-ManagementRoleAssignment –Role “Mailbox Import Export” –User “Administrator”

After joining the group, you must log off and back on in order to join, just like any other security group in the Windows world.

Next you must install the 64-bit version of Outlook 2010 or later on the mailbox server where you will perform the import. This must be the 64-bit version and it must be installed on the mailbox server role because Microsoft does not offer a 32-bit version of Exchange 2010 management tools. Also note that it is required on the mailbox server, so simply placing it on a 64-bit management workstation will not suffice; it MUST be on the Exchange 2010 server although you can use a 64-bit workstation to run the actual process.

A few items of note are that the Exchange 2010 version of Import-Mailbox and Export-Mailbox will not work against mailboxes hosted on Exchange 2003 or 2007 servers. You can use EXMERGE against both of those versions. And yes, EXMERGE still works against an Exchange 2007 server; you just have to set it up on a 32-bit workstation with Outlook and Exchange 2003 System Administration Console. On the flip side, Exchange 2007 Import/Export will not work against mailboxes hosted on 2010 or 2003 either.

Exchange 2010 RTM at least through Rollup 3 (most recent version at time of writing) has an annoying bug, in my opinion. If you have a typical installation of a multi-role server (Hub, CAS, & Mailbox), as many smaller organizations do, Import-Mailbox will fail with error -2147221219. The only workaround to this is to bring up a mailbox-only server to perform the imports. It will not work otherwise, it is not a security issue, it is a bug (maybe by design?). So for organizations needing this functionality on a regular basis should plan accordingly. I recommend building that as a virtual machine since it doesn’t require much resource when not in use.

Read more!

Saturday, April 24, 2010

SCCM on XENDesktop or PVS Standard Target Devices

By:Rick Rohne
Have you ever tried to manage your XENDesktop or PVS target devices using SCCM? In some ways, managing the devices using SCCM is irrelevant due to the nature of how PVS works, but low and behold, I've run into a few companies that insist on using SCCM for inventory management and application installation. The SCCM client, however, does not work well in a streamed OS environment. If you've ever tried installing the SCCM client on a PVS image, you will notice that SCCM shows new machines with the same name in its collections every time a PVS target device reboots in standard mode. This is because the SCCM client changes the GUID when an imageis pushed to new hardware. SCCM uses the GUID to keep track of Physical Hardware devices.

Overview how SCCM works
To give you an idea how it works, SMS uses the GUID of the computers to associate the Computer and OS with the SMS object. This GUID is stored in the c:\windows\SMSCFG.ini file.

The GUID can be read from this file, also by querying WMI using this vb script.
----------------------------------------------------------------------------------------------------------------------------------
strComputer = "."
strNameSpace = "root\ccm" strClass = "CCM_Client=@" Set objClass = getObject("Winmgmts:{impersonationlevel=impersonate}!\\" & strComputer & "\" & strNameSpace & ":" & strClass)
strGUID = objClass.ClientID
Wscript.Echo strGUID
Set objClass = Nothing
-------------------------------------------------------------------------------------------------------------
The problem we see is in a Citrix Provisioned desktop, this file comes up with a duplicate GUID each time. This causes the SCCM client t re-generate theGUID and create a new file on every boot.
You can find this information here http://support.microsoft.com/kb/837374

The Fix
In order to persist the computers GUID, you must be using “cache to targets hard drive” when you place your systems in standard mode. We use the hard drive to save the SCCMCFG.ini file after each reboot.
This also means that "cache to RAM" or "cache to Server" will not be sufficient because the cache will be purged on every reboot.

Step 1.
To resolve this, first, you have to run a script when switching from private mode to standard mode. This is done by the XENDesktop Admin after he modifies the default image…
This script stops the SCCM service and deletes the c:\windows\SCCMCFG.ini file.
'--------------------------- SCCM Cleanup.vbs--------------------------------------
'Stop SCCM client strServiceName = "CCMExec"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery("Select * from Win32_Service Where Name ='" & strServiceName & "'")
For Each objService in colListOfServices objService.StopService() Next ' Cleanup SCCM Set fso = CreateObject("Scripting.FileSystemObject") Set aFile = fso.GetFile("c:\windows\SMSCFG.ini") aFile.Delete
----------------------------------------------------------------------------------------
Step 2.
Now, you have to run a shutdown script and startup script that basically places the c:\windows\SCCMCFG.ini file on the Cache drive on shut down. When the computer boots up, it will check to see if the file exists on the cache drive. If it does not, the SCCM client will register itself to the SCCM server and create a new c:\windows\SCCMCFG.ini file. Upon shutdown, the c:\windows\SCCMCFG.ini file is copied to the cache drive.

This is a simple batch file script that can be loaded into active directory as a computer startup script for the OU where XENDesktop computers reside.

Startup Script
IF EXIST G:\SMSCFG.ini COPY G:\SMSCFG.ini C:\Windows\SMSCFG.ini /y > c:\smserror.txt

Shutdown Script
COPY c:\windows\SMSCFG.ini G:\SMSCFG.ini /y > g:\smserror.txt

Now computers that are manged by SCCM will show up as unique entries in the SCCM database.
NOTE: This was tested with SCCM 2007 R2, PVS 5.1, and XENDesktop 4


More information on Provisioning Server

Read more!
Microsoft Virtualization, Citrix, XENServer, Storage, iscsi, Exchange, Virtual Desktops, XENDesktop, APPSense, Netscaler, Virtual Storage, VM, Unified Comminications, Cisco, Server Virtualization, Thin client, Server Based Computing, SBC, Application Delivery controllers, System Center, SCCM, SCVMM, SCOM, VMware, VSphere, Virtual Storage, Cloud Computing, Provisioning Server, Hypervisor, Client Hypervisor.