Agile environment using virtualization

- 4 mins

This article is aimed more towards Java & VMWare, but the same can be replicated for any other language & environment

Abstract

You have a team of developers working on different modules for a project-product which are inter-dependant. Each developer diligently writes unit & integration tests supporting their code. You want to set-up an agile test environment to run the unit tests & staging server for integration test, but purchasing hardware for multiple machines is a constraint.

The following article provides a guide on how virtualization tools like VMware can be used to set-up staging or QA environment (Agile), with approximate minimum hardware & time investment.

Hardware Sizing

The hardware sizing performed here is not an exact calculation, but an educated guess at the approximate system requirement to run the application.

Application RAM CPU
Revision Control (SVN or CVS) 512MB - 1GB Single
Continuous Integration (Cruise Control or Bamboo) 1GB - 2GB Single
Database (MySQL*) 2GB - 4GB Single-Dual
Webserver (Wiki, Bugzilla, JIRA) 1GB Single

*MySQL on VMware has some serious performance issues for production environments, if your application is very database intensive with thousands to millions of I/O per second, you might want to avoid virtualization all together. For testing purpose (application sanity, NOT performance) VM is decent.

Considering the above list of applications, and the assumption, each physical core can support 2 virtual cores.

Hardware configuration

The approximate cost of the above system is roughly $2,500.00 - $3,500.00 (as the date of this article)

Set-up

You can either install Windows or Linux (we are on an Ubuntu system) as the HostOS. Since you have 8GB of RAM on the physical machine, 32 bit OS’s are not capable of using above 3-4GB. Use 64-bit distributions.

Download VMWare server from [http://www.vmware.com/products/server] select the distribution type depending on your OS. The guest and the host OS can be completely different, they need not be same there is no relation between them. eg: You can install Windows as host and Linux as guest or vice-versa.

You can either create the virtual machines all by yourself using the VMware step-by-step wizard, or download ‘appliances’ created by others from the VMware site [http://www.vmware.com/appliances], this saves you the initial installation effort.

When you create a new VM, you are also asked the default networking connection type. NAT and Bridged are the most common options one selects from. Use NAT if you want the VM to talk within its own subnet only, or Bridged if you want other machines on the same subnet as the host access them. eg: Your host machine is on 192.168.10.50

Tip: If you installing the guest yourself, you can create one master guest, with all the common applications configured (eg: OpenSSH server would be great to have on all the guests for remote management or java), you’ll have to change the host name after that.

Power up each of the VM’s and install the required applications for which they’ve been set and use them like any other machine on the network.

These VM’s need to be maintained like any other normal physical machine on the network.

Pitfalls

Alternatives

You can use the Xen for virtualization. I’ve heard pretty good things about it too, with a few short comings & advantages over VMServer (that’s a separate topic all together).

There is an article dedicated to Virtual Machines on Wikipedia, you can refer that depending on your needs and fix upon a solution that suits your needs better

Glossary

Virtualization - The virtual machine simulates enough hardware to allow an unmodified “guest” OS (one designed for the same CPU) to be run in isolation

Continuous Integration - Continuous integration describes a set of software engineering practice’s that speed up the delivery of software by decreasing integration times

Revision Control - Revision control (also known as version control (system) (VCS), source control or (source) code management (SCM)) is the management of multiple revisions of the same unit of information

Host OS - The operating system installed on the physical machine running VMware Server.

Guest OS - The operating system installed on the virtual machine.

Bibliography

  1. http://en.wikipedia.org/wiki/Agile_software_development
  2. http://en.wikipedia.org/wiki/Xen
  3. http://en.wikipedia.org/wiki/Comparison_of_virtual_machines
  4. http://en.wikipedia.org/wiki/Virtualization
  5. http://en.wikipedia.org/wiki/Continuous_Integration
  6. http://en.wikipedia.org/wiki/Revision_control
  7. http://it20.info/blogs/main/archive/2007/11/26/83.aspx
  8. http://mysql-dba-journey.blogspot.com/2007/11/mysql-and-vmware.html
VARUN MEHTA

VARUN MEHTA

coder | engineer | tinkerer | photographer | cook | tryathlete

Schedule Meeting