1. THE SHIFT TO SERVER VIRTUALIZATION
Of all the innovations in server
technology over the last 10 years, in my view virtualization has had the
biggest impact, and made the biggest improvements, to server computing.
Although 64-bit architectures, multi-core processors, and solid-state
drives have revolutionized their niches of the industry, only
virtualization has fundamentally changed the way we can choose to
deploy, manage, and protect server workloads.
Today, it’s likely then that the IT environments
you use have virtualized servers in them. While a few years ago these
servers might have run the smaller workloads such as domain controllers
and print servers, today the capability of virtualization technology
means you are more likely to also find mission critical servers with
high workloads, such as database servers, being virtualized.
Finally, we’ll consider how you can deploy SQL Server 2012 successfully in a virtual environment and monitor it post go-live.
2. AN OVERVIEW OF VIRTUALIZATION
A typical textbook definition of
virtualization defines the concept of sharing a single physical resource
between multiple isolated processes, by presenting each with their own
virtual version of the physical resource. For example, several
virtualized instances of Windows can run concurrently on a single
physical server, each believing they have exclusive access to the
server’s hardware. One of the many benefits of doing this is to increase
the physical server’s overall utilization, therefore increasing the
value the physical server delivers.
A simple real-world example of deploying virtualization is to have a single physical server hosting four virtual servers.
Let’s assume that the physical server has four CPU
cores, 16GB of memory, and the necessary virtualization software to run
virtual servers installed on it.
In our example, four virtual servers can then be
created by the virtualization software and each configured to have four
virtual CPUs and 3GB of memory.
By default, none of the virtual servers are aware
of each other, let alone that they are sharing the physical server’s
hardware between them — nor would they know in our example that each
physical CPU core has potentially been allocated twice (8 physical cores
but 16 virtual CPUs allocated).
When the four virtual servers are running
concurrently, the virtualization software manages access to the physical
server’s resources on an “as and when needed” basis.
In a well-configured environment, we could expect
the person who configured the virtual servers to know that no more than
two of them would ever need to use all of their CPU resources at any one
time. Therefore, the physical host should always be able to satisfy
requests by the virtual servers to use all of their allocated CPU
resources without having to introduce any significant scheduling
overhead.
In a badly configured environment, there might be a
need for three virtual servers to use all of their allocated CPU
resources at the same time. It’s when this happens that performance
could begin to degrade for each of the virtual servers, as the
virtualization software has to start scheduling access to the physical
server’s resources; a quart has to be made out of a pint pot!
However, as you can probably already see, if the
virtual server workloads in this example were correctly sized and their
workloads managed, then a significant amount of data center space,
power, cooling, server hardware, CPUs, and memory can be saved by
deploying one rather than four physical servers.
This “deploy only what you actually need” approach
provided by virtualization explains why the technology moved so quickly
from being deployed in the development lab to enterprise data centers.
In fact, other than smartphone technology, it’s hard to find another
technological innovation in recent years that has been adopted so widely
and rapidly as virtualization has.
This rapid adoption is highly justifiable;
virtualization brought IT departments an efficient data center with
levels of flexibility, manageability, and cost reduction that they
desperately needed, especially during the server boom of the mid-2000s
and then the recession of the late 2000s. Moreover, once virtualization
is deployed and the benefits of replacing old servers with fewer new
servers are realized, the technology then goes on to deliver more
infrastructure functionality — and interestingly, functionality that
wasn’t available with traditional physical servers.
Indeed, it’s rare to find a SQL Server environment now which doesn’t
use virtualization technologies in some way. In larger environments,
companies might only be deploying it on developer workstations or in the
pre-production environment; but increasingly I am finding small,
mid-size, and even large infrastructures that are hosting their entire
production environment in a virtualized manner.
History of Virtualization
The concepts of the virtualization
technology that people are deploying today are nothing new, and you can
actually trace them back to IBM’s mainframe hardware from the 1960s! At
the time, mainframe hardware was very expensive, and customers wanted
every piece of hardware they bought to be working at its highest
capacity all of the time in order to justify its huge cost. The
architecture IBM used partitioned a physical mainframe into several
smaller logical mainframes that could each run an application seemingly
concurrently. The cost saving came from each logical mainframe only ever
needing to use a portion of the mainframe’s total capacity. While
hardware costs would not have decreased, utilization did, and therefore
value increased, pleasing the finance director.
During the 1980s and 1990s, PC-based systems
gained in popularity; and as they were considerably cheaper than
mainframes and minicomputers, the use of virtualization disappeared from
the technology stack for a while. However, in the late 1990s, VMware, a
virtualization software vendor, developed an x86-based virtualization
solution that enabled a single PC to run several operating system
environments installed on it concurrently. I remember the first time I
saw this running and was completely baffled! A backup engineer had a
laptop running both Windows and Linux on it; from within Windows you
could watch the virtual server boot with its own BIOS and then start up
another operating system. At the time, very few people knew much about
the Linux operating system, especially me, so the idea of running it on a
Windows laptop looked even more surreal!
This example was a typical use of VMware’s
original software in the late 1990s and early 2000s, and for a few
years, this was how their small but growing customer base used their
technology. It was only a few years later that a version of their
virtualization software hosted on its own Linux-based operating system
was released and data center hosted server-based virtualization
solutions began appearing.
Fundamentally, this server-based virtualization
software is the basis of the platform virtualization solutions we use
today in the biggest and smallest server environments.
The Breadth of Virtualization
When we talk about virtualization today,
it is mostly in terms of physical servers, virtual servers, and the
virtualization software known as a hypervisor. However, your data center has probably had virtualization
in it in some form for a long time, for the reasons we mentioned
earlier — to help increase the utilization of expensive and typically
underused physical hardware assets.
Today, most Storage Area Network hardware, SANs,
use virtualization internally to abstract the storage partitions they
present a server with from their physical components, such as the
different speed hard drives it might use internally for storing data on.
While a system administrator will see an amount of
usable storage on a storage partition the SAN creates for them, the
exact configuration of the physical disks that store the data are
hidden, or abstracted, from them by a virtualization layer within the
SAN.
This can be a benefit for system administrators,
allowing them to quickly deploy new storage while the SAN takes care of
the underlying technical settings. For example, modern SANs will choose
to store the most regularly used data on fast disks and the less
frequently used data on slower disks. Yet, the data accessed most
frequently might change over time, but by using virtualization, the SAN
can re-distribute the data based on historic usage patterns to optimize
its performance without the system administrator knowing.
Of course, this may not always be appropriate, a
DBA might ask to use storage with consistent performance metrics; but
like all virtualization technologies, once the product’s options and
limitations are known, an optimized configuration can be used.
Cisco and other network vendors also use
virtualization in their network hardware. You may wonder how a
collection of network cables and switches could benefit from
virtualization, but the concept of virtual LANS (VLANs) enables multiple
logical networks to be transmitted over a common set of cables, NICs
and switches, removing the potential for duplicated network hardware.
Finally, believe it or not, SQL Server still uses
memory virtualization concepts that date back to the Windows 3.1 era!
Windows 3.1 introduced the concept of virtual memory and the virtual
address spaces, it is still
core to the Windows memory management architecture that SQL Server uses
today. By presenting each Windows application with its own virtual
memory address space, Windows (rather than the application) manages the
actual assignment of physical memory to applications. This is still a
type of virtualization where multiple isolated processes concurrently
access a shared physical resource to increase its overall utilization.
Platform Virtualization
Having looked at the background of
virtualization and some of the reasons to use it, this section clarifies
what the term platform virtualization means.
Platform virtualization is a type of hardware
virtualization whereby a single physical server can concurrently run
multiple virtual servers, each with its own independent operating
system, application environment and IP address, applications, and so on.
Each virtual server believes and appears to be
running on a traditional physical server, with full access to all of the
CPU, memory, and storage resources allocated to it by the system
administrator. More importantly, in order for virtualization technology
to work, the virtual server’s operating system software can use the same
hardware registers and calls, and memory address space, which it would
use if it were running on a dedicated physical server. This allows
software to run on a virtual, rather than physical, server without being
recompiled for a different type of hardware architecture.
Cloud Computing
It’s almost impossible to read
technology news these days without seeing references to cloud computing,
and more commonly private clouds and public clouds. One of the
advantages of cloud computing is that new servers can be deployed very
quickly, literally in just minutes, and to do this they use platform
virtualization.
Private Clouds
In summary, private clouds are usually a
large and centrally managed virtualization environment deployed
on-premise, typically in your data center. The virtualization management
software they use often has management features added that allow end
users to provision their own new servers through web portals, and for
the dynamic allocation of resources between virtual servers. A key
benefit for businesses too is the ability to deploy usage-based charging
models that allow individual business departments or users to be
charged for their actual usage of a virtual server, as well as allowing
more self-service administration of server infrastructures.
Public Clouds
Public clouds, more often referred to as
just cloud computing, are very similar to private clouds but are hosted
in an Internet connected data center that is owned and managed by a
service provider rather than an internal IT department. They allow users
from anywhere in the world to deploy servers or services, through
non-technical interfaces such as a web portal, with no regard for the
underlying physical hardware needed to provide them. Microsoft’s Windows
Azure service is an example of a cloud computing service.