Virtualized Server Configuration
As detailed in this post, one of my plans for 2012 is to split my server into multiple VMs. Currently the server hosts crucial services that can not be migrated in one go. It is therefore necessary to setup the VMs while keeping the services on the old server alive.
The first thing required is a virtualization platform. Specifically, a datacenter virtualization platform and not a cloud computing platform (IaaS), like OpenStack, Eucalyptus, and the like. A cloud computing platform (like Amazon EC2) is optimized for rapid deployment and destruction of (small) services.
I choose plain libvirt as virtualization with an optional upgrade path to Archipel. Libvirt can be installed on the current server without affecting the overall system. Services can then be migrated over to VMs, when needed. After successful migration of all services, a fresh OS can be installed, only requiring a copy of /etc/libvirt (and /var/lib/libvirt) to start the VMs as if nothing ever happened. To manage the VMs, the Virtual Machine Manager (virt-manager) is used from a remote machine.
This is a list of platforms I looked into:
The oVirt project uses libvirt for virtualization. It provides scalable datacenter virtualization with cluster managing, node managing, etc all from a single web UI. A unique feature is the node OS. A small footprint OS, that can be started on any physical machine with AMD-V or Intel VT-x and be added as a host to a cluster. VMs will be started on one of the nodes in a cluster and can be migrated to other nodes in case of failure, maintenance, etc.
This was my first choice until I actually tried it on a physical machine. Using the web UI to define VMs, storage pools, hosts, etc is a breeze. So far everything is good. Main problem in my configuration would be, that the oVirt engine is running on the same host, as VDSM, the virtualization host/node. Problems arose, once the physical node was restarted. After the reboot, all managed objects were marked with status unknown/invalid. Even worse, using the web UI, they could not be activated. This happened multiple times, so my guess is, it will also happen in a production system. The main problem was, that a VM was marked as running on a host, while both the VM and host had an invalid status. The VM could not be detached from the host (to detach, the host must be running) and the host could not be reactivated (all VMs must be detached first).
This system is bound to Red Hat systems.
Ganeti is a project from Google for cluster management. It uses direct Xen or KVM/Qemu (without libvirt!). Seems to be a simple system, but would still be overkill for one single physical machine.
- Gentoo ebuild available
- Web UI frontend is a mess to install
Libvirt is the standard virtualization system in linux. Using libvirt, one can transparently use different hypervisors, networks, storage pools, etc. Several other applications use libvirt as a base to add e.g. clustering on top of it. Migration to one of these applications would be easy, when using libvirt from the beginning.
- Gentoo ebuild available
- widely adopted
- multiple GUI available
- host-centered (i.e. no clustering – manual migration is possible)
Archipel uses XMPP as protocol to talk to VMs (unique and cool :-) ). Underneath, libvirt is used. It has a nice looking web UI with integrated VNC, resource usage charts and more.
This is my second favorite, for its simplicity and uniqueness. A real showstopper for now is the very slow web UI. Slow meaning, one has to wait for some seconds until an action is executed. There is definitely no snappiness. Once the UI is faster it must be reevaluated.
- simple (once one understands, that everything is a XMPP entity)
- nice UI
- libvirt based (only a small layer on top of libvirt)
- slow UI
- no Gentoo ebuild (easy_install archipel-agent is a mess: installs borked /etc/init.d/archipel script)
- requires ejabberd server