Quick And Easy Replication For VDI Golden Images

Continuing on from my previous post; Backup, Restore And Replicate App Volumes, AppStacks And Writable Volumes another large challenge I faced running a Global Enterprise VDI environment was managing the Golden Images.

Replicating VDI Golden Images

The Challenge of Golden Image Replication

For those of you who might not be familiar with VDI environments, Golden Images are the virtual machines that virtual desktop pools are created from. If you need to add an application or make an OS customization for all of your end users, typically you will make the change in the Golden Image and then push that image out to the virtual desktops.

When a VDI environment consists of multiple sites, each separate site usually has its own instance of VMware Horizon or Citrix XenDesktop/XenApp. Each of these separate VDI instances will need their own Golden Images from which virtual desktop pools will be created. In an ideal world, being able to use the same Golden Images for all desktop pools regardless of which site they are in would make the most sense as typically the Pools are the same between sites and this will keep desktop images consistent for all end users. However, until now, this has proven difficult to achieve.

In legacy HCI environments, the replication of virtual machines is very difficult and painfully slow. The main two replication options we see being used are:

  • vSphere Content Library – Using the built-in Content Library service, vCenters can be linked to provide the replication of Golden Images between vCenters
  • Manual Export/Import – Using vCenter to export the Golden Images into an OVA/OVF template, manually copying them to the remote sites and then importing the template into vCenter

There are, however, downsides to both of these methods. In both cases, the whole Golden Image is being replicated each time an update is made. If an image is 60GB in size and there are three remote sites, that’s quite a lot of data that needs to be transferred, this usually is a very slow transfer process and can put a heavy strain on the WAN infrastructure. Additionally, when these images are copied between sites, the vSphere Snapshots are lost in the process making it very difficult to roll changes back if there are issues as all snapshot history is lost.

Golden Image Sprawl

Because of these replication challenges, what we end up seeing is Golden Image sprawl, configuration drift, and an inconsistent-user user experience. Each site has its own set of Golden Images, which are similar to the other sites, but over time the configuration of these images deviates from the other sites. These additional Golden Images also add operational overhead. Each image will need to be patched and kept up to date. The more images you have, the harder it is to keep track of them and the longer updates take to roll out.

Quick And Easy Replication using Datrium DVX

It shouldn’t be this painful. It doesn’t need to be this painful! Using Datrium DVX it only takes a few clicks to replicate Golden Images between multiple sites. The following video (5 minutes) is a brief demonstration of how simple it is to replicate a new snapshot on a Golden Image to a second site.

Some of the key benefits to understand are:

Deduplication and Compression – DVX uses the always-on global deduplication and compression service to only send the changes made to the Golden Image. Rather than sending the whole virtual machine, DVX will only send the data that has changed. This dramatically improves replication times and reduces the load on the WAN infrastructure.

Persistent vSphere Snapshots – When Golden Images are replicated between sites, so are vSphere snapshots. So each Golden Image will show the same snapshot history, regardless of the site they are in. This makes it a lot easier to rollback and forward changes.

Backup, Restore And Replicate App Volumes, AppStacks And Writable Volumes

no problemOne of the biggest challenges I faced running VMware’s internal Horizon environment, was being able to backup, restore and replicate Writeable Volumes and AppStacks. Not being able to backup and replicate Writeable Volumes meant were unable to use Writables to capture our user’s data as we were unable to copy the data to an offline backup array for archive or replicate the data to our other data centers to be used in the event of a site failure.

This is no longer a challenge using Datrium DVX.

App Volumes

App Volumes is a product offered by VMware that has two main features:

  • AppStacks – Packaged applications that get connected/disconnect to a user’s virtual desktop during login/logoff.
  • Writable Volumes – Virtual disks that get connected/disconnect to a user’s virtual desktop during login/logoff. These virtual disks capture any changes made to the virtual desktop, giving a persistent user experience in a non-persistent VDI environment.

If you are not familiar with App Volumes, have a look at this great video – VMware App Volumes Technical Overview

Both AppStacks and Writable Volumes live their lives as VMDK files. This makes it very easy to connect/disconnect them to virtual machines during the login/logoff process. However, there is a massive downside to using VMDK files. AppStacks and Writeable Volume VMDK’s are not permanently associated with a virtual machine, which makes it is almost impossible to back them up using traditional vSphere backup software. Due to limitations in the vSphere API, traditional backup solutions can only back up virtual machines and virtual disks connected to the virtual machines. If a VMDK is not connected to a virtual desktop, it cannot be backed up at scale…. Until now.

Datrium DVX

Backup and Restore Writable Volumes and AppStacks

Running your Horizon environment on a DVX platform makes backing up and restoring App Volumes AppStacks and Writable Volumes almost a single click process. Don’t believe me? Check out this video I recently captured showing the backup and restore of a Writable Volume.

Replicate Writable Volumes and AppStacks

Replicating Writables and AppStacks is also just as easy as backing up and restoring them with Datrium DVX. I’ve also created another video below to show you how simple this process is.

Summary

