Ever since Exchange Server 5.5, Microsoft has offered
the option to use Windows Clustering to create a highly available
Exchange Mailbox environment. In a typical shared-storage cluster
environment there are two server nodes available, both running Exchange
Server, and both servers are connected to a shared storage solution. In
the early days, this shared storage was built on a shared SCSI bus and
later on, SANs with a Fiber Channel or iSCSI network connection were
used. The important part was the shared storage where the Exchange
Server databases were located.
At any given point in time only one server node is the "owner" of this shared data, and it is this server node that is providing the client services; this server node is also known as the active node. The other node was not able to access this data, and was therefore the passive node.
A private network between the two server nodes is used for
intra-cluster communications, such as a heartbeat signal, allowing both
nodes to determine the state of the cluster, and if other nodes are
still alive.
In addition to the two nodes, an "Exchange Virtual Server"
was created as a cluster resource (note that this has nothing to do
with virtual machines!). This is the resource that (Outlook) clients
connect to in order to get access to their mailboxes. When the active
node fails, the passive node takes over the Exchange Virtual Server,
which then continues to run. Although users will notice a short downtime
during the fail-over, it is an otherwise seamless experience, and no
action is needed from an end-user perspective.
Although this solution
offers redundancy, there's still a single point of failure: the shared
database of the Exchange server. In a typical environment this database
is stored on a SAN, and by its nature a SAN is a highly available
environment. But when something does happen to the database, a logical failure for example, the database is unavailable for both nodes, resulting in total unavailability.
1. Exchange database replication
Microsoft offered a new
solution in Exchange Server 2007 to create highly available Exchange
environments: database replication. When using database replication, a
copy of a database was created, resulting in database redundancy. This
technology was available in three flavors:
Local Continuous Replication (LCR) – a copy of the database is created on the same server.
Cluster Continuous Replication (CCR) – a copy of the database is created on another node in a Windows failover cluster (there can only be two nodes in a CCR cluster).
Stand-by Continuous Replication (SCR)
– this came with Exchange Server 2007 SP1. A copy of a database is
created on any other Exchange server (i.e. not necessarily in the
cluster). This is not meant as a high availability solution, but more as
a disaster recovery solution.
This is how database replication works in a CCR clustered environment:
Exchange Server 2007 is
installed on a Windows Server 2003 or Windows Server 2008 Fail-over
cluster. There's no shared storage in use within the cluster, but each
node has its own storage. This can be either on a SAN (fibre channel or
iSCSI) or Direct Attached Storage (DAS) – i.e. local physical disks.
As mentioned earlier, the
active node in the cluster is servicing client requests, and Exchange
Server uses the standard database technology with a database, log files,
and a checkpoint file. When Exchange Server is finished with a log
file, the log file is sent immediately to the passive node of the
cluster. This can either be via a normal network connection or via a
dedicated replication network.
The passive node receives the
log file and checks it for errors. If none are found, the data in the
log file is relayed into the passive copy of the database. This is an
asynchronous process, meaning the passive copy is always a couple of log
files behind the active copy, and so information is "missing" in the
passive copy.
In this environment, all
messages are sent via a Hub Transport Server, even internal messages.
The Hub Transport Server keeps track of these messages in a CCR
environment, and can therefore send missing information (which the
passive node actually requests) to the passive copy of the cluster in
case of a cluster fail-over. This is called the "Transport Dumpster" in a Hub Transport Server.
This kind of
replication works very well; a lot of System Administrators are using
CCR replication and are very satisfied with it. There are a couple of
drawbacks, though:
An Exchange
Server 2007 CCR environment is running on Windows Server 2003 or Windows
Server 2008 clustering. For many Exchange administrators this brings a
lot of additional complexity to the environment.
Windows
Server 2003 clustering in a multi-subnet environment is nearly
impossible, although this has improved (but is still not perfect) in
Windows Server 2008 failover-clustering.
Site Resilience is not seamless.
CCR clustering is only possible in a two node environment.
All three kinds of replication (LCR, CCR and SCR) are managed differently.
To overcome these
issues, Microsoft has dramatically improved the replication technology,
and reduced the administrative overhead at the same time. This is
achieved by completely hiding the cluster components behind the
implementation of Exchange Server 2010. The cluster components are still
there, but the administration is completely done with the Exchange
Management Console or the Exchange Management Shell.
2. Database Availability Group and Continuous Replication
In Exchange Server 2010, Microsoft
introduces the concept of a Database Availability Group or DAG, which
is a logical unit of Exchange Server 2010 Mailbox Servers. All Mailbox
Servers within a DAG can replicate databases to each other, and a single
DAG can hold up to 16 Mailbox Servers and up to 16 copies of a
database. The idea of multiple copies of a database in one Exchange
organization is called Exchange Mobility; one database exists on multiple servers, each instance of which is 100% identical and thus has the same GUID.
With a DAG in place, clients
connect to an Active Database, which is the database where all data is
initially stored. Also, new SMTP messages that arrive, either from
outside or inside the organization, are stored in this database first.
When the Exchange Server has finished processing information in the
database's log file, the file is replicated to other servers (you can
assign which servers should have a copy of the database). The log file
is inspected upon receipt and, if everything is all right, the
information contained in the log file is dropped into the local copy of
the database.
In Exchange Server
2010, all clients connect to the Client Access Server, including all
MAPI clients like Microsoft Outlook. Supported Outlook clients in
Exchange Server 2010 include Outlook 2003, Outlook 2007 and Outlook
2010. So, the Outlook client connects to the Client Access Server which,
in turn, connects to the mailbox in the Active Copy of the database, as
you can see in Figure 6.
Unfortunately, this is only true for Mailbox Databases. When an Outlook
client needs to access a Public Folder Database, the client still
accesses the Mailbox Server directly.
When the active copy of a
database or its server fails, one of the passive copies of the database
becomes active. The order of fail-over is configurable during the
configuration of database copies. The Client Access Server automatically
notices the fail-over, and starts using the new Active Database. Since
the Outlook client is connected to the Client Access Server and not
directly to the database, a database fail-over is fully transparent.
Messages like "The connection to the server was lost" and "The
connection to the server is restored" simply do not appear any more.
When building a highly
available Mailbox Server environment in a DAG, there's no need to build
a fail-over cluster in advance, as additional Mailbox Servers can be
added to the DAG on the fly. However, for the DAG to function properly,
some fail-over clustering components are still used, but these are
installed during DAG's configuration. All Management of the DAG and the
database copies is performed via the Exchange Management Console or the
Exchange Management Shell; the Windows Cluster Manager is no longer
used.
NOTE
The
Database Availability Group with Database Copies is the only high
availability technology used in Exchange Server 2010. Older technologies
like SCR, CCR and SCR are no longer available. The traditional Single
Copy Cluster (SCC) with shared storage is also no longer supported.
Configuration of a Database
Availability Group is no longer limited to a server holding just the
Mailbox Server Role. It is possible to create a two-server situation
with the Hub Transport, Client Access and Mailbox Server role on both
servers, and then create a Database Availability Group and configure
Database Copies. However, it isn't a High Availability configuration for
the Client Access or Hub Transport servers unless you've put load
balancers in front of them, since it's not possible to use the default
Windows Network Load Balancing (NLB) in combination with the fail-over
clustering components. Regardless, this is a great improvement for
smaller deployments of Exchange Server 2010 where high availability is
still required.
2.1 Active Manager
In Exchange Server 2007,
Cluster Continuous Replication uses the cluster resource management
model to install and manage the High Availability solution. Initially,
the Windows cluster is built and then Exchange setup is run in clustered
mode, registering the EXRES.DLL in the failover-cluster, and the
Clustered Mailbox Server (CMS) was created. For a High Available
Exchange Server 2007 environment it is always necessary to build a fail-over cluster in advance, even if it's just a one-node cluster!
The cluster components are now hidden in Exchange Server 2010, and a new component named the Active Manager
has been introduced. The Active Manager replaces the resource model and
fail-over management features offered in previous versions of Exchange
Server.
The fail-over clustering
components have not been completely removed, though, and some of them
are actually still used. If you open the Fail-over Cluster Manager in
Administrative Tools, you'll find the DAG, cluster networks, etc. Do not
try to manage the DAG using the Failover Cluster Manager, as this is
not supported. The only way to manage the DAG is using the Exchange
Management Console or the Exchange Management Shell!
The Active Manager runs
on all Mailbox Servers that are members of a DAG, and there are two
roles; the Primary Active Manager (PAM) and the Standby Active Manager
(SAM). The PAM is running on the Mailbox Server that also holds the
cluster quorum, and this is the server that decides which databases are
active and which databases are passive in a DAG. The SAM is responsible
for determining server or database failures (the PAM does this on its
own server for its own local databases) and, if detected, communicates
with the PAM to initiate a failover.
The replication service
monitors the health of the mounted databases in a DAG, and monitors the
ESE engine for any I/O issues or failures. If anything goes wrong here,
the replication service immediately contacts the Active Manager. In the
case of a failover, the Active Manager determines which database should
become the Active Copy of the database (depending on the fail-over order
you've specified during configuration).