Unlike some virtualization solutions, Virtuozzo doesn't present a software virtual machine to an operating system to run multiple OSes on the same system. Instead, Virtuozzo uses OS-level virtualization to partition the system into separate Virtual Private Servers (VPS) -- similar to Solaris Zones or Linux-VServer.
This means that Virtuozzo for Linux can run several Linux VPSes, but unlike VMware, it doesn't run multiple OSes on the same server. That might seem to limit your choices somewhat, but many organizations have no interest in running different OSes in virtual containers -- they just need a way to improve hardware utilization through server consolidation, and make system management easier. Virtuozzo does do that very well.
Each Virtuozzo VPS has its own filesystem, root user, and configurations. For all intents and purposes, each VPS is its own separate system.
You should install Virtuozzo on a fresh install of Red Hat Enterprise Linux, CentOS, or another supported distribution. A stock install of CentOS 4.2 and the rpm-build package are all that's required. You'll also need a separate vz partition, where the virtual hosts will live. Allocate as much space to this partition as possible.
To test Virtuozzo, I installed it on a machine with two Pentium III 1.0GHz CPUs and 2GB of RAM, running CentOS 4.2, and a machine with an AMD Athlon XP 2600+ with 1GB of RAM, also running CentOS 4.2.
Installation takes about 20 minutes, and it's a pretty simple procedure -- start the installer, answer a few questions, and reboot. After that, install the license keys and then start setting up virtual servers. I have to admit, I really don't enjoy having to fiddle with license keys and that sort of silliness -- and it's a major reminder why I prefer open source software to proprietary software.
You can also run the installation in unattended mode -- which means that Virtuozzo is installed with the default options or with options passed to it on the command line, without requiring an administrator to sit at the console and specify the IP address for the control node, admin password, and so forth. This is something you'd want to do if you use Virtuozzo on a large number of systems.
Other than license key hassles, I give Virtuozzo's installer high marks.
Setup and management
After Virtuozzo is installed, it's time to start setting up your virtual host or hosts. Virtuozzo offers GUI and command-line utilities to manage your hardware and virtual nodes. I found both modes easy to use.
SWsoft offers a few GUI utilities. The first, the Virtuozzo Management Console (VZMC), is the method you'll probably want to use most of the time. Virtuozzo operations like creating a new node, copying a virtual node to a different hardware node, or moving templates from one node to another are as simple as point and click.
For Web-based management, SWsoft provides the Virtuozzo Control Center (VZCC) and Virtuozzo Power Panel (VZPP). VZCC is for administering the hardware node and its VPSes, while VZPP is only for managing private servers -- which means VZPP can be used by customers in hosting environments, where you want to provide a customer with management capabilities for his own server, but limit access otherwise. It's also good for corporate environments where you might have VPSes for different departments residing in the same hardware pool, or where one admin may be responsible for a couple of VPSes for accounting and another responsible for VPSes for marketing.
The first thing you'll need to do after creating a Virtuozzo hardware node is to load the OS templates on the system. This is, literally, as easy as installing an RPM -- because it is installing an RPM. SWsoft ships Virtuozzo with a few templates, such as CentOS 4 and Fedora Core 4, as well as a few application templates.
While it might take an hour to install CentOS 4 on a system the old-fashioned way, or a little less using a tool like Kickstart, installing a CentOS 4 VPS on Virtuozzo took less than five minutes, and most of that time was simply waiting for Virtuozzo to finish copying files behind the scenes.
Managing the virtual nodes once they're installed is easy as well. You can manage and monitor services on the nodes without even logging into them directly by using VZMC or using the command-line utilities. For example, if you want to stop and restart Apache on a virtual node, all you need to do is go to that node's services and click stop or restart service. Not only can you stop and restart services, you can also restart VPSes without affecting any of the other systems on the hardware node.
You can also use VZMC to create virtual hosts under Apache on virtual nodes, manage users and groups, configure the virtual hosts' firewalls, and manage mail. It's impressive how much you can do from VZMC with minimal effort. VZMC also shows detailed information about the health of each virtual node, how much traffic it receives, memory usage, disk usage, CPU usage, and other vital stats.
VZMC is usually the best way to make quick changes and manage things like moving a virtual node from one hardware node to another, but the command-line utilities lend themselves to scripting. Want to automate creating VPSes, write your own Nagios plugins for Virtuozzo, or run automated backups? The command-line tools come in really handy. They're also nice if you need to manage a hardware node remotely from a system that doesn't have VZMC installed.
From the user's perspective, a Virtuozzo VPS looks and acts like a regular server most of the time. The only real difference that I've noticed on a VPS is that you can't set the date -- that can only be done on the hardware node. Obviously this is because Virtuozzo only has one system clock to work with. It shouldn't be a major issue.
Each virtual host is also separate in terms of the filesystems, so user files and data on a virtual node are not visible to other nodes on a hardware node, though the files are visible on the hardware node itself.
Quality of Service rules
Virtuozzo allows the administer to tweak a number of resource management parameters -- everything from the obvious to the obscure. For example, you can limit the amount of disk space, network bandwidth, and CPU time, as well as number of Netfilter entries, size of TCP, UDP, or Unix buffers, and many other parameters.
It can take a little tweaking to get these numbers right -- set a limit too low, and a small spike in network activity or active processes can cripple a virtual host. Set the limits too high, and one VPS can have a negative impact on the performance of others. Also note that resource constraints can't solve every problem. For example, even though each host's network is segregated from the other hosts, if someone launches a denial of service attack against a single host that manages to overwhelm the available bandwidth on a server, it's going to negatively affect all of the hosts on the server whether or not the resource constraints limit the amount of bandwidth a single VPS can consume.
It could be a little simpler to set things like memory and CPU resources. The parameters are very fine-grained, which allows for minute control over the system, but it'd be nice to just be able to tell Virtuozzo "just assign 256MB of RAM to this VPS."
Moving hosts and disaster recovery
Imagine you're an administrator and actually want to have a life outside of the normal workday. OK, you probably shouldn't be a system administrator and expect to have a normal life, but that's beside the point. Let's say you want to find a way to plan ahead for disasters as well as normal system upgrades and maintenance. Virtuozzo can play a big part in simplifying upgrades and disaster recovery.
For instance, if you have a Virtuozzo VPS that's outgrowing its resources, whether it's one of many VPSes on a server or a single VPS that has all system resources devoted to it, it's ridiculously easy to move that host to new hardware when it's time to upgrade. Using VZMC, just click on the VPS you want to migrate, select Tasks -> Migrate to another hardware node. VZMC walks you through a short wizard that asks a few simple questions and then copies over the VPS.
What's even better than being ridiculously easy to use? How about no downtime? Imagine being able to move a system to a new server while the system is still up and running, and without disrupting your customers or fellow employees. If you select the online migration, Virtuozzo moves the VPS without any disruption in service.
In terms of disaster recovery, you may not be able to maintain the VPS uptime if hardware fails, but Virtuozzo provides the ability to restore VPSes from backups. Backing up a VPS using VZMC is a one-click operation. If you have multiple hardware nodes, you can opt to back up the VPS to a different server, so that the VPS backup is safely tucked away on separate hardware. If the original hardware node dies, it's easy to bring up the backup and get it running on a different machine.
In fact, you can create a backup node just to hold VPS backups for disaster recovery. I didn't find a way in VZMC to schedule backups, but it is possible to do scheduled backups using the vzbackup command-line utility.
Another nifty feature is the ability to "clone" existing VPSes. Need to set up another Web server just like the VPS you've already tuned and gotten running? Just clone it. Again, using VZMC, this just takes a couple of clicks.
If there's one area where most companies tend to skimp, it's on documentation. Virtuozzo is a fairly complex product, and it'd be murder to try to administer it without decent documentation. I'm happy to report that SWsoft has delivered useful and detailed documentation in abundance.
The Getting Started with Virtuozzo guide that I received from SWsoft is exceptionally clear and complete. They not only give decent step-by-step instructions, but also provide a decent amount of guidance in terms of best practices for using Virtuozzo and setting up virtual hosts.
Another thing I really like is that SWsoft provides man pages for the command-line tools that ship with Virtuozzo. It's not at all uncommon for commercial software for Linux to come sans man pages, but the Virtuozzo man pages are well-written and useful.
Any business or organization that's looking at virtualization should put Virtuozzo at the top of the list. It's a really powerful solution that's relatively simple to administer and use.
Virtuozzo is not the same type of solution as VMware Server or ESX. Since Virtuozzo approaches virtualization differently, you don't have the same operating system flexibility that you'd have with VMware Server -- want to run FreeBSD, Linux, and Windows on the same machines? Then Virtuozzo isn't the offering for your organization. Want to use a virtualization solution that helps partition servers into multiple Linux VPSes, and makes things much easier to manage? Then I'd recommend checking out Virtuozzo when you evaluate solutions.
If you're an "open source at all costs" type of person, take a look at SWsoft's OpenVZ instead. OpenVZ has a subset of the features included with Virtuozzo -- you can still run multiple guests on a single host, and it offers much of the same functionality in terms of QoS features, but it lacks the GUI tools and utilities that make it really easy to manage Virtuozzo.