How to Take Hypervisor Snapshot of Lotus Domino VM with Unix/Linux Guest

I previously published a post Online Backup of Lotus Domino with Arcserve UDP, which used custom scripts so that DB’s consistency was guaranteed during the Arcserve snapshot of a virtual Windows Lotus Domino server.

This was, however, only compatible with Domino on Windows guest. I have since collaborated with Daniel Nashed from Nash!Com in Germany to come up with a creative solution to run an Arcserve Hypervisor snapshot of Domino Virtual Machine running on a Unix/Linux Guest.

Interested? Read on…

Daniel Nashed developed a script for Unix/Linux that would stop domino server. Utilising this script will allow Arcserve to take a DB consistent snapshot through the preferred Hypervisor. The script Bundle is available here. (Please note: the use of blogged scripts are at one’s own risk and should be tested with sandbox or lab copy of your production VMs). There is certain risk in shutting down Domino Server services at every backup, however, a shutdown is the only real solution for ensuring consistency of all databases during backup Snapshot pass.

Using virtualized Lotus Domino as a corporate messaging system on a Unix/Linux guest, the database’s consistency is guaranteed during backup by running custom script Rc_domino_script.

Once you have downloaded the script bundle from Nash!Com the bundle should look like this:

bundle

 

 

To start, the VM guest requires the relevant Hypervisor tools to be installed e.g. VMware tools or Host Integration tools. This will allow Arcserve to pass commands through the Hypervisor to the VM guest and initiate the script pre-snapshot and post-snapshot.

Next, the above files need to be copied to their relevant locations:

Rc_domino_script is the main script logic. It needs to be copied to the Unix/Linux guest location: /opt/ibm/domio

Rc_domino is the main entry point file for the service. It needs to be copied to the Unix/Linux guest location: /etc/init.d

Rc_domino_config_notes is the configuration file used. It needs to be copied to the Unix/Linux guest location: /etc/sysconfig

These three files all reference one another and are required for pre/post-snapshot.
If you are required to make changes, such as a different username for Domino, you will need to make changes to the config. file and modify the settings in the Rc_domino script. For more detail, refer to Read me or NashCom.

Once the script has been copied, we can now create an agentless plan in Arcserve UDP under plan > setting. In the Advanced tab, add the following commands to reference scripts:

/etc/init.d/rd_domino stop

snapshot

/etc/init.d/rd_domino start

snapshot

With the above, we are able to successfully snapshot Domino DB on Unix/Linux without an agent and provide application consistency.

Many thanks to Daniel for his Domino expertise!

 

Online Backup of Lotus Domino with Arcserve UDP

Since Lotus Domino is an application non-VSS aware, the database’s consistency must be guaranteed during the Arcserve Snapshot of Lotus Domino process.

Using Lotus Domino as corporate messaging system, the database’s consistency is guaranteed running custom quiescing scripts (pre-freeze and post-thaw or Cache Flush) stored in C:\Windows in the Domino Server during the backup job.

See below; Option 1

Create 1 Batch File

This will Drop all connected users & Drop Cache.

Run the following Pre backup Script

Cache-Flush.bat
“C:\Program Files\IBM\Lotus\Domino\nserver.exe” -c “drop all”

timeout /t 5 /nobreak

“C:\Program Files\IBM\Lotus\Domino\nserver.exe” -c “dbcache flush”

timeout /t 5 /nobreak

Net Time \\%computername% >> C:\Arcservebackup.log

Save As .bat

On the backup plan, add this:

backup plan

See below; Option 2

This will stop Domino Services get the DB to a consistent state and then run Snapshot.

After the Snapshot Process it will then start service once again.

You can Add Option 1 to Pre Freeze to speed up the Process.

Create 2 Batch Files

See below Create 2 Batch Files

Run one Pre backup and the other Post backup
 
pre-freeze.bat
Net Time \%computername% >> C:scripts\logs\freeze.log
rem ***************************************
rem creates and inventory of all running Domino processes
rem ***************************************
pslist | findstr /I /C:”nadminp” >>C:scriptslogspid.lst
pslist | findstr /I /C:”naldaemn” >>C:scriptslogspid.lst
pslist | findstr /I /C:”namgr” >>C:scriptslogspid.lst
pslist | findstr /I /C:”ncalconn” >>C:scriptslogspid.lst
pslist | findstr /I /C:”ncatalog” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nchronos” >>C:scriptslogspid.lst
pslist | findstr /I /C:”ncollect” >>C:scriptslogspid.lst
pslist | findstr /I /C:”ncompact” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nconvert” >>C:scriptslogspid.lst
pslist | findstr /I /C:”ndesign” >>C:scriptslogspid.lst
pslist | findstr /I /C:”ndircat” >>C:scriptslogspid.lst
pslist | findstr /I /C:”ndrt” >>C:scriptslogspid.lst
pslist | findstr /I /C:”ndsmgr” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nevent” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nfixup” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nhttp” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nhttpcgi” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nimap” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nimsgcnv” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nisesctl” >>C:scriptslogspid.lst
pslist | findstr /I /C:”niseshlr” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nldap” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nlivecs” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nlnotes” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nlogin” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nmtc” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nnntp” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nnsadmin” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nnotesmm” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nobject” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nomsgcnv” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nosesctl” >>C:scriptslogspid.lst
pslist | findstr /I /C:”noseshlr” >>C:scriptslogspid.lst
pslist | findstr /I /C:”notes” >>C:scriptslogspid.lst
pslist | findstr /I /C:”npop3c” >>C:scriptslogspid.lst
pslist | findstr /I /C:”npop3″ >>C:scriptslogspid.lst
pslist | findstr /I /C:”nreport” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nrouter” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nreplica” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nsapdmn” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nsmtpmta” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nsmtp” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nstatlog” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nstaddin” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nstats” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nsched” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nservice” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nserver” >>C:scriptslogspid.lst
pslist | findstr /I /C:”ntaskldr” >>C:scriptslogspid.lst
pslist | findstr /I /C:”ntsvinst” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nupdate” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nupdall” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nwrdaemn” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nweb” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nxpcdmn” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nccmta” >>C:scriptslogspid.lst
pslist | findstr /I /C:”ncctctl” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nccmctl” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nccttcp” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nccbctl” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nccmin” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nccmout” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nccdctl” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nccdin” >>C:scriptslogspid.lst
pslist | findstr /I /C:”nccdout” >>C:scriptslogspid.lst
pslist | findstr /I /C:”ngdsscan” >>C:scriptslogspid.lst
pslist | findstr /I /C:”ngsscan” >>C:scriptslogspid.lst
pslist | findstr /I /C:”ngstmgr” >>C:scriptslogspid.lst
rem ***************************************
rem Stops Dominio daemon in a controller fashion
rem ***************************************
net stop “Lotus Domino Server (LotusDominoData)”
rem ***************************************
rem Wait a fair amount of time for processes to stop
rem ***************************************
Sleep 300
rem ***************************************
rem If some Domino processes are hanged, it kills all of them
rem ***************************************
for /f “tokens=2” %%I in (C:scriptslogspid.lst ) do pskill %%I
Net Time \%computername% >> C:scriptslogsfreeze.log
post-thaw.bat
net start “Lotus Domino Server (LotusDominodata)”

On the backup plan, add this:

backup plan2