Symantec's ApplicationHA and Neverfail's vAppHA.
The Application Awareness API (will be shorthanded as AAA, going forward) is supported in both Linux and Windows (32/64bit) and can be accessed by installing a package within the guestOS. This package includes the necessary AAA libraries to create your own program/scripts in C, C++, Java and Perl. In addition, the package also includes a pre-compiled binary (vmware-appmonitor) that implements all the AAA methods that can easily be called from within a script or program. AAA uses the VMware Tools as communication channel to the ESX(i) host and you will need to ensure VMware Tools is installed and running. Since the communication is between VMware Tools and the ESX(i) host, there is no reliance on a TCP/IP network for this communication channel.
UPDATE: You can download GuestAppMonitor SDK here.
There are currently 6 AAA methods:
- Enables Monitoring
- Call every 30 seconds to mark application as active
- Disable Monitoring
- Returns status of Monitoring
- Returns the current application status recorded for the application, three possible values:
- green = Virtual machine infrastructure acknowledges that the application is being monitored.
- red = Virtual machine infrastructure does not think the application is being monitored. The
HA monitoring agent will initialize an asynchronous reset on the virtual machine if the status is Red
- gray = Application should send VMGuestAppMonitor_Enable again, followed
by VMGuestAppMonitor_MarkActive, because either application monitoring failed, or the virtual machine was vMotioned to a different location
- Frees the result of the *_GetAppStatus() call (only required when writing your own program)
To start using AAA functionality, you will first need to have a vSphere HA enabled cluster and enable the "VM and Application Monitoring" under VM Monitoring.Check_if_enabled();If not enabled, set enabledMonitor applicationIf application is good, send heartbeatWait 15 secondsLoop
Note: It is important to note, that HA will expect an application heartbeat to be generated every 30secs. If HA fails to receive a heartbeat within 30secs, it will transition the appHeartbeatStatus state from green to red. Depending on the configured sensitivity policy, once the heartbeat interval has been violated, HA will then restart the virtual machine. For example, if you have the sensitivity configured to medium and a heartbeat was not received within 30secs, it will change to a red state. If HA still has not received a heartbeat within 60secs of that time, then it will reboot the virtual machine.
Here is an example of installing AAA on a Linux system and compiling the C sample program:
Step 1 - Copy the AAA package to Linux system and extract the contents
Step 2 - Change into VMware-GuestAppMonitorSDK/docs/samples/C/ and ensure you have gcc compiler. You may have to change the makefile if you are on a 64bit platform as it is configured by default to point to the 32bit library. When you are ready, just type "make" and you should get compiled binary called "sample" which is the sample C application
Step 3 - You can now run the "sample" application which runs in a continuous loop and automatically enables AAA within the virtual machine and sends heartbeats to ESX(i) host. You can press control+C which then brings up three options: stop (s), disable (d), continue (c). The last two options should be pretty straight forward, but if you decide to stop the heartbeating and you don't resume, you will see HA restart the virtual machine based on your cluster configuration.
Here is an example of installing AAA on a Windows system and using the pre-compiled vmware-appmonitor binary:
Step1 - Copy the AAA package to Windows system and extract the contents
As a reference, here are the paths to the vmware-appmonitor for both Linux and Windows:
Note: You will need to set the two variables at the top which define the path to the shared library and the vmware-appmonitor binary.
So far we have demonstrated on how to setup AAA within the guestOS and provided a variety of programming/scripting interfaces such as C,C++, Java and Perl to integrate with your own application/script. Now what if we wanted to extract the heartbeat status for all virtual machines that have AAA implemented going through vCenter? You can easily do so by using the vSphere API and querying the appHeartbeatStatus property of your virtual machine.
I wrote a very simple vSphere SDK for Perl script getVMAppStatus.pl that allows you to query a virtual machine connecting to either vCenter or directly to an ESX(i) host to extract the heartbeat status.
Download the getVMAppStatus.pl script here.
Now before you jump right in and start leveraging this awesome API in either a custom application or script, you need to understand your application and various ways on detecting that it has failed and when you would like vSphere HA to reboot the virtual machine. Simply checking whether the process is running may or may not be enough.
To get more details on some of the best practices around using the Application Awareness API, I would highly recommend you check out Tom Stephens upcoming VMworld 2011 presentation TEX1928 Implementing Application Awareness in the Web Client and The Uptime Blog for more details about implementing AAA . For now, if you would like to learn more about Application Awareness API, check out last year's VMworld presentation.