Feed aggregator

Do you know swapping between a staging environment, and the production environment is a push of a button, in Windows Azure Websites?

The Official Microsoft IIS Site - Sáb, 08/02/2014 - 13:55

Yes, you are reading it right. It is true. It’s just a matter of one click to promote your staging website to be the production site. Gone are those hassles you were facing with publishing a new deployment to the live website, and some unbaked pages/assemblies, needless to say much pain, downtime, and probability of errors.

Read the complete post here.

Why is the wrong time displayed on my virtual machine?

Virtual PC Guy - Vie, 07/02/2014 - 20:53

Here is the scenario:

You have a bunch of server virtual machines that are merrily running somewhere in your environment.  Normally you do not interact with them, but once in a while you need to login to one of them and do something.  When this happens – you open up Hyper-V Manager and connect to the virtual machine.  The virtual machine connection opens and you see:

Only, the time and day displayed is completely wrong!  But, as soon as you click on the virtual machine (or press a key) the time and date *pop* to the right time.  What is happening here?

The answer is a little bit odd.  What is actually happening is that Windows (inside the virtual machine) is turning off its monitor to “save power”.  The result is that you get a stale display on the virtual machine until you provide keyboard or mouse input.

This is actually a new behavior as of Hyper-V in Windows Server 2012 / Windows 8.  It is an unintended side effect of other work that we did on our video driver.  The short version of which is: we updated our virtual machine video driver significantly in Windows Server 2012 / Windows 8 in order to improve its efficiency, and accidentally enabled power management of the virtual video device in the process.

When we first realized that this was happening – we had a lengthy discussion about what to do.  Options suggested were:

  1. Hack the virtual video driver to explicitly not support power management.  This would have been a pretty gross thing to do (from a code perspective) so we ruled that option out quickly.
  2. Display a black screen when the guest OS slept the monitor (which is what physical computers do).  With this option we were afraid that users would think that the guest OS had crashed (or something similar).
  3. Grey out the last screen from the guest OS.  Unfortunately this is what we already do when you pause a virtual machine, so we were worried that there would be confusion about this.
  4. Put up a fluorescent pink box with the words “Virtual monitor in sleep mode!” written across it (this idea probably received far more discussion than it deserved).
  5. Just leave the last image displayed up.

To be honest, we were not super happy with any of these ideas – and ended up going with the last option.  If this behavior bothers you, you can actually control it.  Just edit the power management plan inside the virtual machine and tell Windows to not turn the display off:

I can guarantee that this will not waste any power :-)

Cheers,
Ben

Categorías: Virtualización

Error 0x80090303 when enabling replication

Virtualization Team Blog - Vie, 07/02/2014 - 01:00

When trying to enable replication on one of my VMs in my lab setup, I encountered the following error – Hyper-V failed to authenticate the Replica server <server name> using Kerberos authentication. Error: The specified target is unknown or unreachable (0x80090303).

Needless to say, I was able to reach the replica server (prb2.hvrlab.com in my case), firewall settings in the replica server looked ok and I was able to TS and login to the replica server as well. As the error message indicated that the failure was encountered when authenticating the replica server, I decided to check the event viewer logs on the replica server. A couple of errors caught my eye:

(1) SPN registration failures

(2) This was followed by an error message which indicated that the authentication had failed

I was getting somewhere, so I ran the “setspn –l” command to list down the currently registered SPNs for the computer and the Hyper-V Replica entry was conspicuously absent.

I restarted the vmms service and when I re-ran the command, I could see the following (set of correct) entries

