operations-guide/doc/openstack-ops/section_arch_example-nova.xml
Summer Long 56f3dff89f Added HA/Neutron architecture.
Includes overview, node types and diagrams, and example configuration.

Closes-Bug: #1268784

Change-Id: I91d66dc3fb7dff2ad54e8293497901bbdd620f12
2014-02-04 16:58:21 -06:00

337 lines
18 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE section [
<!-- Some useful entities borrowed from HTML -->
<!ENTITY ndash "&#x2013;">
<!ENTITY mdash "&#x2014;">
<!ENTITY hellip "&#x2026;">
<!ENTITY plusmn "&#xB1;">
]>
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="example_architecture-nova">
<?dbhtml stop-chunking?>
<title>Example Architecture - Legacy Networking (nova)</title>
<para>Because OpenStack is highly configurable, with many different
<glossterm>back-ends</glossterm> and network configuration options,
it is difficult to write documentation that covers all possible
OpenStack deployments. Therefore, this guide defines an
<emphasis>example architecture</emphasis> to simplify the task of
documenting, as well as to scope this guide. You can find additional
architectures in the <link linkend="use-cases">Use Cases</link>
appendix, the <link xlink:href="http://docs.openstack.org/">OpenStack
Installation Guides</link>, or the <link
xlink:href="http://openstack.org/user-stories/">OpenStack User
Stories page</link>.</para>
<section xml:id="overview">
<title>Overview</title>
<para>The simplest architecture you can build upon for Compute has a
single cloud controller and multiple compute nodes. The simplest
architecture for Object Storage has five nodes: one for identifying
users and proxying requests to the API, then four for storage itself
to provide enough replication for eventual consistency. This example
architecture does not dictate a particular number of nodes, but
shows the thinking and considerations that went into choosing this
architecture including the features offered.</para>
<section xml:id="overview_components-nova">
<title>Components</title>
<informaltable rules="all">
<col width="40%"/>
<col width="60%"/>
<tbody>
<tr>
<td><para>OpenStack release</para></td>
<td><para>Havana</para></td>
</tr>
<tr>
<td><para>Host operating system</para></td>
<td><para>Ubuntu 12.04 LTS or Red Hat Enterprise Linux 6.5
including derivatives such as CentOS and Scientific Linux</para></td>
</tr>
<tr>
<td><para>OpenStack package repository</para></td>
<td><para><link
xlink:href="https://wiki.ubuntu.com/ServerTeam/CloudArchive"
>Ubuntu Cloud Archive</link>
(https://wiki.ubuntu.com/ServerTeam/CloudArchive)
or <link xlink:href="http://openstack.redhat.com/Frequently_Asked_Questions">RDO</link>
(http://openstack.redhat.com/Frequently_Asked_Questions)
*</para></td>
</tr>
<tr>
<td><para>Hypervisor</para></td>
<td><para>KVM</para></td>
</tr>
<tr>
<td><para>Database</para></td>
<td><para>MySQL*</para></td>
</tr>
<tr>
<td><para>Message queue</para></td>
<td><para>RabbitMQ for Ubuntu, Qpid for Red Hat Enterprise
Linux and derivatives</para></td>
</tr>
<tr>
<td><para>Networking service</para></td>
<td><para>nova-network</para></td>
</tr>
<tr>
<td><para>Network manager</para></td>
<td><para>FlatDHCP</para></td>
</tr>
<tr>
<td><para>Single nova-network or
multi-host?</para></td>
<td><para>multi-host*</para></td>
</tr>
<tr>
<td><para>Image Service (glance)
back-end</para></td>
<td><para>file</para></td>
</tr>
<tr>
<td><para>Identity Service (keystone)
driver</para></td>
<td><para>SQL</para></td>
</tr>
<tr>
<td><para>Block Storage Service (cinder)
back-end</para></td>
<td><para>LVM/iSCSI</para></td>
</tr>
<tr>
<td><para>Live Migration back-end</para></td>
<td><para>shared storage using NFS *</para></td>
</tr>
<tr>
<td><para>Object storage</para></td>
<td><para>OpenStack Object Storage
(swift)</para></td>
</tr>
</tbody>
</informaltable>
<para>An asterisk (*) indicates when the example architecture
deviates from the settings of a default
installation.</para>
<?hard-pagebreak?>
<note>
<para>The following features of OpenStack are supported by
the example architecture documented in this guide, but
are optional: <itemizedlist role="compact">
<listitem>
<para><glossterm>dashboard</glossterm></para>
</listitem>
<listitem>
<para><glossterm>block
storage</glossterm></para>
</listitem>
<listitem>
<para><glossterm>floating IP
address</glossterm>es</para>
</listitem>
<listitem>
<para><glossterm>live
migration</glossterm></para>
</listitem>
<listitem>
<para><glossterm>object
storage</glossterm></para>
</listitem>
</itemizedlist></para>
</note>
</section>
<section xml:id="rationale">
<title>Rationale</title>
<para>This example architecture has been selected based on the
current default feature set of OpenStack
<glossterm>Havana</glossterm>, with an emphasis on
stability. We believe that many
clouds that currently run OpenStack in production have
made similar choices.</para>
<para>You must first choose the operating system that runs on
all of the physical nodes. While OpenStack is supported on
several distributions of Linux, we used <emphasis
role="bold">Ubuntu 12.04 LTS (Long Term
Support)</emphasis>, which is used by the majority of
the development community, has feature completeness
compared with other distributions, and has clear future
support plans.</para>
<para>We recommend that you do not use the default Ubuntu
OpenStack install packages and instead use the <link
xlink:href="https://wiki.ubuntu.com/ServerTeam/CloudArchive"
>Ubuntu Cloud Archive</link>
(https://wiki.ubuntu.com/ServerTeam/CloudArchive). The Cloud Archive
is a package repository supported by Canonical that allows you to
upgrade to future OpenStack releases while remaining on Ubuntu
12.04.</para>
<para><emphasis role="bold">KVM</emphasis> as a
<glossterm>hypervisor</glossterm> complements the choice of
Ubuntu - being a matched pair in terms of support, and also because
of the significant degree of attention it garners from the OpenStack
development community (including the authors, who mostly use KVM).
It is also feature complete, free from licensing charges and
restrictions.</para>
<para><emphasis role="bold">MySQL</emphasis> follows a similar trend.
Despite its recent change of ownership, this database is the most
tested for use with OpenStack and is heavily documented. We deviate
from the default database, <emphasis>SQLite</emphasis>, because
SQLite is not an appropriate database for production usage.</para>
<para>The choice of <emphasis role="bold"> RabbitMQ</emphasis> over
other AMQP compatible options that are gaining support in OpenStack,
such as ZeroMQ and Qpid is due to its ease of use and
significant testing in production. It also is the only option which
supports features such as Compute cells. We recommend clustering
with RabbitMQ, as it is an integral component of the system, and
fairly simple to implement due to its inbuilt nature.</para>
<para>As discussed in previous chapters, there are several options for
networking in OpenStack Compute. We recommend <emphasis role="bold"
>FlatDHCP</emphasis> and to use <emphasis role="bold"
>Multi-Host</emphasis> networking mode for high availability,
running one <code>nova-network</code> daemon per OpenStack Compute
host. This provides a robust mechanism for ensuring network
interruptions are isolated to individual compute hosts, and allows
for the direct use of hardware network gateways.</para>
<para><emphasis role="bold">Live Migration</emphasis> is supported by
way of shared storage, with <emphasis role="bold">NFS</emphasis> as
the distributed file system.</para>
<para>Acknowledging that many small-scale deployments see running an
Object Storage service just for the storage of virtual machine
images as too costly, we opted for the file back-end in the
OpenStack Image Catalog and Delivery Service (Glance). If the cloud
you are designing also intends to run Object Storage, it is trivial
to enable this as the back-end instead, and a recommended
approach.</para>
<para>We chose the <emphasis role="bold">SQL back-end for Identity
Service (keystone)</emphasis> over others, such as LDAP. This
back-end is simple to install and is robust. The authors acknowledge
that many installations want to bind with existing directory
services, and caution careful understanding of the <link
xlink:title="LDAP config options"
xlink:href="http://docs.openstack.org/trunk/config-reference/content/ch_configuring-openstack-identity.html#configuring-keystone-for-ldap-backend"
>array of options available</link>
(http://docs.openstack.org/trunk/config-reference/content/ch_configuring-openstack-identity.html#configuring-keystone-for-ldap-backend)</para>
<para>The Block Storage service (cinder) is installed natively on
external storage nodes and uses the <emphasis role="bold">LVM/iSCSI
plugin</emphasis>. Most Block Storage Service plugins are tied
to particular vendor products and implementations limiting their use
to consumers of those hardware platforms, but LVM/iSCSI is robust
and stable on commodity hardware.</para>
<para>While the cloud can be run without the <emphasis role="bold"
>OpenStack Dashboard</emphasis>, we consider it to be
indispensable, not just for user interaction with the cloud, but
also as a tool for operators. Additionally, the dashboard's use of
Django makes it a flexible framework for extension.</para>
<section xml:id="neutron">
<title>Why Not Use the OpenStack Network Service
(neutron)?</title>
<para>This example architecture does not use the OpenStack
Network Service (neutron), because it does not yet support
multi-host networking and our organizations (university,
government) have access to a large range of
publicly-accessible IPv4 addresses.</para>
</section>
<section xml:id="multi-host-networking">
<title>Why Use Multi-host Networking?</title>
<para>In a default OpenStack deployment, there is a single
<code>nova-network</code> service that runs within the cloud
(usually on the cloud controller) that provides services such as
network address translation (NAT), DHCP, and DNS to the guest
instances. If the single node that runs the
<code>nova-network</code> service goes down, you cannot
access your instances and the instances cannot access the
Internet. The single node that runs the nova-network service can
become a bottleneck if excessive network traffic comes in and
goes out of the cloud.</para>
<para>
<link xlink:href="http://docs.openstack.org/havana/install-guide/install/apt/content/nova-network.html"
>Multi-host</link>
(http://docs.openstack.org/havana/install-guide/install/apt/content/nova-network.html)
is a high-availability option for the network
configuration where the nova-network service is run on
every compute node instead of running on only a single
node.</para>
</section>
</section>
</section>
<section xml:id="detailed_desc">
<title>Detailed Description</title>
<para>The reference architecture consists of multiple compute
nodes, a cloud controller, an external NFS storage server
for instance storage and an OpenStack Block Storage server
for <glossterm>volume</glossterm> storage. A network time
service (Network Time Protocol, NTP) synchronizes time for
all the nodes. FlatDHCPManager in multi-host mode is used
for the networking.</para>
<informalfigure>
<mediaobject>
<imageobject>
<imagedata width="4in"
fileref="figures/os-ref-arch.png"/>
</imageobject>
</mediaobject>
</informalfigure>
<para>The cloud controller runs: the dashboard, the API
services, the database (MySQL), a message queue server
(RabbitMQ), the scheduler for choosing compute resources
(nova-scheduler), Identity services (keystone,
<code>nova-consoleauth</code>), Image services
(<code>glance-api</code>,
<code>glance-registry</code>), services for console access
of guests, and block storage services including the
scheduler for storage resources (<code>cinder-api</code>
and <code>cinder-scheduler</code>).</para>
<?hard-pagebreak?>
<para>Compute nodes are where the computing resources are
held, and in our example architecture they run the
hypervisor (KVM), libvirt (the driver for the hypervisor,
which enables live migration node to node),
<code>nova-compute</code>,
<code>nova-api-metadata</code> (generally only used
when running in multi-host mode, it retrieves
instance-specific metadata), nova-vncproxy, and
<code>nova-network.</code>
</para>
<para>The network consists of two switches, one for the
management or private traffic, and one which covers public
access including Floating IPs. To support this, the cloud
controller and the compute nodes have two network cards.
The OpenStack Block Storage and NFS storage servers only
need to access the private network and therefore only need
one network card, but multiple cards run in a bonded
configuration are recommended if possible. Floating IP
access is direct to the internet, whereas Flat IP access
goes through a NAT.</para>
<informalfigure>
<mediaobject>
<imageobject>
<imagedata width="4in"
fileref="figures/os_physical_network.png"/>
</imageobject>
</mediaobject>
</informalfigure>
</section>
<?hard-pagebreak?>
<section xml:id="optional_extensions">
<title>Optional Extensions</title>
<para>You can extend this reference architecture as
follows:</para>
<itemizedlist role="compact">
<listitem>
<para>Add additional cloud controllers (see <xref
linkend="maintenance"/>).</para>
</listitem>
<listitem>
<para>Add an OpenStack Storage service (see the Object Storage
chapter in the <citetitle>OpenStack Installation
Guide</citetitle> for your distribution.</para>
</listitem>
<listitem>
<para>Add additional OpenStack Block Storage hosts
(see <xref linkend="maintenance"/>).</para>
</listitem>
</itemizedlist>
</section>
</section>