Using the built-in Snapshot and Replication functions of Datrium DVX will make the management of your App Volumes deployment extremely simple and straightforward. I really wish I had this technology available to me when I was running VMware’s global VDI environment as I’m pretty sure I’d have a few less gray hairs than I do now 😉

Catch Me At Both The Boston And New York City EUC VMUGs

vumglogo

I’m pleased to announce that I’ll be speaking at not one, but two VMUGs in June. You can catch me at the EUC-focused VMUG events, called EUC Explore. I am very excited as these will technically be my first (and second) time speaking a VMUG. I’ve run a VCDX Workshop before at the UK VMUG, but never had my own speaking session. There will be lots of EUC Expert speakers at both of these events which you really don’t want to miss out on.

As soon as the agenda is released, I’ll share it with you. So make sure you register to guarantee your space and also keep an eye out for a couple of vBeers which we are planning on arranging in and around these events.

  • Boston Summer VMUG and EUC Explore 2017 (Thursday, June 1st, 2017) – Register here
  • VMUG EUC Explore – New York City (Friday, June 16th, 2017) – Register here

If you are attending either of events please be sure to come and say hi!

My Top 3 Features In The Horizon 7.1 Release

vmware_horizon_viewThis week VMware released a major update to Horizon (View).

I’ve been using Horizon 7.1 for a few weeks and I wanted to share my Top 3 features with you. They are in no particular order.

1. VMware Horizon Virtualization Pack for Skype for Business (Beta)

This is something I’ve been waiting for, for a long time. With the Horizon Desktop I use internally in VMware, this is the only thing that has been stopping me from going ‘all in’ 100% VDI. Until now, I’ve been making my Skype for Business calls via the client which is installed on my laptop. Now I can finally move everything inside the virtual desktop, including my voice and video calls.

Making Audio/Video calls in a virtual desktop has a long history of pain which goes back to my early days here at VMware. If you were to install the Skype For Business client into a virtual desktop environment and use it as if it was installed on your local PC/Laptop, you encounter an issue which we term ‘Media hairpinning’. What happens here is, all of your Audio/Video traffic gets streamed via the virtual desktop infrastructure, rather than going point-to-point or ‘end user’ to ‘end user’. For example, we might have two users on the West coast of the US. Their Horizon environment is located on the East coast. When they Skype called each other, User A’s  Audio/Video would travel from their end point on the West coast, to their virtual desktop on the East coast, to User B’s virtual desktop on the East coast and then to User B’s end point on the West coast. (See below)

media hairpinning

The distance that the traffic has to travel can cause Audio/Video performance to be really poor. What we ideally want is for the Audio/Voice traffic to got direct, from User A to User B, point-to-point.

No media hairpinning

And this is essentially what the VMware Horizon Virtualization Pack for Skype for Business does for us.

As mentioned above, this feature is currently in Beta. Do not let that deter you, I’ve been using it for a little while and it seems to be functioning really well. When testing it with my colleagues, they are unable to tell if I am calling from my laptop or within my Horizon desktop. From the end user perspective, there are a few things that I’ve noticed which have slightly different behavior from the native client. For example, my mute button on my headphone lead no longer mutes me in the client and when someone is talking in a group chat the little window which usually shows the profile photo of who is talking doesn’t seem to update. Honestly, this isn’t a problem for me.

If you use Skype For Business within your company, I highly recommend that you test it out even whilst it is in Beta. The requirements are very basic and configuration is very straight forward unlike the old LyncVDI Plugin.

You can read more about it here: https://blogs.vmware.com/euc/2017/03/vmware-horizon-virtualization-pack-skype-for-business-beta.html and download the software and documentation here: https://communities.vmware.com/community/vmtn/beta/horizon-skype4business-beta/overview

Read the rest of this entry »

Horizon View API – Query Service

Whilst working on my Horizon View API page, trying to figure out which API calls return the data that you can see in the Horizon Administrator Console, it soon became clear that the API Query Service is used to collect a lot of the data seen within the UI. The way I managed to figure this was by analyzing a Horizon View Example Desktop Script created by Alan Renouf. So I’m going to try and document how to use the Query Service here so that other can use begin to use this really powerful tool.

Hopefully, this will be useful to you. If you have any questions, please either comment below or contact me directly. I will update this page as I learn more.

  • There are few commands that we need to execute to enable the query service, I believe that these three commands will remain the same regardless of what query you are trying to run.
C:\> $ViewAPI = $global:DefaultHVServers[0].ExtensionData
C:\> $query_service = New-Object "Vmware.Hv.QueryServiceService"
C:\> $query = New-Object "Vmware.Hv.QueryDefinition"

  • The next command needs to be modified depending on the data you are trying to capture. You can define the ‘queryEntityType‘ with any of the Queryable Data Objects.
C:\> $query.queryEntityType = 'DesktopSummaryView'

  • Once the Data Object has been defined we can now run the following command. The variable name $Pool can be changed to reflect the data you are collecting.
C:\> $Pools = $query_service.QueryService_Query($ViewAPI,$query)

  • Now we have the Variable defined we can start to find the data we need. In this example, I am looking to get a list Pools. Do get this information I can run the following:

Read the rest of this entry »