I have seen the SPN registration (b.t.w the following TechNet wiki gives more info on SPN registration http://social.technet.microsoft.com/wiki/contents/articles/1340.hyper-v-troubleshooting-event-id-14050-vmms.aspx) failures due to intermittent network blips. There are retry semantics to ensure that the SPN registration succeeds but there could be corner cases (like my messed up lab setup) where a manual intervention may be required to make quicker progress. I also stumbled upon a SPN wiki article: http://social.technet.microsoft.com/wiki/contents/articles/717.service-principal-names-spns-setspn-syntax-setspn-exe.aspx which gives more info on how to manually register the SPN. I didn’t require the info today, but it’s a good read nevertheless.

After fixing the replica server, the enable replication call went through as expected. Back to work…

Categorías: Virtualización

Cloning running virtual machines in SCVMM 2012 R2

Virtual PC Guy - Mar, 04/02/2014 - 19:57

Yesterday I posted about how Windows 8.1 / Windows Server 2012 R2 allow you to export a running virtual machine.  This is also available when using SCVMM 2012 R2.

Here you can now clone a running virtual machine.  When you clone the virtual machine you can either store it in your virtual machine library, or you can immediately deploy it to a Hyper-V server in your environment.

Cheers,
Ben

Categorías: Virtualización

Exporting a running virtual machine

Virtual PC Guy - Mar, 04/02/2014 - 06:25

One of the small features that we added in Windows 8.1 / Windows Server 2012 R2 is the ability to export a virtual machine that is currently running.  Using this feature is simple enough, just select a running virtual machine and choose to export it.  Here you can see that my MineCraft Server is running while being exported, and I can export other running virtual machines too.

When you export a running virtual machine – you will get a copy of the virtual machine in a saved state, at exactly the point in time that you asked for an export.  You can also export checkpoints from a running virtual machine.

Cheers,
Ben

Categorías: Virtualización

Hyper-V Replica debugging: Why are very large log files generated?

Virtualization Team Blog - Lun, 03/02/2014 - 08:00

Quite a few customers have reached out to us with this question, and you can even see a few posts around this on the TechNet Forums. The query comes in various forms:

  • “My log file size was in the MBs and sometime at night it went into the GBs – what happened?”
  • “I have huge amounts of data to sync across once a day when no data is being changed in the guest”
  • “The size of the log file (the .hrl) is growing 10X…”

The problem here is not just the exponential increase in the .hrl file size, but also the fact that the network impact of this churn was not accounted for during the planning stages of the datacenter fabric. Thus there isn't adequate network between the primary and the replica to transfer the huge log files being generated.

As a first step, the question that customers want answered is: What is causing this churn inside the guest?

Step 1:  Isolate the high-churning processes

Download the script from here: http://gallery.technet.microsoft.com/Hyper-V-Replica-Identify-f09763b6, and copy the script into the virtual machine. The script collects information about the writes done by various processes and writes log files with this data.

I started the debugging process using the script on SQL Server virtual machine of my own. I copied the script into the VM and ran it in an elevated PowerShell window. You might run into PowerShell script execution policy restrictions, and you might need to set the execution policy to Unrestricted (http://technet.microsoft.com/en-us/library/ee176961.aspx).

At the same time, I was monitoring the VM using Perfmon from the host and checking to see if there is any burst of disk activity seen. The blue line in the Perfmon graph is something I was not expecting to see, and it is significantly higher than the rest of the data – the scale for the blue line is 10X that of the red and green lines. (Side note: I was also monitoring the writes from within the guest using Perfmon… to see if there was any mismatch. As you can see from the screenshot below, the two performance monitors are rather in sync :))

At this point, I have no clue what in the guest is causing this sort of churn to show up. Fortunately I have the script collecting data inside the guest that I will use for further analysis.

Pull out the two files from the guest VM for analysis in Excel – ProcStats-2.csv and HVRStats-2.csv. Before starting the analysis, one additional bit of Excel manipulation that I added was to include a column called Hour-Minute: it pulls out only the hour and minute from the timestamp (ignoring the seconds) and is used in the PivotTable analysis as a field. I use the following formula in the cell: =TIME(HOUR(A2), MINUTE(A2), 0) where A2 is the timestamp cell for that row. Copy it down and it’ll adjust the formula appropriately.

 

Overall write statistics (HVR Stats)

Let’s first look at the file HVRStats-2.csv in Excel. Use the data to create a PivotTable and a PivotChart – this gives a summarized view of the writes happening. What we see is that there is excessive data that gets written at 4:57 AM and 4:58 AM. This is more than 30X of the data written otherwise.

Per process write statistics

Now let’s look at ProcStats-2.csv in Excel. Use the data to create a PivotTable and PivotChart – and this should give us a per-process view of what is happening. With the per-process information, we can easily plot the data written by each process and identify the culprit. In this case, SQL Server itself caused a spike in the data written (highlighted in red)

 

This is what the graph looks like for a large data copy operation (~1.5 GB). There is a burst of writes between 1:52PM and 1:53PM in Explorer.exe – and this corresponds to the copy operation that was initiated.

What next?

At this point, you should be able to differentiate between the following process classes using the process name and PID:

  1. Primary guest workload (eg: SQL Server)
  2. Windows inbox processes (eg: page file, file copy, defragment, search indexer…)
  3. Other/3rd party processes (eg: backup agent, anti-virus…)
Step 2:  Which files are being modified?

Isolating the file sometimes helps in identifying the underlying operation. Once you know which process is causing the churn and at approximately what time, we can use the inbox tool Resource Monitor (resmon.exe) to track the Disk Activity. We can filter to show the details of the processes that we want in the Resource Monitor.

From the previous step you will get the details of the process causing the churn – for example, System (PID 4). Using the Resource Monitor you would find that the file being modified – for example, the file is identified as C:\pagefile.sys. This would lead you to the conclusion that it is the pagefile that is being churned.

  Alternative tools:
  1. Process Monitor:   http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx
  2. Windows Performance Recorder and Windows Performance Analyzer: 
Categorías: Virtualización

IIS Administation cmdlets for PowerShell

The Official Microsoft IIS Site - Dom, 02/02/2014 - 15:07

Have you been looking a download of the IIS Administation cmdlets for Powershell for Windows 7 or Windows Server 2012 R2?

For earlier versions of Windows the IIS PowerShell Snap-in was a download, but with Windows 7 and Windows Server 2012 R2 the IIS PowerShell Snap-in is built into the operating system.

To enable the IIS PowerShell Cmdlets on Windows 7, please follow these steps.

 

1. From the Start menu, type in Windows Features, and select Turn Windows features on or off.

 

2. In the Windows Features control panel, expand Internet Information Services, expand Web Management Tools, and place checks next to IIS Management Scripts and IIS Management Service.  Click OK to install.

 

3. When you are need to use the IIS PowerShell Cmdlets please follow these steps.

Open an Administrative PowerShell, and run the following commands.

Set-ExecutionPolicy unrestricted –force

Import-Module WebAdministration

Set-Location IIS:\

Get-Website

The output should resemble the PowerShell window below.

You are now ready to use the IIS PowerShell Cmdlets on Windows 7.

Note: On an IIS 7.5 Server you may only need to complete step number 3.

However, if you need to install the IIS Management Scripts and IIS Management Service on Windows Server 2012, the “Windows Features” step will take you into the Server Manager.

Once in the Server Manager, you should start by selecting Roles. Once there you need to determine if IIS is already installed.

In the Roles Summary section, if you see Web Server (IIS) then IIS is installed.

If IIS is already installed scroll down to find the Web Server (IIS) section and click Add Role Service.

From here you will need to install the IIS Management Scripts and IIS Management Service.

If IIS is not installed click Add Role, select Web Server (IIS), and while selecting the role services insure that you select IIS Management Scripts and IIS Management Service.

Error 0x80070005 When Calling the FTP FlushLog Method

The Official Microsoft IIS Site - Vie, 31/01/2014 - 23:59

I had an interesting question earlier today which I thought was worth sharing. One of my coworkers was trying to use the code sample from my Programmatically Flushing FTP Logs blog, and he was getting the following error:

Unhandled Exception: System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
   at Microsoft.Web.Administration.Interop.IAppHostMethodInstance.Execute()
   at Sample.Main() in c:\Projects\FtpTests\Program.cs:line 25

I knew that the code sample in my blog worked perfectly when I originally wrote it, so I figured that my coworker must be doing something wrong. (And every developer has said "It works on my computer..." at one time or other.) But I decided to give him the benefit of the doubt, so I copied the source code from my blog into a new Visual Studio project and I ran it.

Much to my surprise, I saw the same error that my coworker was seeing if I didn't step the code through with a debugger.

When I stepped through the code in a debugger, I saw the following error message:

At this point I was thinking, "What the heck? I know this code was working before..." I started to wonder if we had released a breaking change to the FTP service sometime during the past two years, but then it suddenly dawned on me: I hadn't started the FTP service on my computer.

[Duh.]

That was the source of the problem: I usually have the FTP service configured for manual startup on my development computers, but the FTP methods to start and stop FTP sites and flush the FTP logs do not work when the FTP service is not running. Once both of us started the FTP service on each of our systems the problem went away.

I hope this helps. ;-]

