This article describes how we deployed our issue tracker system (RT). If you've browsed around our web site, you may have noticed that we encourage our community to submit bug reports via launchpad. We discovered however that we also needed to track issues that don't fall into the category of 'bugs' (e.g., customer's issues, internal IT issues, etc.); or if they do classify as bugs, they are not Eucalyptus related. To meet these needs, we decided to investigate a few alternative issue tracker systems.
In summary, we had limited time for a project with relatively extensive requirements—the need to install multiple applications along with their full environments; the need to install diverse OS; the capability to switch between systems for comparative analysis; the need for multiple individuals to access and experiment with each system on their own time—and all of this with just two desktop machines! Fortunately, we knew of this very cool project that turns commodity machines into a private cloud. Yes, we turned to the Eucalyptus cloud for help.

Figure 1. The current production cloud resides on the same hardware as the ECC. (Note that subsequent figures in this article focus on the front end (CLC, Walrus, SC, CC) and node (NC) machines only.)
With the physical infrastructure in place, we installed the latest version of Eucalyptus (1.6.1 if I recall correctly) on the machines, configured Eucalyptus in MANAGED mode (see the networking guide for more information), assigned a few public IPs that we had scavenged, and uploaded a few of our test images. Not much to report here: All worked very well. We were ready for the issues tracker show down!.

Figure 2. An instance is started using euca-run-instances. The instance will see a local disk (sda) where the root file system (sda1), swap (sda2), and ephemeral0 (sda3) reside. The virtual disk sda physically resides on the NC disk allocated for the instances, and the disk is volatile, that is, it will disappear once the instance terminates.
We knew that we wanted the database on Elastic Block Storage (EBS) for persistence. But knowing little about each of the issue trackers, we decided it would be wise to ensure persistence of all data , and thus proceeded to install everything on EBS. First we created appropriately-sized volumes to host each issue tracker along with a full OS (see Fig. 3). Then we created an instance (see Fig. 2), attached the volume to it (see Fig. 4), and installed the OS, issue tracker and database in a chroot environment (for more detailed instructions see our community wiki). The chroot environment was used since Eucalyptus 1.6.2 and 2.0.2 do not support yet the booting from EBS primitive. We also made sure that all important services (e.g., syslog, logrotate, cron, etc.) would run in the chroot image, since the OS on the instance was only to be used to access the real environment on the EBS volume. We repeated the process for each issue tracker thus priming all volumes.
The final task was to allocate one Elastic IP (EIP) for each issue tracker we wanted to test. We then started all of the various instances, but quickly encountered the limitations of a desktop machine—not enough RAM, only 2 cores, and a small and slow disk. But with Eucalyptus no fear: We configured the small instance to use only 256MB of RAM and we overcommitted the cpus on the NC (the option MAX_CORES in eucalyptus.conf) and presto! our test environment was ready.

Figure 3. A volume is created using the euca-create-volume command. The Storage Controller (SC) handles the creation, maintenance, and exports of the volumes to the instances. Note that each availability zone has its own SC, and the volumes are local to that zone (i.e., only the instances in that zone can use the volume).

Figure 4. The volume created in Fig. 3 is attached to the instance created in Fig. 2. The attached volume will appear to the instance as another disk on the SCSI bus (in the figure as sdc) and it can be used as such (i.e., partitioned, formatted etc.). While the disk appears to the instance as local, it resides on the SC and is persistent storage, that is, the volume will remain when the instance terminates (unlike the instance-store sad, which is volatile and will terminate when the instance terminates). Volumes can be attached and detached as needed.
Finally, we terminated all other instances, removed the extra volumes to create space for snapshots (since we went live without really planning for a backup solution, we used snapshot as backups), restarted the instance with all available RAM, gave it the 2 available cores, and christened it production. When our infrastructure at CoreSite (see Case Study: Installing the Eucalyptus Community Cloud (ECC) for a picture of one of our racks) came online, we quickly reserved a few nodes and a few public IPs and moved our original production cloud to the new location, where we upgraded it to the latest Eucalyptus (2.0.1 at the time) and restored the service with minimal downtime.

Figure 5. Our support site (https://support.eucalyptus.com) lives in a chroot environment in the volume exemplified in Figure 3. This allows RT to be moved easily across instances, and to take snapshots (which works as a backup) at will.
Taking snapshot of a live file system is a bad idea: Thus far ext3 has been forgiving, but we need to check each snapshot for possible corruption. So a proper, more application friendly backup will be employed, and we are planning on using Walrus to store it. Also, RT is still running on the original EBS volume we created for testing it. We are considering the idea of splitting the database from the RT front end, and keeping only the data on EBS, while RT will be reinstalled and reconfigured each time the instance starts.
| Attachment | Size |
|---|---|
| ecc-volume-attach-1.png | 28.89 KB |
| ecc-volume-attach-2.png | 30.84 KB |
| ecc-volume-attach-3.png | 32.94 KB |
| RT.png | 43.27 KB |