VMWare Environment & Site Architecture

By Bobby on Fri, 10 Apr 2009 04:41:02 +0000

: VMWare, ESXi, Reverse Proxy, Topology, IIS7,

It's about time i posted something about my VMWare ESXi environment - VMWare ESXi is a virtualization platform which enables anyone to run multiple systems side-by-side and concurrently on a single machine.

As far as ESXi goes my environment is pretty typical, i have 20 or so Virtual Machines available, of which a select few are actively running at any given time. The VM Host server has sufficient resources to run all the VMs i need without going over 50% memory and 20% CPU utilization.

The server itself is a Dell PowerEdge 1900 which has the following specs:
  • Dual Quad-Core Xeon CPUs at 2.66 Ghz
  • 16 Gb Memory at 667 Mhz
  • 1333 Mhz Front Side Bus
  • 2 SCSI 15K RPM Drives in a RAID configuration
  • 2 Network Interfaces
  • 2 SATA Drives at 500Gb and 1Tb each
Note: This server is maxed out, so i won't be able to add any more memory, disks or CPU (expandability is worth paying for).

Here is a screenshot of my VMWare ESXI environment:

Among my VMs i have:
  • 2 Windows Server 2003 servers
  • 2 Windows Server 2008 servers
  • 1 Debian Linux server
  • 2 Ubuntu Linux machines (one server and one workstation)
  • 1 Gentoo Linux server
  • 1 Windows Vista workstation
  • 2 Windows XP workstations
  • 1 Windows 7 workstation
  • 1 Solaris 10 server
Of the Virtual Machines above, a few are internet facing. To make the most of this environment i wanted to be able to expose any given VM to the internet - one reason being that certain development projects or services require different environments, for instance i'd rather keep LaTeX and LAMP projects in Linux and .NET/MSSQL projects in Windows.

The challenge is that i only have one internet IP - this means that i would need different DNS entries, all of which point to my IP on port 80, to come in and be routed to separate environments. Or even worse, to have requests coming on a single domain be routed to different machines depending on the URL (e.g. http://dev.bloo.us/ go to Windows, and http://dev.bloo.us/latex/ go to Linux). I tried different options to obtain this configuration, including a ZXTM Virtual Load Balancer (which didn't seem to be able to do the job) and an Apache reverse proxy (which can do the job, but not without effort) until i settled for an IIS7 reverse proxy.

IIS7, in combination with the URL Rewriter and Application Request Routing (ARR) modules can allow you to easily configure behaviors such as:
  • Load Balancing
  • URL Translation
  • URL based routing
  • Proxying & Caching
  • SSL Offloading
Comparing with Apache, IIS7 is significantly easier to configure but Apache seems to provide additional options (such as rewriting links in HTML files).

I put this to use in creating a Web Service site that can host interfaces for the technologies that i can't presently move to the AppEngine (e.g. LaTeX, GraphViz, .NET libraries, etc). The diagram below outlines the topology:

The end product is an environment where any system can be quickly virtualized and exposed to the outside directly or as a web service without additional DNS entries or IP addresses and without complex routing/configuration. If you're a web developer i recommend you take a look at this VMWare plus Reverse Proxy configuration to find out how much it can do for you, it's worth it.

Comment moderation is on, so your comments may not be visible immediately after posting.

(see all) web service, tile engine, google docs, flash, window, penn, pixel, python, game, compiler, server, tlslite, token, reference, rtmp, vmware, p vs np, Google Docs, poweredge, javascript, component, vbulletin, proxy, networking, vmware esxi, GData, forum, plugin, gwt, outlook, scales, puzzle, GWT, java, attach, shining force, subsets, appengine, permutations, pong, authentication, roland, screenshot, np-complete, gdata, neural net, php, latex, audio, AppEngine