(Cross-posted from http://blogs.msdn.com/robert_mcmurray/)

Resizing the boot drive of a virtual machine

Virtual PC Guy - Vie, 31/01/2014 - 19:02

You can only resize the virtual hard disk of a running virtual machine if:

  1. It is a .VHDX file
  2. It is connected to a SCSI controller

These restrictions mean that people often ask me if you can resize the boot disk of a virtual machine.  And the answer is: Yes, if it is a Generation 2 virtual machine.  Generation 2 virtual machines only have SCSI controllers, and boot off of the SCSI controller.

Meanwhile, Windows has supported shrinking and expanding the boot partition since Windows 7 / Windows Server 2008 R2.  So you can easily resize the boot partition after you have expanded the virtual hard disk.

Cheers,
Ben

Categorías: Virtualización

Rapid PHP Deployment for IIS using a Batch File

The Official Microsoft IIS Site - Vie, 31/01/2014 - 09:05

Whenever I am delivering a presentation where I need to use PHP, I typically use a batch file that I wrote in order to rapidly deploy PHP on the system that I am using for my demos. The batch file usually takes less than a second to run, which always seems to amaze people in the audience. As a result, I usually have several people ask me for my batch file after each presentation, so I thought that it would make a good subject for today's blog.

I should mention that I have used this batch file in order to demonstrate PHP with IIS in a variety of scenarios, and one of my favorite demos is when I would borrow someone's laptop and plug in a flash drive where I had IIS Express pre-installed, and then I would run the batch file in this blog to deploy PHP. Next I would launch IIS Express, open a web browser on their system, and then browse to http://localhost/ in order to show that IIS Express was working correctly. Lastly I would write a simple PHP "Hello World" page to show that PHP was up-and-running on their system in a matter of seconds.

That being said, I have to point out that there is a very important prerequisite that you must have in order to follow the steps in the blog: you need to start with a known-good installation of PHP from one of your systems, and I'll explain what I mean by that.

My batch file expects to find a folder containing ready-to-run files for PHP in order to deploy PHP on a new system. I originally obtained my PHP files by using the Web Platform Installer (WebPI) to install PHP, and then I copied the files to my flash drive or some other repository. (Note that WebPI usually installs PHP in the "%ProgramFiles(x86)%\PHP" folder.) If you don't want to use WebPI, you can also download PHP from http://windows.php.net/, but you're on your own for configuration.

Once I have the files from a known-good installation of PHP, I create the following folder structure in the location where I will be storing the files that I use to deploy PHP on other systems:

  • <root folder>
    • SETUP_PHP.cmd (the batch file from this blog)
    • PHP (the folder containing the PHP files)
      • PHP.INI
      • PHP-CGI.EXE
      • etc. (all of the remaining PHP files and folders)

One thing to note is that the PHP.INI file you use may contain paths which refer to specific directories on the system from which you are copying your PHP files, so you need to make sure that those paths will exist on the system where you deploy PHP.

Here is an example: when I used WebPI to install PHP 5.5 on a system with IIS, it installed PHP into my "%ProgramFiles(x86)%\PHP\v5.5" folder. During the installation process, WebPI updated the PHP file to reflect any paths that need to be defined. At the time that I put together my notes for this blog, those updates mainly applied to the path where PHP expects to find it's extensions:

extension_dir="C:\Program Files (x86)\PHP\v5.5\ext\"

What this means is - if you want to deploy PHP to some other path on subsequent systems, you will need to update at least that line in the PHP.INI file that you are using to deploy PHP. In my particular case, I prefer to deploy PHP to the "%SystemDrive%\PHP" path, but it can be anywhere as long as you update everything accordingly.

The following batch file will deploy the PHP files in the "%SystemDrive%\PHP" folder on your system, and then it will update IIS with the necessary settings for this PHP deployment to work:

@echo off REM Change to the installation folder pushd "%~dp0" REM Cheap test to see if IIS is installed if exist "%SystemRoot%\System32\inetsrv" ( REM Check for the PHP installation files in a subfolder if exist "%~dp0PHP" ( REM Check for an existing installation of PHP if not exist "%SystemDrive%\PHP" ( REM Create the folder for PHP md "%SystemDrive%\PHP" REM Deploy the PHP files xcopy /erhky "%~dp0PHP\*" "%SystemDrive%\PHP" ) pushd "%SystemRoot%\System32\inetsrv" REM Configure the IIS settings for PHP appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='%SystemDrive%\PHP\php-cgi.exe',monitorChangesTo='php.ini',activityTimeout='600',requestTimeout='600',instanceMaxRequests='10000']" /commit:apphost appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='%SystemDrive%\PHP\php-cgi.exe',monitorChangesTo='php.ini',activityTimeout='600',requestTimeout='600',instanceMaxRequests='10000'].environmentVariables.[name='PHP_FCGI_MAX_REQUESTS',value='10000']" /commit:apphost appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='%SystemDrive%\PHP\php-cgi.exe',monitorChangesTo='php.ini',activityTimeout='600',requestTimeout='600',instanceMaxRequests='10000'].environmentVariables.[name='PHPRC',value='%SystemDrive%\PHP']" /commit:apphost appcmd.exe set config -section:system.webServer/handlers /+"[name='PHP_via_FastCGI',path='*.php',verb='GET,HEAD,POST',modules='FastCgiModule',scriptProcessor='%SystemDrive%\PHP\php-cgi.exe',resourceType='Either']" /commit:apphost popd ) ) popd

Once you have all of that in place, it usually takes less than a second to deploy PHP, which is why so many people seem interested during my presentations.

Note that you can deploy PHP for IIS Express just as easily by updating the "%SystemRoot%\System32\inetsrv" paths in the batch file to "%ProgramFiles%\IIS Express" or "%ProgramFiles(x86)%\IIS Express" paths. You can also use this batch file as part of a deployment process for PHP within a web farm; in which case, you will need to pay attention to the paths inside your PHP.INI file which I mentioned earlier.

(Cross-posted from http://blogs.msdn.com/robert_mcmurray/)

Analyzing Windows Azure Storage Logs

The Official Microsoft IIS Site - Jue, 30/01/2014 - 21:05
A few weeks ago, I wrote a post that described how to maximize throughput between HDInsight clusters and Windows Azure Storage . One of the suggestions I made was to adjust your HDInsight cluster’s self-throttling mechanism - i.e. tune the fs.azure.selfthrottling.read/write.factor parameters. I also suggested that the best way to find the optimal parameter values was ultimately to turn on storage account logging and analyze the logs after you had run a job or two. This post describes how to...(read more)

Shrinking a VHDX on a Running Virtual Machine

Virtual PC Guy - Jue, 30/01/2014 - 18:43

This week I have been talking about how to resize a VHDX on a virtual machine that is currently running.  It is easy to think that you can only increase a VHDX of a running virtual machine, but you can also shrink the VHDX of a running virtual machine.  The first thing that you need to do is to free up some space at the end of the virtual hard disk that you want to shrink.  To do this – you will need to login to the guest operating system and:

  1. Open Disk Management
  2. Locate the last partition on the disk
  3. Right click on the partition and select Shrink Volume
  4. Enter the amount that you want to shrink by and click Shrink

Once you have done this – you will need to open the Edit Virtual Hard Disk Wizard and:

  1. Locate the virtual hard disk that you want to shrink
  2. Select Shrink
    1. Note – the option to shrink will only be available if we detect that there is available, unpartitioned space at the end of the disk
  3. Enter new size that you want
    1. Note – you will be limited to shrinking down to the available, unpartitioned space
  4. Click Finish

You can also do this using PowerShell

Get-VM "Windows Server - Resize" | Get-VMHardDiskDrive -ControllerType SCSI | Resize-VHD -SizeBytes 100GB

One nice option that you get with PowerShell is that you can also ask to just resize the virtual hard disk to the smallest possible size:

Get-VM "Windows Server - Resize" | Get-VMHardDiskDrive -ControllerType SCSI | Resize-VHD –ToMinimumSize

Cheers,
Ben

Categorías: Virtualización

Online VHDX Resize with SCVMM 2012 R2

Virtual PC Guy - Mié, 29/01/2014 - 20:20

Yesterday I discussed how to expand the size of a virtual hard disk on a running virtual machine.  You can also do this with System Center Virtual Machine Manager 2012 R2.  To do this you need to:

  1. Open Properties on the virtual machine in question
  2. Go to Hardware Configuration
  3. Locate the disk you want to resize
  4. Select Expand virtual hard disk (GB): and enter the new size that you want
  5. Click OK

You can also use SCVMM PowerShell to do the same thing:

Get-SCVirtualMachine "Windows Server - Resize" | Get-SCVirtualDiskDrive | ?{$_.VirtualHardDisk -like "Windows Server - Resize_disk_1"} | Expand-SCVirtualDiskDrive -VirtualHardDiskSizeGB 140

Note, just like I discussed yesterday:

  • You can only do this for .VHDX files attached to SCSI controllers
  • After doing this you will need to login to the guest operating system and do something to take advantage of the new space

Cheers,
Ben

Categorías: Virtualización

URL Rewrite vs. Redirect; What’s the difference?

The Official Microsoft IIS Site - Mié, 29/01/2014 - 17:17
IIS URL Rewrite has five different types of actions. They are: Rewrite , Redirect , Custom Response , Abort Request , and None . And if you have ARR (Application Request Routing) installed, then at the server level you’ll also see Route to Server Farm Read More......(read more)

Online VHDX Resize in Windows Server 2012 R2 / Windows 8.1

Virtual PC Guy - Mar, 28/01/2014 - 20:08

One of the new features in Windows Server 2012 R2 and Windows 8.1 is the ability to resize a virtual machines virtual hard disk while it is running.  In order to pull this off – all you need is a virtual machine with a .VHDX file attached to a SCSI controller (this functionality is not supported with .VHD files or IDE controllers).

Once you have done this you simply need to open the Edit Virtual Hard Disk wizard.  Then you should:

  1. Locate the virtual hard disk that you want to expand
  2. Select Expand and click Next
  3. Enter the new size that you want and click Next
  4. Click Finish

Once you have done this, we will increase the size of the virtual hard disk.  However, we will not do anything with the partitioning on the virtual hard disk.  So at this point in time you will have a bunch of extra, unused space at the end of the virtual hard disk.  To take advantage of it you will need to login to the guest operating system and do something with it.  You can either create a new partition – or extend an existing one.  Extending a partition under Windows is simple enough.  You just need to:

  1. Open Disk Management
  2. Locate the partition that you want to extend
  3. Right click on it and select Extend Volume
  4. Select the available space and click Next
  5. Click Finish

You can also use PowerShell in the parent partition to expand a virtual hard disk, like this:

Get-VM "Windows Server - Resize" | Get-VMHardDiskDrive -ControllerType SCSI | Resize-VHD -SizeBytes 200GB

Note, this is the same command that you use whether the virtual machine is running or not.  Also note that you still need to login to the guest operating system to take advantage of the extra space.

Cheers,
Ben

Categorías: Virtualización

Ace the Azure test!

The Official Microsoft IIS Site - Mar, 28/01/2014 - 01:21
Well…this isn’t really about any test, but keeping the massive range of services and features Azure offers in one’s head could be challenging even for seasoned experts. Luckily, Cory Fowler, one of Azure’s best evangelists has built this fantastic informational gold-mine! Fowler’s http://windowsazurewebsitescheatsheet.info/ allows you to explore this in a friendly and intuitive interface, and get to the bottom line quickly and easily. Great stuff, Corey ! Check it out, everyone!...(read more)

New Poster: Windows Server 2012 R2 Private Cloud Storage and Virtualization

Virtual PC Guy - Lun, 27/01/2014 - 19:23

Another fantastic poster is out.  This one is focused on the storage technology in Windows Server 2012 R2 that you will want to use for private cloud environments:

You can download it here: http://www.microsoft.com/en-us/download/details.aspx?id=41665

And it has also been included in the Server Posterpedia application: http://aka.ms/sposterpedia 

Cheers,
Ben

Categorías: Virtualización

Improvements in recovery history

Virtualization Team Blog - Lun, 27/01/2014 - 14:10

Hyper-V replica has always had the capability to maintain multiple recovery points. In this blog post we’ll delve into “undo logs” – a brand new way for storing recovery points introduced in Windows Server 2012 R2 and how it benefits Hyper-V Replica customers.

Snapshot based recovery history

In Windows Server 2012, we supported recovery history by storing one recovery snapshots for each of the configured number of recovery points. Recovery snapshots are meant to provide a fast and easy way to revert a virtual disk to a previous state. Their use allowed for convenient fail-over to any saved recovery point.

The screenshot below shows recovery snapshots on a replica VM with recovery points:

However, due to the way recovery snapshots work, there are some inherent tradeoffs in using them for recovery history. They are:

1. Increased IOPS on the recovery side during normal replication: This effect is more evident when a snapshot is created and tapers off over time. This manifests because any write to a new block that isn’t present in a recovery snapshot results in the allocation and zero-filling of a new block before the write succeeds. On an average this can result in IOPS impact of 4x to 6x where x is the number of write IOs on the primary VM.

2. Data corruption in any of the recovery snapshots impacts failovers to any of later recovery points.

Architectural improvements to recovery history were further informed by our observation that more than 90% of times, customers chose to failover to the latest point; and that when customers did choose a point other than the latest, it was far more likely to be one of the newer points rather than the older points. Making it better with undo-logs

The undo-log architecture makes use of the efficient change tracking and logging system that is at the core of Hyper-V Replica. The fundamental idea of undo-logs is to save data that is going to be overwritten by the application of a change log into an undo log file. Hence, with the application of undo-log, changes made to a virtual disk can be reverted. One undo-log corresponds to each of the configured recovery points.

Thus, in the undo-log architecture, the data in the replica VHDs is always at the latest state. Failing over to an older point requires application of corresponding undo logs. However, the most favored scenario of failing over to the latest recovery point is made extremely efficient. In fact, there is over 100% improvement in IOPS usage on the recovery side with undo-log approach as opposed to recovery snapshot based approach! Furthermore, should there be any corruption in data in any undo logs, failover to older recovery points is impacted while leaving all the newer recovery points accessible.

Important
  • The undo-logs are stored as .UHRL files. They’re stored under <Replica store>\Hyper-V Replica\Virtual hard disks\<GUID>\ by default. Do not delete the UHRL files directly from the storage location. Instead reduce the number of configured recovery points from virtual machine replication settings in hyper-v manager.
  • Do not delete UndoLog configuration stored under <Replica store>\Hyper-V Replica\UndoLog Configuration. These are important configuration files used by Hyper-V Replica system.

Key changes

Some of the key changes due to the introduction of undo-logs are: Scenario Windows Server 2012 Windows server 2012 R2

IOPS impact of enabling recovery history on the replica server

At an average 4x to 6x.

At an average 2x to 3x.

Storage required on enabling recovery history

~10% of the base disk for every recovery point.

Dependent on the actual churn in the VM.

Supports inter-op with storage migration?

Yes.

Yes.

Supports inter-op with live migration?

Yes.

Yes.

Supports inter-op with import/export of a VM?

Yes, recovery points (snapshots) can be exported/imported.

No, recovery points (undo logs) cannot be exported/imported.

Impact of disk resize

Disk resize is not advisable when snapshots are present.

If the disk is expanded, undo-logs continue to provide recovery history. If the disk is contracted, failover to point older than when the disk was resized is not supported.

Time taken to initiate failover to the latest point (Excluding operating system boot time)

Near instantaneous.

Near instantaneous.

Time taken to initiate failover to the oldest point (Excluding operating system boot time)

Near instantaneous.

Dependent on the actual changes that need to be undone.

Categorías: Virtualización

Managing Windows Server 2012 Hyper-V from Windows 8.1

Virtual PC Guy - Vie, 24/01/2014 - 17:43

In the past we have always required that you use Hyper-V Manager on the same version of Windows as the version of Windows that you are using to run Hyper-V (i.e. Use Windows 7 to manage Windows Server 2008 R2, use Windows 8 to manage Windows Server 2012).  But we have made a change with Windows 8.1.

You can use Hyper-V manager on Windows 8.1 (or on Windows Server 2012 R2) to manage either Windows Server 2012 R2 or Windows Server 2012.  In fact, you can connect to both at the same time if you want to.

What happens is that when you connect to a new instance of Hyper-V, we check to see what the version is that we are connecting to.  If it is Windows 8 / Windows Server 2012 we will load the UI for that version of Hyper-V.  If it is Windows 8.1 / Windows Server 2012 R2 we will load the UI for that version of Hyper-V.

Here you can see an instance of Hyper-V manager where I have connected to a number of servers:

Above; I have selected “MELPOMENE” – which is a Windows Server 2012 R2 instance of Hyper-V.  You can tell that this is case because we are using the term “checkpoints”.  Below; I have selected “POLYHYMNIA” – which is a Windows Server 2012 instance of Hyper-V.  Here you can see that we are using the term “snapshots”.

This all happens automatically, with no configuration needed.

One issue that you should be aware of is that there are now two versions of VMCONNECT.EXE.  Hyper-V Manager will always launch the correct instance for the server you are connected to – but, if you start VM Connect directly you should know that "C:\Windows\System32\vmconnect.exe” is the Windows 8.1 / Windows Server 2012 R2 version of VM Connect.  While “C:\Program Files\Hyper-V\6.2\vmconnect6.2.exe” is the Windows 8 / Windows Server 2012 version of VM Connect.

Cheers,
Ben

Categorías: Virtualización

Where did my visitors go?!

The Official Microsoft IIS Site - Jue, 23/01/2014 - 18:48
For anyone who owns a website, a top-priority is usually driving traffic up. Whether it’s a content-based site like a blog or forum, or a sales-driven site like an online store, we all want as many people as possible to visit our sites. Most hosting solutions offer some kind of access to information about visitors and companies like WebTrends have made a fortune building advanced analysis mechanisms to help answer questions like “What websites are referring to my site” or “what are the most popular...(read more)
Distribuir contenido