Merge "[arch-guide-archive] Removing old arch guide from master"
@ -33,6 +33,4 @@ declare -A SPECIAL_BOOKS=(
|
|||||||
["contributor-guide"]="skip"
|
["contributor-guide"]="skip"
|
||||||
["releasenotes"]="skip"
|
["releasenotes"]="skip"
|
||||||
["ha-guide-draft"]="skip"
|
["ha-guide-draft"]="skip"
|
||||||
# Skip old arch design, will be archived
|
|
||||||
["arch-design-to-archive"]="skip"
|
|
||||||
)
|
)
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
[metadata]
|
|
||||||
name = architecturedesignguide
|
|
||||||
summary = OpenStack Architecture Design Guide
|
|
||||||
author = OpenStack
|
|
||||||
author-email = openstack-docs@lists.openstack.org
|
|
||||||
home-page = https://docs.openstack.org/
|
|
||||||
classifier =
|
|
||||||
Environment :: OpenStack
|
|
||||||
Intended Audience :: Information Technology
|
|
||||||
Intended Audience :: Cloud Architects
|
|
||||||
License :: OSI Approved :: Apache Software License
|
|
||||||
Operating System :: POSIX :: Linux
|
|
||||||
Topic :: Documentation
|
|
||||||
|
|
||||||
[global]
|
|
||||||
setup-hooks =
|
|
||||||
pbr.hooks.setup_hook
|
|
||||||
|
|
||||||
[files]
|
|
||||||
|
|
||||||
[build_sphinx]
|
|
||||||
warning-is-error = 1
|
|
||||||
build-dir = build
|
|
||||||
source-dir = source
|
|
||||||
|
|
||||||
[wheel]
|
|
||||||
universal = 1
|
|
@ -1,30 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
# Copyright (c) 2013 Hewlett-Packard Development Company, L.P.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
||||||
# implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
|
|
||||||
# THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT
|
|
||||||
import setuptools
|
|
||||||
|
|
||||||
# In python < 2.7.4, a lazy loading of package `pbr` will break
|
|
||||||
# setuptools if some other modules registered functions in `atexit`.
|
|
||||||
# solution from: http://bugs.python.org/issue15881#msg170215
|
|
||||||
try:
|
|
||||||
import multiprocessing # noqa
|
|
||||||
except ImportError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
setuptools.setup(
|
|
||||||
setup_requires=['pbr'],
|
|
||||||
pbr=True)
|
|
@ -1 +0,0 @@
|
|||||||
../../common
|
|
@ -1,212 +0,0 @@
|
|||||||
============
|
|
||||||
Architecture
|
|
||||||
============
|
|
||||||
The hardware selection covers three areas:
|
|
||||||
|
|
||||||
* Compute
|
|
||||||
|
|
||||||
* Network
|
|
||||||
|
|
||||||
* Storage
|
|
||||||
|
|
||||||
Compute-focused OpenStack clouds have high demands on processor and
|
|
||||||
memory resources, and requires hardware that can handle these demands.
|
|
||||||
Consider the following factors when selecting compute (server) hardware:
|
|
||||||
|
|
||||||
* Server density
|
|
||||||
|
|
||||||
* Resource capacity
|
|
||||||
|
|
||||||
* Expandability
|
|
||||||
|
|
||||||
* Cost
|
|
||||||
|
|
||||||
Weigh these considerations against each other to determine the best
|
|
||||||
design for the desired purpose. For example, increasing server density
|
|
||||||
means sacrificing resource capacity or expandability.
|
|
||||||
|
|
||||||
A compute-focused cloud should have an emphasis on server hardware that
|
|
||||||
can offer more CPU sockets, more CPU cores, and more RAM. Network
|
|
||||||
connectivity and storage capacity are less critical.
|
|
||||||
|
|
||||||
When designing a compute-focused OpenStack architecture, you must
|
|
||||||
consider whether you intend to scale up or scale out. Selecting a
|
|
||||||
smaller number of larger hosts, or a larger number of smaller hosts,
|
|
||||||
depends on a combination of factors: cost, power, cooling, physical rack
|
|
||||||
and floor space, support-warranty, and manageability.
|
|
||||||
|
|
||||||
Considerations for selecting hardware:
|
|
||||||
|
|
||||||
* Most blade servers can support dual-socket multi-core CPUs. To avoid
|
|
||||||
this CPU limit, select ``full width`` or ``full height`` blades. Be
|
|
||||||
aware, however, that this also decreases server density. For example,
|
|
||||||
high density blade servers such as HP BladeSystem or Dell PowerEdge
|
|
||||||
M1000e support up to 16 servers in only ten rack units. Using
|
|
||||||
half-height blades is twice as dense as using full-height blades,
|
|
||||||
which results in only eight servers per ten rack units.
|
|
||||||
|
|
||||||
* 1U rack-mounted servers that occupy only a single rack unit may offer
|
|
||||||
greater server density than a blade server solution. It is possible
|
|
||||||
to place forty 1U servers in a rack, providing space for the top of
|
|
||||||
rack (ToR) switches, compared to 32 full width blade servers.
|
|
||||||
|
|
||||||
* 2U rack-mounted servers provide quad-socket, multi-core CPU support,
|
|
||||||
but with a corresponding decrease in server density (half the density
|
|
||||||
that 1U rack-mounted servers offer).
|
|
||||||
|
|
||||||
* Larger rack-mounted servers, such as 4U servers, often provide even
|
|
||||||
greater CPU capacity, commonly supporting four or even eight CPU
|
|
||||||
sockets. These servers have greater expandability, but such servers
|
|
||||||
have much lower server density and are often more expensive.
|
|
||||||
|
|
||||||
* ``Sled servers`` are rack-mounted servers that support multiple
|
|
||||||
independent servers in a single 2U or 3U enclosure. These deliver
|
|
||||||
higher density as compared to typical 1U or 2U rack-mounted servers.
|
|
||||||
For example, many sled servers offer four independent dual-socket
|
|
||||||
nodes in 2U for a total of eight CPU sockets in 2U.
|
|
||||||
|
|
||||||
Consider these when choosing server hardware for a compute-focused
|
|
||||||
OpenStack design architecture:
|
|
||||||
|
|
||||||
* Instance density
|
|
||||||
|
|
||||||
* Host density
|
|
||||||
|
|
||||||
* Power and cooling density
|
|
||||||
|
|
||||||
Selecting networking hardware
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Some of the key considerations for networking hardware selection
|
|
||||||
include:
|
|
||||||
|
|
||||||
* Port count
|
|
||||||
|
|
||||||
* Port density
|
|
||||||
|
|
||||||
* Port speed
|
|
||||||
|
|
||||||
* Redundancy
|
|
||||||
|
|
||||||
* Power requirements
|
|
||||||
|
|
||||||
We recommend designing the network architecture using a scalable network
|
|
||||||
model that makes it easy to add capacity and bandwidth. A good example
|
|
||||||
of such a model is the leaf-spline model. In this type of network
|
|
||||||
design, it is possible to easily add additional bandwidth as well as
|
|
||||||
scale out to additional racks of gear. It is important to select network
|
|
||||||
hardware that supports the required port count, port speed, and port
|
|
||||||
density while also allowing for future growth as workload demands
|
|
||||||
increase. It is also important to evaluate where in the network
|
|
||||||
architecture it is valuable to provide redundancy.
|
|
||||||
|
|
||||||
Operating system and hypervisor
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The selection of operating system (OS) and hypervisor has a significant
|
|
||||||
impact on the end point design.
|
|
||||||
|
|
||||||
OS and hypervisor selection impact the following areas:
|
|
||||||
|
|
||||||
* Cost
|
|
||||||
|
|
||||||
* Supportability
|
|
||||||
|
|
||||||
* Management tools
|
|
||||||
|
|
||||||
* Scale and performance
|
|
||||||
|
|
||||||
* Security
|
|
||||||
|
|
||||||
* Supported features
|
|
||||||
|
|
||||||
* Interoperability
|
|
||||||
|
|
||||||
OpenStack components
|
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The selection of OpenStack components is important. There are certain
|
|
||||||
components that are required, for example the compute and image
|
|
||||||
services, but others, such as the Orchestration service, may not be
|
|
||||||
present.
|
|
||||||
|
|
||||||
For a compute-focused OpenStack design architecture, the following
|
|
||||||
components may be present:
|
|
||||||
|
|
||||||
* Identity (keystone)
|
|
||||||
|
|
||||||
* Dashboard (horizon)
|
|
||||||
|
|
||||||
* Compute (nova)
|
|
||||||
|
|
||||||
* Object Storage (swift)
|
|
||||||
|
|
||||||
* Image (glance)
|
|
||||||
|
|
||||||
* Networking (neutron)
|
|
||||||
|
|
||||||
* Orchestration (heat)
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
A compute-focused design is less likely to include OpenStack Block
|
|
||||||
Storage. However, there may be some situations where the need for
|
|
||||||
performance requires a block storage component to improve data I-O.
|
|
||||||
|
|
||||||
The exclusion of certain OpenStack components might also limit the
|
|
||||||
functionality of other components. If a design includes the
|
|
||||||
Orchestration service but excludes the Telemetry service, then the
|
|
||||||
design cannot take advantage of Orchestration's auto scaling
|
|
||||||
functionality as this relies on information from Telemetry.
|
|
||||||
|
|
||||||
Networking software
|
|
||||||
~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
OpenStack Networking provides a wide variety of networking services for
|
|
||||||
instances. There are many additional networking software packages that
|
|
||||||
might be useful to manage the OpenStack components themselves. The
|
|
||||||
`OpenStack High Availability Guide <https://docs.openstack.org/ha-guide/>`_
|
|
||||||
describes some of these software packages in more detail.
|
|
||||||
|
|
||||||
For a compute-focused OpenStack cloud, the OpenStack infrastructure
|
|
||||||
components must be highly available. If the design does not include
|
|
||||||
hardware load balancing, you must add networking software packages, for
|
|
||||||
example, HAProxy.
|
|
||||||
|
|
||||||
Management software
|
|
||||||
~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The selected supplemental software solution impacts and affects the
|
|
||||||
overall OpenStack cloud design. This includes software for providing
|
|
||||||
clustering, logging, monitoring and alerting.
|
|
||||||
|
|
||||||
The availability of design requirements is the main determiner for the
|
|
||||||
inclusion of clustering software, such as Corosync or Pacemaker.
|
|
||||||
|
|
||||||
Operational considerations determine the requirements for logging,
|
|
||||||
monitoring, and alerting. Each of these sub-categories include various
|
|
||||||
options.
|
|
||||||
|
|
||||||
Some other potential design impacts include:
|
|
||||||
|
|
||||||
OS-hypervisor combination
|
|
||||||
Ensure that the selected logging, monitoring, or alerting tools
|
|
||||||
support the proposed OS-hypervisor combination.
|
|
||||||
|
|
||||||
Network hardware
|
|
||||||
The logging, monitoring, and alerting software must support the
|
|
||||||
network hardware selection.
|
|
||||||
|
|
||||||
Database software
|
|
||||||
~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
A large majority of OpenStack components require access to back-end
|
|
||||||
database services to store state and configuration information. Select
|
|
||||||
an appropriate back-end database that satisfies the availability and
|
|
||||||
fault tolerance requirements of the OpenStack services. OpenStack
|
|
||||||
services support connecting to any database that the SQLAlchemy Python
|
|
||||||
drivers support, however most common database deployments make use of
|
|
||||||
MySQL or some variation of it. We recommend that you make the database
|
|
||||||
that provides back-end services within a general-purpose cloud highly
|
|
||||||
available. Some of the more common software solutions include Galera,
|
|
||||||
MariaDB, and MySQL with multi-master replication.
|
|
@ -1,68 +0,0 @@
|
|||||||
==========================
|
|
||||||
Operational considerations
|
|
||||||
==========================
|
|
||||||
|
|
||||||
There are a number of operational considerations that affect the design
|
|
||||||
of compute-focused OpenStack clouds, including:
|
|
||||||
|
|
||||||
* Enforcing strict API availability requirements
|
|
||||||
|
|
||||||
* Understanding and dealing with failure scenarios
|
|
||||||
|
|
||||||
* Managing host maintenance schedules
|
|
||||||
|
|
||||||
Service-level agreements (SLAs) are contractual obligations that ensure
|
|
||||||
the availability of a service. When designing an OpenStack cloud,
|
|
||||||
factoring in promises of availability implies a certain level of
|
|
||||||
redundancy and resiliency.
|
|
||||||
|
|
||||||
Monitoring
|
|
||||||
~~~~~~~~~~
|
|
||||||
|
|
||||||
OpenStack clouds require appropriate monitoring platforms to catch and
|
|
||||||
manage errors.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
We recommend leveraging existing monitoring systems to see if they
|
|
||||||
are able to effectively monitor an OpenStack environment.
|
|
||||||
|
|
||||||
Specific meters that are critically important to capture include:
|
|
||||||
|
|
||||||
* Image disk utilization
|
|
||||||
|
|
||||||
* Response time to the Compute API
|
|
||||||
|
|
||||||
Capacity planning
|
|
||||||
~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Adding extra capacity to an OpenStack cloud is a horizontally scaling
|
|
||||||
process.
|
|
||||||
|
|
||||||
We recommend similar (or the same) CPUs when adding extra nodes to the
|
|
||||||
environment. This reduces the chance of breaking live-migration features
|
|
||||||
if they are present. Scaling out hypervisor hosts also has a direct
|
|
||||||
effect on network and other data center resources. We recommend you
|
|
||||||
factor in this increase when reaching rack capacity or when requiring
|
|
||||||
extra network switches.
|
|
||||||
|
|
||||||
Changing the internal components of a Compute host to account for
|
|
||||||
increases in demand is a process known as vertical scaling. Swapping a
|
|
||||||
CPU for one with more cores, or increasing the memory in a server, can
|
|
||||||
help add extra capacity for running applications.
|
|
||||||
|
|
||||||
Another option is to assess the average workloads and increase the
|
|
||||||
number of instances that can run within the compute environment by
|
|
||||||
adjusting the overcommit ratio.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
It is important to remember that changing the CPU overcommit ratio
|
|
||||||
can have a detrimental effect and cause a potential increase in a
|
|
||||||
noisy neighbor.
|
|
||||||
|
|
||||||
The added risk of increasing the overcommit ratio is that more instances
|
|
||||||
fail when a compute host fails. We do not recommend that you increase
|
|
||||||
the CPU overcommit ratio in compute-focused OpenStack design
|
|
||||||
architecture, as it can increase the potential for noisy neighbor
|
|
||||||
issues.
|
|
@ -1,126 +0,0 @@
|
|||||||
=====================
|
|
||||||
Prescriptive examples
|
|
||||||
=====================
|
|
||||||
|
|
||||||
The Conseil Européen pour la Recherche Nucléaire (CERN), also known as
|
|
||||||
the European Organization for Nuclear Research, provides particle
|
|
||||||
accelerators and other infrastructure for high-energy physics research.
|
|
||||||
|
|
||||||
As of 2011 CERN operated these two compute centers in Europe with plans
|
|
||||||
to add a third.
|
|
||||||
|
|
||||||
+-----------------------+------------------------+
|
|
||||||
| Data center | Approximate capacity |
|
|
||||||
+=======================+========================+
|
|
||||||
| Geneva, Switzerland | - 3.5 Mega Watts |
|
|
||||||
| | |
|
|
||||||
| | - 91000 cores |
|
|
||||||
| | |
|
|
||||||
| | - 120 PB HDD |
|
|
||||||
| | |
|
|
||||||
| | - 100 PB Tape |
|
|
||||||
| | |
|
|
||||||
| | - 310 TB Memory |
|
|
||||||
+-----------------------+------------------------+
|
|
||||||
| Budapest, Hungary | - 2.5 Mega Watts |
|
|
||||||
| | |
|
|
||||||
| | - 20000 cores |
|
|
||||||
| | |
|
|
||||||
| | - 6 PB HDD |
|
|
||||||
+-----------------------+------------------------+
|
|
||||||
|
|
||||||
To support a growing number of compute-heavy users of experiments
|
|
||||||
related to the Large Hadron Collider (LHC), CERN ultimately elected to
|
|
||||||
deploy an OpenStack cloud using Scientific Linux and RDO. This effort
|
|
||||||
aimed to simplify the management of the center's compute resources with
|
|
||||||
a view to doubling compute capacity through the addition of a data
|
|
||||||
center in 2013 while maintaining the same levels of compute staff.
|
|
||||||
|
|
||||||
The CERN solution uses :term:`cells <cell>` for segregation of compute
|
|
||||||
resources and for transparently scaling between different data centers.
|
|
||||||
This decision meant trading off support for security groups and live
|
|
||||||
migration. In addition, they must manually replicate some details, like
|
|
||||||
flavors, across cells. In spite of these drawbacks cells provide the
|
|
||||||
required scale while exposing a single public API endpoint to users.
|
|
||||||
|
|
||||||
CERN created a compute cell for each of the two original data centers
|
|
||||||
and created a third when it added a new data center in 2013. Each cell
|
|
||||||
contains three availability zones to further segregate compute resources
|
|
||||||
and at least three RabbitMQ message brokers configured for clustering
|
|
||||||
with mirrored queues for high availability.
|
|
||||||
|
|
||||||
The API cell, which resides behind a HAProxy load balancer, is in the
|
|
||||||
data center in Switzerland and directs API calls to compute cells using
|
|
||||||
a customized variation of the cell scheduler. The customizations allow
|
|
||||||
certain workloads to route to a specific data center or all data
|
|
||||||
centers, with cell RAM availability determining cell selection in the
|
|
||||||
latter case.
|
|
||||||
|
|
||||||
.. figure:: figures/Generic_CERN_Example.png
|
|
||||||
|
|
||||||
There is also some customization of the filter scheduler that handles
|
|
||||||
placement within the cells:
|
|
||||||
|
|
||||||
ImagePropertiesFilter
|
|
||||||
Provides special handling depending on the guest operating system in
|
|
||||||
use (Linux-based or Windows-based).
|
|
||||||
|
|
||||||
ProjectsToAggregateFilter
|
|
||||||
Provides special handling depending on which project the instance is
|
|
||||||
associated with.
|
|
||||||
|
|
||||||
default_schedule_zones
|
|
||||||
Allows the selection of multiple default availability zones, rather
|
|
||||||
than a single default.
|
|
||||||
|
|
||||||
A central database team manages the MySQL database server in each cell
|
|
||||||
in an active/passive configuration with a NetApp storage back end.
|
|
||||||
Backups run every 6 hours.
|
|
||||||
|
|
||||||
Network architecture
|
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
To integrate with existing networking infrastructure, CERN made
|
|
||||||
customizations to legacy networking (nova-network). This was in the form
|
|
||||||
of a driver to integrate with CERN's existing database for tracking MAC
|
|
||||||
and IP address assignments.
|
|
||||||
|
|
||||||
The driver facilitates selection of a MAC address and IP for new
|
|
||||||
instances based on the compute node where the scheduler places the
|
|
||||||
instance.
|
|
||||||
|
|
||||||
The driver considers the compute node where the scheduler placed an
|
|
||||||
instance and selects a MAC address and IP from the pre-registered list
|
|
||||||
associated with that node in the database. The database updates to
|
|
||||||
reflect the address assignment to that instance.
|
|
||||||
|
|
||||||
Storage architecture
|
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
CERN deploys the OpenStack Image service in the API cell and configures
|
|
||||||
it to expose version 1 (V1) of the API. This also requires the image
|
|
||||||
registry. The storage back end in use is a 3 PB Ceph cluster.
|
|
||||||
|
|
||||||
CERN maintains a small set of Scientific Linux 5 and 6 images onto which
|
|
||||||
orchestration tools can place applications. Puppet manages instance
|
|
||||||
configuration and customization.
|
|
||||||
|
|
||||||
Monitoring
|
|
||||||
~~~~~~~~~~
|
|
||||||
|
|
||||||
CERN does not require direct billing, but uses the Telemetry service to
|
|
||||||
perform metering for the purposes of adjusting project quotas. CERN uses
|
|
||||||
a sharded, replicated, MongoDB back-end. To spread API load, CERN
|
|
||||||
deploys instances of the nova-api service within the child cells for
|
|
||||||
Telemetry to query against. This also requires the configuration of
|
|
||||||
supporting services such as keystone, glance-api, and glance-registry in
|
|
||||||
the child cells.
|
|
||||||
|
|
||||||
.. figure:: figures/Generic_CERN_Architecture.png
|
|
||||||
|
|
||||||
Additional monitoring tools in use include
|
|
||||||
`Flume <https://flume.apache.org/>`__, `Elastic
|
|
||||||
Search <https://www.elastic.co/>`__,
|
|
||||||
`Kibana <https://www.elastic.co/products/kibana>`__, and the CERN
|
|
||||||
developed `Lemon <http://lemon.web.cern.ch/lemon/index.shtml>`__
|
|
||||||
project.
|
|
@ -1,214 +0,0 @@
|
|||||||
========================
|
|
||||||
Technical considerations
|
|
||||||
========================
|
|
||||||
|
|
||||||
In a compute-focused OpenStack cloud, the type of instance workloads you
|
|
||||||
provision heavily influences technical decision making.
|
|
||||||
|
|
||||||
Public and private clouds require deterministic capacity planning to
|
|
||||||
support elastic growth in order to meet user SLA expectations.
|
|
||||||
Deterministic capacity planning is the path to predicting the effort and
|
|
||||||
expense of making a given process perform consistently. This process is
|
|
||||||
important because, when a service becomes a critical part of a user's
|
|
||||||
infrastructure, the user's experience links directly to the SLAs of the
|
|
||||||
cloud itself.
|
|
||||||
|
|
||||||
There are two aspects of capacity planning to consider:
|
|
||||||
|
|
||||||
* Planning the initial deployment footprint
|
|
||||||
|
|
||||||
* Planning expansion of the environment to stay ahead of cloud user demands
|
|
||||||
|
|
||||||
Begin planning an initial OpenStack deployment footprint with
|
|
||||||
estimations of expected uptake, and existing infrastructure workloads.
|
|
||||||
|
|
||||||
The starting point is the core count of the cloud. By applying relevant
|
|
||||||
ratios, the user can gather information about:
|
|
||||||
|
|
||||||
* The number of expected concurrent instances: (overcommit fraction ×
|
|
||||||
cores) / virtual cores per instance
|
|
||||||
|
|
||||||
* Required storage: flavor disk size × number of instances
|
|
||||||
|
|
||||||
These ratios determine the amount of additional infrastructure needed to
|
|
||||||
support the cloud. For example, consider a situation in which you
|
|
||||||
require 1600 instances, each with 2 vCPU and 50 GB of storage. Assuming
|
|
||||||
the default overcommit rate of 16:1, working out the math provides an
|
|
||||||
equation of:
|
|
||||||
|
|
||||||
* 1600 = (16 × (number of physical cores)) / 2
|
|
||||||
|
|
||||||
* Storage required = 50 GB × 1600
|
|
||||||
|
|
||||||
On the surface, the equations reveal the need for 200 physical cores and
|
|
||||||
80 TB of storage for ``/var/lib/nova/instances/``. However, it is also
|
|
||||||
important to look at patterns of usage to estimate the load that the API
|
|
||||||
services, database servers, and queue servers are likely to encounter.
|
|
||||||
|
|
||||||
Aside from the creation and termination of instances, consider the
|
|
||||||
impact of users accessing the service, particularly on nova-api and its
|
|
||||||
associated database. Listing instances gathers a great deal of
|
|
||||||
information and given the frequency with which users run this operation,
|
|
||||||
a cloud with a large number of users can increase the load
|
|
||||||
significantly. This can even occur unintentionally. For example, the
|
|
||||||
OpenStack Dashboard instances tab refreshes the list of instances every
|
|
||||||
30 seconds, so leaving it open in a browser window can cause unexpected
|
|
||||||
load.
|
|
||||||
|
|
||||||
Consideration of these factors can help determine how many cloud
|
|
||||||
controller cores you require. A server with 8 CPU cores and 8 GB of RAM
|
|
||||||
server would be sufficient for a rack of compute nodes, given the above
|
|
||||||
caveats.
|
|
||||||
|
|
||||||
Key hardware specifications are also crucial to the performance of user
|
|
||||||
instances. Be sure to consider budget and performance needs, including
|
|
||||||
storage performance (spindles/core), memory availability (RAM/core),
|
|
||||||
network bandwidth (Gbps/core), and overall CPU performance (CPU/core).
|
|
||||||
|
|
||||||
The cloud resource calculator is a useful tool in examining the impacts
|
|
||||||
of different hardware and instance load outs. See `cloud-resource-calculator
|
|
||||||
<https://github.com/noslzzp/cloud-resource-calculator/blob/master/cloud-resource-calculator.ods>`_.
|
|
||||||
|
|
||||||
Expansion planning
|
|
||||||
~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
A key challenge for planning the expansion of cloud compute services is
|
|
||||||
the elastic nature of cloud infrastructure demands.
|
|
||||||
|
|
||||||
Planning for expansion is a balancing act. Planning too conservatively
|
|
||||||
can lead to unexpected oversubscription of the cloud and dissatisfied
|
|
||||||
users. Planning for cloud expansion too aggressively can lead to
|
|
||||||
unexpected underuse of the cloud and funds spent unnecessarily
|
|
||||||
on operating infrastructure.
|
|
||||||
|
|
||||||
The key is to carefully monitor the trends in cloud usage over time. The
|
|
||||||
intent is to measure the consistency with which you deliver services,
|
|
||||||
not the average speed or capacity of the cloud. Using this information
|
|
||||||
to model capacity performance enables users to more accurately determine
|
|
||||||
the current and future capacity of the cloud.
|
|
||||||
|
|
||||||
CPU and RAM
|
|
||||||
~~~~~~~~~~~
|
|
||||||
|
|
||||||
OpenStack enables users to overcommit CPU and RAM on compute nodes. This
|
|
||||||
allows an increase in the number of instances running on the cloud at
|
|
||||||
the cost of reducing the performance of the instances. OpenStack Compute
|
|
||||||
uses the following ratios by default:
|
|
||||||
|
|
||||||
* CPU allocation ratio: 16:1
|
|
||||||
|
|
||||||
* RAM allocation ratio: 1.5:1
|
|
||||||
|
|
||||||
The default CPU allocation ratio of 16:1 means that the scheduler
|
|
||||||
allocates up to 16 virtual cores per physical core. For example, if a
|
|
||||||
physical node has 12 cores, the scheduler sees 192 available virtual
|
|
||||||
cores. With typical flavor definitions of 4 virtual cores per instance,
|
|
||||||
this ratio would provide 48 instances on a physical node.
|
|
||||||
|
|
||||||
Similarly, the default RAM allocation ratio of 1.5:1 means that the
|
|
||||||
scheduler allocates instances to a physical node as long as the total
|
|
||||||
amount of RAM associated with the instances is less than 1.5 times the
|
|
||||||
amount of RAM available on the physical node.
|
|
||||||
|
|
||||||
You must select the appropriate CPU and RAM allocation ratio based on
|
|
||||||
particular use cases.
|
|
||||||
|
|
||||||
Additional hardware
|
|
||||||
~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Certain use cases may benefit from exposure to additional devices on the
|
|
||||||
compute node. Examples might include:
|
|
||||||
|
|
||||||
* High performance computing jobs that benefit from the availability of
|
|
||||||
graphics processing units (GPUs) for general-purpose computing.
|
|
||||||
|
|
||||||
* Cryptographic routines that benefit from the availability of hardware
|
|
||||||
random number generators to avoid entropy starvation.
|
|
||||||
|
|
||||||
* Database management systems that benefit from the availability of
|
|
||||||
SSDs for ephemeral storage to maximize read/write time.
|
|
||||||
|
|
||||||
Host aggregates group hosts that share similar characteristics, which
|
|
||||||
can include hardware similarities. The addition of specialized hardware
|
|
||||||
to a cloud deployment is likely to add to the cost of each node, so
|
|
||||||
consider carefully whether all compute nodes, or just a subset targeted
|
|
||||||
by flavors, need the additional customization to support the desired
|
|
||||||
workloads.
|
|
||||||
|
|
||||||
Utilization
|
|
||||||
~~~~~~~~~~~
|
|
||||||
|
|
||||||
Infrastructure-as-a-Service offerings, including OpenStack, use flavors
|
|
||||||
to provide standardized views of virtual machine resource requirements
|
|
||||||
that simplify the problem of scheduling instances while making the best
|
|
||||||
use of the available physical resources.
|
|
||||||
|
|
||||||
In order to facilitate packing of virtual machines onto physical hosts,
|
|
||||||
the default selection of flavors provides a second largest flavor that
|
|
||||||
is half the size of the largest flavor in every dimension. It has half
|
|
||||||
the vCPUs, half the vRAM, and half the ephemeral disk space. The next
|
|
||||||
largest flavor is half that size again. The following figure provides a
|
|
||||||
visual representation of this concept for a general purpose computing
|
|
||||||
design:
|
|
||||||
|
|
||||||
.. figure:: figures/Compute_Tech_Bin_Packing_General1.png
|
|
||||||
|
|
||||||
The following figure displays a CPU-optimized, packed server:
|
|
||||||
|
|
||||||
.. figure:: figures/Compute_Tech_Bin_Packing_CPU_optimized1.png
|
|
||||||
|
|
||||||
These default flavors are well suited to typical configurations of
|
|
||||||
commodity server hardware. To maximize utilization, however, it may be
|
|
||||||
necessary to customize the flavors or create new ones in order to better
|
|
||||||
align instance sizes to the available hardware.
|
|
||||||
|
|
||||||
Workload characteristics may also influence hardware choices and flavor
|
|
||||||
configuration, particularly where they present different ratios of CPU
|
|
||||||
versus RAM versus HDD requirements.
|
|
||||||
|
|
||||||
For more information on Flavors see `OpenStack Operations Guide:
|
|
||||||
Flavors <https://docs.openstack.org/ops-guide/ops-user-facing-operations.html#flavors>`_.
|
|
||||||
|
|
||||||
OpenStack components
|
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Due to the nature of the workloads in this scenario, a number of
|
|
||||||
components are highly beneficial for a Compute-focused cloud. This
|
|
||||||
includes the typical OpenStack components:
|
|
||||||
|
|
||||||
* :term:`Compute service (nova)`
|
|
||||||
|
|
||||||
* :term:`Image service (glance)`
|
|
||||||
|
|
||||||
* :term:`Identity service (keystone)`
|
|
||||||
|
|
||||||
Also consider several specialized components:
|
|
||||||
|
|
||||||
* :term:`Orchestration service (heat)`
|
|
||||||
Given the nature of the applications involved in this scenario, these
|
|
||||||
are heavily automated deployments. Making use of Orchestration is
|
|
||||||
highly beneficial in this case. You can script the deployment of a
|
|
||||||
batch of instances and the running of tests, but it makes sense to
|
|
||||||
use the Orchestration service to handle all these actions.
|
|
||||||
|
|
||||||
* :term:`Telemetry service (telemetry)`
|
|
||||||
Telemetry and the alarms it generates support autoscaling of
|
|
||||||
instances using Orchestration. Users that are not using the
|
|
||||||
Orchestration service do not need to deploy the Telemetry service and
|
|
||||||
may choose to use external solutions to fulfill their metering and
|
|
||||||
monitoring requirements.
|
|
||||||
|
|
||||||
* :term:`Block Storage service (cinder)`
|
|
||||||
Due to the burst-able nature of the workloads and the applications
|
|
||||||
and instances that perform batch processing, this cloud mainly uses
|
|
||||||
memory or CPU, so the need for add-on storage to each instance is not
|
|
||||||
a likely requirement. This does not mean that you do not use
|
|
||||||
OpenStack Block Storage (cinder) in the infrastructure, but typically
|
|
||||||
it is not a central component.
|
|
||||||
|
|
||||||
* :term:`Networking service (neutron)`
|
|
||||||
When choosing a networking platform, ensure that it either works with
|
|
||||||
all desired hypervisor and container technologies and their OpenStack
|
|
||||||
drivers, or that it includes an implementation of an ML2 mechanism
|
|
||||||
driver. You can mix networking platforms that provide ML2 mechanisms
|
|
||||||
drivers.
|
|
@ -1,34 +0,0 @@
|
|||||||
===============
|
|
||||||
Compute focused
|
|
||||||
===============
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
compute-focus-technical-considerations.rst
|
|
||||||
compute-focus-operational-considerations.rst
|
|
||||||
compute-focus-architecture.rst
|
|
||||||
compute-focus-prescriptive-examples.rst
|
|
||||||
|
|
||||||
Compute-focused clouds are a specialized subset of the general
|
|
||||||
purpose OpenStack cloud architecture. A compute-focused cloud
|
|
||||||
specifically supports compute intensive workloads.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
Compute intensive workloads may be CPU intensive, RAM intensive,
|
|
||||||
or both; they are not typically storage or network intensive.
|
|
||||||
|
|
||||||
Compute-focused workloads may include the following use cases:
|
|
||||||
|
|
||||||
* High performance computing (HPC)
|
|
||||||
* Big data analytics using Hadoop or other distributed data stores
|
|
||||||
* Continuous integration/continuous deployment (CI/CD)
|
|
||||||
* Platform-as-a-Service (PaaS)
|
|
||||||
* Signal processing for network function virtualization (NFV)
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
A compute-focused OpenStack cloud does not typically use raw
|
|
||||||
block storage services as it does not host applications that
|
|
||||||
require persistent block storage.
|
|
@ -1,291 +0,0 @@
|
|||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
||||||
# implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
|
|
||||||
# This file is execfile()d with the current directory set to its
|
|
||||||
# containing dir.
|
|
||||||
#
|
|
||||||
# Note that not all possible configuration values are present in this
|
|
||||||
# autogenerated file.
|
|
||||||
#
|
|
||||||
# All configuration values have a default; values that are commented out
|
|
||||||
# serve to show the default.
|
|
||||||
|
|
||||||
import os
|
|
||||||
# import sys
|
|
||||||
|
|
||||||
# If extensions (or modules to document with autodoc) are in another directory,
|
|
||||||
# add these directories to sys.path here. If the directory is relative to the
|
|
||||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
|
||||||
# sys.path.insert(0, os.path.abspath('.'))
|
|
||||||
|
|
||||||
# -- General configuration ------------------------------------------------
|
|
||||||
|
|
||||||
# If your documentation needs a minimal Sphinx version, state it here.
|
|
||||||
# needs_sphinx = '1.0'
|
|
||||||
|
|
||||||
# Add any Sphinx extension module names here, as strings. They can be
|
|
||||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
|
||||||
# ones.
|
|
||||||
extensions = ['openstackdocstheme']
|
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
|
||||||
# templates_path = ['_templates']
|
|
||||||
|
|
||||||
# The suffix of source filenames.
|
|
||||||
source_suffix = '.rst'
|
|
||||||
|
|
||||||
# The encoding of source files.
|
|
||||||
# source_encoding = 'utf-8-sig'
|
|
||||||
|
|
||||||
# The master toctree document.
|
|
||||||
master_doc = 'index'
|
|
||||||
|
|
||||||
# General information about the project.
|
|
||||||
repository_name = "openstack/openstack-manuals"
|
|
||||||
bug_project = 'openstack-manuals'
|
|
||||||
project = u'Architecture Design Guide'
|
|
||||||
bug_tag = u'arch-design-to-archive'
|
|
||||||
copyright = u'2015-2017, OpenStack contributors'
|
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
|
||||||
# |version| and |release|, also used in various other places throughout the
|
|
||||||
# built documents.
|
|
||||||
#
|
|
||||||
# The short X.Y version.
|
|
||||||
version = '0.9'
|
|
||||||
# The full version, including alpha/beta/rc tags.
|
|
||||||
release = '0.9'
|
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
|
||||||
# for a list of supported languages.
|
|
||||||
# language = None
|
|
||||||
|
|
||||||
# There are two options for replacing |today|: either, you set today to some
|
|
||||||
# non-false value, then it is used:
|
|
||||||
# today = ''
|
|
||||||
# Else, today_fmt is used as the format for a strftime call.
|
|
||||||
# today_fmt = '%B %d, %Y'
|
|
||||||
|
|
||||||
# List of patterns, relative to source directory, that match files and
|
|
||||||
# directories to ignore when looking for source files.
|
|
||||||
exclude_patterns = ['common/cli*', 'common/nova*', 'common/get-started-*']
|
|
||||||
|
|
||||||
# The reST default role (used for this markup: `text`) to use for all
|
|
||||||
# documents.
|
|
||||||
# default_role = None
|
|
||||||
|
|
||||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
|
||||||
# add_function_parentheses = True
|
|
||||||
|
|
||||||
# If true, the current module name will be prepended to all description
|
|
||||||
# unit titles (such as .. function::).
|
|
||||||
# add_module_names = True
|
|
||||||
|
|
||||||
# If true, sectionauthor and moduleauthor directives will be shown in the
|
|
||||||
# output. They are ignored by default.
|
|
||||||
# show_authors = False
|
|
||||||
|
|
||||||
# The name of the Pygments (syntax highlighting) style to use.
|
|
||||||
pygments_style = 'sphinx'
|
|
||||||
|
|
||||||
# A list of ignored prefixes for module index sorting.
|
|
||||||
# modindex_common_prefix = []
|
|
||||||
|
|
||||||
# If true, keep warnings as "system message" paragraphs in the built documents.
|
|
||||||
# keep_warnings = False
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for HTML output ----------------------------------------------
|
|
||||||
|
|
||||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
|
||||||
# a list of builtin themes.
|
|
||||||
html_theme = 'openstackdocs'
|
|
||||||
|
|
||||||
# Theme options are theme-specific and customize the look and feel of a theme
|
|
||||||
# further. For a list of options available for each theme, see the
|
|
||||||
# documentation.
|
|
||||||
# html_theme_options = {}
|
|
||||||
|
|
||||||
# Add any paths that contain custom themes here, relative to this directory.
|
|
||||||
# html_theme_path = [openstackdocstheme.get_html_theme_path()]
|
|
||||||
|
|
||||||
# The name for this set of Sphinx documents. If None, it defaults to
|
|
||||||
# "<project> v<release> documentation".
|
|
||||||
# html_title = None
|
|
||||||
|
|
||||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
|
||||||
# html_short_title = None
|
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top
|
|
||||||
# of the sidebar.
|
|
||||||
# html_logo = None
|
|
||||||
|
|
||||||
# The name of an image file (within the static path) to use as favicon of the
|
|
||||||
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
|
||||||
# pixels large.
|
|
||||||
# html_favicon = None
|
|
||||||
|
|
||||||
# Add any paths that contain custom static files (such as style sheets) here,
|
|
||||||
# relative to this directory. They are copied after the builtin static files,
|
|
||||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
|
||||||
# html_static_path = []
|
|
||||||
|
|
||||||
# Add any extra paths that contain custom files (such as robots.txt or
|
|
||||||
# .htaccess) here, relative to this directory. These files are copied
|
|
||||||
# directly to the root of the documentation.
|
|
||||||
# html_extra_path = []
|
|
||||||
|
|
||||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
|
||||||
# using the given strftime format.
|
|
||||||
# So that we can enable "log-a-bug" links from each output HTML page, this
|
|
||||||
# variable must be set to a format that includes year, month, day, hours and
|
|
||||||
# minutes.
|
|
||||||
html_last_updated_fmt = '%Y-%m-%d %H:%M'
|
|
||||||
|
|
||||||
# If true, SmartyPants will be used to convert quotes and dashes to
|
|
||||||
# typographically correct entities.
|
|
||||||
# html_use_smartypants = True
|
|
||||||
|
|
||||||
# Custom sidebar templates, maps document names to template names.
|
|
||||||
# html_sidebars = {}
|
|
||||||
|
|
||||||
# Additional templates that should be rendered to pages, maps page names to
|
|
||||||
# template names.
|
|
||||||
# html_additional_pages = {}
|
|
||||||
|
|
||||||
# If false, no module index is generated.
|
|
||||||
# html_domain_indices = True
|
|
||||||
|
|
||||||
# If false, no index is generated.
|
|
||||||
html_use_index = False
|
|
||||||
|
|
||||||
# If true, the index is split into individual pages for each letter.
|
|
||||||
# html_split_index = False
|
|
||||||
|
|
||||||
# If true, links to the reST sources are added to the pages.
|
|
||||||
html_show_sourcelink = False
|
|
||||||
|
|
||||||
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
|
||||||
# html_show_sphinx = True
|
|
||||||
|
|
||||||
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
|
||||||
# html_show_copyright = True
|
|
||||||
|
|
||||||
# If true, an OpenSearch description file will be output, and all pages will
|
|
||||||
# contain a <link> tag referring to it. The value of this option must be the
|
|
||||||
# base URL from which the finished HTML is served.
|
|
||||||
# html_use_opensearch = ''
|
|
||||||
|
|
||||||
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
|
||||||
# html_file_suffix = None
|
|
||||||
|
|
||||||
# Output file base name for HTML help builder.
|
|
||||||
htmlhelp_basename = 'arch-design-to-archive'
|
|
||||||
|
|
||||||
# If true, publish source files
|
|
||||||
html_copy_source = False
|
|
||||||
|
|
||||||
# -- Options for LaTeX output ---------------------------------------------
|
|
||||||
|
|
||||||
latex_engine = 'xelatex'
|
|
||||||
|
|
||||||
latex_elements = {
|
|
||||||
# The paper size ('letterpaper' or 'a4paper').
|
|
||||||
# 'papersize': 'letterpaper',
|
|
||||||
|
|
||||||
# set font (TODO: different fonts for translated PDF document builds)
|
|
||||||
'fontenc': '\\usepackage{fontspec}',
|
|
||||||
'fontpkg': '''\
|
|
||||||
\defaultfontfeatures{Scale=MatchLowercase}
|
|
||||||
\setmainfont{Liberation Serif}
|
|
||||||
\setsansfont{Liberation Sans}
|
|
||||||
\setmonofont[SmallCapsFont={Liberation Mono}]{Liberation Mono}
|
|
||||||
''',
|
|
||||||
|
|
||||||
# The font size ('10pt', '11pt' or '12pt').
|
|
||||||
# 'pointsize': '10pt',
|
|
||||||
|
|
||||||
# Additional stuff for the LaTeX preamble.
|
|
||||||
# 'preamble': '',
|
|
||||||
}
|
|
||||||
|
|
||||||
# Grouping the document tree into LaTeX files. List of tuples
|
|
||||||
# (source start file, target name, title,
|
|
||||||
# author, documentclass [howto, manual, or own class]).
|
|
||||||
latex_documents = [
|
|
||||||
('index', 'ArchGuideRst.tex', u'Architecture Design Guide',
|
|
||||||
u'OpenStack contributors', 'manual'),
|
|
||||||
]
|
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top of
|
|
||||||
# the title page.
|
|
||||||
# latex_logo = None
|
|
||||||
|
|
||||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
|
||||||
# not chapters.
|
|
||||||
# latex_use_parts = False
|
|
||||||
|
|
||||||
# If true, show page references after internal links.
|
|
||||||
# latex_show_pagerefs = False
|
|
||||||
|
|
||||||
# If true, show URL addresses after external links.
|
|
||||||
# latex_show_urls = False
|
|
||||||
|
|
||||||
# Documents to append as an appendix to all manuals.
|
|
||||||
# latex_appendices = []
|
|
||||||
|
|
||||||
# If false, no module index is generated.
|
|
||||||
# latex_domain_indices = True
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for manual page output ---------------------------------------
|
|
||||||
|
|
||||||
# One entry per manual page. List of tuples
|
|
||||||
# (source start file, name, description, authors, manual section).
|
|
||||||
man_pages = [
|
|
||||||
('index', 'ArchDesignRst', u'Architecture Design Guide',
|
|
||||||
[u'OpenStack contributors'], 1)
|
|
||||||
]
|
|
||||||
|
|
||||||
# If true, show URL addresses after external links.
|
|
||||||
# man_show_urls = False
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for Texinfo output -------------------------------------------
|
|
||||||
|
|
||||||
# Grouping the document tree into Texinfo files. List of tuples
|
|
||||||
# (source start file, target name, title, author,
|
|
||||||
# dir menu entry, description, category)
|
|
||||||
texinfo_documents = [
|
|
||||||
('index', 'ArchDesignRst', u'Architecture Design Guide',
|
|
||||||
u'OpenStack contributors', 'ArchDesignRst',
|
|
||||||
'To reap the benefits of OpenStack, you should plan, design,'
|
|
||||||
'and architect your cloud properly, taking user needs into'
|
|
||||||
'account and understanding the use cases.'
|
|
||||||
'commands.', 'Miscellaneous'),
|
|
||||||
]
|
|
||||||
|
|
||||||
# Documents to append as an appendix to all manuals.
|
|
||||||
# texinfo_appendices = []
|
|
||||||
|
|
||||||
# If false, no module index is generated.
|
|
||||||
# texinfo_domain_indices = True
|
|
||||||
|
|
||||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
|
||||||
# texinfo_show_urls = 'footnote'
|
|
||||||
|
|
||||||
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
|
||||||
# texinfo_no_detailmenu = False
|
|
||||||
|
|
||||||
# -- Options for Internationalization output ------------------------------
|
|
||||||
locale_dirs = ['locale/']
|
|
Before Width: | Height: | Size: 52 KiB |
Before Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 52 KiB |
Before Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 35 KiB |
@ -1,483 +0,0 @@
|
|||||||
============
|
|
||||||
Architecture
|
|
||||||
============
|
|
||||||
|
|
||||||
Hardware selection involves three key areas:
|
|
||||||
|
|
||||||
* Compute
|
|
||||||
|
|
||||||
* Network
|
|
||||||
|
|
||||||
* Storage
|
|
||||||
|
|
||||||
Hardware for a general purpose OpenStack cloud should reflect a cloud
|
|
||||||
with no pre-defined usage model, designed to run a wide variety of
|
|
||||||
applications with varying resource usage requirements. These
|
|
||||||
applications include any of the following:
|
|
||||||
|
|
||||||
* RAM-intensive
|
|
||||||
|
|
||||||
* CPU-intensive
|
|
||||||
|
|
||||||
* Storage-intensive
|
|
||||||
|
|
||||||
Certain hardware form factors may better suit a general purpose
|
|
||||||
OpenStack cloud due to the requirement for equal (or nearly equal)
|
|
||||||
balance of resources. Server hardware must provide the following:
|
|
||||||
|
|
||||||
* Equal (or nearly equal) balance of compute capacity (RAM and CPU)
|
|
||||||
|
|
||||||
* Network capacity (number and speed of links)
|
|
||||||
|
|
||||||
* Storage capacity (gigabytes or terabytes as well as :term:`Input/Output
|
|
||||||
Operations Per Second (IOPS)`
|
|
||||||
|
|
||||||
Evaluate server hardware around four conflicting dimensions:
|
|
||||||
|
|
||||||
Server density
|
|
||||||
A measure of how many servers can fit into a given measure of
|
|
||||||
physical space, such as a rack unit [U].
|
|
||||||
|
|
||||||
Resource capacity
|
|
||||||
The number of CPU cores, amount of RAM, or amount of deliverable
|
|
||||||
storage.
|
|
||||||
|
|
||||||
Expandability
|
|
||||||
Limit of additional resources you can add to a server.
|
|
||||||
|
|
||||||
Cost
|
|
||||||
The relative purchase price of the hardware weighted against the
|
|
||||||
level of design effort needed to build the system.
|
|
||||||
|
|
||||||
Increasing server density means sacrificing resource capacity or
|
|
||||||
expandability, however, increasing resource capacity and expandability
|
|
||||||
increases cost and decreases server density. As a result, determining
|
|
||||||
the best server hardware for a general purpose OpenStack architecture
|
|
||||||
means understanding how choice of form factor will impact the rest of
|
|
||||||
the design. The following list outlines the form factors to choose from:
|
|
||||||
|
|
||||||
* Blade servers typically support dual-socket multi-core CPUs. Blades
|
|
||||||
also offer outstanding density.
|
|
||||||
|
|
||||||
* 1U rack-mounted servers occupy only a single rack unit. Their
|
|
||||||
benefits include high density, support for dual-socket multi-core
|
|
||||||
CPUs, and support for reasonable RAM amounts. This form factor offers
|
|
||||||
limited storage capacity, limited network capacity, and limited
|
|
||||||
expandability.
|
|
||||||
|
|
||||||
* 2U rack-mounted servers offer the expanded storage and networking
|
|
||||||
capacity that 1U servers tend to lack, but with a corresponding
|
|
||||||
decrease in server density (half the density offered by 1U
|
|
||||||
rack-mounted servers).
|
|
||||||
|
|
||||||
* Larger rack-mounted servers, such as 4U servers, will tend to offer
|
|
||||||
even greater CPU capacity, often supporting four or even eight CPU
|
|
||||||
sockets. These servers often have much greater expandability so will
|
|
||||||
provide the best option for upgradability. This means, however, that
|
|
||||||
the servers have a much lower server density and a much greater
|
|
||||||
hardware cost.
|
|
||||||
|
|
||||||
* *Sled servers* are rack-mounted servers that support multiple
|
|
||||||
independent servers in a single 2U or 3U enclosure. This form factor
|
|
||||||
offers increased density over typical 1U-2U rack-mounted servers but
|
|
||||||
tends to suffer from limitations in the amount of storage or network
|
|
||||||
capacity each individual server supports.
|
|
||||||
|
|
||||||
The best form factor for server hardware supporting a general purpose
|
|
||||||
OpenStack cloud is driven by outside business and cost factors. No
|
|
||||||
single reference architecture applies to all implementations; the
|
|
||||||
decision must flow from user requirements, technical considerations, and
|
|
||||||
operational considerations. Here are some of the key factors that
|
|
||||||
influence the selection of server hardware:
|
|
||||||
|
|
||||||
Instance density
|
|
||||||
Sizing is an important consideration for a general purpose OpenStack
|
|
||||||
cloud. The expected or anticipated number of instances that each
|
|
||||||
hypervisor can host is a common meter used in sizing the deployment.
|
|
||||||
The selected server hardware needs to support the expected or
|
|
||||||
anticipated instance density.
|
|
||||||
|
|
||||||
Host density
|
|
||||||
Physical data centers have limited physical space, power, and
|
|
||||||
cooling. The number of hosts (or hypervisors) that can be fitted
|
|
||||||
into a given metric (rack, rack unit, or floor tile) is another
|
|
||||||
important method of sizing. Floor weight is an often overlooked
|
|
||||||
consideration. The data center floor must be able to support the
|
|
||||||
weight of the proposed number of hosts within a rack or set of
|
|
||||||
racks. These factors need to be applied as part of the host density
|
|
||||||
calculation and server hardware selection.
|
|
||||||
|
|
||||||
Power density
|
|
||||||
Data centers have a specified amount of power fed to a given rack or
|
|
||||||
set of racks. Older data centers may have a power density as power
|
|
||||||
as low as 20 AMPs per rack, while more recent data centers can be
|
|
||||||
architected to support power densities as high as 120 AMP per rack.
|
|
||||||
The selected server hardware must take power density into account.
|
|
||||||
|
|
||||||
Network connectivity
|
|
||||||
The selected server hardware must have the appropriate number of
|
|
||||||
network connections, as well as the right type of network
|
|
||||||
connections, in order to support the proposed architecture. Ensure
|
|
||||||
that, at a minimum, there are at least two diverse network
|
|
||||||
connections coming into each rack.
|
|
||||||
|
|
||||||
The selection of form factors or architectures affects the selection of
|
|
||||||
server hardware. Ensure that the selected server hardware is configured
|
|
||||||
to support enough storage capacity (or storage expandability) to match
|
|
||||||
the requirements of selected scale-out storage solution. Similarly, the
|
|
||||||
network architecture impacts the server hardware selection and vice
|
|
||||||
versa.
|
|
||||||
|
|
||||||
Selecting storage hardware
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Determine storage hardware architecture by selecting specific storage
|
|
||||||
architecture. Determine the selection of storage architecture by
|
|
||||||
evaluating possible solutions against the critical factors, the user
|
|
||||||
requirements, technical considerations, and operational considerations.
|
|
||||||
Incorporate the following facts into your storage architecture:
|
|
||||||
|
|
||||||
Cost
|
|
||||||
Storage can be a significant portion of the overall system cost. For
|
|
||||||
an organization that is concerned with vendor support, a commercial
|
|
||||||
storage solution is advisable, although it comes with a higher price
|
|
||||||
tag. If initial capital expenditure requires minimization, designing
|
|
||||||
a system based on commodity hardware would apply. The trade-off is
|
|
||||||
potentially higher support costs and a greater risk of
|
|
||||||
incompatibility and interoperability issues.
|
|
||||||
|
|
||||||
Scalability
|
|
||||||
Scalability, along with expandability, is a major consideration in a
|
|
||||||
general purpose OpenStack cloud. It might be difficult to predict
|
|
||||||
the final intended size of the implementation as there are no
|
|
||||||
established usage patterns for a general purpose cloud. It might
|
|
||||||
become necessary to expand the initial deployment in order to
|
|
||||||
accommodate growth and user demand.
|
|
||||||
|
|
||||||
Expandability
|
|
||||||
Expandability is a major architecture factor for storage solutions
|
|
||||||
with general purpose OpenStack cloud. A storage solution that
|
|
||||||
expands to 50 PB is considered more expandable than a solution that
|
|
||||||
only scales to 10 PB. This meter is related to scalability, which is
|
|
||||||
the measure of a solution's performance as it expands.
|
|
||||||
|
|
||||||
Using a scale-out storage solution with direct-attached storage (DAS) in
|
|
||||||
the servers is well suited for a general purpose OpenStack cloud. Cloud
|
|
||||||
services requirements determine your choice of scale-out solution. You
|
|
||||||
need to determine if a single, highly expandable and highly vertical,
|
|
||||||
scalable, centralized storage array is suitable for your design. After
|
|
||||||
determining an approach, select the storage hardware based on this
|
|
||||||
criteria.
|
|
||||||
|
|
||||||
This list expands upon the potential impacts for including a particular
|
|
||||||
storage architecture (and corresponding storage hardware) into the
|
|
||||||
design for a general purpose OpenStack cloud:
|
|
||||||
|
|
||||||
Connectivity
|
|
||||||
Ensure that, if storage protocols other than Ethernet are part of
|
|
||||||
the storage solution, the appropriate hardware has been selected. If
|
|
||||||
a centralized storage array is selected, ensure that the hypervisor
|
|
||||||
will be able to connect to that storage array for image storage.
|
|
||||||
|
|
||||||
Usage
|
|
||||||
How the particular storage architecture will be used is critical for
|
|
||||||
determining the architecture. Some of the configurations that will
|
|
||||||
influence the architecture include whether it will be used by the
|
|
||||||
hypervisors for ephemeral instance storage or if OpenStack Object
|
|
||||||
Storage will use it for object storage.
|
|
||||||
|
|
||||||
Instance and image locations
|
|
||||||
Where instances and images will be stored will influence the
|
|
||||||
architecture.
|
|
||||||
|
|
||||||
Server hardware
|
|
||||||
If the solution is a scale-out storage architecture that includes
|
|
||||||
DAS, it will affect the server hardware selection. This could ripple
|
|
||||||
into the decisions that affect host density, instance density, power
|
|
||||||
density, OS-hypervisor, management tools and others.
|
|
||||||
|
|
||||||
General purpose OpenStack cloud has multiple options. The key factors
|
|
||||||
that will have an influence on selection of storage hardware for a
|
|
||||||
general purpose OpenStack cloud are as follows:
|
|
||||||
|
|
||||||
Capacity
|
|
||||||
Hardware resources selected for the resource nodes should be capable
|
|
||||||
of supporting enough storage for the cloud services. Defining the
|
|
||||||
initial requirements and ensuring the design can support adding
|
|
||||||
capacity is important. Hardware nodes selected for object storage
|
|
||||||
should be capable of support a large number of inexpensive disks
|
|
||||||
with no reliance on RAID controller cards. Hardware nodes selected
|
|
||||||
for block storage should be capable of supporting high speed storage
|
|
||||||
solutions and RAID controller cards to provide performance and
|
|
||||||
redundancy to storage at a hardware level. Selecting hardware RAID
|
|
||||||
controllers that automatically repair damaged arrays will assist
|
|
||||||
with the replacement and repair of degraded or deleted storage
|
|
||||||
devices.
|
|
||||||
|
|
||||||
Performance
|
|
||||||
Disks selected for object storage services do not need to be fast
|
|
||||||
performing disks. We recommend that object storage nodes take
|
|
||||||
advantage of the best cost per terabyte available for storage.
|
|
||||||
Contrastingly, disks chosen for block storage services should take
|
|
||||||
advantage of performance boosting features that may entail the use
|
|
||||||
of SSDs or flash storage to provide high performance block storage
|
|
||||||
pools. Storage performance of ephemeral disks used for instances
|
|
||||||
should also be taken into consideration.
|
|
||||||
|
|
||||||
Fault tolerance
|
|
||||||
Object storage resource nodes have no requirements for hardware
|
|
||||||
fault tolerance or RAID controllers. It is not necessary to plan for
|
|
||||||
fault tolerance within the object storage hardware because the
|
|
||||||
object storage service provides replication between zones as a
|
|
||||||
feature of the service. Block storage nodes, compute nodes, and
|
|
||||||
cloud controllers should all have fault tolerance built in at the
|
|
||||||
hardware level by making use of hardware RAID controllers and
|
|
||||||
varying levels of RAID configuration. The level of RAID chosen
|
|
||||||
should be consistent with the performance and availability
|
|
||||||
requirements of the cloud.
|
|
||||||
|
|
||||||
Selecting networking hardware
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Selecting network architecture determines which network hardware will be
|
|
||||||
used. Networking software is determined by the selected networking
|
|
||||||
hardware.
|
|
||||||
|
|
||||||
There are more subtle design impacts that need to be considered. The
|
|
||||||
selection of certain networking hardware (and the networking software)
|
|
||||||
affects the management tools that can be used. There are exceptions to
|
|
||||||
this; the rise of *open* networking software that supports a range of
|
|
||||||
networking hardware means that there are instances where the
|
|
||||||
relationship between networking hardware and networking software are not
|
|
||||||
as tightly defined.
|
|
||||||
|
|
||||||
Some of the key considerations that should be included in the selection
|
|
||||||
of networking hardware include:
|
|
||||||
|
|
||||||
Port count
|
|
||||||
The design will require networking hardware that has the requisite
|
|
||||||
port count.
|
|
||||||
|
|
||||||
Port density
|
|
||||||
The network design will be affected by the physical space that is
|
|
||||||
required to provide the requisite port count. A higher port density
|
|
||||||
is preferred, as it leaves more rack space for compute or storage
|
|
||||||
components that may be required by the design. This can also lead
|
|
||||||
into concerns about fault domains and power density that should be
|
|
||||||
considered. Higher density switches are more expensive and should
|
|
||||||
also be considered, as it is important not to over design the
|
|
||||||
network if it is not required.
|
|
||||||
|
|
||||||
Port speed
|
|
||||||
The networking hardware must support the proposed network speed, for
|
|
||||||
example: 1 GbE, 10 GbE, or 40 GbE (or even 100 GbE).
|
|
||||||
|
|
||||||
Redundancy
|
|
||||||
The level of network hardware redundancy required is influenced by
|
|
||||||
the user requirements for high availability and cost considerations.
|
|
||||||
Network redundancy can be achieved by adding redundant power
|
|
||||||
supplies or paired switches. If this is a requirement, the hardware
|
|
||||||
will need to support this configuration.
|
|
||||||
|
|
||||||
Power requirements
|
|
||||||
Ensure that the physical data center provides the necessary power
|
|
||||||
for the selected network hardware.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
This may be an issue for spine switches in a leaf and spine
|
|
||||||
fabric, or end of row (EoR) switches.
|
|
||||||
|
|
||||||
There is no single best practice architecture for the networking
|
|
||||||
hardware supporting a general purpose OpenStack cloud that will apply to
|
|
||||||
all implementations. Some of the key factors that will have a strong
|
|
||||||
influence on selection of networking hardware include:
|
|
||||||
|
|
||||||
Connectivity
|
|
||||||
All nodes within an OpenStack cloud require network connectivity. In
|
|
||||||
some cases, nodes require access to more than one network segment.
|
|
||||||
The design must encompass sufficient network capacity and bandwidth
|
|
||||||
to ensure that all communications within the cloud, both north-south
|
|
||||||
and east-west traffic have sufficient resources available.
|
|
||||||
|
|
||||||
Scalability
|
|
||||||
The network design should encompass a physical and logical network
|
|
||||||
design that can be easily expanded upon. Network hardware should
|
|
||||||
offer the appropriate types of interfaces and speeds that are
|
|
||||||
required by the hardware nodes.
|
|
||||||
|
|
||||||
Availability
|
|
||||||
To ensure that access to nodes within the cloud is not interrupted,
|
|
||||||
we recommend that the network architecture identify any single
|
|
||||||
points of failure and provide some level of redundancy or fault
|
|
||||||
tolerance. With regard to the network infrastructure itself, this
|
|
||||||
often involves use of networking protocols such as LACP, VRRP or
|
|
||||||
others to achieve a highly available network connection. In
|
|
||||||
addition, it is important to consider the networking implications on
|
|
||||||
API availability. In order to ensure that the APIs, and potentially
|
|
||||||
other services in the cloud are highly available, we recommend you
|
|
||||||
design a load balancing solution within the network architecture to
|
|
||||||
accommodate for these requirements.
|
|
||||||
|
|
||||||
Software selection
|
|
||||||
~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Software selection for a general purpose OpenStack architecture design
|
|
||||||
needs to include these three areas:
|
|
||||||
|
|
||||||
* Operating system (OS) and hypervisor
|
|
||||||
|
|
||||||
* OpenStack components
|
|
||||||
|
|
||||||
* Supplemental software
|
|
||||||
|
|
||||||
Operating system and hypervisor
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The operating system (OS) and hypervisor have a significant impact on
|
|
||||||
the overall design. Selecting a particular operating system and
|
|
||||||
hypervisor can directly affect server hardware selection. Make sure the
|
|
||||||
storage hardware and topology support the selected operating system and
|
|
||||||
hypervisor combination. Also ensure the networking hardware selection
|
|
||||||
and topology will work with the chosen operating system and hypervisor
|
|
||||||
combination.
|
|
||||||
|
|
||||||
Some areas that could be impacted by the selection of OS and hypervisor
|
|
||||||
include:
|
|
||||||
|
|
||||||
Cost
|
|
||||||
Selecting a commercially supported hypervisor, such as Microsoft
|
|
||||||
Hyper-V, will result in a different cost model rather than
|
|
||||||
community-supported open source hypervisors including
|
|
||||||
:term:`KVM<kernel-based VM (KVM)>`, Kinstance or :term:`Xen`. When
|
|
||||||
comparing open source OS solutions, choosing Ubuntu over Red Hat
|
|
||||||
(or vice versa) will have an impact on cost due to support
|
|
||||||
contracts.
|
|
||||||
|
|
||||||
Supportability
|
|
||||||
Depending on the selected hypervisor, staff should have the
|
|
||||||
appropriate training and knowledge to support the selected OS and
|
|
||||||
hypervisor combination. If they do not, training will need to be
|
|
||||||
provided which could have a cost impact on the design.
|
|
||||||
|
|
||||||
Management tools
|
|
||||||
The management tools used for Ubuntu and Kinstance differ from the
|
|
||||||
management tools for VMware vSphere. Although both OS and hypervisor
|
|
||||||
combinations are supported by OpenStack, there will be very
|
|
||||||
different impacts to the rest of the design as a result of the
|
|
||||||
selection of one combination versus the other.
|
|
||||||
|
|
||||||
Scale and performance
|
|
||||||
Ensure that selected OS and hypervisor combinations meet the
|
|
||||||
appropriate scale and performance requirements. The chosen
|
|
||||||
architecture will need to meet the targeted instance-host ratios
|
|
||||||
with the selected OS-hypervisor combinations.
|
|
||||||
|
|
||||||
Security
|
|
||||||
Ensure that the design can accommodate regular periodic
|
|
||||||
installations of application security patches while maintaining
|
|
||||||
required workloads. The frequency of security patches for the
|
|
||||||
proposed OS-hypervisor combination will have an impact on
|
|
||||||
performance and the patch installation process could affect
|
|
||||||
maintenance windows.
|
|
||||||
|
|
||||||
Supported features
|
|
||||||
Determine which features of OpenStack are required. This will often
|
|
||||||
determine the selection of the OS-hypervisor combination. Some
|
|
||||||
features are only available with specific operating systems or
|
|
||||||
hypervisors.
|
|
||||||
|
|
||||||
Interoperability
|
|
||||||
You will need to consider how the OS and hypervisor combination
|
|
||||||
interactions with other operating systems and hypervisors, including
|
|
||||||
other software solutions. Operational troubleshooting tools for one
|
|
||||||
OS-hypervisor combination may differ from the tools used for another
|
|
||||||
OS-hypervisor combination and, as a result, the design will need to
|
|
||||||
address if the two sets of tools need to interoperate.
|
|
||||||
|
|
||||||
OpenStack components
|
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Selecting which OpenStack components are included in the overall design
|
|
||||||
is important. Some OpenStack components, like compute and Image service,
|
|
||||||
are required in every architecture. Other components, like
|
|
||||||
Orchestration, are not always required.
|
|
||||||
|
|
||||||
Excluding certain OpenStack components can limit or constrain the
|
|
||||||
functionality of other components. For example, if the architecture
|
|
||||||
includes Orchestration but excludes Telemetry, then the design will not
|
|
||||||
be able to take advantage of Orchestrations' auto scaling functionality.
|
|
||||||
It is important to research the component interdependencies in
|
|
||||||
conjunction with the technical requirements before deciding on the final
|
|
||||||
architecture.
|
|
||||||
|
|
||||||
Networking software
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
OpenStack Networking (neutron) provides a wide variety of networking
|
|
||||||
services for instances. There are many additional networking software
|
|
||||||
packages that can be useful when managing OpenStack components. Some
|
|
||||||
examples include:
|
|
||||||
|
|
||||||
* Software to provide load balancing
|
|
||||||
|
|
||||||
* Network redundancy protocols
|
|
||||||
|
|
||||||
* Routing daemons
|
|
||||||
|
|
||||||
Some of these software packages are described in more detail in the
|
|
||||||
OpenStack High Availability Guide (refer to the `OpenStack network
|
|
||||||
nodes
|
|
||||||
chapter <https://docs.openstack.org/ha-guide/networking-ha.html>`__ of
|
|
||||||
the OpenStack High Availability Guide).
|
|
||||||
|
|
||||||
For a general purpose OpenStack cloud, the OpenStack infrastructure
|
|
||||||
components need to be highly available. If the design does not include
|
|
||||||
hardware load balancing, networking software packages like HAProxy will
|
|
||||||
need to be included.
|
|
||||||
|
|
||||||
Management software
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
Selected supplemental software solution impacts and affects the overall
|
|
||||||
OpenStack cloud design. This includes software for providing clustering,
|
|
||||||
logging, monitoring and alerting.
|
|
||||||
|
|
||||||
Inclusion of clustering software, such as Corosync or Pacemaker, is
|
|
||||||
determined primarily by the availability requirements. The impact of
|
|
||||||
including (or not including) these software packages is primarily
|
|
||||||
determined by the availability of the cloud infrastructure and the
|
|
||||||
complexity of supporting the configuration after it is deployed. The
|
|
||||||
`OpenStack High Availability
|
|
||||||
Guide <https://docs.openstack.org/ha-guide/>`__ provides more details on
|
|
||||||
the installation and configuration of Corosync and Pacemaker, should
|
|
||||||
these packages need to be included in the design.
|
|
||||||
|
|
||||||
Requirements for logging, monitoring, and alerting are determined by
|
|
||||||
operational considerations. Each of these sub-categories includes a
|
|
||||||
number of various options.
|
|
||||||
|
|
||||||
If these software packages are required, the design must account for the
|
|
||||||
additional resource consumption (CPU, RAM, storage, and network
|
|
||||||
bandwidth). Some other potential design impacts include:
|
|
||||||
|
|
||||||
* OS-hypervisor combination: Ensure that the selected logging,
|
|
||||||
monitoring, or alerting tools support the proposed OS-hypervisor
|
|
||||||
combination.
|
|
||||||
|
|
||||||
* Network hardware: The network hardware selection needs to be
|
|
||||||
supported by the logging, monitoring, and alerting software.
|
|
||||||
|
|
||||||
Database software
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
OpenStack components often require access to back-end database services
|
|
||||||
to store state and configuration information. Selecting an appropriate
|
|
||||||
back-end database that satisfies the availability and fault tolerance
|
|
||||||
requirements of the OpenStack services is required. OpenStack services
|
|
||||||
supports connecting to a database that is supported by the SQLAlchemy
|
|
||||||
python drivers, however, most common database deployments make use of
|
|
||||||
MySQL or variations of it. We recommend that the database, which
|
|
||||||
provides back-end service within a general purpose cloud, be made highly
|
|
||||||
available when using an available technology which can accomplish that
|
|
||||||
goal.
|
|
@ -1,124 +0,0 @@
|
|||||||
==========================
|
|
||||||
Operational considerations
|
|
||||||
==========================
|
|
||||||
|
|
||||||
In the planning and design phases of the build out, it is important to
|
|
||||||
include the operation's function. Operational factors affect the design
|
|
||||||
choices for a general purpose cloud, and operations staff are often
|
|
||||||
tasked with the maintenance of cloud environments for larger
|
|
||||||
installations.
|
|
||||||
|
|
||||||
Expectations set by the Service Level Agreements (SLAs) directly affect
|
|
||||||
knowing when and where you should implement redundancy and high
|
|
||||||
availability. SLAs are contractual obligations that provide assurances
|
|
||||||
for service availability. They define the levels of availability that
|
|
||||||
drive the technical design, often with penalties for not meeting
|
|
||||||
contractual obligations.
|
|
||||||
|
|
||||||
SLA terms that affect design include:
|
|
||||||
|
|
||||||
* API availability guarantees implying multiple infrastructure services
|
|
||||||
and highly available load balancers.
|
|
||||||
|
|
||||||
* Network uptime guarantees affecting switch design, which might
|
|
||||||
require redundant switching and power.
|
|
||||||
|
|
||||||
* Factor in networking security policy requirements in to your
|
|
||||||
deployments.
|
|
||||||
|
|
||||||
Support and maintainability
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
To be able to support and maintain an installation, OpenStack cloud
|
|
||||||
management requires operations staff to understand and comprehend design
|
|
||||||
architecture content. The operations and engineering staff skill level,
|
|
||||||
and level of separation, are dependent on size and purpose of the
|
|
||||||
installation. Large cloud service providers, or telecom providers, are
|
|
||||||
more likely to be managed by specially trained, dedicated operations
|
|
||||||
organizations. Smaller implementations are more likely to rely on
|
|
||||||
support staff that need to take on combined engineering, design and
|
|
||||||
operations functions.
|
|
||||||
|
|
||||||
Maintaining OpenStack installations requires a variety of technical
|
|
||||||
skills. You may want to consider using a third-party management company
|
|
||||||
with special expertise in managing OpenStack deployment.
|
|
||||||
|
|
||||||
Monitoring
|
|
||||||
~~~~~~~~~~
|
|
||||||
|
|
||||||
OpenStack clouds require appropriate monitoring platforms to ensure
|
|
||||||
errors are caught and managed appropriately. Specific meters that are
|
|
||||||
critically important to monitor include:
|
|
||||||
|
|
||||||
* Image disk utilization
|
|
||||||
|
|
||||||
* Response time to the :term:`Compute API <Compute API (Nova API)>`
|
|
||||||
|
|
||||||
Leveraging existing monitoring systems is an effective check to ensure
|
|
||||||
OpenStack environments can be monitored.
|
|
||||||
|
|
||||||
Downtime
|
|
||||||
~~~~~~~~
|
|
||||||
|
|
||||||
To effectively run cloud installations, initial downtime planning
|
|
||||||
includes creating processes and architectures that support the
|
|
||||||
following:
|
|
||||||
|
|
||||||
* Planned (maintenance)
|
|
||||||
|
|
||||||
* Unplanned (system faults)
|
|
||||||
|
|
||||||
Resiliency of overall system and individual components are going to be
|
|
||||||
dictated by the requirements of the SLA, meaning designing for
|
|
||||||
:term:`high availability (HA)` can have cost ramifications.
|
|
||||||
|
|
||||||
Capacity planning
|
|
||||||
~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Capacity constraints for a general purpose cloud environment include:
|
|
||||||
|
|
||||||
* Compute limits
|
|
||||||
|
|
||||||
* Storage limits
|
|
||||||
|
|
||||||
A relationship exists between the size of the compute environment and
|
|
||||||
the supporting OpenStack infrastructure controller nodes requiring
|
|
||||||
support.
|
|
||||||
|
|
||||||
Increasing the size of the supporting compute environment increases the
|
|
||||||
network traffic and messages, adding load to the controller or
|
|
||||||
networking nodes. Effective monitoring of the environment will help with
|
|
||||||
capacity decisions on scaling.
|
|
||||||
|
|
||||||
Compute nodes automatically attach to OpenStack clouds, resulting in a
|
|
||||||
horizontally scaling process when adding extra compute capacity to an
|
|
||||||
OpenStack cloud. Additional processes are required to place nodes into
|
|
||||||
appropriate availability zones and host aggregates. When adding
|
|
||||||
additional compute nodes to environments, ensure identical or functional
|
|
||||||
compatible CPUs are used, otherwise live migration features will break.
|
|
||||||
It is necessary to add rack capacity or network switches as scaling out
|
|
||||||
compute hosts directly affects network and datacenter resources.
|
|
||||||
|
|
||||||
Assessing the average workloads and increasing the number of instances
|
|
||||||
that can run within the compute environment by adjusting the overcommit
|
|
||||||
ratio is another option. It is important to remember that changing the
|
|
||||||
CPU overcommit ratio can have a detrimental effect and cause a potential
|
|
||||||
increase in a noisy neighbor. The additional risk of increasing the
|
|
||||||
overcommit ratio is more instances failing when a compute host fails.
|
|
||||||
|
|
||||||
Compute host components can also be upgraded to account for increases in
|
|
||||||
demand; this is known as vertical scaling. Upgrading CPUs with more
|
|
||||||
cores, or increasing the overall server memory, can add extra needed
|
|
||||||
capacity depending on whether the running applications are more CPU
|
|
||||||
intensive or memory intensive.
|
|
||||||
|
|
||||||
Insufficient disk capacity could also have a negative effect on overall
|
|
||||||
performance including CPU and memory usage. Depending on the back-end
|
|
||||||
architecture of the OpenStack Block Storage layer, capacity includes
|
|
||||||
adding disk shelves to enterprise storage systems or installing
|
|
||||||
additional block storage nodes. Upgrading directly attached storage
|
|
||||||
installed in compute hosts, and adding capacity to the shared storage
|
|
||||||
for additional ephemeral storage to instances, may be necessary.
|
|
||||||
|
|
||||||
For a deeper discussion on many of these topics, refer to the `OpenStack
|
|
||||||
Operations Guide <https://docs.openstack.org/ops>`_.
|
|
@ -1,85 +0,0 @@
|
|||||||
====================
|
|
||||||
Prescriptive example
|
|
||||||
====================
|
|
||||||
|
|
||||||
An online classified advertising company wants to run web applications
|
|
||||||
consisting of Tomcat, Nginx and MariaDB in a private cloud. To be able
|
|
||||||
to meet policy requirements, the cloud infrastructure will run in their
|
|
||||||
own data center. The company has predictable load requirements, but
|
|
||||||
requires scaling to cope with nightly increases in demand. Their current
|
|
||||||
environment does not have the flexibility to align with their goal of
|
|
||||||
running an open source API environment. The current environment consists
|
|
||||||
of the following:
|
|
||||||
|
|
||||||
* Between 120 and 140 installations of Nginx and Tomcat, each with 2
|
|
||||||
vCPUs and 4 GB of RAM
|
|
||||||
|
|
||||||
* A three-node MariaDB and Galera cluster, each with 4 vCPUs and 8 GB
|
|
||||||
RAM
|
|
||||||
|
|
||||||
The company runs hardware load balancers and multiple web applications
|
|
||||||
serving their websites, and orchestrates environments using combinations
|
|
||||||
of scripts and Puppet. The website generates large amounts of log data
|
|
||||||
daily that requires archiving.
|
|
||||||
|
|
||||||
The solution would consist of the following OpenStack components:
|
|
||||||
|
|
||||||
* A firewall, switches and load balancers on the public facing network
|
|
||||||
connections.
|
|
||||||
|
|
||||||
* OpenStack Controller service running Image, Identity, Networking,
|
|
||||||
combined with support services such as MariaDB and RabbitMQ,
|
|
||||||
configured for high availability on at least three controller nodes.
|
|
||||||
|
|
||||||
* OpenStack compute nodes running the KVM hypervisor.
|
|
||||||
|
|
||||||
* OpenStack Block Storage for use by compute instances, requiring
|
|
||||||
persistent storage (such as databases for dynamic sites).
|
|
||||||
|
|
||||||
* OpenStack Object Storage for serving static objects (such as images).
|
|
||||||
|
|
||||||
.. figure:: figures/General_Architecture3.png
|
|
||||||
|
|
||||||
Running up to 140 web instances and the small number of MariaDB
|
|
||||||
instances requires 292 vCPUs available, as well as 584 GB RAM. On a
|
|
||||||
typical 1U server using dual-socket hex-core Intel CPUs with
|
|
||||||
Hyperthreading, and assuming 2:1 CPU overcommit ratio, this would
|
|
||||||
require 8 OpenStack compute nodes.
|
|
||||||
|
|
||||||
The web application instances run from local storage on each of the
|
|
||||||
OpenStack compute nodes. The web application instances are stateless,
|
|
||||||
meaning that any of the instances can fail and the application will
|
|
||||||
continue to function.
|
|
||||||
|
|
||||||
MariaDB server instances store their data on shared enterprise storage,
|
|
||||||
such as NetApp or Solidfire devices. If a MariaDB instance fails,
|
|
||||||
storage would be expected to be re-attached to another instance and
|
|
||||||
rejoined to the Galera cluster.
|
|
||||||
|
|
||||||
Logs from the web application servers are shipped to OpenStack Object
|
|
||||||
Storage for processing and archiving.
|
|
||||||
|
|
||||||
Additional capabilities can be realized by moving static web content to
|
|
||||||
be served from OpenStack Object Storage containers, and backing the
|
|
||||||
OpenStack Image service with OpenStack Object Storage.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
Increasing OpenStack Object Storage means network bandwidth needs to
|
|
||||||
be taken into consideration. Running OpenStack Object Storage with
|
|
||||||
network connections offering 10 GbE or better connectivity is
|
|
||||||
advised.
|
|
||||||
|
|
||||||
Leveraging Orchestration and Telemetry services is also a potential
|
|
||||||
issue when providing auto-scaling, orchestrated web application
|
|
||||||
environments. Defining the web applications in a
|
|
||||||
:term:`Heat Orchestration Template (HOT)`
|
|
||||||
negates the reliance on the current scripted Puppet
|
|
||||||
solution.
|
|
||||||
|
|
||||||
OpenStack Networking can be used to control hardware load balancers
|
|
||||||
through the use of plug-ins and the Networking API. This allows users to
|
|
||||||
control hardware load balance pools and instances as members in these
|
|
||||||
pools, but their use in production environments must be carefully
|
|
||||||
weighed against current stability.
|
|
||||||
|
|
@ -1,618 +0,0 @@
|
|||||||
========================
|
|
||||||
Technical considerations
|
|
||||||
========================
|
|
||||||
|
|
||||||
General purpose clouds are expected to include these base services:
|
|
||||||
|
|
||||||
* Compute
|
|
||||||
|
|
||||||
* Network
|
|
||||||
|
|
||||||
* Storage
|
|
||||||
|
|
||||||
Each of these services have different resource requirements. As a
|
|
||||||
result, you must make design decisions relating directly to the service,
|
|
||||||
as well as provide a balanced infrastructure for all services.
|
|
||||||
|
|
||||||
Take into consideration the unique aspects of each service, as
|
|
||||||
individual characteristics and service mass can impact the hardware
|
|
||||||
selection process. Hardware designs should be generated for each of the
|
|
||||||
services.
|
|
||||||
|
|
||||||
Hardware decisions are also made in relation to network architecture and
|
|
||||||
facilities planning. These factors play heavily into the overall
|
|
||||||
architecture of an OpenStack cloud.
|
|
||||||
|
|
||||||
Compute resource design
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
When designing compute resource pools, a number of factors can impact
|
|
||||||
your design decisions. Factors such as number of processors, amount of
|
|
||||||
memory, and the quantity of storage required for each hypervisor must be
|
|
||||||
taken into account.
|
|
||||||
|
|
||||||
You will also need to decide whether to provide compute resources in a
|
|
||||||
single pool or in multiple pools. In most cases, multiple pools of
|
|
||||||
resources can be allocated and addressed on demand. A compute design
|
|
||||||
that allocates multiple pools of resources makes best use of application
|
|
||||||
resources, and is commonly referred to as bin packing.
|
|
||||||
|
|
||||||
In a bin packing design, each independent resource pool provides service
|
|
||||||
for specific flavors. This helps to ensure that, as instances are
|
|
||||||
scheduled onto compute hypervisors, each independent node's resources
|
|
||||||
will be allocated in a way that makes the most efficient use of the
|
|
||||||
available hardware. Bin packing also requires a common hardware design,
|
|
||||||
with all hardware nodes within a compute resource pool sharing a common
|
|
||||||
processor, memory, and storage layout. This makes it easier to deploy,
|
|
||||||
support, and maintain nodes throughout their lifecycle.
|
|
||||||
|
|
||||||
An overcommit ratio is the ratio of available virtual resources to
|
|
||||||
available physical resources. This ratio is configurable for CPU and
|
|
||||||
memory. The default CPU overcommit ratio is 16:1, and the default memory
|
|
||||||
overcommit ratio is 1.5:1. Determining the tuning of the overcommit
|
|
||||||
ratios during the design phase is important as it has a direct impact on
|
|
||||||
the hardware layout of your compute nodes.
|
|
||||||
|
|
||||||
When selecting a processor, compare features and performance
|
|
||||||
characteristics. Some processors include features specific to
|
|
||||||
virtualized compute hosts, such as hardware-assisted virtualization, and
|
|
||||||
technology related to memory paging (also known as EPT shadowing). These
|
|
||||||
types of features can have a significant impact on the performance of
|
|
||||||
your virtual machine.
|
|
||||||
|
|
||||||
You will also need to consider the compute requirements of
|
|
||||||
non-hypervisor nodes (sometimes referred to as resource nodes). This
|
|
||||||
includes controller, object storage, and block storage nodes, and
|
|
||||||
networking services.
|
|
||||||
|
|
||||||
The number of processor cores and threads impacts the number of worker
|
|
||||||
threads which can be run on a resource node. Design decisions must
|
|
||||||
relate directly to the service being run on it, as well as provide a
|
|
||||||
balanced infrastructure for all services.
|
|
||||||
|
|
||||||
Workload can be unpredictable in a general purpose cloud, so consider
|
|
||||||
including the ability to add additional compute resource pools on
|
|
||||||
demand. In some cases, however, the demand for certain instance types or
|
|
||||||
flavors may not justify individual hardware design. In either case,
|
|
||||||
start by allocating hardware designs that are capable of servicing the
|
|
||||||
most common instance requests. If you want to add additional hardware to
|
|
||||||
the overall architecture, this can be done later.
|
|
||||||
|
|
||||||
Designing network resources
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
OpenStack clouds generally have multiple network segments, with each
|
|
||||||
segment providing access to particular resources. The network services
|
|
||||||
themselves also require network communication paths which should be
|
|
||||||
separated from the other networks. When designing network services for a
|
|
||||||
general purpose cloud, plan for either a physical or logical separation
|
|
||||||
of network segments used by operators and projects. You can also create
|
|
||||||
an additional network segment for access to internal services such as
|
|
||||||
the message bus and database used by various services. Segregating these
|
|
||||||
services onto separate networks helps to protect sensitive data and
|
|
||||||
protects against unauthorized access to services.
|
|
||||||
|
|
||||||
Choose a networking service based on the requirements of your instances.
|
|
||||||
The architecture and design of your cloud will impact whether you choose
|
|
||||||
OpenStack Networking (neutron), or legacy networking (nova-network).
|
|
||||||
|
|
||||||
Legacy networking (nova-network)
|
|
||||||
The legacy networking (nova-network) service is primarily a layer-2
|
|
||||||
networking service that functions in two modes, which use VLANs in
|
|
||||||
different ways. In a flat network mode, all network hardware nodes
|
|
||||||
and devices throughout the cloud are connected to a single layer-2
|
|
||||||
network segment that provides access to application data.
|
|
||||||
|
|
||||||
When the network devices in the cloud support segmentation using
|
|
||||||
VLANs, legacy networking can operate in the second mode. In this
|
|
||||||
design model, each project within the cloud is assigned a network
|
|
||||||
subnet which is mapped to a VLAN on the physical network. It is
|
|
||||||
especially important to remember the maximum number of 4096 VLANs
|
|
||||||
which can be used within a spanning tree domain. This places a hard
|
|
||||||
limit on the amount of growth possible within the data center. When
|
|
||||||
designing a general purpose cloud intended to support multiple
|
|
||||||
projects, we recommend the use of legacy networking with VLANs, and
|
|
||||||
not in flat network mode.
|
|
||||||
|
|
||||||
Another consideration regarding network is the fact that legacy
|
|
||||||
networking is entirely managed by the cloud operator; projects do not
|
|
||||||
have control over network resources. If projects require the ability to
|
|
||||||
manage and create network resources such as network segments and
|
|
||||||
subnets, it will be necessary to install the OpenStack Networking
|
|
||||||
service to provide network access to instances.
|
|
||||||
|
|
||||||
Networking (neutron)
|
|
||||||
OpenStack Networking (neutron) is a first class networking service
|
|
||||||
that gives full control over creation of virtual network resources
|
|
||||||
to projects. This is often accomplished in the form of tunneling
|
|
||||||
protocols which will establish encapsulated communication paths over
|
|
||||||
existing network infrastructure in order to segment project traffic.
|
|
||||||
These methods vary depending on the specific implementation, but
|
|
||||||
some of the more common methods include tunneling over GRE,
|
|
||||||
encapsulating with VXLAN, and VLAN tags.
|
|
||||||
|
|
||||||
We recommend you design at least three network segments:
|
|
||||||
|
|
||||||
* The first segment is a public network, used for access to REST APIs
|
|
||||||
by projects and operators. The controller nodes and swift proxies are
|
|
||||||
the only devices connecting to this network segment. In some cases,
|
|
||||||
this network might also be serviced by hardware load balancers and
|
|
||||||
other network devices.
|
|
||||||
|
|
||||||
* The second segment is used by administrators to manage hardware
|
|
||||||
resources. Configuration management tools also use this for deploying
|
|
||||||
software and services onto new hardware. In some cases, this network
|
|
||||||
segment might also be used for internal services, including the
|
|
||||||
message bus and database services. This network needs to communicate
|
|
||||||
with every hardware node. Due to the highly sensitive nature of this
|
|
||||||
network segment, you also need to secure this network from
|
|
||||||
unauthorized access.
|
|
||||||
|
|
||||||
* The third network segment is used by applications and consumers to
|
|
||||||
access the physical network, and for users to access applications.
|
|
||||||
This network is segregated from the one used to access the cloud APIs
|
|
||||||
and is not capable of communicating directly with the hardware
|
|
||||||
resources in the cloud. Compute resource nodes and network gateway
|
|
||||||
services which allow application data to access the physical network
|
|
||||||
from outside of the cloud need to communicate on this network
|
|
||||||
segment.
|
|
||||||
|
|
||||||
Designing Object Storage
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
When designing hardware resources for OpenStack Object Storage, the
|
|
||||||
primary goal is to maximize the amount of storage in each resource node
|
|
||||||
while also ensuring that the cost per terabyte is kept to a minimum.
|
|
||||||
This often involves utilizing servers which can hold a large number of
|
|
||||||
spinning disks. Whether choosing to use 2U server form factors with
|
|
||||||
directly attached storage or an external chassis that holds a larger
|
|
||||||
number of drives, the main goal is to maximize the storage available in
|
|
||||||
each node.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
We do not recommended investing in enterprise class drives for an
|
|
||||||
OpenStack Object Storage cluster. The consistency and partition
|
|
||||||
tolerance characteristics of OpenStack Object Storage ensures that
|
|
||||||
data stays up to date and survives hardware faults without the use
|
|
||||||
of any specialized data replication devices.
|
|
||||||
|
|
||||||
One of the benefits of OpenStack Object Storage is the ability to mix
|
|
||||||
and match drives by making use of weighting within the swift ring. When
|
|
||||||
designing your swift storage cluster, we recommend making use of the
|
|
||||||
most cost effective storage solution available at the time.
|
|
||||||
|
|
||||||
To achieve durability and availability of data stored as objects it is
|
|
||||||
important to design object storage resource pools to ensure they can
|
|
||||||
provide the suggested availability. Considering rack-level and
|
|
||||||
zone-level designs to accommodate the number of replicas configured to
|
|
||||||
be stored in the Object Storage service (the default number of replicas
|
|
||||||
is three) is important when designing beyond the hardware node level.
|
|
||||||
Each replica of data should exist in its own availability zone with its
|
|
||||||
own power, cooling, and network resources available to service that
|
|
||||||
specific zone.
|
|
||||||
|
|
||||||
Object storage nodes should be designed so that the number of requests
|
|
||||||
does not hinder the performance of the cluster. The object storage
|
|
||||||
service is a chatty protocol, therefore making use of multiple
|
|
||||||
processors that have higher core counts will ensure the IO requests do
|
|
||||||
not inundate the server.
|
|
||||||
|
|
||||||
Designing Block Storage
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
When designing OpenStack Block Storage resource nodes, it is helpful to
|
|
||||||
understand the workloads and requirements that will drive the use of
|
|
||||||
block storage in the cloud. We recommend designing block storage pools
|
|
||||||
so that projects can choose appropriate storage solutions for their
|
|
||||||
applications. By creating multiple storage pools of different types, in
|
|
||||||
conjunction with configuring an advanced storage scheduler for the block
|
|
||||||
storage service, it is possible to provide projects with a large catalog
|
|
||||||
of storage services with a variety of performance levels and redundancy
|
|
||||||
options.
|
|
||||||
|
|
||||||
Block storage also takes advantage of a number of enterprise storage
|
|
||||||
solutions. These are addressed via a plug-in driver developed by the
|
|
||||||
hardware vendor. A large number of enterprise storage plug-in drivers
|
|
||||||
ship out-of-the-box with OpenStack Block Storage (and many more
|
|
||||||
available via third party channels). General purpose clouds are more
|
|
||||||
likely to use directly attached storage in the majority of block storage
|
|
||||||
nodes, deeming it necessary to provide additional levels of service to
|
|
||||||
projects which can only be provided by enterprise class storage
|
|
||||||
solutions.
|
|
||||||
|
|
||||||
Redundancy and availability requirements impact the decision to use a
|
|
||||||
RAID controller card in block storage nodes. The input-output per second
|
|
||||||
(IOPS) demand of your application will influence whether or not you
|
|
||||||
should use a RAID controller, and which level of RAID is required.
|
|
||||||
Making use of higher performing RAID volumes is suggested when
|
|
||||||
considering performance. However, where redundancy of block storage
|
|
||||||
volumes is more important we recommend making use of a redundant RAID
|
|
||||||
configuration such as RAID 5 or RAID 6. Some specialized features, such
|
|
||||||
as automated replication of block storage volumes, may require the use
|
|
||||||
of third-party plug-ins and enterprise block storage solutions in order
|
|
||||||
to provide the high demand on storage. Furthermore, where extreme
|
|
||||||
performance is a requirement it may also be necessary to make use of
|
|
||||||
high speed SSD disk drives' high performing flash storage solutions.
|
|
||||||
|
|
||||||
Software selection
|
|
||||||
~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The software selection process plays a large role in the architecture of
|
|
||||||
a general purpose cloud. The following have a large impact on the design
|
|
||||||
of the cloud:
|
|
||||||
|
|
||||||
* Choice of operating system
|
|
||||||
|
|
||||||
* Selection of OpenStack software components
|
|
||||||
|
|
||||||
* Choice of hypervisor
|
|
||||||
|
|
||||||
* Selection of supplemental software
|
|
||||||
|
|
||||||
Operating system (OS) selection plays a large role in the design and
|
|
||||||
architecture of a cloud. There are a number of OSes which have native
|
|
||||||
support for OpenStack including:
|
|
||||||
|
|
||||||
* Ubuntu
|
|
||||||
|
|
||||||
* Red Hat Enterprise Linux (RHEL)
|
|
||||||
|
|
||||||
* CentOS
|
|
||||||
|
|
||||||
* SUSE Linux Enterprise Server (SLES)
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
Native support is not a constraint on the choice of OS; users are
|
|
||||||
free to choose just about any Linux distribution (or even Microsoft
|
|
||||||
Windows) and install OpenStack directly from source (or compile
|
|
||||||
their own packages). However, many organizations will prefer to
|
|
||||||
install OpenStack from distribution-supplied packages or
|
|
||||||
repositories (although using the distribution vendor's OpenStack
|
|
||||||
packages might be a requirement for support).
|
|
||||||
|
|
||||||
OS selection also directly influences hypervisor selection. A cloud
|
|
||||||
architect who selects Ubuntu, RHEL, or SLES has some flexibility in
|
|
||||||
hypervisor; KVM, Xen, and LXC are supported virtualization methods
|
|
||||||
available under OpenStack Compute (nova) on these Linux distributions.
|
|
||||||
However, a cloud architect who selects Windows Server is limited to Hyper-V.
|
|
||||||
Similarly, a cloud architect who selects XenServer is limited to the
|
|
||||||
CentOS-based dom0 operating system provided with XenServer.
|
|
||||||
|
|
||||||
The primary factors that play into OS-hypervisor selection include:
|
|
||||||
|
|
||||||
User requirements
|
|
||||||
The selection of OS-hypervisor combination first and foremost needs
|
|
||||||
to support the user requirements.
|
|
||||||
|
|
||||||
Support
|
|
||||||
The selected OS-hypervisor combination needs to be supported by
|
|
||||||
OpenStack.
|
|
||||||
|
|
||||||
Interoperability
|
|
||||||
The OS-hypervisor needs to be interoperable with other features and
|
|
||||||
services in the OpenStack design in order to meet the user
|
|
||||||
requirements.
|
|
||||||
|
|
||||||
Hypervisor
|
|
||||||
~~~~~~~~~~
|
|
||||||
|
|
||||||
OpenStack supports a wide variety of hypervisors, one or more of which
|
|
||||||
can be used in a single cloud. These hypervisors include:
|
|
||||||
|
|
||||||
* KVM (and QEMU)
|
|
||||||
|
|
||||||
* XCP/XenServer
|
|
||||||
|
|
||||||
* vSphere (vCenter and ESXi)
|
|
||||||
|
|
||||||
* Hyper-V
|
|
||||||
|
|
||||||
* LXC
|
|
||||||
|
|
||||||
* Docker
|
|
||||||
|
|
||||||
* Bare-metal
|
|
||||||
|
|
||||||
A complete list of supported hypervisors and their capabilities can be
|
|
||||||
found at `OpenStack Hypervisor Support
|
|
||||||
Matrix <https://wiki.openstack.org/wiki/HypervisorSupportMatrix>`_.
|
|
||||||
|
|
||||||
We recommend general purpose clouds use hypervisors that support the
|
|
||||||
most general purpose use cases, such as KVM and Xen. More specific
|
|
||||||
hypervisors should be chosen to account for specific functionality or a
|
|
||||||
supported feature requirement. In some cases, there may also be a
|
|
||||||
mandated requirement to run software on a certified hypervisor including
|
|
||||||
solutions from VMware, Microsoft, and Citrix.
|
|
||||||
|
|
||||||
The features offered through the OpenStack cloud platform determine the
|
|
||||||
best choice of a hypervisor. Each hypervisor has their own hardware
|
|
||||||
requirements which may affect the decisions around designing a general
|
|
||||||
purpose cloud.
|
|
||||||
|
|
||||||
In a mixed hypervisor environment, specific aggregates of compute
|
|
||||||
resources, each with defined capabilities, enable workloads to utilize
|
|
||||||
software and hardware specific to their particular requirements. This
|
|
||||||
functionality can be exposed explicitly to the end user, or accessed
|
|
||||||
through defined metadata within a particular flavor of an instance.
|
|
||||||
|
|
||||||
OpenStack components
|
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
A general purpose OpenStack cloud design should incorporate the core
|
|
||||||
OpenStack services to provide a wide range of services to end-users. The
|
|
||||||
OpenStack core services recommended in a general purpose cloud are:
|
|
||||||
|
|
||||||
* :term:`Compute service (nova)`
|
|
||||||
|
|
||||||
* :term:`Networking service (neutron)`
|
|
||||||
|
|
||||||
* :term:`Image service (glance)`
|
|
||||||
|
|
||||||
* :term:`Identity service (keystone)`
|
|
||||||
|
|
||||||
* :term:`Dashboard (horizon)`
|
|
||||||
|
|
||||||
* :term:`Telemetry service (telemetry)`
|
|
||||||
|
|
||||||
A general purpose cloud may also include :term:`Object Storage service
|
|
||||||
(swift)`. :term:`Block Storage service (cinder)`.
|
|
||||||
These may be selected to provide storage to applications and instances.
|
|
||||||
|
|
||||||
Supplemental software
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
A general purpose OpenStack deployment consists of more than just
|
|
||||||
OpenStack-specific components. A typical deployment involves services
|
|
||||||
that provide supporting functionality, including databases and message
|
|
||||||
queues, and may also involve software to provide high availability of
|
|
||||||
the OpenStack environment. Design decisions around the underlying
|
|
||||||
message queue might affect the required number of controller services,
|
|
||||||
as well as the technology to provide highly resilient database
|
|
||||||
functionality, such as MariaDB with Galera. In such a scenario,
|
|
||||||
replication of services relies on quorum.
|
|
||||||
|
|
||||||
Where many general purpose deployments use hardware load balancers to
|
|
||||||
provide highly available API access and SSL termination, software
|
|
||||||
solutions, for example HAProxy, can also be considered. It is vital to
|
|
||||||
ensure that such software implementations are also made highly
|
|
||||||
available. High availability can be achieved by using software such as
|
|
||||||
Keepalived or Pacemaker with Corosync. Pacemaker and Corosync can
|
|
||||||
provide active-active or active-passive highly available configuration
|
|
||||||
depending on the specific service in the OpenStack environment. Using
|
|
||||||
this software can affect the design as it assumes at least a 2-node
|
|
||||||
controller infrastructure where one of those nodes may be running
|
|
||||||
certain services in standby mode.
|
|
||||||
|
|
||||||
Memcached is a distributed memory object caching system, and Redis is a
|
|
||||||
key-value store. Both are deployed on general purpose clouds to assist
|
|
||||||
in alleviating load to the Identity service. The memcached service
|
|
||||||
caches tokens, and due to its distributed nature it can help alleviate
|
|
||||||
some bottlenecks to the underlying authentication system. Using
|
|
||||||
memcached or Redis does not affect the overall design of your
|
|
||||||
architecture as they tend to be deployed onto the infrastructure nodes
|
|
||||||
providing the OpenStack services.
|
|
||||||
|
|
||||||
Controller infrastructure
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The Controller infrastructure nodes provide management services to the
|
|
||||||
end-user as well as providing services internally for the operating of
|
|
||||||
the cloud. The Controllers run message queuing services that carry
|
|
||||||
system messages between each service. Performance issues related to the
|
|
||||||
message bus would lead to delays in sending that message to where it
|
|
||||||
needs to go. The result of this condition would be delays in operation
|
|
||||||
functions such as spinning up and deleting instances, provisioning new
|
|
||||||
storage volumes and managing network resources. Such delays could
|
|
||||||
adversely affect an application’s ability to react to certain
|
|
||||||
conditions, especially when using auto-scaling features. It is important
|
|
||||||
to properly design the hardware used to run the controller
|
|
||||||
infrastructure as outlined above in the Hardware Selection section.
|
|
||||||
|
|
||||||
Performance of the controller services is not limited to processing
|
|
||||||
power, but restrictions may emerge in serving concurrent users. Ensure
|
|
||||||
that the APIs and Horizon services are load tested to ensure that you
|
|
||||||
are able to serve your customers. Particular attention should be made to
|
|
||||||
the OpenStack Identity Service (Keystone), which provides the
|
|
||||||
authentication and authorization for all services, both internally to
|
|
||||||
OpenStack itself and to end-users. This service can lead to a
|
|
||||||
degradation of overall performance if this is not sized appropriately.
|
|
||||||
|
|
||||||
Network performance
|
|
||||||
~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
In a general purpose OpenStack cloud, the requirements of the network
|
|
||||||
help determine performance capabilities. It is possible to design
|
|
||||||
OpenStack environments that run a mix of networking capabilities. By
|
|
||||||
utilizing the different interface speeds, the users of the OpenStack
|
|
||||||
environment can choose networks that are fit for their purpose.
|
|
||||||
|
|
||||||
Network performance can be boosted considerably by implementing hardware
|
|
||||||
load balancers to provide front-end service to the cloud APIs. The
|
|
||||||
hardware load balancers also perform SSL termination if that is a
|
|
||||||
requirement of your environment. When implementing SSL offloading, it is
|
|
||||||
important to understand the SSL offloading capabilities of the devices
|
|
||||||
selected.
|
|
||||||
|
|
||||||
Compute host
|
|
||||||
~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The choice of hardware specifications used in compute nodes including
|
|
||||||
CPU, memory and disk type directly affects the performance of the
|
|
||||||
instances. Other factors which can directly affect performance include
|
|
||||||
tunable parameters within the OpenStack services, for example the
|
|
||||||
overcommit ratio applied to resources. The defaults in OpenStack Compute
|
|
||||||
set a 16:1 over-commit of the CPU and 1.5 over-commit of the memory.
|
|
||||||
Running at such high ratios leads to an increase in "noisy-neighbor"
|
|
||||||
activity. Care must be taken when sizing your Compute environment to
|
|
||||||
avoid this scenario. For running general purpose OpenStack environments
|
|
||||||
it is possible to keep to the defaults, but make sure to monitor your
|
|
||||||
environment as usage increases.
|
|
||||||
|
|
||||||
Storage performance
|
|
||||||
~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
When considering performance of Block Storage, hardware and
|
|
||||||
architecture choice is important. Block Storage can use enterprise
|
|
||||||
back-end systems such as NetApp or EMC, scale out storage such as
|
|
||||||
GlusterFS and Ceph, or simply use the capabilities of directly attached
|
|
||||||
storage in the nodes themselves. Block Storage may be deployed so that
|
|
||||||
traffic traverses the host network, which could affect, and be adversely
|
|
||||||
affected by, the front-side API traffic performance. As such, consider
|
|
||||||
using a dedicated data storage network with dedicated interfaces on the
|
|
||||||
Controller and Compute hosts.
|
|
||||||
|
|
||||||
When considering performance of Object Storage, a number of design
|
|
||||||
choices will affect performance. A user’s access to the Object
|
|
||||||
Storage is through the proxy services, which sit behind hardware load
|
|
||||||
balancers. By the very nature of a highly resilient storage system,
|
|
||||||
replication of the data would affect performance of the overall system.
|
|
||||||
In this case, 10 GbE (or better) networking is recommended throughout
|
|
||||||
the storage network architecture.
|
|
||||||
|
|
||||||
High Availability
|
|
||||||
~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
In OpenStack, the infrastructure is integral to providing services and
|
|
||||||
should always be available, especially when operating with SLAs.
|
|
||||||
Ensuring network availability is accomplished by designing the network
|
|
||||||
architecture so that no single point of failure exists. A consideration
|
|
||||||
of the number of switches, routes and redundancies of power should be
|
|
||||||
factored into core infrastructure, as well as the associated bonding of
|
|
||||||
networks to provide diverse routes to your highly available switch
|
|
||||||
infrastructure.
|
|
||||||
|
|
||||||
The OpenStack services themselves should be deployed across multiple
|
|
||||||
servers that do not represent a single point of failure. Ensuring API
|
|
||||||
availability can be achieved by placing these services behind highly
|
|
||||||
available load balancers that have multiple OpenStack servers as
|
|
||||||
members.
|
|
||||||
|
|
||||||
OpenStack lends itself to deployment in a highly available manner where
|
|
||||||
it is expected that at least 2 servers be utilized. These can run all
|
|
||||||
the services involved from the message queuing service, for example
|
|
||||||
RabbitMQ or QPID, and an appropriately deployed database service such as
|
|
||||||
MySQL or MariaDB. As services in the cloud are scaled out, back-end
|
|
||||||
services will need to scale too. Monitoring and reporting on server
|
|
||||||
utilization and response times, as well as load testing your systems,
|
|
||||||
will help determine scale out decisions.
|
|
||||||
|
|
||||||
Care must be taken when deciding network functionality. Currently,
|
|
||||||
OpenStack supports both the legacy networking (nova-network) system and
|
|
||||||
the newer, extensible OpenStack Networking (neutron). Both have their
|
|
||||||
pros and cons when it comes to providing highly available access. Legacy
|
|
||||||
networking, which provides networking access maintained in the OpenStack
|
|
||||||
Compute code, provides a feature that removes a single point of failure
|
|
||||||
when it comes to routing, and this feature is currently missing in
|
|
||||||
OpenStack Networking. The effect of legacy networking’s multi-host
|
|
||||||
functionality restricts failure domains to the host running that
|
|
||||||
instance.
|
|
||||||
|
|
||||||
When using Networking, the OpenStack controller servers or
|
|
||||||
separate Networking hosts handle routing. For a deployment that requires
|
|
||||||
features available in only Networking, it is possible to remove this
|
|
||||||
restriction by using third party software that helps maintain highly
|
|
||||||
available L3 routes. Doing so allows for common APIs to control network
|
|
||||||
hardware, or to provide complex multi-tier web applications in a secure
|
|
||||||
manner. It is also possible to completely remove routing from
|
|
||||||
Networking, and instead rely on hardware routing capabilities. In this
|
|
||||||
case, the switching infrastructure must support L3 routing.
|
|
||||||
|
|
||||||
OpenStack Networking and legacy networking both have their advantages
|
|
||||||
and disadvantages. They are both valid and supported options that fit
|
|
||||||
different network deployment models described in the
|
|
||||||
`Networking deployment options table <https://docs.openstack.org/ops-guide/arch-network-design.html#network-topology>`
|
|
||||||
of OpenStack Operations Guide.
|
|
||||||
|
|
||||||
Ensure your deployment has adequate back-up capabilities.
|
|
||||||
|
|
||||||
Application design must also be factored into the capabilities of the
|
|
||||||
underlying cloud infrastructure. If the compute hosts do not provide a
|
|
||||||
seamless live migration capability, then it must be expected that when a
|
|
||||||
compute host fails, that instance and any data local to that instance
|
|
||||||
will be deleted. However, when providing an expectation to users that
|
|
||||||
instances have a high-level of uptime guarantees, the infrastructure
|
|
||||||
must be deployed in a way that eliminates any single point of failure
|
|
||||||
when a compute host disappears. This may include utilizing shared file
|
|
||||||
systems on enterprise storage or OpenStack Block storage to provide a
|
|
||||||
level of guarantee to match service features.
|
|
||||||
|
|
||||||
For more information on high availability in OpenStack, see the
|
|
||||||
`OpenStack High Availability
|
|
||||||
Guide <https://docs.openstack.org/ha-guide/>`_.
|
|
||||||
|
|
||||||
Security
|
|
||||||
~~~~~~~~
|
|
||||||
|
|
||||||
A security domain comprises users, applications, servers or networks
|
|
||||||
that share common trust requirements and expectations within a system.
|
|
||||||
Typically they have the same authentication and authorization
|
|
||||||
requirements and users.
|
|
||||||
|
|
||||||
These security domains are:
|
|
||||||
|
|
||||||
* Public
|
|
||||||
|
|
||||||
* Guest
|
|
||||||
|
|
||||||
* Management
|
|
||||||
|
|
||||||
* Data
|
|
||||||
|
|
||||||
These security domains can be mapped to an OpenStack deployment
|
|
||||||
individually, or combined. In each case, the cloud operator should be
|
|
||||||
aware of the appropriate security concerns. Security domains should be
|
|
||||||
mapped out against your specific OpenStack deployment topology. The
|
|
||||||
domains and their trust requirements depend upon whether the cloud
|
|
||||||
instance is public, private, or hybrid.
|
|
||||||
|
|
||||||
* The public security domain is an entirely untrusted area of the cloud
|
|
||||||
infrastructure. It can refer to the internet as a whole or simply to
|
|
||||||
networks over which you have no authority. This domain should always
|
|
||||||
be considered untrusted.
|
|
||||||
|
|
||||||
* The guest security domain handles compute data generated by instances
|
|
||||||
on the cloud but not services that support the operation of the
|
|
||||||
cloud, such as API calls. Public cloud providers and private cloud
|
|
||||||
providers who do not have stringent controls on instance use or who
|
|
||||||
allow unrestricted internet access to instances should consider this
|
|
||||||
domain to be untrusted. Private cloud providers may want to consider
|
|
||||||
this network as internal and therefore trusted only if they have
|
|
||||||
controls in place to assert that they trust instances and all their
|
|
||||||
projects.
|
|
||||||
|
|
||||||
* The management security domain is where services interact. Sometimes
|
|
||||||
referred to as the control plane, the networks in this domain
|
|
||||||
transport confidential data such as configuration parameters, user
|
|
||||||
names, and passwords. In most deployments this domain is considered
|
|
||||||
trusted.
|
|
||||||
|
|
||||||
* The data security domain is concerned primarily with information
|
|
||||||
pertaining to the storage services within OpenStack. Much of the data
|
|
||||||
that crosses this network has high integrity and confidentiality
|
|
||||||
requirements and, depending on the type of deployment, may also have
|
|
||||||
strong availability requirements. The trust level of this network is
|
|
||||||
heavily dependent on other deployment decisions.
|
|
||||||
|
|
||||||
When deploying OpenStack in an enterprise as a private cloud it is
|
|
||||||
usually behind the firewall and within the trusted network alongside
|
|
||||||
existing systems. Users of the cloud are employees that are bound by the
|
|
||||||
security requirements set forth by the company. This tends to push most
|
|
||||||
of the security domains towards a more trusted model. However, when
|
|
||||||
deploying OpenStack in a public facing role, no assumptions can be made
|
|
||||||
and the attack vectors significantly increase.
|
|
||||||
|
|
||||||
Consideration must be taken when managing the users of the system for
|
|
||||||
both public and private clouds. The identity service allows for LDAP to
|
|
||||||
be part of the authentication process. Including such systems in an
|
|
||||||
OpenStack deployment may ease user management if integrating into
|
|
||||||
existing systems.
|
|
||||||
|
|
||||||
It is important to understand that user authentication requests include
|
|
||||||
sensitive information including user names, passwords, and
|
|
||||||
authentication tokens. For this reason, placing the API services behind
|
|
||||||
hardware that performs SSL termination is strongly recommended.
|
|
||||||
|
|
||||||
For more information OpenStack Security, see the `OpenStack Security
|
|
||||||
Guide <https://docs.openstack.org/security-guide/>`_.
|
|
@ -1,99 +0,0 @@
|
|||||||
=================
|
|
||||||
User requirements
|
|
||||||
=================
|
|
||||||
|
|
||||||
When building a general purpose cloud, you should follow the
|
|
||||||
:term:`Infrastructure-as-a-Service (IaaS)` model; a platform best suited
|
|
||||||
for use cases with simple requirements. General purpose cloud user
|
|
||||||
requirements are not complex. However, it is important to capture them
|
|
||||||
even if the project has minimum business and technical requirements, such
|
|
||||||
as a proof of concept (PoC), or a small lab platform.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
The following user considerations are written from the perspective
|
|
||||||
of the cloud builder, not from the perspective of the end user.
|
|
||||||
|
|
||||||
Business requirements
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Cost
|
|
||||||
Financial factors are a primary concern for any organization. Cost
|
|
||||||
is an important criterion as general purpose clouds are considered
|
|
||||||
the baseline from which all other cloud architecture environments
|
|
||||||
derive. General purpose clouds do not always provide the most
|
|
||||||
cost-effective environment for specialized applications or
|
|
||||||
situations. Unless razor-thin margins and costs have been mandated
|
|
||||||
as a critical factor, cost should not be the sole consideration when
|
|
||||||
choosing or designing a general purpose architecture.
|
|
||||||
|
|
||||||
Time to market
|
|
||||||
The ability to deliver services or products within a flexible time
|
|
||||||
frame is a common business factor when building a general purpose
|
|
||||||
cloud. Delivering a product in six months instead of two years is a
|
|
||||||
driving force behind the decision to build general purpose clouds.
|
|
||||||
General purpose clouds allow users to self-provision and gain access
|
|
||||||
to compute, network, and storage resources on-demand thus decreasing
|
|
||||||
time to market.
|
|
||||||
|
|
||||||
Revenue opportunity
|
|
||||||
Revenue opportunities for a cloud will vary greatly based on the
|
|
||||||
intended use case of that particular cloud. Some general purpose
|
|
||||||
clouds are built for commercial customer facing products, but there
|
|
||||||
are alternatives that might make the general purpose cloud the right
|
|
||||||
choice.
|
|
||||||
|
|
||||||
Technical requirements
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Technical cloud architecture requirements should be weighted against the
|
|
||||||
business requirements.
|
|
||||||
|
|
||||||
Performance
|
|
||||||
As a baseline product, general purpose clouds do not provide
|
|
||||||
optimized performance for any particular function. While a general
|
|
||||||
purpose cloud should provide enough performance to satisfy average
|
|
||||||
user considerations, performance is not a general purpose cloud
|
|
||||||
customer driver.
|
|
||||||
|
|
||||||
No predefined usage model
|
|
||||||
The lack of a pre-defined usage model enables the user to run a wide
|
|
||||||
variety of applications without having to know the application
|
|
||||||
requirements in advance. This provides a degree of independence and
|
|
||||||
flexibility that no other cloud scenarios are able to provide.
|
|
||||||
|
|
||||||
On-demand and self-service application
|
|
||||||
By definition, a cloud provides end users with the ability to
|
|
||||||
self-provision computing power, storage, networks, and software in a
|
|
||||||
simple and flexible way. The user must be able to scale their
|
|
||||||
resources up to a substantial level without disrupting the
|
|
||||||
underlying host operations. One of the benefits of using a general
|
|
||||||
purpose cloud architecture is the ability to start with limited
|
|
||||||
resources and increase them over time as the user demand grows.
|
|
||||||
|
|
||||||
Public cloud
|
|
||||||
For a company interested in building a commercial public cloud
|
|
||||||
offering based on OpenStack, the general purpose architecture model
|
|
||||||
might be the best choice. Designers are not always going to know the
|
|
||||||
purposes or workloads for which the end users will use the cloud.
|
|
||||||
|
|
||||||
Internal consumption (private) cloud
|
|
||||||
Organizations need to determine if it is logical to create their own
|
|
||||||
clouds internally. Using a private cloud, organizations are able to
|
|
||||||
maintain complete control over architectural and cloud components.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
Users will want to combine using the internal cloud with access
|
|
||||||
to an external cloud. If that case is likely, it might be worth
|
|
||||||
exploring the possibility of taking a multi-cloud approach with
|
|
||||||
regard to at least some of the architectural elements.
|
|
||||||
|
|
||||||
Designs that incorporate the use of multiple clouds, such as a
|
|
||||||
private cloud and a public cloud offering, are described in the
|
|
||||||
"Multi-Cloud" scenario, see :doc:`multi-site`.
|
|
||||||
|
|
||||||
Security
|
|
||||||
Security should be implemented according to asset, threat, and
|
|
||||||
vulnerability risk assessment matrices. For cloud domains that
|
|
||||||
require increased computer security, network security, or
|
|
||||||
information security, a general purpose cloud is not considered an
|
|
||||||
appropriate choice.
|
|
@ -1,57 +0,0 @@
|
|||||||
===============
|
|
||||||
General purpose
|
|
||||||
===============
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
generalpurpose-user-requirements.rst
|
|
||||||
generalpurpose-technical-considerations.rst
|
|
||||||
generalpurpose-operational-considerations.rst
|
|
||||||
generalpurpose-architecture.rst
|
|
||||||
generalpurpose-prescriptive-example.rst
|
|
||||||
|
|
||||||
|
|
||||||
An OpenStack general purpose cloud is often considered a starting
|
|
||||||
point for building a cloud deployment. They are designed to balance
|
|
||||||
the components and do not emphasize any particular aspect of the
|
|
||||||
overall computing environment. Cloud design must give equal weight
|
|
||||||
to the compute, network, and storage components. General purpose clouds
|
|
||||||
are found in private, public, and hybrid environments, lending
|
|
||||||
themselves to many different use cases.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
General purpose clouds are homogeneous deployments.
|
|
||||||
They are not suited to specialized environments or edge case situations.
|
|
||||||
|
|
||||||
Common uses of a general purpose cloud include:
|
|
||||||
|
|
||||||
* Providing a simple database
|
|
||||||
* A web application runtime environment
|
|
||||||
* A shared application development platform
|
|
||||||
* Lab test bed
|
|
||||||
|
|
||||||
Use cases that benefit from scale-out rather than scale-up approaches
|
|
||||||
are good candidates for general purpose cloud architecture.
|
|
||||||
|
|
||||||
A general purpose cloud is designed to have a range of potential
|
|
||||||
uses or functions; not specialized for specific use cases. General
|
|
||||||
purpose architecture is designed to address 80% of potential use
|
|
||||||
cases available. The infrastructure, in itself, is a specific use
|
|
||||||
case, enabling it to be used as a base model for the design process.
|
|
||||||
|
|
||||||
General purpose clouds are designed to be platforms that are suited
|
|
||||||
for general purpose applications.
|
|
||||||
|
|
||||||
General purpose clouds are limited to the most basic components,
|
|
||||||
but they can include additional resources such as:
|
|
||||||
|
|
||||||
* Virtual-machine disk image library
|
|
||||||
* Raw block storage
|
|
||||||
* File or object storage
|
|
||||||
* Firewalls
|
|
||||||
* Load balancers
|
|
||||||
* IP addresses
|
|
||||||
* Network overlays or virtual local area networks (VLANs)
|
|
||||||
* Software bundles
|
|
@ -1,149 +0,0 @@
|
|||||||
============
|
|
||||||
Architecture
|
|
||||||
============
|
|
||||||
|
|
||||||
Map out the dependencies of the expected workloads and the cloud
|
|
||||||
infrastructures required to support them to architect a solution
|
|
||||||
for the broadest compatibility between cloud platforms, minimizing
|
|
||||||
the need to create workarounds and processes to fill identified gaps.
|
|
||||||
|
|
||||||
For your chosen cloud management platform, note the relative
|
|
||||||
levels of support for both monitoring and orchestration.
|
|
||||||
|
|
||||||
.. figure:: figures/Multi-Cloud_Priv-AWS4.png
|
|
||||||
:width: 100%
|
|
||||||
|
|
||||||
Image portability
|
|
||||||
~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The majority of cloud workloads currently run on instances using
|
|
||||||
hypervisor technologies. The challenge is that each of these hypervisors
|
|
||||||
uses an image format that may not be compatible with the others.
|
|
||||||
When possible, standardize on a single hypervisor and instance image format.
|
|
||||||
This may not be possible when using externally-managed public clouds.
|
|
||||||
|
|
||||||
Conversion tools exist to address image format compatibility.
|
|
||||||
Examples include `virt-p2v/virt-v2v <http://libguestfs.org/virt-v2v>`_
|
|
||||||
and `virt-edit <http://libguestfs.org/virt-edit.1.html>`_.
|
|
||||||
These tools cannot serve beyond basic cloud instance specifications.
|
|
||||||
|
|
||||||
Alternatively, build a thin operating system image as the base for
|
|
||||||
new instances.
|
|
||||||
This facilitates rapid creation of cloud instances using cloud orchestration
|
|
||||||
or configuration management tools for more specific templating.
|
|
||||||
Remember if you intend to use portable images for disaster recovery,
|
|
||||||
application diversity, or high availability, your users could move
|
|
||||||
the images and instances between cloud platforms regularly.
|
|
||||||
|
|
||||||
Upper-layer services
|
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Many clouds offer complementary services beyond the
|
|
||||||
basic compute, network, and storage components.
|
|
||||||
These additional services often simplify the deployment
|
|
||||||
and management of applications on a cloud platform.
|
|
||||||
|
|
||||||
When moving workloads from the source to the destination
|
|
||||||
cloud platforms, consider that the destination cloud platform
|
|
||||||
may not have comparable services. Implement workloads
|
|
||||||
in a different way or by using a different technology.
|
|
||||||
|
|
||||||
For example, moving an application that uses a NoSQL database
|
|
||||||
service such as MongoDB could cause difficulties in maintaining
|
|
||||||
the application between the platforms.
|
|
||||||
|
|
||||||
There are a number of options that are appropriate for
|
|
||||||
the hybrid cloud use case:
|
|
||||||
|
|
||||||
* Implementing a baseline of upper-layer services across all
|
|
||||||
of the cloud platforms. For platforms that do not support
|
|
||||||
a given service, create a service on top of that platform
|
|
||||||
and apply it to the workloads as they are launched on that cloud.
|
|
||||||
* For example, through the :term:`Database service <Database service
|
|
||||||
(trove)>` for OpenStack (:term:`trove`), OpenStack supports MySQL
|
|
||||||
as a service but not NoSQL databases in production.
|
|
||||||
To move from or run alongside AWS, a NoSQL workload must use
|
|
||||||
an automation tool, such as the Orchestration service (heat),
|
|
||||||
to recreate the NoSQL database on top of OpenStack.
|
|
||||||
* Deploying a :term:`Platform-as-a-Service (PaaS)` technology that
|
|
||||||
abstracts the upper-layer services from the underlying cloud platform.
|
|
||||||
The unit of application deployment and migration is the PaaS.
|
|
||||||
It leverages the services of the PaaS and only consumes the base
|
|
||||||
infrastructure services of the cloud platform.
|
|
||||||
* Using automation tools to create the required upper-layer services
|
|
||||||
that are portable across all cloud platforms.
|
|
||||||
|
|
||||||
For example, instead of using database services that are inherent
|
|
||||||
in the cloud platforms, launch cloud instances and deploy the
|
|
||||||
databases on those instances using scripts or configuration and
|
|
||||||
application deployment tools.
|
|
||||||
|
|
||||||
Network services
|
|
||||||
~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Network services functionality is a critical component of
|
|
||||||
multiple cloud architectures. It is an important factor
|
|
||||||
to assess when choosing a CMP and cloud provider.
|
|
||||||
Considerations include:
|
|
||||||
|
|
||||||
* Functionality
|
|
||||||
* Security
|
|
||||||
* Scalability
|
|
||||||
* High availability (HA)
|
|
||||||
|
|
||||||
Verify and test critical cloud endpoint features.
|
|
||||||
|
|
||||||
* After selecting the network functionality framework,
|
|
||||||
you must confirm the functionality is compatible.
|
|
||||||
This ensures testing and functionality persists
|
|
||||||
during and after upgrades.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
Diverse cloud platforms may de-synchronize over time
|
|
||||||
if you do not maintain their mutual compatibility.
|
|
||||||
This is a particular issue with APIs.
|
|
||||||
|
|
||||||
* Scalability across multiple cloud providers determines
|
|
||||||
your choice of underlying network framework.
|
|
||||||
It is important to have the network API functions presented
|
|
||||||
and to verify that the desired functionality persists across
|
|
||||||
all chosen cloud endpoint.
|
|
||||||
|
|
||||||
* High availability implementations vary in functionality and design.
|
|
||||||
Examples of some common methods are active-hot-standby,
|
|
||||||
active-passive, and active-active.
|
|
||||||
Develop your high availability implementation and a test framework to
|
|
||||||
understand the functionality and limitations of the environment.
|
|
||||||
|
|
||||||
* It is imperative to address security considerations.
|
|
||||||
For example, addressing how data is secured between client and
|
|
||||||
endpoint and any traffic that traverses the multiple clouds.
|
|
||||||
Business and regulatory requirements dictate what security
|
|
||||||
approach to take. For more information, see the
|
|
||||||
:ref:`Security requirements <security>` chapter.
|
|
||||||
|
|
||||||
Data
|
|
||||||
~~~~
|
|
||||||
|
|
||||||
Traditionally, replication has been the best method of protecting
|
|
||||||
object store implementations. A variety of replication methods exist
|
|
||||||
in storage architectures, for example synchronous and asynchronous
|
|
||||||
mirroring. Most object stores and back-end storage systems implement
|
|
||||||
methods for replication at the storage subsystem layer.
|
|
||||||
Object stores also tailor replication techniques
|
|
||||||
to fit a cloud's requirements.
|
|
||||||
|
|
||||||
Organizations must find the right balance between
|
|
||||||
data integrity and data availability. Replication strategy may
|
|
||||||
also influence disaster recovery methods.
|
|
||||||
|
|
||||||
Replication across different racks, data centers, and geographical
|
|
||||||
regions increases focus on determining and ensuring data locality.
|
|
||||||
The ability to guarantee data is accessed from the nearest or
|
|
||||||
fastest storage can be necessary for applications to perform well.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
When running embedded object store methods, ensure that you do not
|
|
||||||
instigate extra data replication as this can cause performance issues.
|
|
@ -1,80 +0,0 @@
|
|||||||
==========================
|
|
||||||
Operational considerations
|
|
||||||
==========================
|
|
||||||
|
|
||||||
Hybrid cloud deployments present complex operational challenges.
|
|
||||||
Differences between provider clouds can cause incompatibilities
|
|
||||||
with workloads or Cloud Management Platforms (CMP).
|
|
||||||
Cloud providers may also offer different levels of integration
|
|
||||||
with competing cloud offerings.
|
|
||||||
|
|
||||||
Monitoring is critical to maintaining a hybrid cloud, and it is
|
|
||||||
important to determine if a CMP supports monitoring of all the
|
|
||||||
clouds involved, or if compatible APIs are available to be queried
|
|
||||||
for necessary information.
|
|
||||||
|
|
||||||
Agility
|
|
||||||
~~~~~~~
|
|
||||||
|
|
||||||
Hybrid clouds provide application availability across different
|
|
||||||
cloud environments and technologies.
|
|
||||||
This availability enables the deployment to survive disaster
|
|
||||||
in any single cloud environment.
|
|
||||||
Each cloud should provide the means to create instances quickly in
|
|
||||||
response to capacity issues or failure elsewhere in the hybrid cloud.
|
|
||||||
|
|
||||||
Application readiness
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Enterprise workloads that depend on the underlying infrastructure
|
|
||||||
for availability are not designed to run on OpenStack.
|
|
||||||
If the application cannot tolerate infrastructure failures,
|
|
||||||
it is likely to require significant operator intervention to recover.
|
|
||||||
Applications for hybrid clouds must be fault tolerant, with an SLA
|
|
||||||
that is not tied to the underlying infrastructure.
|
|
||||||
Ideally, cloud applications should be able to recover when entire
|
|
||||||
racks and data centers experience an outage.
|
|
||||||
|
|
||||||
Upgrades
|
|
||||||
~~~~~~~~
|
|
||||||
|
|
||||||
If a deployment includes a public cloud, predicting upgrades may
|
|
||||||
not be possible. Carefully examine provider SLAs.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
At massive scale, even when dealing with a cloud that offers
|
|
||||||
an SLA with a high percentage of uptime, workloads must be able
|
|
||||||
to recover quickly.
|
|
||||||
|
|
||||||
When upgrading private cloud deployments, minimize disruption by
|
|
||||||
making incremental changes and providing a facility to either rollback
|
|
||||||
or continue to roll forward when using a continuous delivery model.
|
|
||||||
|
|
||||||
You may need to coordinate CMP upgrades with hybrid cloud upgrades
|
|
||||||
if there are API changes.
|
|
||||||
|
|
||||||
Network Operation Center
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Consider infrastructure control when planning the Network Operation
|
|
||||||
Center (NOC) for a hybrid cloud environment.
|
|
||||||
If a significant portion of the cloud is on externally managed systems,
|
|
||||||
prepare for situations where it may not be possible to make changes.
|
|
||||||
Additionally, providers may differ on how infrastructure must be
|
|
||||||
managed and exposed. This can lead to delays in root cause analysis
|
|
||||||
where each insists the blame lies with the other provider.
|
|
||||||
|
|
||||||
Ensure that the network structure connects all clouds to form
|
|
||||||
integrated system, keeping in mind the state of handoffs.
|
|
||||||
These handoffs must both be as reliable as possible and
|
|
||||||
include as little latency as possible to ensure the best
|
|
||||||
performance of the overall system.
|
|
||||||
|
|
||||||
Maintainability
|
|
||||||
~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Hybrid clouds rely on third party systems and processes.
|
|
||||||
As a result, it is not possible to guarantee proper maintenance
|
|
||||||
of the overall system. Instead, be prepared to abandon workloads
|
|
||||||
and recreate them in an improved state.
|
|
@ -1,155 +0,0 @@
|
|||||||
=====================
|
|
||||||
Prescriptive examples
|
|
||||||
=====================
|
|
||||||
|
|
||||||
Hybrid cloud environments are designed for these use cases:
|
|
||||||
|
|
||||||
* Bursting workloads from private to public OpenStack clouds
|
|
||||||
* Bursting workloads from private to public non-OpenStack clouds
|
|
||||||
* High availability across clouds (for technical diversity)
|
|
||||||
|
|
||||||
This chapter provides examples of environments that address
|
|
||||||
each of these use cases.
|
|
||||||
|
|
||||||
Bursting to a public OpenStack cloud
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Company A's data center is running low on capacity.
|
|
||||||
It is not possible to expand the data center in the foreseeable future.
|
|
||||||
In order to accommodate the continuously growing need for
|
|
||||||
development resources in the organization,
|
|
||||||
Company A decides to use resources in the public cloud.
|
|
||||||
|
|
||||||
Company A has an established data center with a substantial amount
|
|
||||||
of hardware. Migrating the workloads to a public cloud is not feasible.
|
|
||||||
|
|
||||||
The company has an internal cloud management platform that directs
|
|
||||||
requests to the appropriate cloud, depending on the local capacity.
|
|
||||||
This is a custom in-house application written for this specific purpose.
|
|
||||||
|
|
||||||
This solution is depicted in the figure below:
|
|
||||||
|
|
||||||
.. figure:: figures/Multi-Cloud_Priv-Pub3.png
|
|
||||||
:width: 100%
|
|
||||||
|
|
||||||
This example shows two clouds with a Cloud Management
|
|
||||||
Platform (CMP) connecting them. This guide does not
|
|
||||||
discuss a specific CMP, but describes how the Orchestration and
|
|
||||||
Telemetry services handle, manage, and control workloads.
|
|
||||||
|
|
||||||
The private OpenStack cloud has at least one controller and at least
|
|
||||||
one compute node. It includes metering using the Telemetry service.
|
|
||||||
The Telemetry service captures the load increase and the CMP
|
|
||||||
processes the information. If there is available capacity,
|
|
||||||
the CMP uses the OpenStack API to call the Orchestration service.
|
|
||||||
This creates instances on the private cloud in response to user requests.
|
|
||||||
When capacity is not available on the private cloud, the CMP issues
|
|
||||||
a request to the Orchestration service API of the public cloud.
|
|
||||||
This creates the instance on the public cloud.
|
|
||||||
|
|
||||||
In this example, Company A does not direct the deployments to an
|
|
||||||
external public cloud due to concerns regarding resource control,
|
|
||||||
security, and increased operational expense.
|
|
||||||
|
|
||||||
Bursting to a public non-OpenStack cloud
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The second example examines bursting workloads from the private cloud
|
|
||||||
into a non-OpenStack public cloud using Amazon Web Services (AWS)
|
|
||||||
to take advantage of additional capacity and to scale applications.
|
|
||||||
|
|
||||||
The following diagram demonstrates an OpenStack-to-AWS hybrid cloud:
|
|
||||||
|
|
||||||
.. figure:: figures/Multi-Cloud_Priv-AWS4.png
|
|
||||||
:width: 100%
|
|
||||||
|
|
||||||
Company B states that its developers are already using AWS
|
|
||||||
and do not want to change to a different provider.
|
|
||||||
|
|
||||||
If the CMP is capable of connecting to an external cloud
|
|
||||||
provider with an appropriate API, the workflow process remains
|
|
||||||
the same as the previous scenario.
|
|
||||||
The actions the CMP takes, such as monitoring loads and
|
|
||||||
creating new instances, stay the same.
|
|
||||||
However, the CMP performs actions in the public cloud
|
|
||||||
using applicable API calls.
|
|
||||||
|
|
||||||
If the public cloud is AWS, the CMP would use the
|
|
||||||
EC2 API to create a new instance and assign an Elastic IP.
|
|
||||||
It can then add that IP to HAProxy in the private cloud.
|
|
||||||
The CMP can also reference AWS-specific
|
|
||||||
tools such as CloudWatch and CloudFormation.
|
|
||||||
|
|
||||||
Several open source tool kits for building CMPs are
|
|
||||||
available and can handle this kind of translation.
|
|
||||||
Examples include ManageIQ, jClouds, and JumpGate.
|
|
||||||
|
|
||||||
High availability and disaster recovery
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Company C requires their local data center to be able to
|
|
||||||
recover from failure. Some of the workloads currently in
|
|
||||||
use are running on their private OpenStack cloud.
|
|
||||||
Protecting the data involves Block Storage, Object Storage,
|
|
||||||
and a database. The architecture supports the failure of
|
|
||||||
large components of the system while ensuring that the
|
|
||||||
system continues to deliver services.
|
|
||||||
While the services remain available to users, the failed
|
|
||||||
components are restored in the background based on standard
|
|
||||||
best practice data replication policies.
|
|
||||||
To achieve these objectives, Company C replicates data to
|
|
||||||
a second cloud in a geographically distant location.
|
|
||||||
The following diagram describes this system:
|
|
||||||
|
|
||||||
.. figure:: figures/Multi-Cloud_failover2.png
|
|
||||||
:width: 100%
|
|
||||||
|
|
||||||
This example includes two private OpenStack clouds connected with a CMP.
|
|
||||||
The source cloud, OpenStack Cloud 1, includes a controller and
|
|
||||||
at least one instance running MySQL. It also includes at least
|
|
||||||
one Block Storage volume and one Object Storage volume.
|
|
||||||
This means that data is available to the users at all times.
|
|
||||||
The details of the method for protecting each of these sources
|
|
||||||
of data differs.
|
|
||||||
|
|
||||||
Object Storage relies on the replication capabilities of
|
|
||||||
the Object Storage provider.
|
|
||||||
Company C enables OpenStack Object Storage so that it creates
|
|
||||||
geographically separated replicas that take advantage of this feature.
|
|
||||||
The company configures storage so that at least one replica
|
|
||||||
exists in each cloud. In order to make this work, the company
|
|
||||||
configures a single array spanning both clouds with OpenStack Identity.
|
|
||||||
Using Federated Identity, the array talks to both clouds, communicating
|
|
||||||
with OpenStack Object Storage through the Swift proxy.
|
|
||||||
|
|
||||||
For Block Storage, the replication is a little more difficult,
|
|
||||||
and involves tools outside of OpenStack itself.
|
|
||||||
The OpenStack Block Storage volume is not set as the drive itself
|
|
||||||
but as a logical object that points to a physical back end.
|
|
||||||
Disaster recovery is configured for Block Storage for
|
|
||||||
synchronous backup for the highest level of data protection,
|
|
||||||
but asynchronous backup could have been set as an alternative
|
|
||||||
that is not as latency sensitive.
|
|
||||||
For asynchronous backup, the Block Storage API makes it possible
|
|
||||||
to export the data and also the metadata of a particular volume,
|
|
||||||
so that it can be moved and replicated elsewhere.
|
|
||||||
More information can be found here:
|
|
||||||
`Add volume metadata support to Cinder backup
|
|
||||||
<https://blueprints.launchpad.net/cinder/+spec/cinder-backup-volume-metadata-support>`_.
|
|
||||||
|
|
||||||
The synchronous backups create an identical volume in both
|
|
||||||
clouds and chooses the appropriate flavor so that each cloud
|
|
||||||
has an identical back end. This is done by creating volumes
|
|
||||||
through the CMP. After this is configured, a solution
|
|
||||||
involving DRDB synchronizes the physical drives.
|
|
||||||
|
|
||||||
The database component is backed up using synchronous backups.
|
|
||||||
MySQL does not support geographically diverse replication,
|
|
||||||
so disaster recovery is provided by replicating the file itself.
|
|
||||||
As it is not possible to use Object Storage as the back end of
|
|
||||||
a database like MySQL, Swift replication is not an option.
|
|
||||||
Company C decides not to store the data on another geo-tiered
|
|
||||||
storage system, such as Ceph, as Block Storage.
|
|
||||||
This would have given another layer of protection.
|
|
||||||
Another option would have been to store the database on an OpenStack
|
|
||||||
Block Storage volume and backing it up like any other Block Storage.
|
|
@ -1,155 +0,0 @@
|
|||||||
========================
|
|
||||||
Technical considerations
|
|
||||||
========================
|
|
||||||
|
|
||||||
A hybrid cloud environment requires inspection and
|
|
||||||
understanding of technical issues in external data centers that may
|
|
||||||
not be in your control. Ideally, select an architecture
|
|
||||||
and CMP that are adaptable to changing environments.
|
|
||||||
|
|
||||||
Using diverse cloud platforms increases the risk of compatibility
|
|
||||||
issues, but clouds using the same version and distribution
|
|
||||||
of OpenStack are less likely to experience problems.
|
|
||||||
|
|
||||||
Clouds that exclusively use the same versions of OpenStack should
|
|
||||||
have no issues, regardless of distribution. More recent distributions
|
|
||||||
are less likely to encounter incompatibility between versions.
|
|
||||||
An OpenStack community initiative defines core functions that need to
|
|
||||||
remain backward compatible between supported versions. For example, the
|
|
||||||
DefCore initiative defines basic functions that every distribution must
|
|
||||||
support in order to use the name OpenStack.
|
|
||||||
|
|
||||||
Vendors can add proprietary customization to their distributions.
|
|
||||||
If an application or architecture makes use of these features, it can be
|
|
||||||
difficult to migrate to or use other types of environments.
|
|
||||||
|
|
||||||
If an environment includes non-OpenStack clouds, it may experience
|
|
||||||
compatibility problems. CMP tools must account for the differences in
|
|
||||||
the handling of operations and the implementation of services.
|
|
||||||
|
|
||||||
**Possible cloud incompatibilities**
|
|
||||||
|
|
||||||
* Instance deployment
|
|
||||||
* Network management
|
|
||||||
* Application management
|
|
||||||
* Services implementation
|
|
||||||
|
|
||||||
Capacity planning
|
|
||||||
~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
One of the primary reasons many organizations use a hybrid cloud
|
|
||||||
is to increase capacity without making large capital investments.
|
|
||||||
|
|
||||||
Capacity and the placement of workloads are key design considerations
|
|
||||||
for hybrid clouds. The long-term capacity plan for these designs must
|
|
||||||
incorporate growth over time to prevent permanent consumption of more
|
|
||||||
expensive external clouds.
|
|
||||||
To avoid this scenario, account for future applications' capacity
|
|
||||||
requirements and plan growth appropriately.
|
|
||||||
|
|
||||||
It is difficult to predict the amount of load a particular
|
|
||||||
application might incur if the number of users fluctuates, or the
|
|
||||||
application experiences an unexpected increase in use.
|
|
||||||
It is possible to define application requirements in terms of
|
|
||||||
vCPU, RAM, bandwidth, or other resources and plan appropriately.
|
|
||||||
However, other clouds might not use the same meter or even the same
|
|
||||||
oversubscription rates.
|
|
||||||
|
|
||||||
Oversubscription is a method to emulate more capacity than
|
|
||||||
may physically be present.
|
|
||||||
For example, a physical hypervisor node with 32 GB RAM may host
|
|
||||||
24 instances, each provisioned with 2 GB RAM.
|
|
||||||
As long as all 24 instances do not concurrently use 2 full
|
|
||||||
gigabytes, this arrangement works well.
|
|
||||||
However, some hosts take oversubscription to extremes and,
|
|
||||||
as a result, performance can be inconsistent.
|
|
||||||
If at all possible, determine what the oversubscription rates
|
|
||||||
of each host are and plan capacity accordingly.
|
|
||||||
|
|
||||||
Utilization
|
|
||||||
~~~~~~~~~~~
|
|
||||||
|
|
||||||
A CMP must be aware of what workloads are running, where they are
|
|
||||||
running, and their preferred utilizations.
|
|
||||||
For example, in most cases it is desirable to run as many workloads
|
|
||||||
internally as possible, utilizing other resources only when necessary.
|
|
||||||
On the other hand, situations exist in which the opposite is true,
|
|
||||||
such as when an internal cloud is only for development and stressing
|
|
||||||
it is undesirable. A cost model of various scenarios and
|
|
||||||
consideration of internal priorities helps with this decision.
|
|
||||||
To improve efficiency, automate these decisions when possible.
|
|
||||||
|
|
||||||
The Telemetry service (ceilometer) provides information on the usage
|
|
||||||
of various OpenStack components. Note the following:
|
|
||||||
|
|
||||||
* If Telemetry must retain a large amount of data, for
|
|
||||||
example when monitoring a large or active cloud, we recommend
|
|
||||||
using a NoSQL back end such as MongoDB.
|
|
||||||
* You must monitor connections to non-OpenStack clouds
|
|
||||||
and report this information to the CMP.
|
|
||||||
|
|
||||||
Performance
|
|
||||||
~~~~~~~~~~~
|
|
||||||
|
|
||||||
Performance is critical to hybrid cloud deployments, and they are
|
|
||||||
affected by many of the same issues as multi-site deployments, such
|
|
||||||
as network latency between sites. Also consider the time required to
|
|
||||||
run a workload in different clouds and methods for reducing this time.
|
|
||||||
This may require moving data closer to applications or applications
|
|
||||||
closer to the data they process, and grouping functionality so that
|
|
||||||
connections that require low latency take place over a single cloud
|
|
||||||
rather than spanning clouds.
|
|
||||||
This may also require a CMP that can determine which cloud can most
|
|
||||||
efficiently run which types of workloads.
|
|
||||||
|
|
||||||
As with utilization, native OpenStack tools help improve performance.
|
|
||||||
For example, you can use Telemetry to measure performance and the
|
|
||||||
Orchestration service (heat) to react to changes in demand.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
Orchestration requires special client configurations to integrate
|
|
||||||
with Amazon Web Services. For other types of clouds, use CMP features.
|
|
||||||
|
|
||||||
Components
|
|
||||||
~~~~~~~~~~
|
|
||||||
|
|
||||||
Using more than one cloud in any design requires consideration of
|
|
||||||
four OpenStack tools:
|
|
||||||
|
|
||||||
OpenStack Compute (nova)
|
|
||||||
Regardless of deployment location, hypervisor choice has a direct
|
|
||||||
effect on how difficult it is to integrate with additional clouds.
|
|
||||||
|
|
||||||
Networking (neutron)
|
|
||||||
Whether using OpenStack Networking (neutron) or legacy
|
|
||||||
networking (nova-network), it is necessary to understand
|
|
||||||
network integration capabilities in order to connect between clouds.
|
|
||||||
|
|
||||||
Telemetry (ceilometer)
|
|
||||||
Use of Telemetry depends, in large part, on what the other parts
|
|
||||||
of the cloud you are using.
|
|
||||||
|
|
||||||
Orchestration (heat)
|
|
||||||
Orchestration can be a valuable tool in orchestrating tasks a
|
|
||||||
CMP decides are necessary in an OpenStack-based cloud.
|
|
||||||
|
|
||||||
Special considerations
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Hybrid cloud deployments require consideration of two issues that
|
|
||||||
are not common in other situations:
|
|
||||||
|
|
||||||
Image portability
|
|
||||||
As of the Kilo release, there is no common image format that is
|
|
||||||
usable by all clouds. Conversion or recreation of images is necessary
|
|
||||||
if migrating between clouds. To simplify deployment, use the smallest
|
|
||||||
and simplest images feasible, install only what is necessary, and
|
|
||||||
use a deployment manager such as Chef or Puppet. Do not use golden
|
|
||||||
images to speed up the process unless you repeatedly deploy the same
|
|
||||||
images on the same cloud.
|
|
||||||
|
|
||||||
API differences
|
|
||||||
Avoid using a hybrid cloud deployment with more than just
|
|
||||||
OpenStack (or with different versions of OpenStack) as API changes
|
|
||||||
can cause compatibility issues.
|
|
@ -1,178 +0,0 @@
|
|||||||
=================
|
|
||||||
User requirements
|
|
||||||
=================
|
|
||||||
|
|
||||||
Hybrid cloud architectures are complex, especially those
|
|
||||||
that use heterogeneous cloud platforms.
|
|
||||||
Ensure that design choices match requirements so that the
|
|
||||||
benefits outweigh the inherent additional complexity and risks.
|
|
||||||
|
|
||||||
Business considerations
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Business considerations when designing a hybrid cloud deployment
|
|
||||||
----------------------------------------------------------------
|
|
||||||
|
|
||||||
Cost
|
|
||||||
A hybrid cloud architecture involves multiple vendors and
|
|
||||||
technical architectures.
|
|
||||||
These architectures may be more expensive to deploy and maintain.
|
|
||||||
Operational costs can be higher because of the need for more
|
|
||||||
sophisticated orchestration and brokerage tools than in other architectures.
|
|
||||||
In contrast, overall operational costs might be lower by
|
|
||||||
virtue of using a cloud brokerage tool to deploy the
|
|
||||||
workloads to the most cost effective platform.
|
|
||||||
|
|
||||||
Revenue opportunity
|
|
||||||
Revenue opportunities vary based on the intent and use case of the cloud.
|
|
||||||
As a commercial, customer-facing product, you must consider whether building
|
|
||||||
over multiple platforms makes the design more attractive to customers.
|
|
||||||
|
|
||||||
Time-to-market
|
|
||||||
One common reason to use cloud platforms is to improve the
|
|
||||||
time-to-market of a new product or application.
|
|
||||||
For example, using multiple cloud platforms is viable because
|
|
||||||
there is an existing investment in several applications.
|
|
||||||
It is faster to tie the investments together rather than migrate
|
|
||||||
the components and refactoring them to a single platform.
|
|
||||||
|
|
||||||
Business or technical diversity
|
|
||||||
Organizations leveraging cloud-based services can embrace business
|
|
||||||
diversity and utilize a hybrid cloud design to spread their
|
|
||||||
workloads across multiple cloud providers. This ensures that
|
|
||||||
no single cloud provider is the sole host for an application.
|
|
||||||
|
|
||||||
Application momentum
|
|
||||||
Businesses with existing applications may find that it is
|
|
||||||
more cost effective to integrate applications on multiple
|
|
||||||
cloud platforms than migrating them to a single platform.
|
|
||||||
|
|
||||||
Workload considerations
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
A workload can be a single application or a suite of applications
|
|
||||||
that work together. It can also be a duplicate set of applications that
|
|
||||||
need to run on multiple cloud environments.
|
|
||||||
In a hybrid cloud deployment, the same workload often needs to function
|
|
||||||
equally well on radically different public and private cloud environments.
|
|
||||||
The architecture needs to address these potential conflicts,
|
|
||||||
complexity, and platform incompatibilities.
|
|
||||||
|
|
||||||
Use cases for a hybrid cloud architecture
|
|
||||||
-----------------------------------------
|
|
||||||
|
|
||||||
Dynamic resource expansion or bursting
|
|
||||||
An application that requires additional resources may suit a multiple
|
|
||||||
cloud architecture. For example, a retailer needs additional resources
|
|
||||||
during the holiday season, but does not want to add private cloud
|
|
||||||
resources to meet the peak demand.
|
|
||||||
The user can accommodate the increased load by bursting to
|
|
||||||
a public cloud for these peak load periods. These bursts could be
|
|
||||||
for long or short cycles ranging from hourly to yearly.
|
|
||||||
|
|
||||||
Disaster recovery and business continuity
|
|
||||||
Cheaper storage makes the public cloud suitable for maintaining
|
|
||||||
backup applications.
|
|
||||||
|
|
||||||
Federated hypervisor and instance management
|
|
||||||
Adding self-service, charge back, and transparent delivery of
|
|
||||||
the resources from a federated pool can be cost effective.
|
|
||||||
In a hybrid cloud environment, this is a particularly important
|
|
||||||
consideration. Look for a cloud that provides cross-platform
|
|
||||||
hypervisor support and robust instance management tools.
|
|
||||||
|
|
||||||
Application portfolio integration
|
|
||||||
An enterprise cloud delivers efficient application portfolio
|
|
||||||
management and deployments by leveraging self-service features
|
|
||||||
and rules according to use.
|
|
||||||
Integrating existing cloud environments is a common driver
|
|
||||||
when building hybrid cloud architectures.
|
|
||||||
|
|
||||||
Migration scenarios
|
|
||||||
Hybrid cloud architecture enables the migration of
|
|
||||||
applications between different clouds.
|
|
||||||
|
|
||||||
High availability
|
|
||||||
A combination of locations and platforms enables a level of
|
|
||||||
availability that is not possible with a single platform.
|
|
||||||
This approach increases design complexity.
|
|
||||||
|
|
||||||
As running a workload on multiple cloud platforms increases design
|
|
||||||
complexity, we recommend first exploring options such as transferring
|
|
||||||
workloads across clouds at the application, instance, cloud platform,
|
|
||||||
hypervisor, and network levels.
|
|
||||||
|
|
||||||
Tools considerations
|
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Hybrid cloud designs must incorporate tools to facilitate working
|
|
||||||
across multiple clouds.
|
|
||||||
|
|
||||||
Tool functions
|
|
||||||
--------------
|
|
||||||
|
|
||||||
Broker between clouds
|
|
||||||
Brokering software evaluates relative costs between different
|
|
||||||
cloud platforms. Cloud Management Platforms (CMP)
|
|
||||||
allow the designer to determine the right location for the
|
|
||||||
workload based on predetermined criteria.
|
|
||||||
|
|
||||||
Facilitate orchestration across the clouds
|
|
||||||
CMPs simplify the migration of application workloads between
|
|
||||||
public, private, and hybrid cloud platforms.
|
|
||||||
We recommend using cloud orchestration tools for managing a diverse
|
|
||||||
portfolio of systems and applications across multiple cloud platforms.
|
|
||||||
|
|
||||||
Network considerations
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
It is important to consider the functionality, security, scalability,
|
|
||||||
availability, and testability of network when choosing a CMP and cloud
|
|
||||||
provider.
|
|
||||||
|
|
||||||
* Decide on a network framework and design minimum functionality tests.
|
|
||||||
This ensures testing and functionality persists during and after
|
|
||||||
upgrades.
|
|
||||||
* Scalability across multiple cloud providers may dictate which underlying
|
|
||||||
network framework you choose in different cloud providers.
|
|
||||||
It is important to present the network API functions and to verify
|
|
||||||
that functionality persists across all cloud endpoints chosen.
|
|
||||||
* High availability implementations vary in functionality and design.
|
|
||||||
Examples of some common methods are active-hot-standby, active-passive,
|
|
||||||
and active-active.
|
|
||||||
Development of high availability and test frameworks is necessary to
|
|
||||||
insure understanding of functionality and limitations.
|
|
||||||
* Consider the security of data between the client and the endpoint,
|
|
||||||
and of traffic that traverses the multiple clouds.
|
|
||||||
|
|
||||||
Risk mitigation and management considerations
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Hybrid cloud architectures introduce additional risk because
|
|
||||||
they are more complex than a single cloud design and may involve
|
|
||||||
incompatible components or tools. However, they also reduce
|
|
||||||
risk by spreading workloads over multiple providers.
|
|
||||||
|
|
||||||
Hybrid cloud risks
|
|
||||||
------------------
|
|
||||||
|
|
||||||
Provider availability or implementation details
|
|
||||||
Business changes can affect provider availability.
|
|
||||||
Likewise, changes in a provider's service can disrupt
|
|
||||||
a hybrid cloud environment or increase costs.
|
|
||||||
|
|
||||||
Differing SLAs
|
|
||||||
Hybrid cloud designs must accommodate differences in SLAs
|
|
||||||
between providers, and consider their enforceability.
|
|
||||||
|
|
||||||
Security levels
|
|
||||||
Securing multiple cloud environments is more complex than
|
|
||||||
securing single cloud environments. We recommend addressing
|
|
||||||
concerns at the application, network, and cloud platform levels.
|
|
||||||
Be aware that each cloud platform approaches security differently,
|
|
||||||
and a hybrid cloud design must address and compensate for these differences.
|
|
||||||
|
|
||||||
Provider API changes
|
|
||||||
Consumers of external clouds rarely have control over provider
|
|
||||||
changes to APIs, and changes can break compatibility.
|
|
||||||
Using only the most common and basic APIs can minimize potential conflicts.
|
|
@ -1,45 +0,0 @@
|
|||||||
======
|
|
||||||
Hybrid
|
|
||||||
======
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
hybrid-user-requirements.rst
|
|
||||||
hybrid-technical-considerations.rst
|
|
||||||
hybrid-architecture.rst
|
|
||||||
hybrid-operational-considerations.rst
|
|
||||||
hybrid-prescriptive-examples.rst
|
|
||||||
|
|
||||||
A :term:`hybrid cloud` design is one that uses more than one cloud.
|
|
||||||
For example, designs that use both an OpenStack-based private
|
|
||||||
cloud and an OpenStack-based public cloud, or that use an
|
|
||||||
OpenStack cloud and a non-OpenStack cloud, are hybrid clouds.
|
|
||||||
|
|
||||||
:term:`Bursting <bursting>` describes the practice of creating new instances
|
|
||||||
in an external cloud to alleviate capacity issues in a private cloud.
|
|
||||||
|
|
||||||
**Example scenarios suited to hybrid clouds**
|
|
||||||
|
|
||||||
* Bursting from a private cloud to a public cloud
|
|
||||||
* Disaster recovery
|
|
||||||
* Development and testing
|
|
||||||
* Federated cloud, enabling users to choose resources from multiple providers
|
|
||||||
* Supporting legacy systems as they transition to the cloud
|
|
||||||
|
|
||||||
Hybrid clouds interact with systems that are outside the
|
|
||||||
control of the private cloud administrator, and require
|
|
||||||
careful architecture to prevent conflicts with hardware,
|
|
||||||
software, and APIs under external control.
|
|
||||||
|
|
||||||
The degree to which the architecture is OpenStack-based affects your ability
|
|
||||||
to accomplish tasks with native OpenStack tools. By definition,
|
|
||||||
this is a situation in which no single cloud can provide all
|
|
||||||
of the necessary functionality. In order to manage the entire
|
|
||||||
system, we recommend using a cloud management platform (CMP).
|
|
||||||
|
|
||||||
There are several commercial and open source CMPs available,
|
|
||||||
but there is no single CMP that can address all needs in all
|
|
||||||
scenarios, and sometimes a manually-built solution is the best
|
|
||||||
option. This chapter includes discussion of using CMPs for
|
|
||||||
managing a hybrid cloud.
|
|
@ -1,35 +0,0 @@
|
|||||||
.. meta::
|
|
||||||
:description: This guide targets OpenStack Architects
|
|
||||||
for architectural design
|
|
||||||
:keywords: Architecture, OpenStack
|
|
||||||
|
|
||||||
===================================
|
|
||||||
OpenStack Architecture Design Guide
|
|
||||||
===================================
|
|
||||||
|
|
||||||
Abstract
|
|
||||||
~~~~~~~~
|
|
||||||
|
|
||||||
To reap the benefits of OpenStack, you should plan, design,
|
|
||||||
and architect your cloud properly, taking user's needs into
|
|
||||||
account and understanding the use cases.
|
|
||||||
|
|
||||||
Contents
|
|
||||||
~~~~~~~~
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
common/conventions.rst
|
|
||||||
introduction.rst
|
|
||||||
legal-security-requirements.rst
|
|
||||||
generalpurpose.rst
|
|
||||||
compute-focus.rst
|
|
||||||
storage-focus.rst
|
|
||||||
network-focus.rst
|
|
||||||
multi-site.rst
|
|
||||||
hybrid.rst
|
|
||||||
massively-scalable.rst
|
|
||||||
specialized.rst
|
|
||||||
references.rst
|
|
||||||
common/appendix.rst
|
|
@ -1,33 +0,0 @@
|
|||||||
How this book is organized
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
This book examines some of the most common uses for OpenStack clouds,
|
|
||||||
and explains the considerations for each use case. Cloud architects may
|
|
||||||
use this book as a comprehensive guide by reading all of the use cases,
|
|
||||||
but it is also possible to review only the chapters which pertain to a
|
|
||||||
specific use case. The use cases covered in this guide include:
|
|
||||||
|
|
||||||
* :doc:`General purpose<generalpurpose>`: Uses common components that
|
|
||||||
address 80% of common use cases.
|
|
||||||
|
|
||||||
* :doc:`Compute focused<compute-focus>`: For compute intensive workloads
|
|
||||||
such as high performance computing (HPC).
|
|
||||||
|
|
||||||
* :doc:`Storage focused<storage-focus>`: For storage intensive workloads
|
|
||||||
such as data analytics with parallel file systems.
|
|
||||||
|
|
||||||
* :doc:`Network focused<network-focus>`: For high performance and
|
|
||||||
reliable networking, such as a :term:`content delivery network (CDN)`.
|
|
||||||
|
|
||||||
* :doc:`Multi-site<multi-site>`: For applications that require multiple
|
|
||||||
site deployments for geographical, reliability or data locality
|
|
||||||
reasons.
|
|
||||||
|
|
||||||
* :doc:`Hybrid cloud<hybrid>`: Uses multiple disparate clouds connected
|
|
||||||
either for failover, hybrid cloud bursting, or availability.
|
|
||||||
|
|
||||||
* :doc:`Massively scalable<massively-scalable>`: For cloud service
|
|
||||||
providers or other large installations.
|
|
||||||
|
|
||||||
* :doc:`Specialized cases<specialized>`: Architectures that have not
|
|
||||||
previously been covered in the defined use cases.
|
|
@ -1,55 +0,0 @@
|
|||||||
Why and how we wrote this book
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
We wrote this book to guide you through designing an OpenStack cloud
|
|
||||||
architecture. This guide identifies design considerations for common
|
|
||||||
cloud use cases and provides examples.
|
|
||||||
|
|
||||||
The Architecture Design Guide was written in a book sprint format, which
|
|
||||||
is a facilitated, rapid development production method for books. The
|
|
||||||
Book Sprint was facilitated by Faith Bosworth and Adam Hyde of Book
|
|
||||||
Sprints, for more information, see the Book Sprints website
|
|
||||||
(www.booksprints.net).
|
|
||||||
|
|
||||||
This book was written in five days during July 2014 while exhausting the
|
|
||||||
M&M, Mountain Dew and healthy options supply, complete with juggling
|
|
||||||
entertainment during lunches at VMware's headquarters in Palo Alto.
|
|
||||||
|
|
||||||
We would like to thank VMware for their generous hospitality, as well as
|
|
||||||
our employers, Cisco, Cloudscaling, Comcast, EMC, Mirantis, Rackspace,
|
|
||||||
Red Hat, Verizon, and VMware, for enabling us to contribute our time. We
|
|
||||||
would especially like to thank Anne Gentle and Kenneth Hui for all of
|
|
||||||
their shepherding and organization in making this happen.
|
|
||||||
|
|
||||||
The author team includes:
|
|
||||||
|
|
||||||
* Kenneth Hui (EMC) `@hui\_kenneth <http://twitter.com/hui_kenneth>`__
|
|
||||||
|
|
||||||
* Alexandra Settle (Rackspace)
|
|
||||||
`@dewsday <http://twitter.com/dewsday>`__
|
|
||||||
|
|
||||||
* Anthony Veiga (Comcast) `@daaelar <http://twitter.com/daaelar>`__
|
|
||||||
|
|
||||||
* Beth Cohen (Verizon) `@bfcohen <http://twitter.com/bfcohen>`__
|
|
||||||
|
|
||||||
* Kevin Jackson (Rackspace)
|
|
||||||
`@itarchitectkev <http://twitter.com/itarchitectkev>`__
|
|
||||||
|
|
||||||
* Maish Saidel-Keesing (Cisco)
|
|
||||||
`@maishsk <http://twitter.com/maishsk>`__
|
|
||||||
|
|
||||||
* Nick Chase (Mirantis) `@NickChase <http://twitter.com/NickChase>`__
|
|
||||||
|
|
||||||
* Scott Lowe (VMware) `@scott\_lowe <http://twitter.com/scott_lowe>`__
|
|
||||||
|
|
||||||
* Sean Collins (Comcast) `@sc68cal <http://twitter.com/sc68cal>`__
|
|
||||||
|
|
||||||
* Sean Winn (Cloudscaling)
|
|
||||||
`@seanmwinn <http://twitter.com/seanmwinn>`__
|
|
||||||
|
|
||||||
* Sebastian Gutierrez (Red Hat) `@gutseb <http://twitter.com/gutseb>`__
|
|
||||||
|
|
||||||
* Stephen Gordon (Red Hat) `@xsgordon <http://twitter.com/xsgordon>`__
|
|
||||||
|
|
||||||
* Vinny Valdez (Red Hat)
|
|
||||||
`@VinnyValdez <http://twitter.com/VinnyValdez>`__
|
|
@ -1,11 +0,0 @@
|
|||||||
Intended audience
|
|
||||||
~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
This book has been written for architects and designers of OpenStack
|
|
||||||
clouds. For a guide on deploying and operating OpenStack, please refer
|
|
||||||
to the `OpenStack Operations Guide <https://docs.openstack.org/ops-guide/>`_.
|
|
||||||
|
|
||||||
Before reading this book, we recommend prior knowledge of cloud
|
|
||||||
architecture and principles, experience in enterprise system design,
|
|
||||||
Linux and virtualization experience, and a basic understanding of
|
|
||||||
networking principles and protocols.
|
|
@ -1,146 +0,0 @@
|
|||||||
Methodology
|
|
||||||
~~~~~~~~~~~
|
|
||||||
|
|
||||||
The best way to design your cloud architecture is through creating and
|
|
||||||
testing use cases. Planning for applications that support thousands of
|
|
||||||
sessions per second, variable workloads, and complex, changing data,
|
|
||||||
requires you to identify the key meters. Identifying these key meters,
|
|
||||||
such as number of concurrent transactions per second, and size of
|
|
||||||
database, makes it possible to build a method for testing your
|
|
||||||
assumptions.
|
|
||||||
|
|
||||||
Use a functional user scenario to develop test cases, and to measure
|
|
||||||
overall project trajectory.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
If you do not want to use an application to develop user
|
|
||||||
requirements automatically, you need to create requirements to build
|
|
||||||
test harnesses and develop usable meters.
|
|
||||||
|
|
||||||
Establishing these meters allows you to respond to changes quickly
|
|
||||||
without having to set exact requirements in advance. This creates ways
|
|
||||||
to configure the system, rather than redesigning it every time there is
|
|
||||||
a requirements change.
|
|
||||||
|
|
||||||
.. important::
|
|
||||||
|
|
||||||
It is important to limit scope creep. Ensure you address tool
|
|
||||||
limitations, but do not recreate the entire suite of tools. Work
|
|
||||||
with technical product owners to establish critical features that
|
|
||||||
are needed for a successful cloud deployment.
|
|
||||||
|
|
||||||
Application cloud readiness
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
The cloud does more than host virtual machines and their applications.
|
|
||||||
This *lift and shift* approach works in certain situations, but there is
|
|
||||||
a fundamental difference between clouds and traditional bare-metal-based
|
|
||||||
environments, or even traditional virtualized environments.
|
|
||||||
|
|
||||||
In traditional environments, with traditional enterprise applications,
|
|
||||||
the applications and the servers that run on them are *pets*. They are
|
|
||||||
lovingly crafted and cared for, the servers have names like Gandalf or
|
|
||||||
Tardis, and if they get sick someone nurses them back to health. All of
|
|
||||||
this is designed so that the application does not experience an outage.
|
|
||||||
|
|
||||||
In cloud environments, servers are more like cattle. There are thousands
|
|
||||||
of them, they get names like NY-1138-Q, and if they get sick, they get
|
|
||||||
put down and a sysadmin installs another one. Traditional applications
|
|
||||||
that are unprepared for this kind of environment may suffer outages,
|
|
||||||
loss of data, or complete failure.
|
|
||||||
|
|
||||||
There are other reasons to design applications with the cloud in mind.
|
|
||||||
Some are defensive, such as the fact that because applications cannot be
|
|
||||||
certain of exactly where or on what hardware they will be launched, they
|
|
||||||
need to be flexible, or at least adaptable. Others are proactive. For
|
|
||||||
example, one of the advantages of using the cloud is scalability.
|
|
||||||
Applications need to be designed in such a way that they can take
|
|
||||||
advantage of these and other opportunities.
|
|
||||||
|
|
||||||
Determining whether an application is cloud-ready
|
|
||||||
-------------------------------------------------
|
|
||||||
|
|
||||||
There are several factors to take into consideration when looking at
|
|
||||||
whether an application is a good fit for the cloud.
|
|
||||||
|
|
||||||
Structure
|
|
||||||
A large, monolithic, single-tiered, legacy application typically is
|
|
||||||
not a good fit for the cloud. Efficiencies are gained when load can
|
|
||||||
be spread over several instances, so that a failure in one part of
|
|
||||||
the system can be mitigated without affecting other parts of the
|
|
||||||
system, or so that scaling can take place where the app needs it.
|
|
||||||
|
|
||||||
Dependencies
|
|
||||||
Applications that depend on specific hardware, such as a particular
|
|
||||||
chip set or an external device such as a fingerprint reader, might
|
|
||||||
not be a good fit for the cloud, unless those dependencies are
|
|
||||||
specifically addressed. Similarly, if an application depends on an
|
|
||||||
operating system or set of libraries that cannot be used in the
|
|
||||||
cloud, or cannot be virtualized, that is a problem.
|
|
||||||
|
|
||||||
Connectivity
|
|
||||||
Self-contained applications, or those that depend on resources that
|
|
||||||
are not reachable by the cloud in question, will not run. In some
|
|
||||||
situations, you can work around these issues with custom network
|
|
||||||
setup, but how well this works depends on the chosen cloud
|
|
||||||
environment.
|
|
||||||
|
|
||||||
Durability and resilience
|
|
||||||
Despite the existence of SLAs, things break: servers go down,
|
|
||||||
network connections are disrupted, or too many projects on a server
|
|
||||||
make a server unusable. An application must be sturdy enough to
|
|
||||||
contend with these issues.
|
|
||||||
|
|
||||||
Designing for the cloud
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
Here are some guidelines to keep in mind when designing an application
|
|
||||||
for the cloud:
|
|
||||||
|
|
||||||
* Be a pessimist: Assume everything fails and design backwards.
|
|
||||||
|
|
||||||
* Put your eggs in multiple baskets: Leverage multiple providers,
|
|
||||||
geographic regions and availability zones to accommodate for local
|
|
||||||
availability issues. Design for portability.
|
|
||||||
|
|
||||||
* Think efficiency: Inefficient designs will not scale. Efficient
|
|
||||||
designs become cheaper as they scale. Kill off unneeded components or
|
|
||||||
capacity.
|
|
||||||
|
|
||||||
* Be paranoid: Design for defense in depth and zero tolerance by
|
|
||||||
building in security at every level and between every component.
|
|
||||||
Trust no one.
|
|
||||||
|
|
||||||
* But not too paranoid: Not every application needs the platinum
|
|
||||||
solution. Architect for different SLA's, service tiers, and security
|
|
||||||
levels.
|
|
||||||
|
|
||||||
* Manage the data: Data is usually the most inflexible and complex area
|
|
||||||
of a cloud and cloud integration architecture. Do not short change
|
|
||||||
the effort in analyzing and addressing data needs.
|
|
||||||
|
|
||||||
* Hands off: Leverage automation to increase consistency and quality
|
|
||||||
and reduce response times.
|
|
||||||
|
|
||||||
* Divide and conquer: Pursue partitioning and parallel layering
|
|
||||||
wherever possible. Make components as small and portable as possible.
|
|
||||||
Use load balancing between layers.
|
|
||||||
|
|
||||||
* Think elasticity: Increasing resources should result in a
|
|
||||||
proportional increase in performance and scalability. Decreasing
|
|
||||||
resources should have the opposite effect.
|
|
||||||
|
|
||||||
* Be dynamic: Enable dynamic configuration changes such as auto
|
|
||||||
scaling, failure recovery and resource discovery to adapt to changing
|
|
||||||
environments, faults, and workload volumes.
|
|
||||||
|
|
||||||
* Stay close: Reduce latency by moving highly interactive components
|
|
||||||
and data near each other.
|
|
||||||
|
|
||||||
* Keep it loose: Loose coupling, service interfaces, separation of
|
|
||||||
concerns, abstraction, and well defined API's deliver flexibility.
|
|
||||||
|
|
||||||
* Be cost aware: Autoscaling, data transmission, virtual software
|
|
||||||
licenses, reserved instances, and similar costs can rapidly increase
|
|
||||||
monthly usage charges. Monitor usage closely.
|
|
@ -1,15 +0,0 @@
|
|||||||
============
|
|
||||||
Introduction
|
|
||||||
============
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
introduction-intended-audience.rst
|
|
||||||
introduction-how-this-book-is-organized.rst
|
|
||||||
introduction-how-this-book-was-written.rst
|
|
||||||
introduction-methodology.rst
|
|
||||||
|
|
||||||
:term:`OpenStack` is a fully-featured, self-service cloud. This book takes you
|
|
||||||
through some of the considerations you have to make when designing your
|
|
||||||
cloud.
|
|
@ -1,254 +0,0 @@
|
|||||||
===============================
|
|
||||||
Security and legal requirements
|
|
||||||
===============================
|
|
||||||
|
|
||||||
This chapter discusses the legal and security requirements you
|
|
||||||
need to consider for the different OpenStack scenarios.
|
|
||||||
|
|
||||||
Legal requirements
|
|
||||||
~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Many jurisdictions have legislative and regulatory
|
|
||||||
requirements governing the storage and management of data in
|
|
||||||
cloud environments. Common areas of regulation include:
|
|
||||||
|
|
||||||
* Data retention policies ensuring storage of persistent data
|
|
||||||
and records management to meet data archival requirements.
|
|
||||||
* Data ownership policies governing the possession and
|
|
||||||
responsibility for data.
|
|
||||||
* Data sovereignty policies governing the storage of data in
|
|
||||||
foreign countries or otherwise separate jurisdictions.
|
|
||||||
* Data compliance policies governing certain types of
|
|
||||||
information needing to reside in certain locations due to
|
|
||||||
regulatory issues - and more importantly, cannot reside in
|
|
||||||
other locations for the same reason.
|
|
||||||
|
|
||||||
Examples of such legal frameworks include the
|
|
||||||
`data protection framework <http://ec.europa.eu/justice/data-protection/>`_
|
|
||||||
of the European Union and the requirements of the
|
|
||||||
`Financial Industry Regulatory Authority
|
|
||||||
<http://www.finra.org/Industry/Regulation/FINRARules/>`_
|
|
||||||
in the United States.
|
|
||||||
Consult a local regulatory body for more information.
|
|
||||||
|
|
||||||
.. _security:
|
|
||||||
|
|
||||||
Security
|
|
||||||
~~~~~~~~
|
|
||||||
|
|
||||||
When deploying OpenStack in an enterprise as a private cloud,
|
|
||||||
despite activating a firewall and binding employees with security
|
|
||||||
agreements, cloud architecture should not make assumptions about
|
|
||||||
safety and protection.
|
|
||||||
In addition to considering the users, operators, or administrators
|
|
||||||
who will use the environment, consider also negative or hostile users who
|
|
||||||
would attack or compromise the security of your deployment regardless
|
|
||||||
of firewalls or security agreements.
|
|
||||||
|
|
||||||
Attack vectors increase further in a public facing OpenStack deployment.
|
|
||||||
For example, the API endpoints and the software behind it become
|
|
||||||
vulnerable to hostile entities attempting to gain unauthorized access
|
|
||||||
or prevent access to services.
|
|
||||||
This can result in loss of reputation and you must protect against
|
|
||||||
it through auditing and appropriate filtering.
|
|
||||||
|
|
||||||
It is important to understand that user authentication requests
|
|
||||||
encase sensitive information such as user names, passwords, and
|
|
||||||
authentication tokens. For this reason, place the API services
|
|
||||||
behind hardware that performs SSL termination.
|
|
||||||
|
|
||||||
.. warning::
|
|
||||||
|
|
||||||
Be mindful of consistency when utilizing third party
|
|
||||||
clouds to explore authentication options.
|
|
||||||
|
|
||||||
Security domains
|
|
||||||
~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
A security domain comprises users, applications, servers or networks
|
|
||||||
that share common trust requirements and expectations within a system.
|
|
||||||
Typically, security domains have the same authentication and
|
|
||||||
authorization requirements and users.
|
|
||||||
|
|
||||||
You can map security domains individually to the installation,
|
|
||||||
or combine them. For example, some deployment topologies combine both
|
|
||||||
guest and data domains onto one physical network.
|
|
||||||
In other cases these networks are physically separate.
|
|
||||||
Map out the security domains against specific OpenStack topologies needs.
|
|
||||||
The domains and their trust requirements depend on whether the cloud
|
|
||||||
instance is public, private, or hybrid.
|
|
||||||
|
|
||||||
Public security domains
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
The public security domain is an untrusted area of the cloud
|
|
||||||
infrastructure. It can refer to the internet as a whole or simply
|
|
||||||
to networks over which the user has no authority.
|
|
||||||
Always consider this domain untrusted. For example,
|
|
||||||
in a hybrid cloud deployment, any information traversing between and
|
|
||||||
beyond the clouds is in the public domain and untrustworthy.
|
|
||||||
|
|
||||||
Guest security domains
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
Typically used for compute instance-to-instance traffic, the
|
|
||||||
guest security domain handles compute data generated by
|
|
||||||
instances on the cloud but not services that support the
|
|
||||||
operation of the cloud, such as API calls. Public cloud
|
|
||||||
providers and private cloud providers who do not have
|
|
||||||
stringent controls on instance use or who allow unrestricted
|
|
||||||
internet access to instances should consider this domain to be
|
|
||||||
untrusted. Private cloud providers may want to consider this
|
|
||||||
network as internal and therefore trusted only if they have
|
|
||||||
controls in place to assert that they trust instances and all
|
|
||||||
their projects.
|
|
||||||
|
|
||||||
Management security domains
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
The management security domain is where services interact.
|
|
||||||
The networks in this domain transport confidential data such as
|
|
||||||
configuration parameters, user names, and passwords. Trust this
|
|
||||||
domain when it is behind an organization's firewall in deployments.
|
|
||||||
|
|
||||||
Data security domains
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
The data security domain is concerned primarily with
|
|
||||||
information pertaining to the storage services within OpenStack.
|
|
||||||
The data that crosses this network has integrity and
|
|
||||||
confidentiality requirements. Depending on the type of deployment there
|
|
||||||
may also be availability requirements. The trust level of this network
|
|
||||||
is heavily dependent on deployment decisions and does not have a default
|
|
||||||
level of trust.
|
|
||||||
|
|
||||||
Hypervisor-security
|
|
||||||
~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The hypervisor also requires a security assessment. In a
|
|
||||||
public cloud, organizations typically do not have control
|
|
||||||
over the choice of hypervisor. Properly securing your
|
|
||||||
hypervisor is important. Attacks made upon the
|
|
||||||
unsecured hypervisor are called a **hypervisor breakout**.
|
|
||||||
Hypervisor breakout describes the event of a
|
|
||||||
compromised or malicious instance breaking out of the resource
|
|
||||||
controls of the hypervisor and gaining access to the bare
|
|
||||||
metal operating system and hardware resources.
|
|
||||||
|
|
||||||
There is not an issue if the security of instances is not important.
|
|
||||||
However, enterprises need to avoid vulnerability. The only way to
|
|
||||||
do this is to avoid the situation where the instances are running
|
|
||||||
on a public cloud. That does not mean that there is a
|
|
||||||
need to own all of the infrastructure on which an OpenStack
|
|
||||||
installation operates; it suggests avoiding situations in which
|
|
||||||
sharing hardware with others occurs.
|
|
||||||
|
|
||||||
Baremetal security
|
|
||||||
~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
There are other services worth considering that provide a
|
|
||||||
bare metal instance instead of a cloud. In other cases, it is
|
|
||||||
possible to replicate a second private cloud by integrating
|
|
||||||
with a private Cloud-as-a-Service deployment. The
|
|
||||||
organization does not buy the hardware, but also does not share
|
|
||||||
with other projects. It is also possible to use a provider that
|
|
||||||
hosts a bare-metal public cloud instance for which the
|
|
||||||
hardware is dedicated only to one customer, or a provider that
|
|
||||||
offers private Cloud-as-a-Service.
|
|
||||||
|
|
||||||
.. important::
|
|
||||||
|
|
||||||
Each cloud implements services differently.
|
|
||||||
What keeps data secure in one cloud may not do the same in another.
|
|
||||||
Be sure to know the security requirements of every cloud that
|
|
||||||
handles the organization's data or workloads.
|
|
||||||
|
|
||||||
More information on OpenStack Security can be found in the
|
|
||||||
`OpenStack Security Guide <https://docs.openstack.org/security-guide>`_.
|
|
||||||
|
|
||||||
Networking security
|
|
||||||
~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Consider security implications and requirements before designing the
|
|
||||||
physical and logical network topologies. Make sure that the networks are
|
|
||||||
properly segregated and traffic flows are going to the correct
|
|
||||||
destinations without crossing through locations that are undesirable.
|
|
||||||
Consider the following example factors:
|
|
||||||
|
|
||||||
* Firewalls
|
|
||||||
* Overlay interconnects for joining separated project networks
|
|
||||||
* Routing through or avoiding specific networks
|
|
||||||
|
|
||||||
How networks attach to hypervisors can expose security
|
|
||||||
vulnerabilities. To mitigate against exploiting hypervisor breakouts,
|
|
||||||
separate networks from other systems and schedule instances for the
|
|
||||||
network onto dedicated compute nodes. This prevents attackers
|
|
||||||
from having access to the networks from a compromised instance.
|
|
||||||
|
|
||||||
Multi-site security
|
|
||||||
~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Securing a multi-site OpenStack installation brings
|
|
||||||
extra challenges. Projects may expect a project-created network
|
|
||||||
to be secure. In a multi-site installation the use of a
|
|
||||||
non-private connection between sites may be required. This may
|
|
||||||
mean that traffic would be visible to third parties and, in
|
|
||||||
cases where an application requires security, this issue
|
|
||||||
requires mitigation. In these instances, install a VPN or
|
|
||||||
encrypted connection between sites to conceal sensitive traffic.
|
|
||||||
|
|
||||||
Another security consideration with regard to multi-site
|
|
||||||
deployments is Identity. Centralize authentication within a
|
|
||||||
multi-site deployment. Centralization provides a
|
|
||||||
single authentication point for users across the deployment,
|
|
||||||
as well as a single point of administration for traditional
|
|
||||||
create, read, update, and delete operations. Centralized
|
|
||||||
authentication is also useful for auditing purposes because
|
|
||||||
all authentication tokens originate from the same source.
|
|
||||||
|
|
||||||
Just as projects in a single-site deployment need isolation
|
|
||||||
from each other, so do projects in multi-site installations.
|
|
||||||
The extra challenges in multi-site designs revolve around
|
|
||||||
ensuring that project networks function across regions.
|
|
||||||
OpenStack Networking (neutron) does not presently support
|
|
||||||
a mechanism to provide this functionality, therefore an
|
|
||||||
external system may be necessary to manage these mappings.
|
|
||||||
Project networks may contain sensitive information requiring
|
|
||||||
that this mapping be accurate and consistent to ensure that a
|
|
||||||
project in one site does not connect to a different project in
|
|
||||||
another site.
|
|
||||||
|
|
||||||
OpenStack components
|
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Most OpenStack installations require a bare minimum set of
|
|
||||||
pieces to function. These include OpenStack Identity
|
|
||||||
(keystone) for authentication, OpenStack Compute
|
|
||||||
(nova) for compute, OpenStack Image service (glance) for image
|
|
||||||
storage, OpenStack Networking (neutron) for networking, and
|
|
||||||
potentially an object store in the form of OpenStack Object
|
|
||||||
Storage (swift). Bringing multi-site into play also demands extra
|
|
||||||
components in order to coordinate between regions. Centralized
|
|
||||||
Identity service is necessary to provide the single authentication
|
|
||||||
point. Centralized dashboard is also recommended to provide a
|
|
||||||
single login point and a mapped experience to the API and CLI
|
|
||||||
options available. If needed, use a centralized Object Storage service,
|
|
||||||
installing the required swift proxy service alongside the Object
|
|
||||||
Storage service.
|
|
||||||
|
|
||||||
It may also be helpful to install a few extra options in
|
|
||||||
order to facilitate certain use cases. For instance,
|
|
||||||
installing DNS service may assist in automatically generating
|
|
||||||
DNS domains for each region with an automatically-populated
|
|
||||||
zone full of resource records for each instance. This
|
|
||||||
facilitates using DNS as a mechanism for determining which
|
|
||||||
region would be selected for certain applications.
|
|
||||||
|
|
||||||
Another useful tool for managing a multi-site installation
|
|
||||||
is Orchestration (heat). The Orchestration service allows
|
|
||||||
the use of templates to define a set of instances to be launched
|
|
||||||
together or for scaling existing sets.
|
|
||||||
It can set up matching or differentiated groupings based on regions.
|
|
||||||
For instance, if an application requires an equally balanced
|
|
||||||
number of nodes across sites, the same heat template can be used
|
|
||||||
to cover each site with small alterations to only the region name.
|
|
@ -1,85 +0,0 @@
|
|||||||
Operational considerations
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
In order to run efficiently at massive scale, automate as many of the
|
|
||||||
operational processes as possible. Automation includes the configuration of
|
|
||||||
provisioning, monitoring and alerting systems. Part of the automation process
|
|
||||||
includes the capability to determine when human intervention is required and
|
|
||||||
who should act. The objective is to decrease the ratio of operational staff to
|
|
||||||
running systems as much as possible in order to reduce maintenance costs. In a
|
|
||||||
massively scaled environment, it is very difficult for staff to give each
|
|
||||||
system individual care.
|
|
||||||
|
|
||||||
Configuration management tools such as Puppet and Chef enable operations staff
|
|
||||||
to categorize systems into groups based on their roles and thus create
|
|
||||||
configurations and system states that the provisioning system enforces.
|
|
||||||
Systems that fall out of the defined state due to errors or failures are
|
|
||||||
quickly removed from the pool of active nodes and replaced.
|
|
||||||
|
|
||||||
At large scale the resource cost of diagnosing failed individual systems is
|
|
||||||
far greater than the cost of replacement. It is more economical to replace the
|
|
||||||
failed system with a new system, provisioning and configuring it automatically
|
|
||||||
and adding it to the pool of active nodes. By automating tasks that are
|
|
||||||
labor-intensive, repetitive, and critical to operations, cloud operations
|
|
||||||
teams can work more efficiently because fewer resources are required for these
|
|
||||||
common tasks. Administrators are then free to tackle tasks that are not easy
|
|
||||||
to automate and that have longer-term impacts on the business, for example,
|
|
||||||
capacity planning.
|
|
||||||
|
|
||||||
The bleeding edge
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
Running OpenStack at massive scale requires striking a balance between
|
|
||||||
stability and features. For example, it might be tempting to run an older
|
|
||||||
stable release branch of OpenStack to make deployments easier. However, when
|
|
||||||
running at massive scale, known issues that may be of some concern or only
|
|
||||||
have minimal impact in smaller deployments could become pain points. Recent
|
|
||||||
releases may address well known issues. The OpenStack community can help
|
|
||||||
resolve reported issues by applying the collective expertise of the OpenStack
|
|
||||||
developers.
|
|
||||||
|
|
||||||
The number of organizations running at massive scales is a small proportion of
|
|
||||||
the OpenStack community, therefore it is important to share related issues
|
|
||||||
with the community and be a vocal advocate for resolving them. Some issues
|
|
||||||
only manifest when operating at large scale, and the number of organizations
|
|
||||||
able to duplicate and validate an issue is small, so it is important to
|
|
||||||
document and dedicate resources to their resolution.
|
|
||||||
|
|
||||||
In some cases, the resolution to the problem is ultimately to deploy a more
|
|
||||||
recent version of OpenStack. Alternatively, when you must resolve an issue in
|
|
||||||
a production environment where rebuilding the entire environment is not an
|
|
||||||
option, it is sometimes possible to deploy updates to specific underlying
|
|
||||||
components in order to resolve issues or gain significant performance
|
|
||||||
improvements. Although this may appear to expose the deployment to increased
|
|
||||||
risk and instability, in many cases it could be an undiscovered issue.
|
|
||||||
|
|
||||||
We recommend building a development and operations organization that is
|
|
||||||
responsible for creating desired features, diagnosing and resolving issues,
|
|
||||||
and building the infrastructure for large scale continuous integration tests
|
|
||||||
and continuous deployment. This helps catch bugs early and makes deployments
|
|
||||||
faster and easier. In addition to development resources, we also recommend the
|
|
||||||
recruitment of experts in the fields of message queues, databases, distributed
|
|
||||||
systems, networking, cloud, and storage.
|
|
||||||
|
|
||||||
Growth and capacity planning
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
An important consideration in running at massive scale is projecting growth
|
|
||||||
and utilization trends in order to plan capital expenditures for the short and
|
|
||||||
long term. Gather utilization meters for compute, network, and storage, along
|
|
||||||
with historical records of these meters. While securing major anchor projects
|
|
||||||
can lead to rapid jumps in the utilization rates of all resources, the steady
|
|
||||||
adoption of the cloud inside an organization or by consumers in a public
|
|
||||||
offering also creates a steady trend of increased utilization.
|
|
||||||
|
|
||||||
Skills and training
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
Projecting growth for storage, networking, and compute is only one aspect of a
|
|
||||||
growth plan for running OpenStack at massive scale. Growing and nurturing
|
|
||||||
development and operational staff is an additional consideration. Sending team
|
|
||||||
members to OpenStack conferences, meetup events, and encouraging active
|
|
||||||
participation in the mailing lists and committees is a very important way to
|
|
||||||
maintain skills and forge relationships in the community. For a list of
|
|
||||||
OpenStack training providers in the marketplace, see the `Openstack Marketplace
|
|
||||||
<https://www.openstack.org/marketplace/training/>`_.
|
|
@ -1,110 +0,0 @@
|
|||||||
Technical considerations
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Repurposing an existing OpenStack environment to be massively scalable is a
|
|
||||||
formidable task. When building a massively scalable environment from the
|
|
||||||
ground up, ensure you build the initial deployment with the same principles
|
|
||||||
and choices that apply as the environment grows. For example, a good approach
|
|
||||||
is to deploy the first site as a multi-site environment. This enables you to
|
|
||||||
use the same deployment and segregation methods as the environment grows to
|
|
||||||
separate locations across dedicated links or wide area networks. In a
|
|
||||||
hyperscale cloud, scale trumps redundancy. Modify applications with this in
|
|
||||||
mind, relying on the scale and homogeneity of the environment to provide
|
|
||||||
reliability rather than redundant infrastructure provided by non-commodity
|
|
||||||
hardware solutions.
|
|
||||||
|
|
||||||
Infrastructure segregation
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
OpenStack services support massive horizontal scale. Be aware that this is
|
|
||||||
not the case for the entire supporting infrastructure. This is particularly a
|
|
||||||
problem for the database management systems and message queues that OpenStack
|
|
||||||
services use for data storage and remote procedure call communications.
|
|
||||||
|
|
||||||
Traditional clustering techniques typically provide high availability and some
|
|
||||||
additional scale for these environments. In the quest for massive scale,
|
|
||||||
however, you must take additional steps to relieve the performance pressure on
|
|
||||||
these components in order to prevent them from negatively impacting the
|
|
||||||
overall performance of the environment. Ensure that all the components are in
|
|
||||||
balance so that if the massively scalable environment fails, all the
|
|
||||||
components are near maximum capacity and a single component is not causing the
|
|
||||||
failure.
|
|
||||||
|
|
||||||
Regions segregate completely independent installations linked only by an
|
|
||||||
Identity and Dashboard (optional) installation. Services have separate API
|
|
||||||
endpoints for each region, and include separate database and queue
|
|
||||||
installations. This exposes some awareness of the environment's fault domains
|
|
||||||
to users and gives them the ability to ensure some degree of application
|
|
||||||
resiliency while also imposing the requirement to specify which region to
|
|
||||||
apply their actions to.
|
|
||||||
|
|
||||||
Environments operating at massive scale typically need their regions or sites
|
|
||||||
subdivided further without exposing the requirement to specify the failure
|
|
||||||
domain to the user. This provides the ability to further divide the
|
|
||||||
installation into failure domains while also providing a logical unit for
|
|
||||||
maintenance and the addition of new hardware. At hyperscale, instead of adding
|
|
||||||
single compute nodes, administrators can add entire racks or even groups of
|
|
||||||
racks at a time with each new addition of nodes exposed via one of the
|
|
||||||
segregation concepts mentioned herein.
|
|
||||||
|
|
||||||
:term:`Cells <cell>` provide the ability to subdivide the compute portion of
|
|
||||||
an OpenStack installation, including regions, while still exposing a single
|
|
||||||
endpoint. Each region has an API cell along with a number of compute cells
|
|
||||||
where the workloads actually run. Each cell has its own database and message
|
|
||||||
queue setup (ideally clustered), providing the ability to subdivide the load
|
|
||||||
on these subsystems, improving overall performance.
|
|
||||||
|
|
||||||
Each compute cell provides a complete compute installation, complete with full
|
|
||||||
database and queue installations, scheduler, conductor, and multiple compute
|
|
||||||
hosts. The cells scheduler handles placement of user requests from the single
|
|
||||||
API endpoint to a specific cell from those available. The normal filter
|
|
||||||
scheduler then handles placement within the cell.
|
|
||||||
|
|
||||||
Unfortunately, Compute is the only OpenStack service that provides good
|
|
||||||
support for cells. In addition, cells do not adequately support some standard
|
|
||||||
OpenStack functionality such as security groups and host aggregates. Due to
|
|
||||||
their relative newness and specialized use, cells receive relatively little
|
|
||||||
testing in the OpenStack gate. Despite these issues, cells play an important
|
|
||||||
role in well known OpenStack installations operating at massive scale, such as
|
|
||||||
those at CERN and Rackspace.
|
|
||||||
|
|
||||||
Host aggregates
|
|
||||||
---------------
|
|
||||||
|
|
||||||
Host aggregates enable partitioning of OpenStack Compute deployments into
|
|
||||||
logical groups for load balancing and instance distribution. You can also use
|
|
||||||
host aggregates to further partition an availability zone. Consider a cloud
|
|
||||||
which might use host aggregates to partition an availability zone into groups
|
|
||||||
of hosts that either share common resources, such as storage and network, or
|
|
||||||
have a special property, such as trusted computing hardware. You cannot target
|
|
||||||
host aggregates explicitly. Instead, select instance flavors that map to host
|
|
||||||
aggregate metadata. These flavors target host aggregates implicitly.
|
|
||||||
|
|
||||||
Availability zones
|
|
||||||
------------------
|
|
||||||
|
|
||||||
Availability zones provide another mechanism for subdividing an installation
|
|
||||||
or region. They are, in effect, host aggregates exposed for (optional)
|
|
||||||
explicit targeting by users.
|
|
||||||
|
|
||||||
Unlike cells, availability zones do not have their own database server or
|
|
||||||
queue broker but represent an arbitrary grouping of compute nodes. Typically,
|
|
||||||
nodes are grouped into availability zones using a shared failure domain based
|
|
||||||
on a physical characteristic such as a shared power source or physical network
|
|
||||||
connections. Users can target exposed availability zones; however, this is not
|
|
||||||
a requirement. An alternative approach is to set a default availability zone
|
|
||||||
to schedule instances to a non-default availability zone of nova.
|
|
||||||
|
|
||||||
Segregation example
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
In this example, the cloud is divided into two regions, an API cell and
|
|
||||||
three child cells for each region, with three availability zones in each
|
|
||||||
cell based on the power layout of the data centers.
|
|
||||||
The below figure describes the relationship between them within one region.
|
|
||||||
|
|
||||||
.. figure:: figures/Massively_Scalable_Cells_regions_azs.png
|
|
||||||
|
|
||||||
A number of host aggregates enable targeting of virtual machine instances
|
|
||||||
using flavors, that require special capabilities shared by the target hosts
|
|
||||||
such as SSDs, 10 GbE networks, or GPU cards.
|
|
@ -1,91 +0,0 @@
|
|||||||
User requirements
|
|
||||||
~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Defining user requirements for a massively scalable OpenStack design
|
|
||||||
architecture dictates approaching the design from two different, yet sometimes
|
|
||||||
opposing, perspectives: the cloud user, and the cloud operator. The
|
|
||||||
expectations and perceptions of the consumption and management of resources of
|
|
||||||
a massively scalable OpenStack cloud from these two perspectives are
|
|
||||||
distinctly different.
|
|
||||||
|
|
||||||
Massively scalable OpenStack clouds have the following user requirements:
|
|
||||||
|
|
||||||
* The cloud user expects repeatable, dependable, and deterministic processes
|
|
||||||
for launching and deploying cloud resources. You could deliver this through
|
|
||||||
a web-based interface or publicly available API endpoints. All appropriate
|
|
||||||
options for requesting cloud resources must be available through some type
|
|
||||||
of user interface, a command-line interface (CLI), or API endpoints.
|
|
||||||
|
|
||||||
* Cloud users expect a fully self-service and on-demand consumption model.
|
|
||||||
When an OpenStack cloud reaches the massively scalable size, expect
|
|
||||||
consumption as a service in each and every way.
|
|
||||||
|
|
||||||
* For a user of a massively scalable OpenStack public cloud, there are no
|
|
||||||
expectations for control over security, performance, or availability. Users
|
|
||||||
expect only SLAs related to uptime of API services, and very basic SLAs for
|
|
||||||
services offered. It is the user's responsibility to address these issues on
|
|
||||||
their own. The exception to this expectation is the rare case of a massively
|
|
||||||
scalable cloud infrastructure built for a private or government organization
|
|
||||||
that has specific requirements.
|
|
||||||
|
|
||||||
The cloud user's requirements and expectations that determine the cloud design
|
|
||||||
focus on the consumption model. The user expects to consume cloud resources in
|
|
||||||
an automated and deterministic way, without any need for knowledge of the
|
|
||||||
capacity, scalability, or other attributes of the cloud's underlying
|
|
||||||
infrastructure.
|
|
||||||
|
|
||||||
Operator requirements
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
While the cloud user can be completely unaware of the underlying
|
|
||||||
infrastructure of the cloud and its attributes, the operator must build and
|
|
||||||
support the infrastructure for operating at scale. This presents a very
|
|
||||||
demanding set of requirements for building such a cloud from the operator's
|
|
||||||
perspective:
|
|
||||||
|
|
||||||
* Everything must be capable of automation. For example, everything from
|
|
||||||
compute hardware, storage hardware, networking hardware, to the installation
|
|
||||||
and configuration of the supporting software. Manual processes are
|
|
||||||
impractical in a massively scalable OpenStack design architecture.
|
|
||||||
|
|
||||||
* The cloud operator requires that capital expenditure (CapEx) is minimized at
|
|
||||||
all layers of the stack. Operators of massively scalable OpenStack clouds
|
|
||||||
require the use of dependable commodity hardware and freely available open
|
|
||||||
source software components to reduce deployment costs and operational
|
|
||||||
expenses. Initiatives like OpenCompute (more information available at
|
|
||||||
`Open Compute Project <http://www.opencompute.org>`_)
|
|
||||||
provide additional information and pointers. To
|
|
||||||
cut costs, many operators sacrifice redundancy. For example, using redundant
|
|
||||||
power supplies, network connections, and rack switches.
|
|
||||||
|
|
||||||
* Companies operating a massively scalable OpenStack cloud also require that
|
|
||||||
operational expenditures (OpEx) be minimized as much as possible. We
|
|
||||||
recommend using cloud-optimized hardware when managing operational overhead.
|
|
||||||
Some of the factors to consider include power, cooling, and the physical
|
|
||||||
design of the chassis. Through customization, it is possible to optimize the
|
|
||||||
hardware and systems for this type of workload because of the scale of these
|
|
||||||
implementations.
|
|
||||||
|
|
||||||
* Massively scalable OpenStack clouds require extensive metering and
|
|
||||||
monitoring functionality to maximize the operational efficiency by keeping
|
|
||||||
the operator informed about the status and state of the infrastructure. This
|
|
||||||
includes full scale metering of the hardware and software status. A
|
|
||||||
corresponding framework of logging and alerting is also required to store
|
|
||||||
and enable operations to act on the meters provided by the metering and
|
|
||||||
monitoring solutions. The cloud operator also needs a solution that uses the
|
|
||||||
data provided by the metering and monitoring solution to provide capacity
|
|
||||||
planning and capacity trending analysis.
|
|
||||||
|
|
||||||
* Invariably, massively scalable OpenStack clouds extend over several sites.
|
|
||||||
Therefore, the user-operator requirements for a multi-site OpenStack
|
|
||||||
architecture design are also applicable here. This includes various legal
|
|
||||||
requirements; other jurisdictional legal or compliance requirements; image
|
|
||||||
consistency-availability; storage replication and availability (both block
|
|
||||||
and file/object storage); and authentication, authorization, and auditing
|
|
||||||
(AAA). See :doc:`multi-site` for more details on requirements and
|
|
||||||
considerations for multi-site OpenStack clouds.
|
|
||||||
|
|
||||||
* The design architecture of a massively scalable OpenStack cloud must address
|
|
||||||
considerations around physical facilities such as space, floor weight, rack
|
|
||||||
height and type, environmental considerations, power usage and power usage
|
|
||||||
efficiency (PUE), and physical security.
|
|
@ -1,57 +0,0 @@
|
|||||||
==================
|
|
||||||
Massively scalable
|
|
||||||
==================
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
massively-scalable-user-requirements.rst
|
|
||||||
massively-scalable-technical-considerations.rst
|
|
||||||
massively-scalable-operational-considerations.rst
|
|
||||||
|
|
||||||
A massively scalable architecture is a cloud implementation
|
|
||||||
that is either a very large deployment, such as a commercial
|
|
||||||
service provider might build, or one that has the capability
|
|
||||||
to support user requests for large amounts of cloud resources.
|
|
||||||
|
|
||||||
An example is an infrastructure in which requests to service
|
|
||||||
500 or more instances at a time is common. A massively scalable
|
|
||||||
infrastructure fulfills such a request without exhausting the
|
|
||||||
available cloud infrastructure resources. While the high capital
|
|
||||||
cost of implementing such a cloud architecture means that it
|
|
||||||
is currently in limited use, many organizations are planning for
|
|
||||||
massive scalability in the future.
|
|
||||||
|
|
||||||
A massively scalable OpenStack cloud design presents a unique
|
|
||||||
set of challenges and considerations. For the most part it is
|
|
||||||
similar to a general purpose cloud architecture, as it is built
|
|
||||||
to address a non-specific range of potential use cases or
|
|
||||||
functions. Typically, it is rare that particular workloads determine
|
|
||||||
the design or configuration of massively scalable clouds. The
|
|
||||||
massively scalable cloud is most often built as a platform for
|
|
||||||
a variety of workloads. Because private organizations rarely
|
|
||||||
require or have the resources for them, massively scalable
|
|
||||||
OpenStack clouds are generally built as commercial, public
|
|
||||||
cloud offerings.
|
|
||||||
|
|
||||||
Services provided by a massively scalable OpenStack cloud
|
|
||||||
include:
|
|
||||||
|
|
||||||
* Virtual-machine disk image library
|
|
||||||
* Raw block storage
|
|
||||||
* File or object storage
|
|
||||||
* Firewall functionality
|
|
||||||
* Load balancing functionality
|
|
||||||
* Private (non-routable) and public (floating) IP addresses
|
|
||||||
* Virtualized network topologies
|
|
||||||
* Software bundles
|
|
||||||
* Virtual compute resources
|
|
||||||
|
|
||||||
Like a general purpose cloud, the instances deployed in a
|
|
||||||
massively scalable OpenStack cloud do not necessarily use
|
|
||||||
any specific aspect of the cloud offering (compute, network, or storage).
|
|
||||||
As the cloud grows in scale, the number of workloads can cause
|
|
||||||
stress on all the cloud components. This adds further stresses
|
|
||||||
to supporting infrastructure such as databases and message brokers.
|
|
||||||
The architecture design for such a cloud must account for these
|
|
||||||
performance pressures without negatively impacting user experience.
|
|
@ -1,118 +0,0 @@
|
|||||||
============
|
|
||||||
Architecture
|
|
||||||
============
|
|
||||||
|
|
||||||
:ref:`ms-openstack-architecture` illustrates a high level multi-site
|
|
||||||
OpenStack architecture. Each site is an OpenStack cloud but it may be
|
|
||||||
necessary to architect the sites on different versions. For example,
|
|
||||||
if the second site is intended to be a replacement for the first site,
|
|
||||||
they would be different. Another common design would be a private
|
|
||||||
OpenStack cloud with a replicated site that would be used for high
|
|
||||||
availability or disaster recovery. The most important design decision
|
|
||||||
is configuring storage as a single shared pool or separate pools, depending
|
|
||||||
on user and technical requirements.
|
|
||||||
|
|
||||||
.. _ms-openstack-architecture:
|
|
||||||
|
|
||||||
.. figure:: figures/Multi-Site_shared_keystone_horizon_swift1.png
|
|
||||||
|
|
||||||
**Multi-site OpenStack architecture**
|
|
||||||
|
|
||||||
|
|
||||||
OpenStack services architecture
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The Identity service, which is used by all other OpenStack components
|
|
||||||
for authorization and the catalog of service endpoints, supports the
|
|
||||||
concept of regions. A region is a logical construct used to group
|
|
||||||
OpenStack services in close proximity to one another. The concept of
|
|
||||||
regions is flexible; it may contain OpenStack service endpoints located
|
|
||||||
within a distinct geographic region or regions. It may be smaller in
|
|
||||||
scope, where a region is a single rack within a data center, with
|
|
||||||
multiple regions existing in adjacent racks in the same data center.
|
|
||||||
|
|
||||||
The majority of OpenStack components are designed to run within the
|
|
||||||
context of a single region. The Compute service is designed to manage
|
|
||||||
compute resources within a region, with support for subdivisions of
|
|
||||||
compute resources by using availability zones and cells. The Networking
|
|
||||||
service can be used to manage network resources in the same broadcast
|
|
||||||
domain or collection of switches that are linked. The OpenStack Block
|
|
||||||
Storage service controls storage resources within a region with all
|
|
||||||
storage resources residing on the same storage network. Like the
|
|
||||||
OpenStack Compute service, the OpenStack Block Storage service also
|
|
||||||
supports the availability zone construct which can be used to subdivide
|
|
||||||
storage resources.
|
|
||||||
|
|
||||||
The OpenStack dashboard, OpenStack Identity, and OpenStack Object
|
|
||||||
Storage services are components that can each be deployed centrally in
|
|
||||||
order to serve multiple regions.
|
|
||||||
|
|
||||||
Storage
|
|
||||||
~~~~~~~
|
|
||||||
|
|
||||||
With multiple OpenStack regions, it is recommended to configure a single
|
|
||||||
OpenStack Object Storage service endpoint to deliver shared file storage
|
|
||||||
for all regions. The Object Storage service internally replicates files
|
|
||||||
to multiple nodes which can be used by applications or workloads in
|
|
||||||
multiple regions. This simplifies high availability failover and
|
|
||||||
disaster recovery rollback.
|
|
||||||
|
|
||||||
In order to scale the Object Storage service to meet the workload of
|
|
||||||
multiple regions, multiple proxy workers are run and load-balanced,
|
|
||||||
storage nodes are installed in each region, and the entire Object
|
|
||||||
Storage Service can be fronted by an HTTP caching layer. This is done so
|
|
||||||
client requests for objects can be served out of caches rather than
|
|
||||||
directly from the storage modules themselves, reducing the actual load
|
|
||||||
on the storage network. In addition to an HTTP caching layer, use a
|
|
||||||
caching layer like Memcache to cache objects between the proxy and
|
|
||||||
storage nodes.
|
|
||||||
|
|
||||||
If the cloud is designed with a separate Object Storage service endpoint
|
|
||||||
made available in each region, applications are required to handle
|
|
||||||
synchronization (if desired) and other management operations to ensure
|
|
||||||
consistency across the nodes. For some applications, having multiple
|
|
||||||
Object Storage Service endpoints located in the same region as the
|
|
||||||
application may be desirable due to reduced latency, cross region
|
|
||||||
bandwidth, and ease of deployment.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
For the Block Storage service, the most important decisions are the
|
|
||||||
selection of the storage technology, and whether a dedicated network
|
|
||||||
is used to carry storage traffic from the storage service to the
|
|
||||||
compute nodes.
|
|
||||||
|
|
||||||
Networking
|
|
||||||
~~~~~~~~~~
|
|
||||||
|
|
||||||
When connecting multiple regions together, there are several design
|
|
||||||
considerations. The overlay network technology choice determines how
|
|
||||||
packets are transmitted between regions and how the logical network and
|
|
||||||
addresses present to the application. If there are security or
|
|
||||||
regulatory requirements, encryption should be implemented to secure the
|
|
||||||
traffic between regions. For networking inside a region, the overlay
|
|
||||||
network technology for project networks is equally important. The overlay
|
|
||||||
technology and the network traffic that an application generates or
|
|
||||||
receives can be either complementary or serve cross purposes. For
|
|
||||||
example, using an overlay technology for an application that transmits a
|
|
||||||
large amount of small packets could add excessive latency or overhead to
|
|
||||||
each packet if not configured properly.
|
|
||||||
|
|
||||||
Dependencies
|
|
||||||
~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The architecture for a multi-site OpenStack installation is dependent on
|
|
||||||
a number of factors. One major dependency to consider is storage. When
|
|
||||||
designing the storage system, the storage mechanism needs to be
|
|
||||||
determined. Once the storage type is determined, how it is accessed is
|
|
||||||
critical. For example, we recommend that storage should use a dedicated
|
|
||||||
network. Another concern is how the storage is configured to protect the
|
|
||||||
data. For example, the Recovery Point Objective (RPO) and the Recovery
|
|
||||||
Time Objective (RTO). How quickly recovery from a fault can be
|
|
||||||
completed, determines how often the replication of data is required.
|
|
||||||
Ensure that enough storage is allocated to support the data protection
|
|
||||||
strategy.
|
|
||||||
|
|
||||||
Networking decisions include the encapsulation mechanism that can be
|
|
||||||
used for the project networks, how large the broadcast domains should be,
|
|
||||||
and the contracted SLAs for the interconnects.
|
|
@ -1,156 +0,0 @@
|
|||||||
==========================
|
|
||||||
Operational considerations
|
|
||||||
==========================
|
|
||||||
|
|
||||||
Multi-site OpenStack cloud deployment using regions requires that the
|
|
||||||
service catalog contains per-region entries for each service deployed
|
|
||||||
other than the Identity service. Most off-the-shelf OpenStack deployment
|
|
||||||
tools have limited support for defining multiple regions in this
|
|
||||||
fashion.
|
|
||||||
|
|
||||||
Deployers should be aware of this and provide the appropriate
|
|
||||||
customization of the service catalog for their site either manually, or
|
|
||||||
by customizing deployment tools in use.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
As of the Kilo release, documentation for implementing this feature
|
|
||||||
is in progress. See this bug for more information:
|
|
||||||
https://bugs.launchpad.net/openstack-manuals/+bug/1340509.
|
|
||||||
|
|
||||||
Licensing
|
|
||||||
~~~~~~~~~
|
|
||||||
|
|
||||||
Multi-site OpenStack deployments present additional licensing
|
|
||||||
considerations over and above regular OpenStack clouds, particularly
|
|
||||||
where site licenses are in use to provide cost efficient access to
|
|
||||||
software licenses. The licensing for host operating systems, guest
|
|
||||||
operating systems, OpenStack distributions (if applicable),
|
|
||||||
software-defined infrastructure including network controllers and
|
|
||||||
storage systems, and even individual applications need to be evaluated.
|
|
||||||
|
|
||||||
Topics to consider include:
|
|
||||||
|
|
||||||
* The definition of what constitutes a site in the relevant licenses,
|
|
||||||
as the term does not necessarily denote a geographic or otherwise
|
|
||||||
physically isolated location.
|
|
||||||
|
|
||||||
* Differentiations between "hot" (active) and "cold" (inactive) sites,
|
|
||||||
where significant savings may be made in situations where one site is
|
|
||||||
a cold standby for disaster recovery purposes only.
|
|
||||||
|
|
||||||
* Certain locations might require local vendors to provide support and
|
|
||||||
services for each site which may vary with the licensing agreement in
|
|
||||||
place.
|
|
||||||
|
|
||||||
Logging and monitoring
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Logging and monitoring does not significantly differ for a multi-site
|
|
||||||
OpenStack cloud. The tools described in the `Logging and monitoring
|
|
||||||
chapter <https://docs.openstack.org/ops-guide/ops-logging-monitoring.html>`__
|
|
||||||
of the OpenStack Operations Guide remain applicable. Logging and monitoring
|
|
||||||
can be provided on a per-site basis, and in a common centralized location.
|
|
||||||
|
|
||||||
When attempting to deploy logging and monitoring facilities to a
|
|
||||||
centralized location, care must be taken with the load placed on the
|
|
||||||
inter-site networking links.
|
|
||||||
|
|
||||||
Upgrades
|
|
||||||
~~~~~~~~
|
|
||||||
|
|
||||||
In multi-site OpenStack clouds deployed using regions, sites are
|
|
||||||
independent OpenStack installations which are linked together using
|
|
||||||
shared centralized services such as OpenStack Identity. At a high level
|
|
||||||
the recommended order of operations to upgrade an individual OpenStack
|
|
||||||
environment is (see the `Upgrades
|
|
||||||
chapter <https://docs.openstack.org/ops-guide/ops-upgrades.html>`__
|
|
||||||
of the OpenStack Operations Guide for details):
|
|
||||||
|
|
||||||
#. Upgrade the OpenStack Identity service (keystone).
|
|
||||||
|
|
||||||
#. Upgrade the OpenStack Image service (glance).
|
|
||||||
|
|
||||||
#. Upgrade OpenStack Compute (nova), including networking components.
|
|
||||||
|
|
||||||
#. Upgrade OpenStack Block Storage (cinder).
|
|
||||||
|
|
||||||
#. Upgrade the OpenStack dashboard (horizon).
|
|
||||||
|
|
||||||
The process for upgrading a multi-site environment is not significantly
|
|
||||||
different:
|
|
||||||
|
|
||||||
#. Upgrade the shared OpenStack Identity service (keystone) deployment.
|
|
||||||
|
|
||||||
#. Upgrade the OpenStack Image service (glance) at each site.
|
|
||||||
|
|
||||||
#. Upgrade OpenStack Compute (nova), including networking components, at
|
|
||||||
each site.
|
|
||||||
|
|
||||||
#. Upgrade OpenStack Block Storage (cinder) at each site.
|
|
||||||
|
|
||||||
#. Upgrade the OpenStack dashboard (horizon), at each site or in the
|
|
||||||
single central location if it is shared.
|
|
||||||
|
|
||||||
Compute upgrades within each site can also be performed in a rolling
|
|
||||||
fashion. Compute controller services (API, Scheduler, and Conductor) can
|
|
||||||
be upgraded prior to upgrading of individual compute nodes. This allows
|
|
||||||
operations staff to keep a site operational for users of Compute
|
|
||||||
services while performing an upgrade.
|
|
||||||
|
|
||||||
Quota management
|
|
||||||
~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Quotas are used to set operational limits to prevent system capacities
|
|
||||||
from being exhausted without notification. They are currently enforced
|
|
||||||
at the project level rather than at the user level.
|
|
||||||
|
|
||||||
Quotas are defined on a per-region basis. Operators can define identical
|
|
||||||
quotas for projects in each region of the cloud to provide a consistent
|
|
||||||
experience, or even create a process for synchronizing allocated quotas
|
|
||||||
across regions. It is important to note that only the operational limits
|
|
||||||
imposed by the quotas will be aligned consumption of quotas by users
|
|
||||||
will not be reflected between regions.
|
|
||||||
|
|
||||||
For example, given a cloud with two regions, if the operator grants a
|
|
||||||
user a quota of 25 instances in each region then that user may launch a
|
|
||||||
total of 50 instances spread across both regions. They may not, however,
|
|
||||||
launch more than 25 instances in any single region.
|
|
||||||
|
|
||||||
For more information on managing quotas refer to the `Managing projects
|
|
||||||
and users
|
|
||||||
chapter <https://docs.openstack.org/ops-guide/ops-projects-users.html>`__
|
|
||||||
of the OpenStack Operators Guide.
|
|
||||||
|
|
||||||
Policy management
|
|
||||||
~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
OpenStack provides a default set of Role Based Access Control (RBAC)
|
|
||||||
policies, defined in a ``policy.json`` file, for each service. Operators
|
|
||||||
edit these files to customize the policies for their OpenStack
|
|
||||||
installation. If the application of consistent RBAC policies across
|
|
||||||
sites is a requirement, then it is necessary to ensure proper
|
|
||||||
synchronization of the ``policy.json`` files to all installations.
|
|
||||||
|
|
||||||
This must be done using system administration tools such as rsync as
|
|
||||||
functionality for synchronizing policies across regions is not currently
|
|
||||||
provided within OpenStack.
|
|
||||||
|
|
||||||
Documentation
|
|
||||||
~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Users must be able to leverage cloud infrastructure and provision new
|
|
||||||
resources in the environment. It is important that user documentation is
|
|
||||||
accessible by users to ensure they are given sufficient information to
|
|
||||||
help them leverage the cloud. As an example, by default OpenStack
|
|
||||||
schedules instances on a compute node automatically. However, when
|
|
||||||
multiple regions are available, the end user needs to decide in which
|
|
||||||
region to schedule the new instance. The dashboard presents the user
|
|
||||||
with the first region in your configuration. The API and CLI tools do
|
|
||||||
not execute commands unless a valid region is specified. It is therefore
|
|
||||||
important to provide documentation to your users describing the region
|
|
||||||
layout as well as calling out that quotas are region-specific. If a user
|
|
||||||
reaches his or her quota in one region, OpenStack does not automatically
|
|
||||||
build new instances in another. Documenting specific examples helps
|
|
||||||
users understand how to operate the cloud, thereby reducing calls and
|
|
||||||
tickets filed with the help desk.
|
|
@ -1,192 +0,0 @@
|
|||||||
=====================
|
|
||||||
Prescriptive examples
|
|
||||||
=====================
|
|
||||||
|
|
||||||
There are multiple ways to build a multi-site OpenStack installation,
|
|
||||||
based on the needs of the intended workloads. Below are example
|
|
||||||
architectures based on different requirements. These examples are meant
|
|
||||||
as a reference, and not a hard and fast rule for deployments. Use the
|
|
||||||
previous sections of this chapter to assist in selecting specific
|
|
||||||
components and implementations based on specific needs.
|
|
||||||
|
|
||||||
A large content provider needs to deliver content to customers that are
|
|
||||||
geographically dispersed. The workload is very sensitive to latency and
|
|
||||||
needs a rapid response to end-users. After reviewing the user, technical
|
|
||||||
and operational considerations, it is determined beneficial to build a
|
|
||||||
number of regions local to the customer's edge. Rather than build a few
|
|
||||||
large, centralized data centers, the intent of the architecture is to
|
|
||||||
provide a pair of small data centers in locations that are closer to the
|
|
||||||
customer. In this use case, spreading applications out allows for
|
|
||||||
different horizontal scaling than a traditional compute workload scale.
|
|
||||||
The intent is to scale by creating more copies of the application in
|
|
||||||
closer proximity to the users that need it most, in order to ensure
|
|
||||||
faster response time to user requests. This provider deploys two
|
|
||||||
datacenters at each of the four chosen regions. The implications of this
|
|
||||||
design are based around the method of placing copies of resources in
|
|
||||||
each of the remote regions. Swift objects, Glance images, and block
|
|
||||||
storage need to be manually replicated into each region. This may be
|
|
||||||
beneficial for some systems, such as the case of content service, where
|
|
||||||
only some of the content needs to exist in some but not all regions. A
|
|
||||||
centralized Keystone is recommended to ensure authentication and that
|
|
||||||
access to the API endpoints is easily manageable.
|
|
||||||
|
|
||||||
It is recommended that you install an automated DNS system such as
|
|
||||||
Designate. Application administrators need a way to manage the mapping
|
|
||||||
of which application copy exists in each region and how to reach it,
|
|
||||||
unless an external Dynamic DNS system is available. Designate assists by
|
|
||||||
making the process automatic and by populating the records in the each
|
|
||||||
region's zone.
|
|
||||||
|
|
||||||
Telemetry for each region is also deployed, as each region may grow
|
|
||||||
differently or be used at a different rate. Ceilometer collects each
|
|
||||||
region's meters from each of the controllers and report them back to a
|
|
||||||
central location. This is useful both to the end user and the
|
|
||||||
administrator of the OpenStack environment. The end user will find this
|
|
||||||
method useful, as it makes possible to determine if certain locations
|
|
||||||
are experiencing higher load than others, and take appropriate action.
|
|
||||||
Administrators also benefit by possibly being able to forecast growth
|
|
||||||
per region, rather than expanding the capacity of all regions
|
|
||||||
simultaneously, therefore maximizing the cost-effectiveness of the
|
|
||||||
multi-site design.
|
|
||||||
|
|
||||||
One of the key decisions of running this infrastructure is whether or
|
|
||||||
not to provide a redundancy model. Two types of redundancy and high
|
|
||||||
availability models in this configuration can be implemented. The first
|
|
||||||
type is the availability of central OpenStack components. Keystone can
|
|
||||||
be made highly available in three central data centers that host the
|
|
||||||
centralized OpenStack components. This prevents a loss of any one of the
|
|
||||||
regions causing an outage in service. It also has the added benefit of
|
|
||||||
being able to run a central storage repository as a primary cache for
|
|
||||||
distributing content to each of the regions.
|
|
||||||
|
|
||||||
The second redundancy type is the edge data center itself. A second data
|
|
||||||
center in each of the edge regional locations house a second region near
|
|
||||||
the first region. This ensures that the application does not suffer
|
|
||||||
degraded performance in terms of latency and availability.
|
|
||||||
|
|
||||||
:ref:`ms-customer-edge` depicts the solution designed to have both a
|
|
||||||
centralized set of core data centers for OpenStack services and paired edge
|
|
||||||
data centers:
|
|
||||||
|
|
||||||
.. _ms-customer-edge:
|
|
||||||
|
|
||||||
.. figure:: figures/Multi-Site_Customer_Edge.png
|
|
||||||
|
|
||||||
**Multi-site architecture example**
|
|
||||||
|
|
||||||
Geo-redundant load balancing
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
A large-scale web application has been designed with cloud principles in
|
|
||||||
mind. The application is designed provide service to application store,
|
|
||||||
on a 24/7 basis. The company has typical two tier architecture with a
|
|
||||||
web front-end servicing the customer requests, and a NoSQL database back
|
|
||||||
end storing the information.
|
|
||||||
|
|
||||||
As of late there has been several outages in number of major public
|
|
||||||
cloud providers due to applications running out of a single geographical
|
|
||||||
location. The design therefore should mitigate the chance of a single
|
|
||||||
site causing an outage for their business.
|
|
||||||
|
|
||||||
The solution would consist of the following OpenStack components:
|
|
||||||
|
|
||||||
* A firewall, switches and load balancers on the public facing network
|
|
||||||
connections.
|
|
||||||
|
|
||||||
* OpenStack Controller services running, Networking, dashboard, Block
|
|
||||||
Storage and Compute running locally in each of the three regions.
|
|
||||||
Identity service, Orchestration service, Telemetry service, Image
|
|
||||||
service and Object Storage service can be installed centrally, with
|
|
||||||
nodes in each of the region providing a redundant OpenStack
|
|
||||||
Controller plane throughout the globe.
|
|
||||||
|
|
||||||
* OpenStack compute nodes running the KVM hypervisor.
|
|
||||||
|
|
||||||
* OpenStack Object Storage for serving static objects such as images
|
|
||||||
can be used to ensure that all images are standardized across all the
|
|
||||||
regions, and replicated on a regular basis.
|
|
||||||
|
|
||||||
* A distributed DNS service available to all regions that allows for
|
|
||||||
dynamic update of DNS records of deployed instances.
|
|
||||||
|
|
||||||
* A geo-redundant load balancing service can be used to service the
|
|
||||||
requests from the customers based on their origin.
|
|
||||||
|
|
||||||
An autoscaling heat template can be used to deploy the application in
|
|
||||||
the three regions. This template includes:
|
|
||||||
|
|
||||||
* Web Servers, running Apache.
|
|
||||||
|
|
||||||
* Appropriate ``user_data`` to populate the central DNS servers upon
|
|
||||||
instance launch.
|
|
||||||
|
|
||||||
* Appropriate Telemetry alarms that maintain state of the application
|
|
||||||
and allow for handling of region or instance failure.
|
|
||||||
|
|
||||||
Another autoscaling Heat template can be used to deploy a distributed
|
|
||||||
MongoDB shard over the three locations, with the option of storing
|
|
||||||
required data on a globally available swift container. According to the
|
|
||||||
usage and load on the database server, additional shards can be
|
|
||||||
provisioned according to the thresholds defined in Telemetry.
|
|
||||||
|
|
||||||
Two data centers would have been sufficient had the requirements been
|
|
||||||
met. But three regions are selected here to avoid abnormal load on a
|
|
||||||
single region in the event of a failure.
|
|
||||||
|
|
||||||
Orchestration is used because of the built-in functionality of
|
|
||||||
autoscaling and auto healing in the event of increased load. Additional
|
|
||||||
configuration management tools, such as Puppet or Chef could also have
|
|
||||||
been used in this scenario, but were not chosen since Orchestration had
|
|
||||||
the appropriate built-in hooks into the OpenStack cloud, whereas the
|
|
||||||
other tools were external and not native to OpenStack. In addition,
|
|
||||||
external tools were not needed since this deployment scenario was
|
|
||||||
straight forward.
|
|
||||||
|
|
||||||
OpenStack Object Storage is used here to serve as a back end for the
|
|
||||||
Image service since it is the most suitable solution for a globally
|
|
||||||
distributed storage solution with its own replication mechanism. Home
|
|
||||||
grown solutions could also have been used including the handling of
|
|
||||||
replication, but were not chosen, because Object Storage is already an
|
|
||||||
intricate part of the infrastructure and a proven solution.
|
|
||||||
|
|
||||||
An external load balancing service was used and not the LBaaS in
|
|
||||||
OpenStack because the solution in OpenStack is not redundant and does
|
|
||||||
not have any awareness of geo location.
|
|
||||||
|
|
||||||
.. _ms-geo-redundant:
|
|
||||||
|
|
||||||
.. figure:: figures/Multi-site_Geo_Redundant_LB.png
|
|
||||||
|
|
||||||
**Multi-site geo-redundant architecture**
|
|
||||||
|
|
||||||
Location-local service
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
A common use for multi-site OpenStack deployment is creating a Content
|
|
||||||
Delivery Network. An application that uses a location-local architecture
|
|
||||||
requires low network latency and proximity to the user to provide an
|
|
||||||
optimal user experience and reduce the cost of bandwidth and transit.
|
|
||||||
The content resides on sites closer to the customer, instead of a
|
|
||||||
centralized content store that requires utilizing higher cost
|
|
||||||
cross-country links.
|
|
||||||
|
|
||||||
This architecture includes a geo-location component that places user
|
|
||||||
requests to the closest possible node. In this scenario, 100% redundancy
|
|
||||||
of content across every site is a goal rather than a requirement, with
|
|
||||||
the intent to maximize the amount of content available within a minimum
|
|
||||||
number of network hops for end users. Despite these differences, the
|
|
||||||
storage replication configuration has significant overlap with that of a
|
|
||||||
geo-redundant load balancing use case.
|
|
||||||
|
|
||||||
In :ref:`ms-shared-keystone`, the application utilizing this multi-site
|
|
||||||
OpenStack install that is location-aware would launch web server or content
|
|
||||||
serving instances on the compute cluster in each site. Requests from clients
|
|
||||||
are first sent to a global services load balancer that determines the location
|
|
||||||
of the client, then routes the request to the closest OpenStack site where the
|
|
||||||
application completes the request.
|
|
||||||
|
|
||||||
.. _ms-shared-keystone:
|
|
||||||
|
|
||||||
.. figure:: figures/Multi-Site_shared_keystone1.png
|
|
||||||
|
|
||||||
**Multi-site shared keystone architecture**
|
|
@ -1,164 +0,0 @@
|
|||||||
========================
|
|
||||||
Technical considerations
|
|
||||||
========================
|
|
||||||
|
|
||||||
There are many technical considerations to take into account with regard
|
|
||||||
to designing a multi-site OpenStack implementation. An OpenStack cloud
|
|
||||||
can be designed in a variety of ways to handle individual application
|
|
||||||
needs. A multi-site deployment has additional challenges compared to
|
|
||||||
single site installations and therefore is a more complex solution.
|
|
||||||
|
|
||||||
When determining capacity options be sure to take into account not just
|
|
||||||
the technical issues, but also the economic or operational issues that
|
|
||||||
might arise from specific decisions.
|
|
||||||
|
|
||||||
Inter-site link capacity describes the capabilities of the connectivity
|
|
||||||
between the different OpenStack sites. This includes parameters such as
|
|
||||||
bandwidth, latency, whether or not a link is dedicated, and any business
|
|
||||||
policies applied to the connection. The capability and number of the
|
|
||||||
links between sites determine what kind of options are available for
|
|
||||||
deployment. For example, if two sites have a pair of high-bandwidth
|
|
||||||
links available between them, it may be wise to configure a separate
|
|
||||||
storage replication network between the two sites to support a single
|
|
||||||
Swift endpoint and a shared Object Storage capability between them. An
|
|
||||||
example of this technique, as well as a configuration walk-through, is
|
|
||||||
available at `Dedicated replication network
|
|
||||||
<https://docs.openstack.org/developer/swift/replication_network.html#dedicated-replication-network>`_.
|
|
||||||
Another option in this scenario is to build a dedicated set of project
|
|
||||||
private networks across the secondary link, using overlay networks with
|
|
||||||
a third party mapping the site overlays to each other.
|
|
||||||
|
|
||||||
The capacity requirements of the links between sites is driven by
|
|
||||||
application behavior. If the link latency is too high, certain
|
|
||||||
applications that use a large number of small packets, for example RPC
|
|
||||||
calls, may encounter issues communicating with each other or operating
|
|
||||||
properly. Additionally, OpenStack may encounter similar types of issues.
|
|
||||||
To mitigate this, Identity service call timeouts can be tuned to prevent
|
|
||||||
issues authenticating against a central Identity service.
|
|
||||||
|
|
||||||
Another network capacity consideration for a multi-site deployment is
|
|
||||||
the amount and performance of overlay networks available for project
|
|
||||||
networks. If using shared project networks across zones, it is imperative
|
|
||||||
that an external overlay manager or controller be used to map these
|
|
||||||
overlays together. It is necessary to ensure the amount of possible IDs
|
|
||||||
between the zones are identical.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
As of the Kilo release, OpenStack Networking was not capable of
|
|
||||||
managing tunnel IDs across installations. So if one site runs out of
|
|
||||||
IDs, but another does not, that project's network is unable to reach
|
|
||||||
the other site.
|
|
||||||
|
|
||||||
Capacity can take other forms as well. The ability for a region to grow
|
|
||||||
depends on scaling out the number of available compute nodes. This topic
|
|
||||||
is covered in greater detail in the section for compute-focused
|
|
||||||
deployments. However, it may be necessary to grow cells in an individual
|
|
||||||
region, depending on the size of your cluster and the ratio of virtual
|
|
||||||
machines per hypervisor.
|
|
||||||
|
|
||||||
A third form of capacity comes in the multi-region-capable components of
|
|
||||||
OpenStack. Centralized Object Storage is capable of serving objects
|
|
||||||
through a single namespace across multiple regions. Since this works by
|
|
||||||
accessing the object store through swift proxy, it is possible to
|
|
||||||
overload the proxies. There are two options available to mitigate this
|
|
||||||
issue:
|
|
||||||
|
|
||||||
* Deploy a large number of swift proxies. The drawback is that the
|
|
||||||
proxies are not load-balanced and a large file request could
|
|
||||||
continually hit the same proxy.
|
|
||||||
|
|
||||||
* Add a caching HTTP proxy and load balancer in front of the swift
|
|
||||||
proxies. Since swift objects are returned to the requester via HTTP,
|
|
||||||
this load balancer would alleviate the load required on the swift
|
|
||||||
proxies.
|
|
||||||
|
|
||||||
Utilization
|
|
||||||
~~~~~~~~~~~
|
|
||||||
|
|
||||||
While constructing a multi-site OpenStack environment is the goal of
|
|
||||||
this guide, the real test is whether an application can utilize it.
|
|
||||||
|
|
||||||
The Identity service is normally the first interface for OpenStack users
|
|
||||||
and is required for almost all major operations within OpenStack.
|
|
||||||
Therefore, it is important that you provide users with a single URL for
|
|
||||||
Identity service authentication, and document the configuration of
|
|
||||||
regions within the Identity service. Each of the sites defined in your
|
|
||||||
installation is considered to be a region in Identity nomenclature. This
|
|
||||||
is important for the users, as it is required to define the region name
|
|
||||||
when providing actions to an API endpoint or in the dashboard.
|
|
||||||
|
|
||||||
Load balancing is another common issue with multi-site installations.
|
|
||||||
While it is still possible to run HAproxy instances with
|
|
||||||
Load-Balancer-as-a-Service, these are defined to a specific region. Some
|
|
||||||
applications can manage this using internal mechanisms. Other
|
|
||||||
applications may require the implementation of an external system,
|
|
||||||
including global services load balancers or anycast-advertised DNS.
|
|
||||||
|
|
||||||
Depending on the storage model chosen during site design, storage
|
|
||||||
replication and availability are also a concern for end-users. If an
|
|
||||||
application can support regions, then it is possible to keep the object
|
|
||||||
storage system separated by region. In this case, users who want to have
|
|
||||||
an object available to more than one region need to perform cross-site
|
|
||||||
replication. However, with a centralized swift proxy, the user may need
|
|
||||||
to benchmark the replication timing of the Object Storage back end.
|
|
||||||
Benchmarking allows the operational staff to provide users with an
|
|
||||||
understanding of the amount of time required for a stored or modified
|
|
||||||
object to become available to the entire environment.
|
|
||||||
|
|
||||||
Performance
|
|
||||||
~~~~~~~~~~~
|
|
||||||
|
|
||||||
Determining the performance of a multi-site installation involves
|
|
||||||
considerations that do not come into play in a single-site deployment.
|
|
||||||
Being a distributed deployment, performance in multi-site deployments
|
|
||||||
may be affected in certain situations.
|
|
||||||
|
|
||||||
Since multi-site systems can be geographically separated, there may be
|
|
||||||
greater latency or jitter when communicating across regions. This can
|
|
||||||
especially impact systems like the OpenStack Identity service when
|
|
||||||
making authentication attempts from regions that do not contain the
|
|
||||||
centralized Identity implementation. It can also affect applications
|
|
||||||
which rely on Remote Procedure Call (RPC) for normal operation. An
|
|
||||||
example of this can be seen in high performance computing workloads.
|
|
||||||
|
|
||||||
Storage availability can also be impacted by the architecture of a
|
|
||||||
multi-site deployment. A centralized Object Storage service requires
|
|
||||||
more time for an object to be available to instances locally in regions
|
|
||||||
where the object was not created. Some applications may need to be tuned
|
|
||||||
to account for this effect. Block Storage does not currently have a
|
|
||||||
method for replicating data across multiple regions, so applications
|
|
||||||
that depend on available block storage need to manually cope with this
|
|
||||||
limitation by creating duplicate block storage entries in each region.
|
|
||||||
|
|
||||||
OpenStack components
|
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Most OpenStack installations require a bare minimum set of pieces to
|
|
||||||
function. These include the OpenStack Identity (keystone) for
|
|
||||||
authentication, OpenStack Compute (nova) for compute, OpenStack Image
|
|
||||||
service (glance) for image storage, OpenStack Networking (neutron) for
|
|
||||||
networking, and potentially an object store in the form of OpenStack
|
|
||||||
Object Storage (swift). Deploying a multi-site installation also demands
|
|
||||||
extra components in order to coordinate between regions. A centralized
|
|
||||||
Identity service is necessary to provide the single authentication
|
|
||||||
point. A centralized dashboard is also recommended to provide a single
|
|
||||||
login point and a mapping to the API and CLI options available. A
|
|
||||||
centralized Object Storage service may also be used, but will require
|
|
||||||
the installation of the swift proxy service.
|
|
||||||
|
|
||||||
It may also be helpful to install a few extra options in order to
|
|
||||||
facilitate certain use cases. For example, installing Designate may
|
|
||||||
assist in automatically generating DNS domains for each region with an
|
|
||||||
automatically-populated zone full of resource records for each instance.
|
|
||||||
This facilitates using DNS as a mechanism for determining which region
|
|
||||||
will be selected for certain applications.
|
|
||||||
|
|
||||||
Another useful tool for managing a multi-site installation is
|
|
||||||
Orchestration (heat). The Orchestration service allows the use of
|
|
||||||
templates to define a set of instances to be launched together or for
|
|
||||||
scaling existing sets. It can also be used to set up matching or
|
|
||||||
differentiated groupings based on regions. For instance, if an
|
|
||||||
application requires an equally balanced number of nodes across sites,
|
|
||||||
the same heat template can be used to cover each site with small
|
|
||||||
alterations to only the region name.
|
|
@ -1,168 +0,0 @@
|
|||||||
=================
|
|
||||||
User requirements
|
|
||||||
=================
|
|
||||||
|
|
||||||
Workload characteristics
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
An understanding of the expected workloads for a desired multi-site
|
|
||||||
environment and use case is an important factor in the decision-making
|
|
||||||
process. In this context, ``workload`` refers to the way the systems are
|
|
||||||
used. A workload could be a single application or a suite of
|
|
||||||
applications that work together. It could also be a duplicate set of
|
|
||||||
applications that need to run in multiple cloud environments. Often in a
|
|
||||||
multi-site deployment, the same workload will need to work identically
|
|
||||||
in more than one physical location.
|
|
||||||
|
|
||||||
This multi-site scenario likely includes one or more of the other
|
|
||||||
scenarios in this book with the additional requirement of having the
|
|
||||||
workloads in two or more locations. The following are some possible
|
|
||||||
scenarios:
|
|
||||||
|
|
||||||
For many use cases the proximity of the user to their workloads has a
|
|
||||||
direct influence on the performance of the application and therefore
|
|
||||||
should be taken into consideration in the design. Certain applications
|
|
||||||
require zero to minimal latency that can only be achieved by deploying
|
|
||||||
the cloud in multiple locations. These locations could be in different
|
|
||||||
data centers, cities, countries or geographical regions, depending on
|
|
||||||
the user requirement and location of the users.
|
|
||||||
|
|
||||||
Consistency of images and templates across different sites
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
It is essential that the deployment of instances is consistent across
|
|
||||||
the different sites and built into the infrastructure. If the OpenStack
|
|
||||||
Object Storage is used as a back end for the Image service, it is
|
|
||||||
possible to create repositories of consistent images across multiple
|
|
||||||
sites. Having central endpoints with multiple storage nodes allows
|
|
||||||
consistent centralized storage for every site.
|
|
||||||
|
|
||||||
Not using a centralized object store increases the operational overhead
|
|
||||||
of maintaining a consistent image library. This could include
|
|
||||||
development of a replication mechanism to handle the transport of images
|
|
||||||
and the changes to the images across multiple sites.
|
|
||||||
|
|
||||||
High availability
|
|
||||||
~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
If high availability is a requirement to provide continuous
|
|
||||||
infrastructure operations, a basic requirement of high availability
|
|
||||||
should be defined.
|
|
||||||
|
|
||||||
The OpenStack management components need to have a basic and minimal
|
|
||||||
level of redundancy. The simplest example is the loss of any single site
|
|
||||||
should have minimal impact on the availability of the OpenStack
|
|
||||||
services.
|
|
||||||
|
|
||||||
The `OpenStack High Availability
|
|
||||||
Guide <https://docs.openstack.org/ha-guide/>`_ contains more information
|
|
||||||
on how to provide redundancy for the OpenStack components.
|
|
||||||
|
|
||||||
Multiple network links should be deployed between sites to provide
|
|
||||||
redundancy for all components. This includes storage replication, which
|
|
||||||
should be isolated to a dedicated network or VLAN with the ability to
|
|
||||||
assign QoS to control the replication traffic or provide priority for
|
|
||||||
this traffic. Note that if the data store is highly changeable, the
|
|
||||||
network requirements could have a significant effect on the operational
|
|
||||||
cost of maintaining the sites.
|
|
||||||
|
|
||||||
The ability to maintain object availability in both sites has
|
|
||||||
significant implications on the object storage design and
|
|
||||||
implementation. It also has a significant impact on the WAN network
|
|
||||||
design between the sites.
|
|
||||||
|
|
||||||
Connecting more than two sites increases the challenges and adds more
|
|
||||||
complexity to the design considerations. Multi-site implementations
|
|
||||||
require planning to address the additional topology used for internal
|
|
||||||
and external connectivity. Some options include full mesh topology, hub
|
|
||||||
spoke, spine leaf, and 3D Torus.
|
|
||||||
|
|
||||||
If applications running in a cloud are not cloud-aware, there should be
|
|
||||||
clear measures and expectations to define what the infrastructure can
|
|
||||||
and cannot support. An example would be shared storage between sites. It
|
|
||||||
is possible, however such a solution is not native to OpenStack and
|
|
||||||
requires a third-party hardware vendor to fulfill such a requirement.
|
|
||||||
Another example can be seen in applications that are able to consume
|
|
||||||
resources in object storage directly. These applications need to be
|
|
||||||
cloud aware to make good use of an OpenStack Object Store.
|
|
||||||
|
|
||||||
Application readiness
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Some applications are tolerant of the lack of synchronized object
|
|
||||||
storage, while others may need those objects to be replicated and
|
|
||||||
available across regions. Understanding how the cloud implementation
|
|
||||||
impacts new and existing applications is important for risk mitigation,
|
|
||||||
and the overall success of a cloud project. Applications may have to be
|
|
||||||
written or rewritten for an infrastructure with little to no redundancy,
|
|
||||||
or with the cloud in mind.
|
|
||||||
|
|
||||||
Cost
|
|
||||||
~~~~
|
|
||||||
|
|
||||||
A greater number of sites increase cost and complexity for a multi-site
|
|
||||||
deployment. Costs can be broken down into the following categories:
|
|
||||||
|
|
||||||
* Compute resources
|
|
||||||
|
|
||||||
* Networking resources
|
|
||||||
|
|
||||||
* Replication
|
|
||||||
|
|
||||||
* Storage
|
|
||||||
|
|
||||||
* Management
|
|
||||||
|
|
||||||
* Operational costs
|
|
||||||
|
|
||||||
Site loss and recovery
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Outages can cause partial or full loss of site functionality. Strategies
|
|
||||||
should be implemented to understand and plan for recovery scenarios.
|
|
||||||
|
|
||||||
* The deployed applications need to continue to function and, more
|
|
||||||
importantly, you must consider the impact on the performance and
|
|
||||||
reliability of the application when a site is unavailable.
|
|
||||||
|
|
||||||
* It is important to understand what happens to the replication of
|
|
||||||
objects and data between the sites when a site goes down. If this
|
|
||||||
causes queues to start building up, consider how long these queues
|
|
||||||
can safely exist until an error occurs.
|
|
||||||
|
|
||||||
* After an outage, ensure the method for resuming proper operations of
|
|
||||||
a site is implemented when it comes back online. We recommend you
|
|
||||||
architect the recovery to avoid race conditions.
|
|
||||||
|
|
||||||
Compliance and geo-location
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
An organization may have certain legal obligations and regulatory
|
|
||||||
compliance measures which could require certain workloads or data to not
|
|
||||||
be located in certain regions.
|
|
||||||
|
|
||||||
Auditing
|
|
||||||
~~~~~~~~
|
|
||||||
|
|
||||||
A well thought-out auditing strategy is important in order to be able to
|
|
||||||
quickly track down issues. Keeping track of changes made to security
|
|
||||||
groups and project changes can be useful in rolling back the changes if
|
|
||||||
they affect production. For example, if all security group rules for a
|
|
||||||
project disappeared, the ability to quickly track down the issue would be
|
|
||||||
important for operational and legal reasons.
|
|
||||||
|
|
||||||
Separation of duties
|
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
A common requirement is to define different roles for the different
|
|
||||||
cloud administration functions. An example would be a requirement to
|
|
||||||
segregate the duties and permissions by site.
|
|
||||||
|
|
||||||
Authentication between sites
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
It is recommended to have a single authentication domain rather than a
|
|
||||||
separate implementation for each and every site. This requires an
|
|
||||||
authentication mechanism that is highly available and distributed to
|
|
||||||
ensure continuous operation. Authentication server locality might be
|
|
||||||
required and should be planned for.
|
|
@ -1,26 +0,0 @@
|
|||||||
==========
|
|
||||||
Multi-site
|
|
||||||
==========
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
multi-site-user-requirements.rst
|
|
||||||
multi-site-technical-considerations.rst
|
|
||||||
multi-site-operational-considerations.rst
|
|
||||||
multi-site-architecture.rst
|
|
||||||
multi-site-prescriptive-examples.rst
|
|
||||||
|
|
||||||
OpenStack is capable of running in a multi-region configuration. This
|
|
||||||
enables some parts of OpenStack to effectively manage a group of sites
|
|
||||||
as a single cloud.
|
|
||||||
|
|
||||||
Some use cases that might indicate a need for a multi-site deployment of
|
|
||||||
OpenStack include:
|
|
||||||
|
|
||||||
* An organization with a diverse geographic footprint.
|
|
||||||
|
|
||||||
* Geo-location sensitive data.
|
|
||||||
|
|
||||||
* Data locality, in which specific data or functionality should be
|
|
||||||
close to users.
|
|
@ -1,184 +0,0 @@
|
|||||||
Architecture
|
|
||||||
~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Network-focused OpenStack architectures have many similarities to other
|
|
||||||
OpenStack architecture use cases. There are several factors to consider
|
|
||||||
when designing for a network-centric or network-heavy application
|
|
||||||
environment.
|
|
||||||
|
|
||||||
Networks exist to serve as a medium of transporting data between
|
|
||||||
systems. It is inevitable that an OpenStack design has
|
|
||||||
inter-dependencies with non-network portions of OpenStack as well as on
|
|
||||||
external systems. Depending on the specific workload, there may be major
|
|
||||||
interactions with storage systems both within and external to the
|
|
||||||
OpenStack environment. For example, in the case of content delivery
|
|
||||||
network, there is twofold interaction with storage. Traffic flows to and
|
|
||||||
from the storage array for ingesting and serving content in a
|
|
||||||
north-south direction. In addition, there is replication traffic flowing
|
|
||||||
in an east-west direction.
|
|
||||||
|
|
||||||
Compute-heavy workloads may also induce interactions with the network.
|
|
||||||
Some high performance compute applications require network-based memory
|
|
||||||
mapping and data sharing and, as a result, induce a higher network load
|
|
||||||
when they transfer results and data sets. Others may be highly
|
|
||||||
transactional and issue transaction locks, perform their functions, and
|
|
||||||
revoke transaction locks at high rates. This also has an impact on the
|
|
||||||
network performance.
|
|
||||||
|
|
||||||
Some network dependencies are external to OpenStack. While OpenStack
|
|
||||||
Networking is capable of providing network ports, IP addresses, some
|
|
||||||
level of routing, and overlay networks, there are some other functions
|
|
||||||
that it cannot provide. For many of these, you may require external
|
|
||||||
systems or equipment to fill in the functional gaps. Hardware load
|
|
||||||
balancers are an example of equipment that may be necessary to
|
|
||||||
distribute workloads or offload certain functions. OpenStack Networking
|
|
||||||
provides a tunneling feature, however it is constrained to a
|
|
||||||
Networking-managed region. If the need arises to extend a tunnel beyond
|
|
||||||
the OpenStack region to either another region or an external system,
|
|
||||||
implement the tunnel itself outside OpenStack or use a tunnel management
|
|
||||||
system to map the tunnel or overlay to an external tunnel.
|
|
||||||
|
|
||||||
Depending on the selected design, Networking itself might not support
|
|
||||||
the required :term:`layer-3 network<Layer-3 network>` functionality. If
|
|
||||||
you choose to use the provider networking mode without running the layer-3
|
|
||||||
agent, you must install an external router to provide layer-3 connectivity
|
|
||||||
to outside systems.
|
|
||||||
|
|
||||||
Interaction with orchestration services is inevitable in larger-scale
|
|
||||||
deployments. The Orchestration service is capable of allocating network
|
|
||||||
resource defined in templates to map to project networks and for port
|
|
||||||
creation, as well as allocating floating IPs. If there is a requirement
|
|
||||||
to define and manage network resources when using orchestration, we
|
|
||||||
recommend that the design include the Orchestration service to meet the
|
|
||||||
demands of users.
|
|
||||||
|
|
||||||
Design impacts
|
|
||||||
--------------
|
|
||||||
|
|
||||||
A wide variety of factors can affect a network-focused OpenStack
|
|
||||||
architecture. While there are some considerations shared with a general
|
|
||||||
use case, specific workloads related to network requirements influence
|
|
||||||
network design decisions.
|
|
||||||
|
|
||||||
One decision includes whether or not to use Network Address Translation
|
|
||||||
(NAT) and where to implement it. If there is a requirement for floating
|
|
||||||
IPs instead of public fixed addresses then you must use NAT. An example
|
|
||||||
of this is a DHCP relay that must know the IP of the DHCP server. In
|
|
||||||
these cases it is easier to automate the infrastructure to apply the
|
|
||||||
target IP to a new instance rather than to reconfigure legacy or
|
|
||||||
external systems for each new instance.
|
|
||||||
|
|
||||||
NAT for floating IPs managed by Networking resides within the hypervisor
|
|
||||||
but there are also versions of NAT that may be running elsewhere. If
|
|
||||||
there is a shortage of IPv4 addresses there are two common methods to
|
|
||||||
mitigate this externally to OpenStack. The first is to run a load
|
|
||||||
balancer either within OpenStack as an instance, or use an external load
|
|
||||||
balancing solution. In the internal scenario, Networking's
|
|
||||||
Load-Balancer-as-a-Service (LBaaS) can manage load balancing software,
|
|
||||||
for example HAproxy. This is specifically to manage the Virtual IP (VIP)
|
|
||||||
while a dual-homed connection from the HAproxy instance connects the
|
|
||||||
public network with the project private network that hosts all of the
|
|
||||||
content servers. In the external scenario, a load balancer needs to
|
|
||||||
serve the VIP and also connect to the project overlay network through
|
|
||||||
external means or through private addresses.
|
|
||||||
|
|
||||||
Another kind of NAT that may be useful is protocol NAT. In some cases it
|
|
||||||
may be desirable to use only IPv6 addresses on instances and operate
|
|
||||||
either an instance or an external service to provide a NAT-based
|
|
||||||
transition technology such as NAT64 and DNS64. This provides the ability
|
|
||||||
to have a globally routable IPv6 address while only consuming IPv4
|
|
||||||
addresses as necessary or in a shared manner.
|
|
||||||
|
|
||||||
Application workloads affect the design of the underlying network
|
|
||||||
architecture. If a workload requires network-level redundancy, the
|
|
||||||
routing and switching architecture have to accommodate this. There are
|
|
||||||
differing methods for providing this that are dependent on the selected
|
|
||||||
network hardware, the performance of the hardware, and which networking
|
|
||||||
model you deploy. Examples include Link aggregation (LAG) and Hot
|
|
||||||
Standby Router Protocol (HSRP). Also consider whether to deploy
|
|
||||||
OpenStack Networking or legacy networking (nova-network), and which
|
|
||||||
plug-in to select for OpenStack Networking. If using an external system,
|
|
||||||
configure Networking to run :term:`layer-2<Layer-2 network>` with a provider
|
|
||||||
network configuration. For example, implement HSRP to terminate layer-3
|
|
||||||
connectivity.
|
|
||||||
|
|
||||||
Depending on the workload, overlay networks may not be the best
|
|
||||||
solution. Where application network connections are small, short lived,
|
|
||||||
or bursty, running a dynamic overlay can generate as much bandwidth as
|
|
||||||
the packets it carries. It also can induce enough latency to cause
|
|
||||||
issues with certain applications. There is an impact to the device
|
|
||||||
generating the overlay which, in most installations, is the hypervisor.
|
|
||||||
This causes performance degradation on packet per second and connection
|
|
||||||
per second rates.
|
|
||||||
|
|
||||||
Overlays also come with a secondary option that may not be appropriate
|
|
||||||
to a specific workload. While all of them operate in full mesh by
|
|
||||||
default, there might be good reasons to disable this function because it
|
|
||||||
may cause excessive overhead for some workloads. Conversely, other
|
|
||||||
workloads operate without issue. For example, most web services
|
|
||||||
applications do not have major issues with a full mesh overlay network,
|
|
||||||
while some network monitoring tools or storage replication workloads
|
|
||||||
have performance issues with throughput or excessive broadcast traffic.
|
|
||||||
|
|
||||||
Many people overlook an important design decision: The choice of layer-3
|
|
||||||
protocols. While OpenStack was initially built with only IPv4 support,
|
|
||||||
Networking now supports IPv6 and dual-stacked networks. Some workloads
|
|
||||||
are possible through the use of IPv6 and IPv6 to IPv4 reverse transition
|
|
||||||
mechanisms such as NAT64 and DNS64 or :term:`6to4`. This alters the
|
|
||||||
requirements for any address plan as single-stacked and transitional IPv6
|
|
||||||
deployments can alleviate the need for IPv4 addresses.
|
|
||||||
|
|
||||||
OpenStack has limited support for dynamic routing, however there are a
|
|
||||||
number of options available by incorporating third party solutions to
|
|
||||||
implement routing within the cloud including network equipment, hardware
|
|
||||||
nodes, and instances. Some workloads perform well with nothing more than
|
|
||||||
static routes and default gateways configured at the layer-3 termination
|
|
||||||
point. In most cases this is sufficient, however some cases require the
|
|
||||||
addition of at least one type of dynamic routing protocol if not
|
|
||||||
multiple protocols. Having a form of interior gateway protocol (IGP)
|
|
||||||
available to the instances inside an OpenStack installation opens up the
|
|
||||||
possibility of use cases for anycast route injection for services that
|
|
||||||
need to use it as a geographic location or failover mechanism. Other
|
|
||||||
applications may wish to directly participate in a routing protocol,
|
|
||||||
either as a passive observer, as in the case of a looking glass, or as
|
|
||||||
an active participant in the form of a route reflector. Since an
|
|
||||||
instance might have a large amount of compute and memory resources, it
|
|
||||||
is trivial to hold an entire unpartitioned routing table and use it to
|
|
||||||
provide services such as network path visibility to other applications
|
|
||||||
or as a monitoring tool.
|
|
||||||
|
|
||||||
Path maximum transmission unit (MTU) failures are lesser known but
|
|
||||||
harder to diagnose. The MTU must be large enough to handle normal
|
|
||||||
traffic, overhead from an overlay network, and the desired layer-3
|
|
||||||
protocol. Adding externally built tunnels reduces the MTU packet size.
|
|
||||||
In this case, you must pay attention to the fully calculated MTU size
|
|
||||||
because some systems ignore or drop path MTU discovery packets.
|
|
||||||
|
|
||||||
Tunable networking components
|
|
||||||
-----------------------------
|
|
||||||
|
|
||||||
Consider configurable networking components related to an OpenStack
|
|
||||||
architecture design when designing for network intensive workloads that
|
|
||||||
include MTU and QoS. Some workloads require a larger MTU than normal due
|
|
||||||
to the transfer of large blocks of data. When providing network service
|
|
||||||
for applications such as video streaming or storage replication, we
|
|
||||||
recommend that you configure both OpenStack hardware nodes and the
|
|
||||||
supporting network equipment for jumbo frames where possible. This
|
|
||||||
allows for better use of available bandwidth. Configure jumbo frames
|
|
||||||
across the complete path the packets traverse. If one network component
|
|
||||||
is not capable of handling jumbo frames then the entire path reverts to
|
|
||||||
the default MTU.
|
|
||||||
|
|
||||||
:term:`Quality of Service (QoS)` also has a great impact on network intensive
|
|
||||||
workloads as it provides instant service to packets which have a higher
|
|
||||||
priority due to the impact of poor network performance. In applications
|
|
||||||
such as Voice over IP (VoIP), differentiated services code points are a
|
|
||||||
near requirement for proper operation. You can also use QoS in the
|
|
||||||
opposite direction for mixed workloads to prevent low priority but high
|
|
||||||
bandwidth applications, for example backup services, video conferencing,
|
|
||||||
or file sharing, from blocking bandwidth that is needed for the proper
|
|
||||||
operation of other workloads. It is possible to tag file storage traffic
|
|
||||||
as a lower class, such as best effort or scavenger, to allow the higher
|
|
||||||
priority traffic through. In cases where regions within a cloud might be
|
|
||||||
geographically distributed it may also be necessary to plan accordingly
|
|
||||||
to implement WAN optimization to combat latency or packet loss.
|
|
@ -1,64 +0,0 @@
|
|||||||
Operational considerations
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Network-focused OpenStack clouds have a number of operational
|
|
||||||
considerations that influence the selected design, including:
|
|
||||||
|
|
||||||
* Dynamic routing of static routes
|
|
||||||
|
|
||||||
* Service level agreements (SLAs)
|
|
||||||
|
|
||||||
* Ownership of user management
|
|
||||||
|
|
||||||
An initial network consideration is the selection of a telecom company
|
|
||||||
or transit provider.
|
|
||||||
|
|
||||||
Make additional design decisions about monitoring and alarming. This can
|
|
||||||
be an internal responsibility or the responsibility of the external
|
|
||||||
provider. In the case of using an external provider, service level
|
|
||||||
agreements (SLAs) likely apply. In addition, other operational
|
|
||||||
considerations such as bandwidth, latency, and jitter can be part of an
|
|
||||||
SLA.
|
|
||||||
|
|
||||||
Consider the ability to upgrade the infrastructure. As demand for
|
|
||||||
network resources increase, operators add additional IP address blocks
|
|
||||||
and add additional bandwidth capacity. In addition, consider managing
|
|
||||||
hardware and software lifecycle events, for example upgrades,
|
|
||||||
decommissioning, and outages, while avoiding service interruptions for
|
|
||||||
projects.
|
|
||||||
|
|
||||||
Factor maintainability into the overall network design. This includes
|
|
||||||
the ability to manage and maintain IP addresses as well as the use of
|
|
||||||
overlay identifiers including VLAN tag IDs, GRE tunnel IDs, and MPLS
|
|
||||||
tags. As an example, if you may need to change all of the IP addresses
|
|
||||||
on a network, a process known as renumbering, then the design must
|
|
||||||
support this function.
|
|
||||||
|
|
||||||
Address network-focused applications when considering certain
|
|
||||||
operational realities. For example, consider the impending exhaustion of
|
|
||||||
IPv4 addresses, the migration to IPv6, and the use of private networks
|
|
||||||
to segregate different types of traffic that an application receives or
|
|
||||||
generates. In the case of IPv4 to IPv6 migrations, applications should
|
|
||||||
follow best practices for storing IP addresses. We recommend you avoid
|
|
||||||
relying on IPv4 features that did not carry over to the IPv6 protocol or
|
|
||||||
have differences in implementation.
|
|
||||||
|
|
||||||
To segregate traffic, allow applications to create a private project
|
|
||||||
network for database and storage network traffic. Use a public network
|
|
||||||
for services that require direct client access from the internet. Upon
|
|
||||||
segregating the traffic, consider :term:`quality of service (QoS)` and
|
|
||||||
security to ensure each network has the required level of service.
|
|
||||||
|
|
||||||
Finally, consider the routing of network traffic. For some applications,
|
|
||||||
develop a complex policy framework for routing. To create a routing
|
|
||||||
policy that satisfies business requirements, consider the economic cost
|
|
||||||
of transmitting traffic over expensive links versus cheaper links, in
|
|
||||||
addition to bandwidth, latency, and jitter requirements.
|
|
||||||
|
|
||||||
Additionally, consider how to respond to network events. As an example,
|
|
||||||
how load transfers from one link to another during a failure scenario
|
|
||||||
could be a factor in the design. If you do not plan network capacity
|
|
||||||
correctly, failover traffic could overwhelm other ports or network links
|
|
||||||
and create a cascading failure scenario. In this case, traffic that
|
|
||||||
fails over to one link overwhelms that link and then moves to the
|
|
||||||
subsequent links until all network traffic stops.
|
|
@ -1,165 +0,0 @@
|
|||||||
Prescriptive examples
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
An organization designs a large-scale web application with cloud
|
|
||||||
principles in mind. The application scales horizontally in a bursting
|
|
||||||
fashion and generates a high instance count. The application requires an
|
|
||||||
SSL connection to secure data and must not lose connection state to
|
|
||||||
individual servers.
|
|
||||||
|
|
||||||
The figure below depicts an example design for this workload. In this
|
|
||||||
example, a hardware load balancer provides SSL offload functionality and
|
|
||||||
connects to project networks in order to reduce address consumption. This
|
|
||||||
load balancer links to the routing architecture as it services the VIP
|
|
||||||
for the application. The router and load balancer use the GRE tunnel ID
|
|
||||||
of the application's project network and an IP address within the project
|
|
||||||
subnet but outside of the address pool. This is to ensure that the load
|
|
||||||
balancer can communicate with the application's HTTP servers without
|
|
||||||
requiring the consumption of a public IP address.
|
|
||||||
|
|
||||||
Because sessions persist until closed, the routing and switching
|
|
||||||
architecture provides high availability. Switches mesh to each
|
|
||||||
hypervisor and each other, and also provide an MLAG implementation to
|
|
||||||
ensure that layer-2 connectivity does not fail. Routers use VRRP and
|
|
||||||
fully mesh with switches to ensure layer-3 connectivity. Since GRE is
|
|
||||||
provides an overlay network, Networking is present and uses the Open
|
|
||||||
vSwitch agent in GRE tunnel mode. This ensures all devices can reach all
|
|
||||||
other devices and that you can create project networks for private
|
|
||||||
addressing links to the load balancer.
|
|
||||||
|
|
||||||
.. figure:: figures/Network_Web_Services1.png
|
|
||||||
|
|
||||||
A web service architecture has many options and optional components. Due
|
|
||||||
to this, it can fit into a large number of other OpenStack designs. A
|
|
||||||
few key components, however, need to be in place to handle the nature of
|
|
||||||
most web-scale workloads. You require the following components:
|
|
||||||
|
|
||||||
* OpenStack Controller services (Image, Identity, Networking and
|
|
||||||
supporting services such as MariaDB and RabbitMQ)
|
|
||||||
|
|
||||||
* OpenStack Compute running KVM hypervisor
|
|
||||||
|
|
||||||
* OpenStack Object Storage
|
|
||||||
|
|
||||||
* Orchestration service
|
|
||||||
|
|
||||||
* Telemetry service
|
|
||||||
|
|
||||||
Beyond the normal Identity, Compute, Image service, and Object Storage
|
|
||||||
components, we recommend the Orchestration service component to handle
|
|
||||||
the proper scaling of workloads to adjust to demand. Due to the
|
|
||||||
requirement for auto-scaling, the design includes the Telemetry service.
|
|
||||||
Web services tend to be bursty in load, have very defined peak and
|
|
||||||
valley usage patterns and, as a result, benefit from automatic scaling
|
|
||||||
of instances based upon traffic. At a network level, a split network
|
|
||||||
configuration works well with databases residing on private project
|
|
||||||
networks since these do not emit a large quantity of broadcast traffic
|
|
||||||
and may need to interconnect to some databases for content.
|
|
||||||
|
|
||||||
Load balancing
|
|
||||||
--------------
|
|
||||||
|
|
||||||
Load balancing spreads requests across multiple instances. This workload
|
|
||||||
scales well horizontally across large numbers of instances. This enables
|
|
||||||
instances to run without publicly routed IP addresses and instead to
|
|
||||||
rely on the load balancer to provide a globally reachable service. Many
|
|
||||||
of these services do not require direct server return. This aids in
|
|
||||||
address planning and utilization at scale since only the virtual IP
|
|
||||||
(VIP) must be public.
|
|
||||||
|
|
||||||
Overlay networks
|
|
||||||
----------------
|
|
||||||
|
|
||||||
The overlay functionality design includes OpenStack Networking in Open
|
|
||||||
vSwitch GRE tunnel mode. In this case, the layer-3 external routers pair
|
|
||||||
with VRRP, and switches pair with an implementation of MLAG to ensure
|
|
||||||
that you do not lose connectivity with the upstream routing
|
|
||||||
infrastructure.
|
|
||||||
|
|
||||||
Performance tuning
|
|
||||||
------------------
|
|
||||||
|
|
||||||
Network level tuning for this workload is minimal. :term:`Quality of Service
|
|
||||||
(QoS)` applies to these workloads for a middle ground Class Selector
|
|
||||||
depending on existing policies. It is higher than a best effort queue
|
|
||||||
but lower than an Expedited Forwarding or Assured Forwarding queue.
|
|
||||||
Since this type of application generates larger packets with
|
|
||||||
longer-lived connections, you can optimize bandwidth utilization for
|
|
||||||
long duration TCP. Normal bandwidth planning applies here with regards
|
|
||||||
to benchmarking a session's usage multiplied by the expected number of
|
|
||||||
concurrent sessions with overhead.
|
|
||||||
|
|
||||||
Network functions
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
Network functions is a broad category but encompasses workloads that
|
|
||||||
support the rest of a system's network. These workloads tend to consist
|
|
||||||
of large amounts of small packets that are very short lived, such as DNS
|
|
||||||
queries or SNMP traps. These messages need to arrive quickly and do not
|
|
||||||
deal with packet loss as there can be a very large volume of them. There
|
|
||||||
are a few extra considerations to take into account for this type of
|
|
||||||
workload and this can change a configuration all the way to the
|
|
||||||
hypervisor level. For an application that generates 10 TCP sessions per
|
|
||||||
user with an average bandwidth of 512 kilobytes per second per flow and
|
|
||||||
expected user count of ten thousand concurrent users, the expected
|
|
||||||
bandwidth plan is approximately 4.88 gigabits per second.
|
|
||||||
|
|
||||||
The supporting network for this type of configuration needs to have a
|
|
||||||
low latency and evenly distributed availability. This workload benefits
|
|
||||||
from having services local to the consumers of the service. Use a
|
|
||||||
multi-site approach as well as deploying many copies of the application
|
|
||||||
to handle load as close as possible to consumers. Since these
|
|
||||||
applications function independently, they do not warrant running
|
|
||||||
overlays to interconnect project networks. Overlays also have the
|
|
||||||
drawback of performing poorly with rapid flow setup and may incur too
|
|
||||||
much overhead with large quantities of small packets and therefore we do
|
|
||||||
not recommend them.
|
|
||||||
|
|
||||||
QoS is desirable for some workloads to ensure delivery. DNS has a major
|
|
||||||
impact on the load times of other services and needs to be reliable and
|
|
||||||
provide rapid responses. Configure rules in upstream devices to apply a
|
|
||||||
higher Class Selector to DNS to ensure faster delivery or a better spot
|
|
||||||
in queuing algorithms.
|
|
||||||
|
|
||||||
Cloud storage
|
|
||||||
-------------
|
|
||||||
|
|
||||||
Another common use case for OpenStack environments is providing a
|
|
||||||
cloud-based file storage and sharing service. You might consider this a
|
|
||||||
storage-focused use case, but its network-side requirements make it a
|
|
||||||
network-focused use case.
|
|
||||||
|
|
||||||
For example, consider a cloud backup application. This workload has two
|
|
||||||
specific behaviors that impact the network. Because this workload is an
|
|
||||||
externally-facing service and an internally-replicating application, it
|
|
||||||
has both :term:`north-south<north-south traffic>` and
|
|
||||||
:term:`east-west<east-west traffic>` traffic considerations:
|
|
||||||
|
|
||||||
north-south traffic
|
|
||||||
When a user uploads and stores content, that content moves into the
|
|
||||||
OpenStack installation. When users download this content, the
|
|
||||||
content moves out from the OpenStack installation. Because this
|
|
||||||
service operates primarily as a backup, most of the traffic moves
|
|
||||||
southbound into the environment. In this situation, it benefits you
|
|
||||||
to configure a network to be asymmetrically downstream because the
|
|
||||||
traffic that enters the OpenStack installation is greater than the
|
|
||||||
traffic that leaves the installation.
|
|
||||||
|
|
||||||
east-west traffic
|
|
||||||
Likely to be fully symmetric. Because replication originates from
|
|
||||||
any node and might target multiple other nodes algorithmically, it
|
|
||||||
is less likely for this traffic to have a larger volume in any
|
|
||||||
specific direction. However this traffic might interfere with
|
|
||||||
north-south traffic.
|
|
||||||
|
|
||||||
.. figure:: figures/Network_Cloud_Storage2.png
|
|
||||||
|
|
||||||
This application prioritizes the north-south traffic over east-west
|
|
||||||
traffic: the north-south traffic involves customer-facing data.
|
|
||||||
|
|
||||||
The network design in this case is less dependent on availability and
|
|
||||||
more dependent on being able to handle high bandwidth. As a direct
|
|
||||||
result, it is beneficial to forgo redundant links in favor of bonding
|
|
||||||
those connections. This increases available bandwidth. It is also
|
|
||||||
beneficial to configure all devices in the path, including OpenStack, to
|
|
||||||
generate and pass jumbo frames.
|
|
@ -1,367 +0,0 @@
|
|||||||
Technical considerations
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
When you design an OpenStack network architecture, you must consider
|
|
||||||
layer-2 and layer-3 issues. Layer-2 decisions involve those made at the
|
|
||||||
data-link layer, such as the decision to use Ethernet versus Token Ring.
|
|
||||||
Layer-3 decisions involve those made about the protocol layer and the
|
|
||||||
point when IP comes into the picture. As an example, a completely
|
|
||||||
internal OpenStack network can exist at layer 2 and ignore layer 3. In
|
|
||||||
order for any traffic to go outside of that cloud, to another network,
|
|
||||||
or to the Internet, however, you must use a layer-3 router or switch.
|
|
||||||
|
|
||||||
The past few years have seen two competing trends in networking. One
|
|
||||||
trend leans towards building data center network architectures based on
|
|
||||||
layer-2 networking. Another trend treats the cloud environment
|
|
||||||
essentially as a miniature version of the Internet. This approach is
|
|
||||||
radically different from the network architecture approach in the
|
|
||||||
staging environment: the Internet only uses layer-3 routing rather than
|
|
||||||
layer-2 switching.
|
|
||||||
|
|
||||||
A network designed on layer-2 protocols has advantages over one designed
|
|
||||||
on layer-3 protocols. In spite of the difficulties of using a bridge to
|
|
||||||
perform the network role of a router, many vendors, customers, and
|
|
||||||
service providers choose to use Ethernet in as many parts of their
|
|
||||||
networks as possible. The benefits of selecting a layer-2 design are:
|
|
||||||
|
|
||||||
* Ethernet frames contain all the essentials for networking. These
|
|
||||||
include, but are not limited to, globally unique source addresses,
|
|
||||||
globally unique destination addresses, and error control.
|
|
||||||
|
|
||||||
* Ethernet frames can carry any kind of packet. Networking at layer-2
|
|
||||||
is independent of the layer-3 protocol.
|
|
||||||
|
|
||||||
* Adding more layers to the Ethernet frame only slows the networking
|
|
||||||
process down. This is known as 'nodal processing delay'.
|
|
||||||
|
|
||||||
* You can add adjunct networking features, for example class of service
|
|
||||||
(CoS) or multicasting, to Ethernet as readily as IP networks.
|
|
||||||
|
|
||||||
* VLANs are an easy mechanism for isolating networks.
|
|
||||||
|
|
||||||
Most information starts and ends inside Ethernet frames. Today this
|
|
||||||
applies to data, voice (for example, VoIP), and video (for example, web
|
|
||||||
cameras). The concept is that if you can perform more of the end-to-end
|
|
||||||
transfer of information from a source to a destination in the form of
|
|
||||||
Ethernet frames, the network benefits more from the advantages of
|
|
||||||
Ethernet. Although it is not a substitute for IP networking, networking
|
|
||||||
at layer-2 can be a powerful adjunct to IP networking.
|
|
||||||
|
|
||||||
Layer-2 Ethernet usage has these advantages over layer-3 IP network
|
|
||||||
usage:
|
|
||||||
|
|
||||||
* Speed
|
|
||||||
|
|
||||||
* Reduced overhead of the IP hierarchy.
|
|
||||||
|
|
||||||
* No need to keep track of address configuration as systems move
|
|
||||||
around. Whereas the simplicity of layer-2 protocols might work well
|
|
||||||
in a data center with hundreds of physical machines, cloud data
|
|
||||||
centers have the additional burden of needing to keep track of all
|
|
||||||
virtual machine addresses and networks. In these data centers, it is
|
|
||||||
not uncommon for one physical node to support 30-40 instances.
|
|
||||||
|
|
||||||
.. important::
|
|
||||||
|
|
||||||
Networking at the frame level says nothing about the presence or
|
|
||||||
absence of IP addresses at the packet level. Almost all ports,
|
|
||||||
links, and devices on a network of LAN switches still have IP
|
|
||||||
addresses, as do all the source and destination hosts. There are
|
|
||||||
many reasons for the continued need for IP addressing. The largest
|
|
||||||
one is the need to manage the network. A device or link without an
|
|
||||||
IP address is usually invisible to most management applications.
|
|
||||||
Utilities including remote access for diagnostics, file transfer of
|
|
||||||
configurations and software, and similar applications cannot run
|
|
||||||
without IP addresses as well as MAC addresses.
|
|
||||||
|
|
||||||
Layer-2 architecture limitations
|
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
Outside of the traditional data center the limitations of layer-2
|
|
||||||
network architectures become more obvious.
|
|
||||||
|
|
||||||
* Number of VLANs is limited to 4096.
|
|
||||||
|
|
||||||
* The number of MACs stored in switch tables is limited.
|
|
||||||
|
|
||||||
* You must accommodate the need to maintain a set of layer-4 devices to
|
|
||||||
handle traffic control.
|
|
||||||
|
|
||||||
* MLAG, often used for switch redundancy, is a proprietary solution
|
|
||||||
that does not scale beyond two devices and forces vendor lock-in.
|
|
||||||
|
|
||||||
* It can be difficult to troubleshoot a network without IP addresses
|
|
||||||
and ICMP.
|
|
||||||
|
|
||||||
* Configuring :term:`ARP<Address Resolution Protocol (ARP)>` can be
|
|
||||||
complicated on large layer-2 networks.
|
|
||||||
|
|
||||||
* All network devices need to be aware of all MACs, even instance MACs,
|
|
||||||
so there is constant churn in MAC tables and network state changes as
|
|
||||||
instances start and stop.
|
|
||||||
|
|
||||||
* Migrating MACs (instance migration) to different physical locations
|
|
||||||
are a potential problem if you do not set ARP table timeouts
|
|
||||||
properly.
|
|
||||||
|
|
||||||
It is important to know that layer-2 has a very limited set of network
|
|
||||||
management tools. It is very difficult to control traffic, as it does
|
|
||||||
not have mechanisms to manage the network or shape the traffic, and
|
|
||||||
network troubleshooting is very difficult. One reason for this
|
|
||||||
difficulty is network devices have no IP addresses. As a result, there
|
|
||||||
is no reasonable way to check network delay in a layer-2 network.
|
|
||||||
|
|
||||||
On large layer-2 networks, configuring ARP learning can also be
|
|
||||||
complicated. The setting for the MAC address timer on switches is
|
|
||||||
critical and, if set incorrectly, can cause significant performance
|
|
||||||
problems. As an example, the Cisco default MAC address timer is
|
|
||||||
extremely long. Migrating MACs to different physical locations to
|
|
||||||
support instance migration can be a significant problem. In this case,
|
|
||||||
the network information maintained in the switches could be out of sync
|
|
||||||
with the new location of the instance.
|
|
||||||
|
|
||||||
In a layer-2 network, all devices are aware of all MACs, even those that
|
|
||||||
belong to instances. The network state information in the backbone
|
|
||||||
changes whenever an instance starts or stops. As a result there is far
|
|
||||||
too much churn in the MAC tables on the backbone switches.
|
|
||||||
|
|
||||||
Layer-3 architecture advantages
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
In the layer-3 case, there is no churn in the routing tables due to
|
|
||||||
instances starting and stopping. The only time there would be a routing
|
|
||||||
state change is in the case of a Top of Rack (ToR) switch failure or a
|
|
||||||
link failure in the backbone itself. Other advantages of using a layer-3
|
|
||||||
architecture include:
|
|
||||||
|
|
||||||
* Layer-3 networks provide the same level of resiliency and scalability
|
|
||||||
as the Internet.
|
|
||||||
|
|
||||||
* Controlling traffic with routing metrics is straightforward.
|
|
||||||
|
|
||||||
* You can configure layer 3 to use :term:`BGP<Border Gateway Protocol (BGP)>`
|
|
||||||
confederation for scalability so core routers have state proportional to the
|
|
||||||
number of racks, not to the number of servers or instances.
|
|
||||||
|
|
||||||
* Routing takes instance MAC and IP addresses out of the network core,
|
|
||||||
reducing state churn. Routing state changes only occur in the case of
|
|
||||||
a ToR switch failure or backbone link failure.
|
|
||||||
|
|
||||||
* There are a variety of well tested tools, for example ICMP, to
|
|
||||||
monitor and manage traffic.
|
|
||||||
|
|
||||||
* Layer-3 architectures enable the use of :term:`quality of service (QoS)` to
|
|
||||||
manage network performance.
|
|
||||||
|
|
||||||
Layer-3 architecture limitations
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
The main limitation of layer 3 is that there is no built-in isolation
|
|
||||||
mechanism comparable to the VLANs in layer-2 networks. Furthermore, the
|
|
||||||
hierarchical nature of IP addresses means that an instance is on the
|
|
||||||
same subnet as its physical host. This means that you cannot migrate it
|
|
||||||
outside of the subnet easily. For these reasons, network virtualization
|
|
||||||
needs to use IP :term:`encapsulation` and software at the end hosts for
|
|
||||||
isolation and the separation of the addressing in the virtual layer from
|
|
||||||
the addressing in the physical layer. Other potential disadvantages of
|
|
||||||
layer 3 include the need to design an IP addressing scheme rather than
|
|
||||||
relying on the switches to keep track of the MAC addresses automatically
|
|
||||||
and to configure the interior gateway routing protocol in the switches.
|
|
||||||
|
|
||||||
Network recommendations overview
|
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
OpenStack has complex networking requirements for several reasons. Many
|
|
||||||
components interact at different levels of the system stack that adds
|
|
||||||
complexity. Data flows are complex. Data in an OpenStack cloud moves
|
|
||||||
both between instances across the network (also known as East-West), as
|
|
||||||
well as in and out of the system (also known as North-South). Physical
|
|
||||||
server nodes have network requirements that are independent of instance
|
|
||||||
network requirements, which you must isolate from the core network to
|
|
||||||
account for scalability. We recommend functionally separating the
|
|
||||||
networks for security purposes and tuning performance through traffic
|
|
||||||
shaping.
|
|
||||||
|
|
||||||
You must consider a number of important general technical and business
|
|
||||||
factors when planning and designing an OpenStack network. They include:
|
|
||||||
|
|
||||||
* A requirement for vendor independence. To avoid hardware or software
|
|
||||||
vendor lock-in, the design should not rely on specific features of a
|
|
||||||
vendor's router or switch.
|
|
||||||
|
|
||||||
* A requirement to massively scale the ecosystem to support millions of
|
|
||||||
end users.
|
|
||||||
|
|
||||||
* A requirement to support indeterminate platforms and applications.
|
|
||||||
|
|
||||||
* A requirement to design for cost efficient operations to take
|
|
||||||
advantage of massive scale.
|
|
||||||
|
|
||||||
* A requirement to ensure that there is no single point of failure in
|
|
||||||
the cloud ecosystem.
|
|
||||||
|
|
||||||
* A requirement for high availability architecture to meet customer SLA
|
|
||||||
requirements.
|
|
||||||
|
|
||||||
* A requirement to be tolerant of rack level failure.
|
|
||||||
|
|
||||||
* A requirement to maximize flexibility to architect future production
|
|
||||||
environments.
|
|
||||||
|
|
||||||
Bearing in mind these considerations, we recommend the following:
|
|
||||||
|
|
||||||
* Layer-3 designs are preferable to layer-2 architectures.
|
|
||||||
|
|
||||||
* Design a dense multi-path network core to support multi-directional
|
|
||||||
scaling and flexibility.
|
|
||||||
|
|
||||||
* Use hierarchical addressing because it is the only viable option to
|
|
||||||
scale network ecosystem.
|
|
||||||
|
|
||||||
* Use virtual networking to isolate instance service network traffic
|
|
||||||
from the management and internal network traffic.
|
|
||||||
|
|
||||||
* Isolate virtual networks using encapsulation technologies.
|
|
||||||
|
|
||||||
* Use traffic shaping for performance tuning.
|
|
||||||
|
|
||||||
* Use eBGP to connect to the Internet up-link.
|
|
||||||
|
|
||||||
* Use iBGP to flatten the internal traffic on the layer-3 mesh.
|
|
||||||
|
|
||||||
* Determine the most effective configuration for block storage network.
|
|
||||||
|
|
||||||
Additional considerations
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
There are several further considerations when designing a
|
|
||||||
network-focused OpenStack cloud.
|
|
||||||
|
|
||||||
OpenStack Networking versus legacy networking (nova-network) considerations
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Selecting the type of networking technology to implement depends on many
|
|
||||||
factors. OpenStack Networking (neutron) and legacy networking
|
|
||||||
(nova-network) both have their advantages and disadvantages. They are
|
|
||||||
both valid and supported options that fit different use cases:
|
|
||||||
|
|
||||||
.. list-table:: **Redundant networking: ToR switch high availability risk
|
|
||||||
analysis**
|
|
||||||
:widths: 50 40
|
|
||||||
:header-rows: 1
|
|
||||||
|
|
||||||
* - Legacy networking (nova-network)
|
|
||||||
- OpenStack Networking
|
|
||||||
* - Simple, single agent
|
|
||||||
- Complex, multiple agents
|
|
||||||
* - More mature, established
|
|
||||||
- Newer, maturing
|
|
||||||
* - Flat or VLAN
|
|
||||||
- Flat, VLAN, Overlays, L2-L3, SDN
|
|
||||||
* - No plug-in support
|
|
||||||
- Plug-in support for 3rd parties
|
|
||||||
* - Scales well
|
|
||||||
- Scaling requires 3rd party plug-ins
|
|
||||||
* - No multi-tier topologies
|
|
||||||
- Multi-tier topologies
|
|
||||||
|
|
||||||
Redundant networking: ToR switch high availability risk analysis
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
A technical consideration of networking is the idea that you should
|
|
||||||
install switching gear in a data center with backup switches in case of
|
|
||||||
hardware failure.
|
|
||||||
|
|
||||||
Research indicates the mean time between failures (MTBF) on switches is
|
|
||||||
between 100,000 and 200,000 hours. This number is dependent on the
|
|
||||||
ambient temperature of the switch in the data center. When properly
|
|
||||||
cooled and maintained, this translates to between 11 and 22 years before
|
|
||||||
failure. Even in the worst case of poor ventilation and high ambient
|
|
||||||
temperatures in the data center, the MTBF is still 2-3 years. See
|
|
||||||
`Ethernet switch reliablity: Temperature vs. moving parts
|
|
||||||
<http://media.beldensolutions.com/garrettcom/techsupport/papers/ethernet_switch_reliability.pdf>`_
|
|
||||||
for further information.
|
|
||||||
|
|
||||||
In most cases, it is much more economical to use a single switch with a
|
|
||||||
small pool of spare switches to replace failed units than it is to
|
|
||||||
outfit an entire data center with redundant switches. Applications
|
|
||||||
should tolerate rack level outages without affecting normal operations,
|
|
||||||
since network and compute resources are easily provisioned and
|
|
||||||
plentiful.
|
|
||||||
|
|
||||||
Preparing for the future: IPv6 support
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
One of the most important networking topics today is the impending
|
|
||||||
exhaustion of IPv4 addresses. In early 2014, ICANN announced that they
|
|
||||||
started allocating the final IPv4 address blocks to the `Regional
|
|
||||||
Internet Registries
|
|
||||||
<http://www.internetsociety.org/deploy360/blog/2014/05/goodbye-ipv4-iana-starts-allocating-final-address-blocks/>`_.
|
|
||||||
This means the IPv4 address space is close to being fully allocated. As
|
|
||||||
a result, it will soon become difficult to allocate more IPv4 addresses
|
|
||||||
to an application that has experienced growth, or that you expect to
|
|
||||||
scale out, due to the lack of unallocated IPv4 address blocks.
|
|
||||||
|
|
||||||
For network focused applications the future is the IPv6 protocol. IPv6
|
|
||||||
increases the address space significantly, fixes long standing issues in
|
|
||||||
the IPv4 protocol, and will become essential for network focused
|
|
||||||
applications in the future.
|
|
||||||
|
|
||||||
OpenStack Networking supports IPv6 when configured to take advantage of
|
|
||||||
it. To enable IPv6, create an IPv6 subnet in Networking and use IPv6
|
|
||||||
prefixes when creating security groups.
|
|
||||||
|
|
||||||
Asymmetric links
|
|
||||||
^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
When designing a network architecture, the traffic patterns of an
|
|
||||||
application heavily influence the allocation of total bandwidth and the
|
|
||||||
number of links that you use to send and receive traffic. Applications
|
|
||||||
that provide file storage for customers allocate bandwidth and links to
|
|
||||||
favor incoming traffic, whereas video streaming applications allocate
|
|
||||||
bandwidth and links to favor outgoing traffic.
|
|
||||||
|
|
||||||
Performance
|
|
||||||
^^^^^^^^^^^
|
|
||||||
|
|
||||||
It is important to analyze the applications' tolerance for latency and
|
|
||||||
jitter when designing an environment to support network focused
|
|
||||||
applications. Certain applications, for example VoIP, are less tolerant
|
|
||||||
of latency and jitter. Where latency and jitter are concerned, certain
|
|
||||||
applications may require tuning of QoS parameters and network device
|
|
||||||
queues to ensure that they queue for transmit immediately or guarantee
|
|
||||||
minimum bandwidth. Since OpenStack currently does not support these
|
|
||||||
functions, consider carefully your selected network plug-in.
|
|
||||||
|
|
||||||
The location of a service may also impact the application or consumer
|
|
||||||
experience. If an application serves differing content to different
|
|
||||||
users it must properly direct connections to those specific locations.
|
|
||||||
Where appropriate, use a multi-site installation for these situations.
|
|
||||||
|
|
||||||
You can implement networking in two separate ways. Legacy networking
|
|
||||||
(nova-network) provides a flat DHCP network with a single broadcast
|
|
||||||
domain. This implementation does not support project isolation networks
|
|
||||||
or advanced plug-ins, but it is currently the only way to implement a
|
|
||||||
distributed :term:`layer-3 (L3) agent` using the multi_host configuration.
|
|
||||||
OpenStack Networking (neutron) is the official networking implementation and
|
|
||||||
provides a pluggable architecture that supports a large variety of
|
|
||||||
network methods. Some of these include a layer-2 only provider network
|
|
||||||
model, external device plug-ins, or even OpenFlow controllers.
|
|
||||||
|
|
||||||
Networking at large scales becomes a set of boundary questions. The
|
|
||||||
determination of how large a layer-2 domain must be is based on the
|
|
||||||
amount of nodes within the domain and the amount of broadcast traffic
|
|
||||||
that passes between instances. Breaking layer-2 boundaries may require
|
|
||||||
the implementation of overlay networks and tunnels. This decision is a
|
|
||||||
balancing act between the need for a smaller overhead or a need for a
|
|
||||||
smaller domain.
|
|
||||||
|
|
||||||
When selecting network devices, be aware that making this decision based
|
|
||||||
on the greatest port density often comes with a drawback. Aggregation
|
|
||||||
switches and routers have not all kept pace with Top of Rack switches
|
|
||||||
and may induce bottlenecks on north-south traffic. As a result, it may
|
|
||||||
be possible for massive amounts of downstream network utilization to
|
|
||||||
impact upstream network devices, impacting service to the cloud. Since
|
|
||||||
OpenStack does not currently provide a mechanism for traffic shaping or
|
|
||||||
rate limiting, it is necessary to implement these features at the
|
|
||||||
network hardware level.
|
|
@ -1,71 +0,0 @@
|
|||||||
User requirements
|
|
||||||
~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Network-focused architectures vary from the general-purpose architecture
|
|
||||||
designs. Certain network-intensive applications influence these
|
|
||||||
architectures. Some of the business requirements that influence the
|
|
||||||
design include network latency through slow page loads, degraded video
|
|
||||||
streams, and low quality VoIP sessions impacts the user experience.
|
|
||||||
|
|
||||||
Users are often not aware of how network design and architecture affects their
|
|
||||||
experiences. Both enterprise customers and end-users rely on the network for
|
|
||||||
delivery of an application. Network performance problems can result in a
|
|
||||||
negative experience for the end-user, as well as productivity and economic
|
|
||||||
loss.
|
|
||||||
|
|
||||||
High availability issues
|
|
||||||
------------------------
|
|
||||||
|
|
||||||
Depending on the application and use case, network-intensive OpenStack
|
|
||||||
installations can have high availability requirements. Financial
|
|
||||||
transaction systems have a much higher requirement for high availability
|
|
||||||
than a development application. Use network availability technologies,
|
|
||||||
for example :term:`quality of service (QoS)`, to improve the network
|
|
||||||
performance of sensitive applications such as VoIP and video streaming.
|
|
||||||
|
|
||||||
High performance systems have SLA requirements for a minimum QoS with
|
|
||||||
regard to guaranteed uptime, latency, and bandwidth. The level of the
|
|
||||||
SLA can have a significant impact on the network architecture and
|
|
||||||
requirements for redundancy in the systems.
|
|
||||||
|
|
||||||
Risks
|
|
||||||
-----
|
|
||||||
|
|
||||||
Network misconfigurations
|
|
||||||
Configuring incorrect IP addresses, VLANs, and routers can cause
|
|
||||||
outages to areas of the network or, in the worst-case scenario, the
|
|
||||||
entire cloud infrastructure. Automate network configurations to
|
|
||||||
minimize the opportunity for operator error as it can cause
|
|
||||||
disruptive problems.
|
|
||||||
|
|
||||||
Capacity planning
|
|
||||||
Cloud networks require management for capacity and growth over time.
|
|
||||||
Capacity planning includes the purchase of network circuits and
|
|
||||||
hardware that can potentially have lead times measured in months or
|
|
||||||
years.
|
|
||||||
|
|
||||||
Network tuning
|
|
||||||
Configure cloud networks to minimize link loss, packet loss, packet
|
|
||||||
storms, broadcast storms, and loops.
|
|
||||||
|
|
||||||
Single Point Of Failure (SPOF)
|
|
||||||
Consider high availability at the physical and environmental layers.
|
|
||||||
If there is a single point of failure due to only one upstream link,
|
|
||||||
or only one power supply, an outage can become unavoidable.
|
|
||||||
|
|
||||||
Complexity
|
|
||||||
An overly complex network design can be difficult to maintain and
|
|
||||||
troubleshoot. While device-level configuration can ease maintenance
|
|
||||||
concerns and automated tools can handle overlay networks, avoid or
|
|
||||||
document non-traditional interconnects between functions and
|
|
||||||
specialized hardware to prevent outages.
|
|
||||||
|
|
||||||
Non-standard features
|
|
||||||
There are additional risks that arise from configuring the cloud
|
|
||||||
network to take advantage of vendor specific features. One example
|
|
||||||
is multi-link aggregation (MLAG) used to provide redundancy at the
|
|
||||||
aggregator switch level of the network. MLAG is not a standard and,
|
|
||||||
as a result, each vendor has their own proprietary implementation of
|
|
||||||
the feature. MLAG architectures are not interoperable across switch
|
|
||||||
vendors, which leads to vendor lock-in, and can cause delays or
|
|
||||||
inability when upgrading components.
|
|
@ -1,101 +0,0 @@
|
|||||||
===============
|
|
||||||
Network focused
|
|
||||||
===============
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
network-focus-user-requirements.rst
|
|
||||||
network-focus-technical-considerations.rst
|
|
||||||
network-focus-operational-considerations.rst
|
|
||||||
network-focus-architecture.rst
|
|
||||||
network-focus-prescriptive-examples.rst
|
|
||||||
|
|
||||||
All OpenStack deployments depend on network communication in order to function
|
|
||||||
properly due to its service-based nature. In some cases, however, the network
|
|
||||||
elevates beyond simple infrastructure. This chapter discusses architectures
|
|
||||||
that are more reliant or focused on network services. These architectures
|
|
||||||
depend on the network infrastructure and require network services that
|
|
||||||
perform reliably in order to satisfy user and application requirements.
|
|
||||||
|
|
||||||
Some possible use cases include:
|
|
||||||
|
|
||||||
Content delivery network
|
|
||||||
This includes streaming video, viewing photographs, or accessing any other
|
|
||||||
cloud-based data repository distributed to a large number of end users.
|
|
||||||
Network configuration affects latency, bandwidth, and the distribution of
|
|
||||||
instances. Therefore, it impacts video streaming. Not all video streaming
|
|
||||||
is consumer-focused. For example, multicast videos (used for media, press
|
|
||||||
conferences, corporate presentations, and web conferencing services) can
|
|
||||||
also use a content delivery network. The location of the video repository
|
|
||||||
and its relationship to end users affects content delivery. Network
|
|
||||||
throughput of the back-end systems, as well as the WAN architecture and
|
|
||||||
the cache methodology, also affect performance.
|
|
||||||
|
|
||||||
Network management functions
|
|
||||||
Use this cloud to provide network service functions built to support the
|
|
||||||
delivery of back-end network services such as DNS, NTP, or SNMP.
|
|
||||||
|
|
||||||
Network service offerings
|
|
||||||
Use this cloud to run customer-facing network tools to support services.
|
|
||||||
Examples include VPNs, MPLS private networks, and GRE tunnels.
|
|
||||||
|
|
||||||
Web portals or web services
|
|
||||||
Web servers are a common application for cloud services, and we recommend
|
|
||||||
an understanding of their network requirements. The network requires scaling
|
|
||||||
out to meet user demand and deliver web pages with a minimum latency.
|
|
||||||
Depending on the details of the portal architecture, consider the internal
|
|
||||||
east-west and north-south network bandwidth.
|
|
||||||
|
|
||||||
High speed and high volume transactional systems
|
|
||||||
These types of applications are sensitive to network configurations. Examples
|
|
||||||
include financial systems, credit card transaction applications, and trading
|
|
||||||
and other extremely high volume systems. These systems are sensitive to
|
|
||||||
network jitter and latency. They must balance a high volume of East-West and
|
|
||||||
North-South network traffic to maximize efficiency of the data delivery. Many
|
|
||||||
of these systems must access large, high performance database back ends.
|
|
||||||
|
|
||||||
High availability
|
|
||||||
These types of use cases are dependent on the proper sizing of the network to
|
|
||||||
maintain replication of data between sites for high availability. If one site
|
|
||||||
becomes unavailable, the extra sites can serve the displaced load until the
|
|
||||||
original site returns to service. It is important to size network capacity to
|
|
||||||
handle the desired loads.
|
|
||||||
|
|
||||||
Big data
|
|
||||||
Clouds used for the management and collection of big data (data ingest) have
|
|
||||||
a significant demand on network resources. Big data often uses partial
|
|
||||||
replicas of the data to maintain integrity over large distributed clouds.
|
|
||||||
Other big data applications that require a large amount of network resources
|
|
||||||
are Hadoop, Cassandra, NuoDB, Riak, and other NoSQL and distributed
|
|
||||||
databases.
|
|
||||||
|
|
||||||
Virtual desktop infrastructure (VDI)
|
|
||||||
This use case is sensitive to network congestion, latency, jitter, and other
|
|
||||||
network characteristics. Like video streaming, the user experience is
|
|
||||||
important. However, unlike video streaming, caching is not an option to
|
|
||||||
offset the network issues. VDI requires both upstream and downstream traffic
|
|
||||||
and cannot rely on caching for the delivery of the application to the end
|
|
||||||
user.
|
|
||||||
|
|
||||||
Voice over IP (VoIP)
|
|
||||||
This is sensitive to network congestion, latency, jitter, and other network
|
|
||||||
characteristics. VoIP has a symmetrical traffic pattern and it requires
|
|
||||||
network :term:`quality of service (QoS)` for best performance. In addition,
|
|
||||||
you can implement active queue management to deliver voice and multimedia
|
|
||||||
content. Users are sensitive to latency and jitter fluctuations and can detect
|
|
||||||
them at very low levels.
|
|
||||||
|
|
||||||
Video Conference or web conference
|
|
||||||
This is sensitive to network congestion, latency, jitter, and other network
|
|
||||||
characteristics. Video Conferencing has a symmetrical traffic pattern, but
|
|
||||||
unless the network is on an MPLS private network, it cannot use network
|
|
||||||
:term:`quality of service (QoS)` to improve performance. Similar to VoIP,
|
|
||||||
users are sensitive to network performance issues even at low levels.
|
|
||||||
|
|
||||||
High performance computing (HPC)
|
|
||||||
This is a complex use case that requires careful consideration of the traffic
|
|
||||||
flows and usage patterns to address the needs of cloud clusters. It has high
|
|
||||||
east-west traffic patterns for distributed computing, but there can be
|
|
||||||
substantial north-south traffic depending on the specific application.
|
|
||||||
|
|
@ -1,85 +0,0 @@
|
|||||||
==========
|
|
||||||
References
|
|
||||||
==========
|
|
||||||
|
|
||||||
`Data Protection framework of the European Union
|
|
||||||
<http://ec.europa.eu/justice/data-protection/>`_
|
|
||||||
: Guidance on Data Protection laws governed by the EU.
|
|
||||||
|
|
||||||
`Depletion of IPv4 Addresses
|
|
||||||
<http://www.internetsociety.org/deploy360/blog/2014/05/
|
|
||||||
goodbye-ipv4-iana-starts-allocating-final-address-blocks/>`_
|
|
||||||
: describing how IPv4 addresses and the migration to IPv6 is inevitable.
|
|
||||||
|
|
||||||
`Ethernet Switch Reliability <http://www.garrettcom.com/
|
|
||||||
techsupport/papers/ethernet_switch_reliability.pdf>`_
|
|
||||||
: Research white paper on Ethernet Switch reliability.
|
|
||||||
|
|
||||||
`Financial Industry Regulatory Authority
|
|
||||||
<http://www.finra.org/Industry/Regulation/FINRARules/>`_
|
|
||||||
: Requirements of the Financial Industry Regulatory Authority in the USA.
|
|
||||||
|
|
||||||
`Image Service property keys <https://docs.openstack.org/
|
|
||||||
cli-reference/glance.html#image-service-property-keys>`_
|
|
||||||
: Glance API property keys allows the administrator to attach custom
|
|
||||||
characteristics to images.
|
|
||||||
|
|
||||||
`LibGuestFS Documentation <http://libguestfs.org>`_
|
|
||||||
: Official LibGuestFS documentation.
|
|
||||||
|
|
||||||
`Logging and Monitoring
|
|
||||||
<https://docs.openstack.org/ops-guide/ops-logging-monitoring.html>`_
|
|
||||||
: Official OpenStack Operations documentation.
|
|
||||||
|
|
||||||
`ManageIQ Cloud Management Platform <http://manageiq.org/>`_
|
|
||||||
: An Open Source Cloud Management Platform for managing multiple clouds.
|
|
||||||
|
|
||||||
`N-Tron Network Availability
|
|
||||||
<https://www.scribd.com/doc/298973976/Network-Availability>`_
|
|
||||||
: Research white paper on network availability.
|
|
||||||
|
|
||||||
`Nested KVM <http://davejingtian.org/2014/03/30/nested-kvm-just-for-fun>`_
|
|
||||||
: Post on how to nest KVM under KVM.
|
|
||||||
|
|
||||||
`Open Compute Project <http://www.opencompute.org/>`_
|
|
||||||
: The Open Compute Project Foundation's mission is to design
|
|
||||||
and enable the delivery of the most efficient server,
|
|
||||||
storage and data center hardware designs for scalable computing.
|
|
||||||
|
|
||||||
`OpenStack Flavors
|
|
||||||
<https://docs.openstack.org/ops-guide/ops-user-facing-operations.html#flavors>`_
|
|
||||||
: Official OpenStack documentation.
|
|
||||||
|
|
||||||
`OpenStack High Availability Guide <https://docs.openstack.org/ha-guide/>`_
|
|
||||||
: Information on how to provide redundancy for the OpenStack components.
|
|
||||||
|
|
||||||
`OpenStack Hypervisor Support Matrix
|
|
||||||
<https://wiki.openstack.org/wiki/HypervisorSupportMatrix>`_
|
|
||||||
: Matrix of supported hypervisors and capabilities when used with OpenStack.
|
|
||||||
|
|
||||||
`OpenStack Object Store (Swift) Replication Reference
|
|
||||||
<https://docs.openstack.org/developer/swift/replication_network.html>`_
|
|
||||||
: Developer documentation of Swift replication.
|
|
||||||
|
|
||||||
`OpenStack Operations Guide <https://docs.openstack.org/ops-guide/>`_
|
|
||||||
: The OpenStack Operations Guide provides information on setting up
|
|
||||||
and installing OpenStack.
|
|
||||||
|
|
||||||
`OpenStack Security Guide <https://docs.openstack.org/security-guide/>`_
|
|
||||||
: The OpenStack Security Guide provides information on securing
|
|
||||||
OpenStack deployments.
|
|
||||||
|
|
||||||
`OpenStack Training Marketplace
|
|
||||||
<https://www.openstack.org/marketplace/training>`_
|
|
||||||
: The OpenStack Market for training and Vendors providing training
|
|
||||||
on OpenStack.
|
|
||||||
|
|
||||||
`PCI passthrough <https://wiki.openstack.org/wiki/
|
|
||||||
Pci_passthrough#How_to_check_PCI_status_with_PCI_api_paches>`_
|
|
||||||
: The PCI API patches extend the servers/os-hypervisor to
|
|
||||||
show PCI information for instance and compute node,
|
|
||||||
and also provides a resource endpoint to show PCI information.
|
|
||||||
|
|
||||||
`TripleO <https://wiki.openstack.org/wiki/TripleO>`_
|
|
||||||
: TripleO is a program aimed at installing, upgrading and operating
|
|
||||||
OpenStack clouds using OpenStack's own cloud facilities as the foundation.
|
|
@ -1,47 +0,0 @@
|
|||||||
====================
|
|
||||||
Desktop-as-a-Service
|
|
||||||
====================
|
|
||||||
|
|
||||||
Virtual Desktop Infrastructure (VDI) is a service that hosts
|
|
||||||
user desktop environments on remote servers. This application
|
|
||||||
is very sensitive to network latency and requires a high
|
|
||||||
performance compute environment. Traditionally these types of
|
|
||||||
services do not use cloud environments because few clouds
|
|
||||||
support such a demanding workload for user-facing applications.
|
|
||||||
As cloud environments become more robust, vendors are starting
|
|
||||||
to provide services that provide virtual desktops in the cloud.
|
|
||||||
OpenStack may soon provide the infrastructure for these types of deployments.
|
|
||||||
|
|
||||||
Challenges
|
|
||||||
~~~~~~~~~~
|
|
||||||
|
|
||||||
Designing an infrastructure that is suitable to host virtual
|
|
||||||
desktops is a very different task to that of most virtual workloads.
|
|
||||||
For example, the design must consider:
|
|
||||||
|
|
||||||
* Boot storms, when a high volume of logins occur in a short period of time
|
|
||||||
* The performance of the applications running on virtual desktops
|
|
||||||
* Operating systems and their compatibility with the OpenStack hypervisor
|
|
||||||
|
|
||||||
Broker
|
|
||||||
~~~~~~
|
|
||||||
|
|
||||||
The connection broker determines which remote desktop host
|
|
||||||
users can access. Medium and large scale environments require a broker
|
|
||||||
since its service represents a central component of the architecture.
|
|
||||||
The broker is a complete management product, and enables automated
|
|
||||||
deployment and provisioning of remote desktop hosts.
|
|
||||||
|
|
||||||
Possible solutions
|
|
||||||
~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
There are a number of commercial products currently available that
|
|
||||||
provide a broker solution. However, no native OpenStack projects
|
|
||||||
provide broker services.
|
|
||||||
Not providing a broker is also an option, but managing this manually
|
|
||||||
would not suffice for a large scale, enterprise solution.
|
|
||||||
|
|
||||||
Diagram
|
|
||||||
~~~~~~~
|
|
||||||
|
|
||||||
.. figure:: figures/Specialized_VDI1.png
|
|
@ -1,43 +0,0 @@
|
|||||||
====================
|
|
||||||
Specialized hardware
|
|
||||||
====================
|
|
||||||
|
|
||||||
Certain workloads require specialized hardware devices that
|
|
||||||
have significant virtualization or sharing challenges.
|
|
||||||
Applications such as load balancers, highly parallel brute
|
|
||||||
force computing, and direct to wire networking may need
|
|
||||||
capabilities that basic OpenStack components do not provide.
|
|
||||||
|
|
||||||
Challenges
|
|
||||||
~~~~~~~~~~
|
|
||||||
|
|
||||||
Some applications need access to hardware devices to either
|
|
||||||
improve performance or provide capabilities that are not
|
|
||||||
virtual CPU, RAM, network, or storage. These can be a shared
|
|
||||||
resource, such as a cryptography processor, or a dedicated
|
|
||||||
resource, such as a Graphics Processing Unit (GPU). OpenStack can
|
|
||||||
provide some of these, while others may need extra work.
|
|
||||||
|
|
||||||
Solutions
|
|
||||||
~~~~~~~~~
|
|
||||||
|
|
||||||
To provide cryptography offloading to a set of instances,
|
|
||||||
you can use Image service configuration options.
|
|
||||||
For example, assign the cryptography chip to a device node in the guest.
|
|
||||||
The OpenStack Command Line Reference contains further information on
|
|
||||||
configuring this solution in the section `Image service property keys
|
|
||||||
<https://docs.openstack.org/cli-reference/glance.html#image-service-property-keys>`_.
|
|
||||||
A challenge, however, is this option allows all guests using the
|
|
||||||
configured images to access the hypervisor cryptography device.
|
|
||||||
|
|
||||||
If you require direct access to a specific device, PCI pass-through
|
|
||||||
enables you to dedicate the device to a single instance per hypervisor.
|
|
||||||
You must define a flavor that has the PCI device specifically in order
|
|
||||||
to properly schedule instances.
|
|
||||||
More information regarding PCI pass-through, including instructions for
|
|
||||||
implementing and using it, is available at
|
|
||||||
`https://wiki.openstack.org/wiki/Pci_passthrough <https://wiki.openstack.org/
|
|
||||||
wiki/Pci_passthrough#How_to_check_PCI_status_with_PCI_api_patches>`_.
|
|
||||||
|
|
||||||
.. figure:: figures/Specialized_Hardware2.png
|
|
||||||
:width: 100%
|
|
@ -1,78 +0,0 @@
|
|||||||
========================
|
|
||||||
Multi-hypervisor example
|
|
||||||
========================
|
|
||||||
|
|
||||||
A financial company requires its applications migrated
|
|
||||||
from a traditional, virtualized environment to an API driven,
|
|
||||||
orchestrated environment. The new environment needs
|
|
||||||
multiple hypervisors since many of the company's applications
|
|
||||||
have strict hypervisor requirements.
|
|
||||||
|
|
||||||
Currently, the company's vSphere environment runs 20 VMware
|
|
||||||
ESXi hypervisors. These hypervisors support 300 instances of
|
|
||||||
various sizes. Approximately 50 of these instances must run
|
|
||||||
on ESXi. The remaining 250 or so have more flexible requirements.
|
|
||||||
|
|
||||||
The financial company decides to manage the
|
|
||||||
overall system with a common OpenStack platform.
|
|
||||||
|
|
||||||
.. figure:: figures/Compute_NSX.png
|
|
||||||
:width: 100%
|
|
||||||
|
|
||||||
Architecture planning teams decided to run a host aggregate
|
|
||||||
containing KVM hypervisors for the general purpose instances.
|
|
||||||
A separate host aggregate targets instances requiring ESXi.
|
|
||||||
|
|
||||||
Images in the OpenStack Image service have particular
|
|
||||||
hypervisor metadata attached. When a user requests a
|
|
||||||
certain image, the instance spawns on the relevant aggregate.
|
|
||||||
|
|
||||||
Images for ESXi use the VMDK format. You can convert
|
|
||||||
QEMU disk images to VMDK, VMFS Flat Disks. These disk images
|
|
||||||
can also be thin, thick, zeroed-thick, and eager-zeroed-thick.
|
|
||||||
After exporting a VMFS thin disk from VMFS to the
|
|
||||||
OpenStack Image service (a non-VMFS location), it becomes a
|
|
||||||
preallocated flat disk. This impacts the transfer time from the
|
|
||||||
OpenStack Image service to the data store since transfers require
|
|
||||||
moving the full preallocated flat disk rather than the thin disk.
|
|
||||||
|
|
||||||
The VMware host aggregate compute nodes communicate with
|
|
||||||
vCenter rather than spawning directly on a hypervisor.
|
|
||||||
The vCenter then requests scheduling for the instance to run on
|
|
||||||
an ESXi hypervisor.
|
|
||||||
|
|
||||||
This functionality requires that VMware Distributed Resource
|
|
||||||
Scheduler (DRS) is enabled on a cluster and set to **Fully Automated**.
|
|
||||||
The vSphere requires shared storage because the DRS uses vMotion
|
|
||||||
which is a service that relies on shared storage.
|
|
||||||
|
|
||||||
This solution to the company's migration uses shared storage
|
|
||||||
to provide Block Storage capabilities to the KVM instances while
|
|
||||||
also providing vSphere storage. The new environment provides this
|
|
||||||
storage functionality using a dedicated data network. The
|
|
||||||
compute hosts should have dedicated NICs to support the
|
|
||||||
dedicated data network. vSphere supports OpenStack Block Storage. This
|
|
||||||
support gives storage from a VMFS datastore to an instance. For the
|
|
||||||
financial company, Block Storage in their new architecture supports
|
|
||||||
both hypervisors.
|
|
||||||
|
|
||||||
OpenStack Networking provides network connectivity in this new
|
|
||||||
architecture, with the VMware NSX plug-in driver configured. legacy
|
|
||||||
networking (nova-network) supports both hypervisors in this new
|
|
||||||
architecture example, but has limitations. Specifically, vSphere
|
|
||||||
with legacy networking does not support security groups. The new
|
|
||||||
architecture uses VMware NSX as a part of the design. When users launch an
|
|
||||||
instance within either of the host aggregates, VMware NSX ensures the
|
|
||||||
instance attaches to the appropriate network overlay-based logical networks.
|
|
||||||
|
|
||||||
The architecture planning teams also consider OpenStack Compute integration.
|
|
||||||
When running vSphere in an OpenStack environment, nova-compute
|
|
||||||
communications with vCenter appear as a single large hypervisor.
|
|
||||||
This hypervisor represents the entire ESXi cluster. Multiple nova-compute
|
|
||||||
instances can represent multiple ESXi clusters. They can connect to
|
|
||||||
multiple vCenter servers. If the process running nova-compute
|
|
||||||
crashes it cuts the connection to the vCenter server.
|
|
||||||
Any ESXi clusters will stop running, and you will not be able to
|
|
||||||
provision further instances on the vCenter, even if you enable high
|
|
||||||
availability. You must monitor the nova-compute service connected
|
|
||||||
to vSphere carefully for any disruptions as a result of this failure point.
|
|
@ -1,32 +0,0 @@
|
|||||||
==============================
|
|
||||||
Specialized networking example
|
|
||||||
==============================
|
|
||||||
|
|
||||||
Some applications that interact with a network require
|
|
||||||
specialized connectivity. Applications such as a looking glass
|
|
||||||
require the ability to connect to a BGP peer, or route participant
|
|
||||||
applications may need to join a network at a layer2 level.
|
|
||||||
|
|
||||||
Challenges
|
|
||||||
~~~~~~~~~~
|
|
||||||
|
|
||||||
Connecting specialized network applications to their required
|
|
||||||
resources alters the design of an OpenStack installation.
|
|
||||||
Installations that rely on overlay networks are unable to
|
|
||||||
support a routing participant, and may also block layer-2 listeners.
|
|
||||||
|
|
||||||
Possible solutions
|
|
||||||
~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Deploying an OpenStack installation using OpenStack Networking with a
|
|
||||||
provider network allows direct layer-2 connectivity to an
|
|
||||||
upstream networking device.
|
|
||||||
This design provides the layer-2 connectivity required to communicate
|
|
||||||
via Intermediate System-to-Intermediate System (ISIS) protocol or
|
|
||||||
to pass packets controlled by an OpenFlow controller.
|
|
||||||
Using the multiple layer-2 plug-in with an agent such as
|
|
||||||
:term:`Open vSwitch` allows a private connection through a VLAN
|
|
||||||
directly to a specific port in a layer-3 device.
|
|
||||||
This allows a BGP point-to-point link to join the autonomous system.
|
|
||||||
Avoid using layer-3 plug-ins as they divide the broadcast
|
|
||||||
domain and prevent router adjacencies from forming.
|
|
@ -1,71 +0,0 @@
|
|||||||
======================
|
|
||||||
OpenStack on OpenStack
|
|
||||||
======================
|
|
||||||
|
|
||||||
In some cases, users may run OpenStack nested on top
|
|
||||||
of another OpenStack cloud. This scenario describes how to
|
|
||||||
manage and provision complete OpenStack environments on instances
|
|
||||||
supported by hypervisors and servers, which an underlying OpenStack
|
|
||||||
environment controls.
|
|
||||||
|
|
||||||
Public cloud providers can use this technique to manage the
|
|
||||||
upgrade and maintenance process on complete OpenStack environments.
|
|
||||||
Developers and those testing OpenStack can also use this
|
|
||||||
technique to provision their own OpenStack environments on
|
|
||||||
available OpenStack Compute resources, whether public or private.
|
|
||||||
|
|
||||||
Challenges
|
|
||||||
~~~~~~~~~~
|
|
||||||
|
|
||||||
The network aspect of deploying a nested cloud is the most
|
|
||||||
complicated aspect of this architecture.
|
|
||||||
You must expose VLANs to the physical ports on which the underlying
|
|
||||||
cloud runs because the bare metal cloud owns all the hardware.
|
|
||||||
You must also expose them to the nested levels as well.
|
|
||||||
Alternatively, you can use the network overlay technologies on the
|
|
||||||
OpenStack environment running on the host OpenStack environment to
|
|
||||||
provide the required software defined networking for the deployment.
|
|
||||||
|
|
||||||
Hypervisor
|
|
||||||
~~~~~~~~~~
|
|
||||||
|
|
||||||
In this example architecture, consider which
|
|
||||||
approach you should take to provide a nested
|
|
||||||
hypervisor in OpenStack. This decision influences which
|
|
||||||
operating systems you use for the deployment of the nested
|
|
||||||
OpenStack deployments.
|
|
||||||
|
|
||||||
Possible solutions: deployment
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Deployment of a full stack can be challenging but you can mitigate
|
|
||||||
this difficulty by creating a Heat template to deploy the
|
|
||||||
entire stack, or a configuration management system. After creating
|
|
||||||
the Heat template, you can automate the deployment of additional stacks.
|
|
||||||
|
|
||||||
The OpenStack-on-OpenStack project (:term:`TripleO`)
|
|
||||||
addresses this issue. Currently, however, the project does
|
|
||||||
not completely cover nested stacks. For more information, see
|
|
||||||
https://wiki.openstack.org/wiki/TripleO.
|
|
||||||
|
|
||||||
Possible solutions: hypervisor
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
In the case of running TripleO, the underlying OpenStack
|
|
||||||
cloud deploys the compute nodes as bare-metal. You then deploy
|
|
||||||
OpenStack on these Compute bare-metal servers with the
|
|
||||||
appropriate hypervisor, such as KVM.
|
|
||||||
|
|
||||||
In the case of running smaller OpenStack clouds for testing
|
|
||||||
purposes, where performance is not a critical factor, you can use
|
|
||||||
QEMU instead. It is also possible to run a KVM hypervisor in an instance
|
|
||||||
(see `davejingtian.org
|
|
||||||
<http://davejingtian.org/2014/03/30/nested-kvm-just-for-fun/>`_),
|
|
||||||
though this is not a supported configuration, and could be a
|
|
||||||
complex solution for such a use case.
|
|
||||||
|
|
||||||
Diagram
|
|
||||||
~~~~~~~
|
|
||||||
|
|
||||||
.. figure:: figures/Specialized_OOO.png
|
|
||||||
:width: 100%
|
|
@ -1,46 +0,0 @@
|
|||||||
===========================
|
|
||||||
Software-defined networking
|
|
||||||
===========================
|
|
||||||
|
|
||||||
Software-defined networking (SDN) is the separation of the data
|
|
||||||
plane and control plane. SDN is a popular method of
|
|
||||||
managing and controlling packet flows within networks.
|
|
||||||
SDN uses overlays or directly controlled layer-2 devices to
|
|
||||||
determine flow paths, and as such presents challenges to a
|
|
||||||
cloud environment. Some designers may wish to run their
|
|
||||||
controllers within an OpenStack installation. Others may wish
|
|
||||||
to have their installations participate in an SDN-controlled network.
|
|
||||||
|
|
||||||
Challenges
|
|
||||||
~~~~~~~~~~
|
|
||||||
|
|
||||||
SDN is a relatively new concept that is not yet standardized,
|
|
||||||
so SDN systems come in a variety of different implementations.
|
|
||||||
Because of this, a truly prescriptive architecture is not feasible.
|
|
||||||
Instead, examine the differences between an existing and a planned
|
|
||||||
OpenStack design and determine where potential conflicts and gaps exist.
|
|
||||||
|
|
||||||
Possible solutions
|
|
||||||
~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
If an SDN implementation requires layer-2 access because it
|
|
||||||
directly manipulates switches, we do not recommend running an
|
|
||||||
overlay network or a layer-3 agent.
|
|
||||||
If the controller resides within an OpenStack installation,
|
|
||||||
it may be necessary to build an ML2 plug-in and schedule the
|
|
||||||
controller instances to connect to project VLANs that they can
|
|
||||||
talk directly to the switch hardware.
|
|
||||||
Alternatively, depending on the external device support,
|
|
||||||
use a tunnel that terminates at the switch hardware itself.
|
|
||||||
|
|
||||||
Diagram
|
|
||||||
-------
|
|
||||||
|
|
||||||
OpenStack hosted SDN controller:
|
|
||||||
|
|
||||||
.. figure:: figures/Specialized_SDN_hosted.png
|
|
||||||
|
|
||||||
OpenStack participating in an SDN controller network:
|
|
||||||
|
|
||||||
.. figure:: figures/Specialized_SDN_external.png
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
|||||||
=================
|
|
||||||
Specialized cases
|
|
||||||
=================
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
specialized-multi-hypervisor.rst
|
|
||||||
specialized-networking.rst
|
|
||||||
specialized-software-defined-networking.rst
|
|
||||||
specialized-desktop-as-a-service.rst
|
|
||||||
specialized-openstack-on-openstack.rst
|
|
||||||
specialized-hardware.rst
|
|
||||||
|
|
||||||
Although most OpenStack architecture designs fall into one
|
|
||||||
of the seven major scenarios outlined in other sections
|
|
||||||
(compute focused, network focused, storage focused, general
|
|
||||||
purpose, multi-site, hybrid cloud, and massively scalable),
|
|
||||||
there are a few use cases that do not fit into these categories.
|
|
||||||
This section discusses these specialized cases and provide some
|
|
||||||
additional details and design considerations for each use case:
|
|
||||||
|
|
||||||
* :doc:`Specialized networking <specialized-networking>`:
|
|
||||||
describes running networking-oriented software that may involve reading
|
|
||||||
packets directly from the wire or participating in routing protocols.
|
|
||||||
* :doc:`Software-defined networking (SDN)
|
|
||||||
<specialized-software-defined-networking>`:
|
|
||||||
describes both running an SDN controller from within OpenStack
|
|
||||||
as well as participating in a software-defined network.
|
|
||||||
* :doc:`Desktop-as-a-Service <specialized-desktop-as-a-service>`:
|
|
||||||
describes running a virtualized desktop environment in a cloud
|
|
||||||
(:term:`Desktop-as-a-Service`).
|
|
||||||
This applies to private and public clouds.
|
|
||||||
* :doc:`OpenStack on OpenStack <specialized-openstack-on-openstack>`:
|
|
||||||
describes building a multi-tiered cloud by running OpenStack
|
|
||||||
on top of an OpenStack installation.
|
|
||||||
* :doc:`Specialized hardware <specialized-hardware>`:
|
|
||||||
describes the use of specialized hardware devices from within
|
|
||||||
the OpenStack environment.
|
|
@ -1,440 +0,0 @@
|
|||||||
Architecture
|
|
||||||
~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Consider the following factors when selecting storage hardware:
|
|
||||||
|
|
||||||
* Cost
|
|
||||||
|
|
||||||
* Performance
|
|
||||||
|
|
||||||
* Reliability
|
|
||||||
|
|
||||||
Storage-focused OpenStack clouds must address I/O intensive workloads.
|
|
||||||
These workloads are not CPU intensive, nor are they consistently network
|
|
||||||
intensive. The network may be heavily utilized to transfer storage, but
|
|
||||||
they are not otherwise network intensive.
|
|
||||||
|
|
||||||
The selection of storage hardware determines the overall performance and
|
|
||||||
scalability of a storage-focused OpenStack design architecture. Several
|
|
||||||
factors impact the design process, including:
|
|
||||||
|
|
||||||
Cost
|
|
||||||
The cost of components affects which storage architecture and
|
|
||||||
hardware you choose.
|
|
||||||
|
|
||||||
Performance
|
|
||||||
The latency of storage I/O requests indicates performance.
|
|
||||||
Performance requirements affect which solution you choose.
|
|
||||||
|
|
||||||
Scalability
|
|
||||||
Scalability refers to how the storage solution performs as it
|
|
||||||
expands to its maximum size. Storage solutions that perform well in
|
|
||||||
small configurations but have degraded performance in large
|
|
||||||
configurations are not scalable. A solution that performs well at
|
|
||||||
maximum expansion is scalable. Large deployments require a storage
|
|
||||||
solution that performs well as it expands.
|
|
||||||
|
|
||||||
Latency is a key consideration in a storage-focused OpenStack cloud.
|
|
||||||
Using solid-state disks (SSDs) to minimize latency and, to reduce CPU
|
|
||||||
delays caused by waiting for the storage, increases performance. Use
|
|
||||||
RAID controller cards in compute hosts to improve the performance of the
|
|
||||||
underlying disk subsystem.
|
|
||||||
|
|
||||||
Depending on the storage architecture, you can adopt a scale-out
|
|
||||||
solution, or use a highly expandable and scalable centralized storage
|
|
||||||
array. If a centralized storage array is the right fit for your
|
|
||||||
requirements, then the array vendor determines the hardware selection.
|
|
||||||
It is possible to build a storage array using commodity hardware with
|
|
||||||
Open Source software, but requires people with expertise to build such a
|
|
||||||
system.
|
|
||||||
|
|
||||||
On the other hand, a scale-out storage solution that uses
|
|
||||||
direct-attached storage (DAS) in the servers may be an appropriate
|
|
||||||
choice. This requires configuration of the server hardware to support
|
|
||||||
the storage solution.
|
|
||||||
|
|
||||||
Considerations affecting storage architecture (and corresponding storage
|
|
||||||
hardware) of a Storage-focused OpenStack cloud include:
|
|
||||||
|
|
||||||
Connectivity
|
|
||||||
Based on the selected storage solution, ensure the connectivity
|
|
||||||
matches the storage solution requirements. We recommended confirming
|
|
||||||
that the network characteristics minimize latency to boost the
|
|
||||||
overall performance of the design.
|
|
||||||
|
|
||||||
Latency
|
|
||||||
Determine if the use case has consistent or highly variable latency.
|
|
||||||
|
|
||||||
Throughput
|
|
||||||
Ensure that the storage solution throughput is optimized for your
|
|
||||||
application requirements.
|
|
||||||
|
|
||||||
Server hardware
|
|
||||||
Use of DAS impacts the server hardware choice and affects host
|
|
||||||
density, instance density, power density, OS-hypervisor, and
|
|
||||||
management tools.
|
|
||||||
|
|
||||||
Compute (server) hardware selection
|
|
||||||
-----------------------------------
|
|
||||||
|
|
||||||
Four opposing factors determine the compute (server) hardware selection:
|
|
||||||
|
|
||||||
Server density
|
|
||||||
A measure of how many servers can fit into a given measure of
|
|
||||||
physical space, such as a rack unit [U].
|
|
||||||
|
|
||||||
Resource capacity
|
|
||||||
The number of CPU cores, how much RAM, or how much storage a given
|
|
||||||
server delivers.
|
|
||||||
|
|
||||||
Expandability
|
|
||||||
The number of additional resources you can add to a server before it
|
|
||||||
reaches capacity.
|
|
||||||
|
|
||||||
Cost
|
|
||||||
The relative cost of the hardware weighed against the level of
|
|
||||||
design effort needed to build the system.
|
|
||||||
|
|
||||||
You must weigh the dimensions against each other to determine the best
|
|
||||||
design for the desired purpose. For example, increasing server density
|
|
||||||
can mean sacrificing resource capacity or expandability. Increasing
|
|
||||||
resource capacity and expandability can increase cost but decrease
|
|
||||||
server density. Decreasing cost often means decreasing supportability,
|
|
||||||
server density, resource capacity, and expandability.
|
|
||||||
|
|
||||||
Compute capacity (CPU cores and RAM capacity) is a secondary
|
|
||||||
consideration for selecting server hardware. As a result, the required
|
|
||||||
server hardware must supply adequate CPU sockets, additional CPU cores,
|
|
||||||
and more RAM; network connectivity and storage capacity are not as
|
|
||||||
critical. The hardware needs to provide enough network connectivity and
|
|
||||||
storage capacity to meet the user requirements, however they are not the
|
|
||||||
primary consideration.
|
|
||||||
|
|
||||||
Some server hardware form factors are better suited to storage-focused
|
|
||||||
designs than others. The following is a list of these form factors:
|
|
||||||
|
|
||||||
* Most blade servers support dual-socket multi-core CPUs. Choose either
|
|
||||||
full width or full height blades to avoid the limit. High density
|
|
||||||
blade servers support up to 16 servers in only 10 rack units using
|
|
||||||
half height or half width blades.
|
|
||||||
|
|
||||||
.. warning::
|
|
||||||
|
|
||||||
This decreases density by 50% (only 8 servers in 10 U) if a full
|
|
||||||
width or full height option is used.
|
|
||||||
|
|
||||||
* 1U rack-mounted servers have the ability to offer greater server
|
|
||||||
density than a blade server solution, but are often limited to
|
|
||||||
dual-socket, multi-core CPU configurations.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
Due to cooling requirements, it is rare to see 1U rack-mounted
|
|
||||||
servers with more than 2 CPU sockets.
|
|
||||||
|
|
||||||
To obtain greater than dual-socket support in a 1U rack-mount form
|
|
||||||
factor, customers need to buy their systems from Original Design
|
|
||||||
Manufacturers (ODMs) or second-tier manufacturers.
|
|
||||||
|
|
||||||
.. warning::
|
|
||||||
|
|
||||||
This may cause issues for organizations that have preferred
|
|
||||||
vendor policies or concerns with support and hardware warranties
|
|
||||||
of non-tier 1 vendors.
|
|
||||||
|
|
||||||
* 2U rack-mounted servers provide quad-socket, multi-core CPU support
|
|
||||||
but with a corresponding decrease in server density (half the density
|
|
||||||
offered by 1U rack-mounted servers).
|
|
||||||
|
|
||||||
* Larger rack-mounted servers, such as 4U servers, often provide even
|
|
||||||
greater CPU capacity. Commonly supporting four or even eight CPU
|
|
||||||
sockets. These servers have greater expandability but such servers
|
|
||||||
have much lower server density and usually greater hardware cost.
|
|
||||||
|
|
||||||
* Rack-mounted servers that support multiple independent servers in a
|
|
||||||
single 2U or 3U enclosure, "sled servers", deliver increased density
|
|
||||||
as compared to a typical 1U-2U rack-mounted servers.
|
|
||||||
|
|
||||||
Other factors that influence server hardware selection for a
|
|
||||||
storage-focused OpenStack design architecture include:
|
|
||||||
|
|
||||||
Instance density
|
|
||||||
In this architecture, instance density and CPU-RAM oversubscription
|
|
||||||
are lower. You require more hosts to support the anticipated scale,
|
|
||||||
especially if the design uses dual-socket hardware designs.
|
|
||||||
|
|
||||||
Host density
|
|
||||||
Another option to address the higher host count is to use a
|
|
||||||
quad-socket platform. Taking this approach decreases host density
|
|
||||||
which also increases rack count. This configuration affects the
|
|
||||||
number of power connections and also impacts network and cooling
|
|
||||||
requirements.
|
|
||||||
|
|
||||||
Power and cooling density
|
|
||||||
The power and cooling density requirements might be lower than with
|
|
||||||
blade, sled, or 1U server designs due to lower host density (by
|
|
||||||
using 2U, 3U or even 4U server designs). For data centers with older
|
|
||||||
infrastructure, this might be a desirable feature.
|
|
||||||
|
|
||||||
Storage-focused OpenStack design architecture server hardware selection
|
|
||||||
should focus on a "scale-up" versus "scale-out" solution. The
|
|
||||||
determination of which is the best solution (a smaller number of larger
|
|
||||||
hosts or a larger number of smaller hosts), depends on a combination of
|
|
||||||
factors including cost, power, cooling, physical rack and floor space,
|
|
||||||
support-warranty, and manageability.
|
|
||||||
|
|
||||||
Networking hardware selection
|
|
||||||
-----------------------------
|
|
||||||
|
|
||||||
Key considerations for the selection of networking hardware include:
|
|
||||||
|
|
||||||
Port count
|
|
||||||
The user requires networking hardware that has the requisite port
|
|
||||||
count.
|
|
||||||
|
|
||||||
Port density
|
|
||||||
The physical space required to provide the requisite port count
|
|
||||||
affects the network design. A switch that provides 48 10 GbE ports
|
|
||||||
in 1U has a much higher port density than a switch that provides 24
|
|
||||||
10 GbE ports in 2U. On a general scale, a higher port density leaves
|
|
||||||
more rack space for compute or storage components which is
|
|
||||||
preferred. It is also important to consider fault domains and power
|
|
||||||
density. Finally, higher density switches are more expensive,
|
|
||||||
therefore it is important not to over design the network.
|
|
||||||
|
|
||||||
Port speed
|
|
||||||
The networking hardware must support the proposed network speed, for
|
|
||||||
example: 1 GbE, 10 GbE, or 40 GbE (or even 100 GbE).
|
|
||||||
|
|
||||||
Redundancy
|
|
||||||
User requirements for high availability and cost considerations
|
|
||||||
influence the required level of network hardware redundancy. Achieve
|
|
||||||
network redundancy by adding redundant power supplies or paired
|
|
||||||
switches.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
If this is a requirement, the hardware must support this
|
|
||||||
configuration. User requirements determine if a completely
|
|
||||||
redundant network infrastructure is required.
|
|
||||||
|
|
||||||
Power requirements
|
|
||||||
Ensure that the physical data center provides the necessary power
|
|
||||||
for the selected network hardware. This is not an issue for top of
|
|
||||||
rack (ToR) switches, but may be an issue for spine switches in a
|
|
||||||
leaf and spine fabric, or end of row (EoR) switches.
|
|
||||||
|
|
||||||
Protocol support
|
|
||||||
It is possible to gain more performance out of a single storage
|
|
||||||
system by using specialized network technologies such as RDMA, SRP,
|
|
||||||
iSER and SCST. The specifics for using these technologies is beyond
|
|
||||||
the scope of this book.
|
|
||||||
|
|
||||||
Software selection
|
|
||||||
------------------
|
|
||||||
|
|
||||||
Factors that influence the software selection for a storage-focused
|
|
||||||
OpenStack architecture design include:
|
|
||||||
|
|
||||||
* Operating system (OS) and hypervisor
|
|
||||||
|
|
||||||
* OpenStack components
|
|
||||||
|
|
||||||
* Supplemental software
|
|
||||||
|
|
||||||
Design decisions made in each of these areas impacts the rest of the
|
|
||||||
OpenStack architecture design.
|
|
||||||
|
|
||||||
Operating system and hypervisor
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
Operating system (OS) and hypervisor have a significant impact on the
|
|
||||||
overall design and also affect server hardware selection. Ensure the
|
|
||||||
selected operating system and hypervisor combination support the storage
|
|
||||||
hardware and work with the networking hardware selection and topology.
|
|
||||||
|
|
||||||
Operating system and hypervisor selection affect the following areas:
|
|
||||||
|
|
||||||
Cost
|
|
||||||
Selecting a commercially supported hypervisor, such as Microsoft
|
|
||||||
Hyper-V, results in a different cost model than a
|
|
||||||
community-supported open source hypervisor like Kinstance or Xen.
|
|
||||||
Similarly, choosing Ubuntu over Red Hat (or vice versa) impacts cost
|
|
||||||
due to support contracts. However, business or application
|
|
||||||
requirements might dictate a specific or commercially supported
|
|
||||||
hypervisor.
|
|
||||||
|
|
||||||
Supportability
|
|
||||||
Staff must have training with the chosen hypervisor. Consider the
|
|
||||||
cost of training when choosing a solution. The support of a
|
|
||||||
commercial product such as Red Hat, SUSE, or Windows, is the
|
|
||||||
responsibility of the OS vendor. If an open source platform is
|
|
||||||
chosen, the support comes from in-house resources.
|
|
||||||
|
|
||||||
Management tools
|
|
||||||
Ubuntu and Kinstance use different management tools than VMware
|
|
||||||
vSphere. Although both OS and hypervisor combinations are supported
|
|
||||||
by OpenStack, there are varying impacts to the rest of the design as
|
|
||||||
a result of the selection of one combination versus the other.
|
|
||||||
|
|
||||||
Scale and performance
|
|
||||||
Ensure the selected OS and hypervisor combination meet the
|
|
||||||
appropriate scale and performance requirements needed for this
|
|
||||||
storage focused OpenStack cloud. The chosen architecture must meet
|
|
||||||
the targeted instance-host ratios with the selected OS-hypervisor
|
|
||||||
combination.
|
|
||||||
|
|
||||||
Security
|
|
||||||
Ensure the design can accommodate the regular periodic installation
|
|
||||||
of application security patches while maintaining the required
|
|
||||||
workloads. The frequency of security patches for the proposed
|
|
||||||
OS-hypervisor combination impacts performance and the patch
|
|
||||||
installation process could affect maintenance windows.
|
|
||||||
|
|
||||||
Supported features
|
|
||||||
Selecting the OS-hypervisor combination often determines the
|
|
||||||
required features of OpenStack. Certain features are only available
|
|
||||||
with specific OSes or hypervisors. For example, if certain features
|
|
||||||
are not available, you might need to modify the design to meet user
|
|
||||||
requirements.
|
|
||||||
|
|
||||||
Interoperability
|
|
||||||
The OS-hypervisor combination should be chosen based on the
|
|
||||||
interoperability with one another, and other OS-hyervisor
|
|
||||||
combinations. Operational and troubleshooting tools for one
|
|
||||||
OS-hypervisor combination may differ from the tools used for another
|
|
||||||
OS-hypervisor combination. As a result, the design must address if
|
|
||||||
the two sets of tools need to interoperate.
|
|
||||||
|
|
||||||
OpenStack components
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
The OpenStack components you choose can have a significant impact on the
|
|
||||||
overall design. While there are certain components that are always
|
|
||||||
present (Compute and Image service, for example), there are other
|
|
||||||
services that may not be required. As an example, a certain design may
|
|
||||||
not require the Orchestration service. Omitting Orchestration would not
|
|
||||||
typically have a significant impact on the overall design, however, if
|
|
||||||
the architecture uses a replacement for OpenStack Object Storage for its
|
|
||||||
storage component, this could potentially have significant impacts on
|
|
||||||
the rest of the design.
|
|
||||||
|
|
||||||
A storage-focused design might require the ability to use Orchestration
|
|
||||||
to launch instances with Block Storage volumes to perform
|
|
||||||
storage-intensive processing.
|
|
||||||
|
|
||||||
A storage-focused OpenStack design architecture uses the following
|
|
||||||
components:
|
|
||||||
|
|
||||||
* OpenStack Identity (keystone)
|
|
||||||
|
|
||||||
* OpenStack dashboard (horizon)
|
|
||||||
|
|
||||||
* OpenStack Compute (nova) (including the use of multiple hypervisor
|
|
||||||
drivers)
|
|
||||||
|
|
||||||
* OpenStack Object Storage (swift) (or another object storage solution)
|
|
||||||
|
|
||||||
* OpenStack Block Storage (cinder)
|
|
||||||
|
|
||||||
* OpenStack Image service (glance)
|
|
||||||
|
|
||||||
* OpenStack Networking (neutron) or legacy networking (nova-network)
|
|
||||||
|
|
||||||
Excluding certain OpenStack components may limit or constrain the
|
|
||||||
functionality of other components. If a design opts to include
|
|
||||||
Orchestration but exclude Telemetry, then the design cannot take
|
|
||||||
advantage of Orchestration's auto scaling functionality (which relies on
|
|
||||||
information from Telemetry). Due to the fact that you can use
|
|
||||||
Orchestration to spin up a large number of instances to perform the
|
|
||||||
compute-intensive processing, we strongly recommend including
|
|
||||||
Orchestration in a compute-focused architecture design.
|
|
||||||
|
|
||||||
Networking software
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
OpenStack Networking (neutron) provides a wide variety of networking
|
|
||||||
services for instances. There are many additional networking software
|
|
||||||
packages that may be useful to manage the OpenStack components
|
|
||||||
themselves. Some examples include HAProxy, Keepalived, and various
|
|
||||||
routing daemons (like Quagga). The OpenStack High Availability Guide
|
|
||||||
describes some of these software packages, HAProxy in particular. See
|
|
||||||
the `Network controller cluster stack
|
|
||||||
chapter <https://docs.openstack.org/ha-guide/networking-ha.html>`_ of
|
|
||||||
the OpenStack High Availability Guide.
|
|
||||||
|
|
||||||
Management software
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
Management software includes software for providing:
|
|
||||||
|
|
||||||
* Clustering
|
|
||||||
|
|
||||||
* Logging
|
|
||||||
|
|
||||||
* Monitoring
|
|
||||||
|
|
||||||
* Alerting
|
|
||||||
|
|
||||||
.. important::
|
|
||||||
|
|
||||||
The factors for determining which software packages in this category
|
|
||||||
to select is outside the scope of this design guide.
|
|
||||||
|
|
||||||
The availability design requirements determine the selection of
|
|
||||||
Clustering Software, such as Corosync or Pacemaker. The availability of
|
|
||||||
the cloud infrastructure and the complexity of supporting the
|
|
||||||
configuration after deployment determines the impact of including these
|
|
||||||
software packages. The OpenStack High Availability Guide provides more
|
|
||||||
details on the installation and configuration of Corosync and Pacemaker.
|
|
||||||
|
|
||||||
Operational considerations determine the requirements for logging,
|
|
||||||
monitoring, and alerting. Each of these sub-categories includes options.
|
|
||||||
For example, in the logging sub-category you could select Logstash,
|
|
||||||
Splunk, Log Insight, or another log aggregation-consolidation tool.
|
|
||||||
Store logs in a centralized location to facilitate performing analytics
|
|
||||||
against the data. Log data analytics engines can also provide automation
|
|
||||||
and issue notification, by providing a mechanism to both alert and
|
|
||||||
automatically attempt to remediate some of the more commonly known
|
|
||||||
issues.
|
|
||||||
|
|
||||||
If you require any of these software packages, the design must account
|
|
||||||
for the additional resource consumption. Some other potential design
|
|
||||||
impacts include:
|
|
||||||
|
|
||||||
* OS-Hypervisor combination: Ensure that the selected logging,
|
|
||||||
monitoring, or alerting tools support the proposed OS-hypervisor
|
|
||||||
combination.
|
|
||||||
|
|
||||||
* Network hardware: The network hardware selection needs to be
|
|
||||||
supported by the logging, monitoring, and alerting software.
|
|
||||||
|
|
||||||
Database software
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
Most OpenStack components require access to back-end database services
|
|
||||||
to store state and configuration information. Choose an appropriate
|
|
||||||
back-end database which satisfies the availability and fault tolerance
|
|
||||||
requirements of the OpenStack services.
|
|
||||||
|
|
||||||
MySQL is the default database for OpenStack, but other compatible
|
|
||||||
databases are available.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
Telemetry uses MongoDB.
|
|
||||||
|
|
||||||
The chosen high availability database solution changes according to the
|
|
||||||
selected database. MySQL, for example, provides several options. Use a
|
|
||||||
replication technology such as Galera for active-active clustering. For
|
|
||||||
active-passive use some form of shared storage. Each of these potential
|
|
||||||
solutions has an impact on the design:
|
|
||||||
|
|
||||||
* Solutions that employ Galera/MariaDB require at least three MySQL
|
|
||||||
nodes.
|
|
||||||
|
|
||||||
* MongoDB has its own design considerations for high availability.
|
|
||||||
|
|
||||||
* OpenStack design, generally, does not include shared storage.
|
|
||||||
However, for some high availability designs, certain components might
|
|
||||||
require it depending on the specific implementation.
|
|
@ -1,252 +0,0 @@
|
|||||||
Operational Considerations
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Several operational factors affect the design choices for a general
|
|
||||||
purpose cloud. Operations staff receive tasks regarding the maintenance
|
|
||||||
of cloud environments for larger installations, including:
|
|
||||||
|
|
||||||
Maintenance tasks
|
|
||||||
The storage solution should take into account storage maintenance
|
|
||||||
and the impact on underlying workloads.
|
|
||||||
|
|
||||||
Reliability and availability
|
|
||||||
Reliability and availability depend on wide area network
|
|
||||||
availability and on the level of precautions taken by the service
|
|
||||||
provider.
|
|
||||||
|
|
||||||
Flexibility
|
|
||||||
Organizations need to have the flexibility to choose between
|
|
||||||
off-premise and on-premise cloud storage options. This relies on
|
|
||||||
relevant decision criteria with potential cost savings. For example,
|
|
||||||
continuity of operations, disaster recovery, security, records
|
|
||||||
retention laws, regulations, and policies.
|
|
||||||
|
|
||||||
Monitoring and alerting services are vital in cloud environments with
|
|
||||||
high demands on storage resources. These services provide a real-time
|
|
||||||
view into the health and performance of the storage systems. An
|
|
||||||
integrated management console, or other dashboards capable of
|
|
||||||
visualizing SNMP data, is helpful when discovering and resolving issues
|
|
||||||
that arise within the storage cluster.
|
|
||||||
|
|
||||||
A storage-focused cloud design should include:
|
|
||||||
|
|
||||||
* Monitoring of physical hardware resources.
|
|
||||||
|
|
||||||
* Monitoring of environmental resources such as temperature and
|
|
||||||
humidity.
|
|
||||||
|
|
||||||
* Monitoring of storage resources such as available storage, memory,
|
|
||||||
and CPU.
|
|
||||||
|
|
||||||
* Monitoring of advanced storage performance data to ensure that
|
|
||||||
storage systems are performing as expected.
|
|
||||||
|
|
||||||
* Monitoring of network resources for service disruptions which would
|
|
||||||
affect access to storage.
|
|
||||||
|
|
||||||
* Centralized log collection.
|
|
||||||
|
|
||||||
* Log analytics capabilities.
|
|
||||||
|
|
||||||
* Ticketing system (or integration with a ticketing system) to track
|
|
||||||
issues.
|
|
||||||
|
|
||||||
* Alerting and notification of responsible teams or automated systems
|
|
||||||
which remediate problems with storage as they arise.
|
|
||||||
|
|
||||||
* Network Operations Center (NOC) staffed and always available to
|
|
||||||
resolve issues.
|
|
||||||
|
|
||||||
Application awareness
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
Well-designed applications should be aware of underlying storage
|
|
||||||
subsystems in order to use cloud storage solutions effectively.
|
|
||||||
|
|
||||||
If natively available replication is not available, operations personnel
|
|
||||||
must be able to modify the application so that they can provide their
|
|
||||||
own replication service. In the event that replication is unavailable,
|
|
||||||
operations personnel can design applications to react such that they can
|
|
||||||
provide their own replication services. An application designed to
|
|
||||||
detect underlying storage systems can function in a wide variety of
|
|
||||||
infrastructures, and still have the same basic behavior regardless of
|
|
||||||
the differences in the underlying infrastructure.
|
|
||||||
|
|
||||||
Fault tolerance and availability
|
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
Designing for fault tolerance and availability of storage systems in an
|
|
||||||
OpenStack cloud is vastly different when comparing the Block Storage and
|
|
||||||
Object Storage services.
|
|
||||||
|
|
||||||
Block Storage fault tolerance and availability
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Configure Block Storage resource nodes with advanced RAID controllers
|
|
||||||
and high performance disks to provide fault tolerance at the hardware
|
|
||||||
level.
|
|
||||||
|
|
||||||
Deploy high performing storage solutions such as SSD disk drives or
|
|
||||||
flash storage systems for applications requiring extreme performance out
|
|
||||||
of Block Storage devices.
|
|
||||||
|
|
||||||
In environments that place extreme demands on Block Storage, we
|
|
||||||
recommend using multiple storage pools. In this case, each pool of
|
|
||||||
devices should have a similar hardware design and disk configuration
|
|
||||||
across all hardware nodes in that pool. This allows for a design that
|
|
||||||
provides applications with access to a wide variety of Block Storage
|
|
||||||
pools, each with their own redundancy, availability, and performance
|
|
||||||
characteristics. When deploying multiple pools of storage it is also
|
|
||||||
important to consider the impact on the Block Storage scheduler which is
|
|
||||||
responsible for provisioning storage across resource nodes. Ensuring
|
|
||||||
that applications can schedule volumes in multiple regions, each with
|
|
||||||
their own network, power, and cooling infrastructure, can give projects
|
|
||||||
the ability to build fault tolerant applications that are distributed
|
|
||||||
across multiple availability zones.
|
|
||||||
|
|
||||||
In addition to the Block Storage resource nodes, it is important to
|
|
||||||
design for high availability and redundancy of the APIs, and related
|
|
||||||
services that are responsible for provisioning and providing access to
|
|
||||||
storage. We recommend designing a layer of hardware or software load
|
|
||||||
balancers in order to achieve high availability of the appropriate REST
|
|
||||||
API services to provide uninterrupted service. In some cases, it may
|
|
||||||
also be necessary to deploy an additional layer of load balancing to
|
|
||||||
provide access to back-end database services responsible for servicing
|
|
||||||
and storing the state of Block Storage volumes. We also recommend
|
|
||||||
designing a highly available database solution to store the Block
|
|
||||||
Storage databases. Leverage highly available database solutions such as
|
|
||||||
Galera and MariaDB to help keep database services online for
|
|
||||||
uninterrupted access, so that projects can manage Block Storage volumes.
|
|
||||||
|
|
||||||
In a cloud with extreme demands on Block Storage, the network
|
|
||||||
architecture should take into account the amount of East-West bandwidth
|
|
||||||
required for instances to make use of the available storage resources.
|
|
||||||
The selected network devices should support jumbo frames for
|
|
||||||
transferring large blocks of data. In some cases, it may be necessary to
|
|
||||||
create an additional back-end storage network dedicated to providing
|
|
||||||
connectivity between instances and Block Storage resources so that there
|
|
||||||
is no contention of network resources.
|
|
||||||
|
|
||||||
Object Storage fault tolerance and availability
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
While consistency and partition tolerance are both inherent features of
|
|
||||||
the Object Storage service, it is important to design the overall
|
|
||||||
storage architecture to ensure that the implemented system meets those
|
|
||||||
goals. The OpenStack Object Storage service places a specific number of
|
|
||||||
data replicas as objects on resource nodes. These replicas are
|
|
||||||
distributed throughout the cluster based on a consistent hash ring which
|
|
||||||
exists on all nodes in the cluster.
|
|
||||||
|
|
||||||
Design the Object Storage system with a sufficient number of zones to
|
|
||||||
provide quorum for the number of replicas defined. For example, with
|
|
||||||
three replicas configured in the Swift cluster, the recommended number
|
|
||||||
of zones to configure within the Object Storage cluster in order to
|
|
||||||
achieve quorum is five. While it is possible to deploy a solution with
|
|
||||||
fewer zones, the implied risk of doing so is that some data may not be
|
|
||||||
available and API requests to certain objects stored in the cluster
|
|
||||||
might fail. For this reason, ensure you properly account for the number
|
|
||||||
of zones in the Object Storage cluster.
|
|
||||||
|
|
||||||
Each Object Storage zone should be self-contained within its own
|
|
||||||
availability zone. Each availability zone should have independent access
|
|
||||||
to network, power and cooling infrastructure to ensure uninterrupted
|
|
||||||
access to data. In addition, a pool of Object Storage proxy servers
|
|
||||||
providing access to data stored on the object nodes should service each
|
|
||||||
availability zone. Object proxies in each region should leverage local
|
|
||||||
read and write affinity so that local storage resources facilitate
|
|
||||||
access to objects wherever possible. We recommend deploying upstream
|
|
||||||
load balancing to ensure that proxy services are distributed across the
|
|
||||||
multiple zones and, in some cases, it may be necessary to make use of
|
|
||||||
third-party solutions to aid with geographical distribution of services.
|
|
||||||
|
|
||||||
A zone within an Object Storage cluster is a logical division. Any of
|
|
||||||
the following may represent a zone:
|
|
||||||
|
|
||||||
* A disk within a single node
|
|
||||||
|
|
||||||
* One zone per node
|
|
||||||
|
|
||||||
* Zone per collection of nodes
|
|
||||||
|
|
||||||
* Multiple racks
|
|
||||||
|
|
||||||
* Multiple DCs
|
|
||||||
|
|
||||||
Selecting the proper zone design is crucial for allowing the Object
|
|
||||||
Storage cluster to scale while providing an available and redundant
|
|
||||||
storage system. It may be necessary to configure storage policies that
|
|
||||||
have different requirements with regards to replicas, retention and
|
|
||||||
other factors that could heavily affect the design of storage in a
|
|
||||||
specific zone.
|
|
||||||
|
|
||||||
Scaling storage services
|
|
||||||
------------------------
|
|
||||||
|
|
||||||
Adding storage capacity and bandwidth is a very different process when
|
|
||||||
comparing the Block and Object Storage services. While adding Block
|
|
||||||
Storage capacity is a relatively simple process, adding capacity and
|
|
||||||
bandwidth to the Object Storage systems is a complex task that requires
|
|
||||||
careful planning and consideration during the design phase.
|
|
||||||
|
|
||||||
Scaling Block Storage
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
You can upgrade Block Storage pools to add storage capacity without
|
|
||||||
interrupting the overall Block Storage service. Add nodes to the pool by
|
|
||||||
installing and configuring the appropriate hardware and software and
|
|
||||||
then allowing that node to report in to the proper storage pool via the
|
|
||||||
message bus. This is because Block Storage nodes report into the
|
|
||||||
scheduler service advertising their availability. After the node is
|
|
||||||
online and available, projects can make use of those storage resources
|
|
||||||
instantly.
|
|
||||||
|
|
||||||
In some cases, the demand on Block Storage from instances may exhaust
|
|
||||||
the available network bandwidth. As a result, design network
|
|
||||||
infrastructure that services Block Storage resources in such a way that
|
|
||||||
you can add capacity and bandwidth easily. This often involves the use
|
|
||||||
of dynamic routing protocols or advanced networking solutions to add
|
|
||||||
capacity to downstream devices easily. Both the front-end and back-end
|
|
||||||
storage network designs should encompass the ability to quickly and
|
|
||||||
easily add capacity and bandwidth.
|
|
||||||
|
|
||||||
Scaling Object Storage
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Adding back-end storage capacity to an Object Storage cluster requires
|
|
||||||
careful planning and consideration. In the design phase, it is important
|
|
||||||
to determine the maximum partition power required by the Object Storage
|
|
||||||
service, which determines the maximum number of partitions which can
|
|
||||||
exist. Object Storage distributes data among all available storage, but
|
|
||||||
a partition cannot span more than one disk, although a disk can have
|
|
||||||
multiple partitions.
|
|
||||||
|
|
||||||
For example, a system that starts with a single disk and a partition
|
|
||||||
power of 3 can have 8 (2^3) partitions. Adding a second disk means that
|
|
||||||
each has 4 partitions. The one-disk-per-partition limit means that this
|
|
||||||
system can never have more than 8 partitions, limiting its scalability.
|
|
||||||
However, a system that starts with a single disk and a partition power
|
|
||||||
of 10 can have up to 1024 (2^10) partitions.
|
|
||||||
|
|
||||||
As you add back-end storage capacity to the system, the partition maps
|
|
||||||
redistribute data amongst the storage nodes. In some cases, this
|
|
||||||
replication consists of extremely large data sets. In these cases, we
|
|
||||||
recommend using back-end replication links that do not contend with
|
|
||||||
projects' access to data.
|
|
||||||
|
|
||||||
As more projects begin to access data within the cluster and their data
|
|
||||||
sets grow, it is necessary to add front-end bandwidth to service data
|
|
||||||
access requests. Adding front-end bandwidth to an Object Storage cluster
|
|
||||||
requires careful planning and design of the Object Storage proxies that
|
|
||||||
projects use to gain access to the data, along with the high availability
|
|
||||||
solutions that enable easy scaling of the proxy layer. We recommend
|
|
||||||
designing a front-end load balancing layer that projects and consumers
|
|
||||||
use to gain access to data stored within the cluster. This load
|
|
||||||
balancing layer may be distributed across zones, regions or even across
|
|
||||||
geographic boundaries, which may also require that the design encompass
|
|
||||||
geo-location solutions.
|
|
||||||
|
|
||||||
In some cases, you must add bandwidth and capacity to the network
|
|
||||||
resources servicing requests between proxy servers and storage nodes.
|
|
||||||
For this reason, the network architecture used for access to storage
|
|
||||||
nodes and proxy servers should make use of a design which is scalable.
|
|
@ -1,142 +0,0 @@
|
|||||||
Prescriptive Examples
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Storage-focused architecture depends on specific use cases. This section
|
|
||||||
discusses three example use cases:
|
|
||||||
|
|
||||||
* An object store with a RESTful interface
|
|
||||||
|
|
||||||
* Compute analytics with parallel file systems
|
|
||||||
|
|
||||||
* High performance database
|
|
||||||
|
|
||||||
The example below shows a REST interface without a high performance
|
|
||||||
requirement.
|
|
||||||
|
|
||||||
Swift is a highly scalable object store that is part of the OpenStack
|
|
||||||
project. This diagram explains the example architecture:
|
|
||||||
|
|
||||||
.. figure:: figures/Storage_Object.png
|
|
||||||
|
|
||||||
The example REST interface, presented as a traditional Object store
|
|
||||||
running on traditional spindles, does not require a high performance
|
|
||||||
caching tier.
|
|
||||||
|
|
||||||
This example uses the following components:
|
|
||||||
|
|
||||||
Network:
|
|
||||||
|
|
||||||
* 10 GbE horizontally scalable spine leaf back-end storage and front
|
|
||||||
end network.
|
|
||||||
|
|
||||||
Storage hardware:
|
|
||||||
|
|
||||||
* 10 storage servers each with 12x4 TB disks equaling 480 TB total
|
|
||||||
space with approximately 160 TB of usable space after replicas.
|
|
||||||
|
|
||||||
Proxy:
|
|
||||||
|
|
||||||
* 3x proxies
|
|
||||||
|
|
||||||
* 2x10 GbE bonded front end
|
|
||||||
|
|
||||||
* 2x10 GbE back-end bonds
|
|
||||||
|
|
||||||
* Approximately 60 Gb of total bandwidth to the back-end storage
|
|
||||||
cluster
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
It may be necessary to implement a 3rd-party caching layer for some
|
|
||||||
applications to achieve suitable performance.
|
|
||||||
|
|
||||||
Compute analytics with Data processing service
|
|
||||||
----------------------------------------------
|
|
||||||
|
|
||||||
Analytics of large data sets are dependent on the performance of the
|
|
||||||
storage system. Clouds using storage systems such as Hadoop Distributed
|
|
||||||
File System (HDFS) have inefficiencies which can cause performance
|
|
||||||
issues.
|
|
||||||
|
|
||||||
One potential solution to this problem is the implementation of storage
|
|
||||||
systems designed for performance. Parallel file systems have previously
|
|
||||||
filled this need in the HPC space and are suitable for large scale
|
|
||||||
performance-orientated systems.
|
|
||||||
|
|
||||||
OpenStack has integration with Hadoop to manage the Hadoop cluster
|
|
||||||
within the cloud. The following diagram shows an OpenStack store with a
|
|
||||||
high performance requirement:
|
|
||||||
|
|
||||||
.. figure:: figures/Storage_Hadoop3.png
|
|
||||||
|
|
||||||
The hardware requirements and configuration are similar to those of the
|
|
||||||
High Performance Database example below. In this case, the architecture
|
|
||||||
uses Ceph's Swift-compatible REST interface, features that allow for
|
|
||||||
connecting a caching pool to allow for acceleration of the presented
|
|
||||||
pool.
|
|
||||||
|
|
||||||
High performance database with Database service
|
|
||||||
-----------------------------------------------
|
|
||||||
|
|
||||||
Databases are a common workload that benefit from high performance
|
|
||||||
storage back ends. Although enterprise storage is not a requirement,
|
|
||||||
many environments have existing storage that OpenStack cloud can use as
|
|
||||||
back ends. You can create a storage pool to provide block devices with
|
|
||||||
OpenStack Block Storage for instances as well as object interfaces. In
|
|
||||||
this example, the database I-O requirements are high and demand storage
|
|
||||||
presented from a fast SSD pool.
|
|
||||||
|
|
||||||
A storage system presents a LUN backed by a set of SSDs using a
|
|
||||||
traditional storage array with OpenStack Block Storage integration or a
|
|
||||||
storage platform such as Ceph or Gluster.
|
|
||||||
|
|
||||||
This system can provide additional performance. For example, in the
|
|
||||||
database example below, a portion of the SSD pool can act as a block
|
|
||||||
device to the Database server. In the high performance analytics
|
|
||||||
example, the inline SSD cache layer accelerates the REST interface.
|
|
||||||
|
|
||||||
.. figure:: figures/Storage_Database_+_Object5.png
|
|
||||||
|
|
||||||
In this example, Ceph presents a Swift-compatible REST interface, as
|
|
||||||
well as a block level storage from a distributed storage cluster. It is
|
|
||||||
highly flexible and has features that enable reduced cost of operations
|
|
||||||
such as self healing and auto balancing. Using erasure coded pools are a
|
|
||||||
suitable way of maximizing the amount of usable space.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
There are special considerations around erasure coded pools. For
|
|
||||||
example, higher computational requirements and limitations on the
|
|
||||||
operations allowed on an object; erasure coded pools do not support
|
|
||||||
partial writes.
|
|
||||||
|
|
||||||
Using Ceph as an applicable example, a potential architecture would have
|
|
||||||
the following requirements:
|
|
||||||
|
|
||||||
Network:
|
|
||||||
|
|
||||||
* 10 GbE horizontally scalable spine leaf back-end storage and
|
|
||||||
front-end network
|
|
||||||
|
|
||||||
Storage hardware:
|
|
||||||
|
|
||||||
* 5 storage servers for caching layer 24x1 TB SSD
|
|
||||||
|
|
||||||
* 10 storage servers each with 12x4 TB disks which equals 480 TB total
|
|
||||||
space with about approximately 160 TB of usable space after 3
|
|
||||||
replicas
|
|
||||||
|
|
||||||
REST proxy:
|
|
||||||
|
|
||||||
* 3x proxies
|
|
||||||
|
|
||||||
* 2x10 GbE bonded front end
|
|
||||||
|
|
||||||
* 2x10 GbE back-end bonds
|
|
||||||
|
|
||||||
* Approximately 60 Gb of total bandwidth to the back-end storage
|
|
||||||
cluster
|
|
||||||
|
|
||||||
Using an SSD cache layer, you can present block devices directly to
|
|
||||||
hypervisors or instances. The REST interface can also use the SSD cache
|
|
||||||
systems as an inline cache.
|
|
@ -1,62 +0,0 @@
|
|||||||
Technical considerations
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Some of the key technical considerations that are critical to a
|
|
||||||
storage-focused OpenStack design architecture include:
|
|
||||||
|
|
||||||
Input-Output requirements
|
|
||||||
Input-Output performance requirements require researching and
|
|
||||||
modeling before deciding on a final storage framework. Running
|
|
||||||
benchmarks for Input-Output performance provides a baseline for
|
|
||||||
expected performance levels. If these tests include details, then
|
|
||||||
the resulting data can help model behavior and results during
|
|
||||||
different workloads. Running scripted smaller benchmarks during the
|
|
||||||
lifecycle of the architecture helps record the system health at
|
|
||||||
different points in time. The data from these scripted benchmarks
|
|
||||||
assist in future scoping and gaining a deeper understanding of an
|
|
||||||
organization's needs.
|
|
||||||
|
|
||||||
Scale
|
|
||||||
Scaling storage solutions in a storage-focused OpenStack
|
|
||||||
architecture design is driven by initial requirements, including
|
|
||||||
:term:`IOPS <Input/output Operations Per Second (IOPS)>`, capacity,
|
|
||||||
bandwidth, and future needs. Planning capacity based on projected
|
|
||||||
needs over the course of a budget cycle is important for a design.
|
|
||||||
The architecture should balance cost and capacity, while also allowing
|
|
||||||
flexibility to implement new technologies and methods as they become
|
|
||||||
available.
|
|
||||||
|
|
||||||
Security
|
|
||||||
Designing security around data has multiple points of focus that
|
|
||||||
vary depending on SLAs, legal requirements, industry regulations,
|
|
||||||
and certifications needed for systems or people. Consider compliance
|
|
||||||
with HIPPA, ISO9000, and SOX based on the type of data. For certain
|
|
||||||
organizations, multiple levels of access control are important.
|
|
||||||
|
|
||||||
OpenStack compatibility
|
|
||||||
Interoperability and integration with OpenStack can be paramount in
|
|
||||||
deciding on a storage hardware and storage management platform.
|
|
||||||
Interoperability and integration includes factors such as OpenStack
|
|
||||||
Block Storage interoperability, OpenStack Object Storage
|
|
||||||
compatibility, and hypervisor compatibility (which affects the
|
|
||||||
ability to use storage for ephemeral instance storage).
|
|
||||||
|
|
||||||
Storage management
|
|
||||||
You must address a range of storage management-related
|
|
||||||
considerations in the design of a storage-focused OpenStack cloud.
|
|
||||||
These considerations include, but are not limited to, backup
|
|
||||||
strategy (and restore strategy, since a backup that cannot be
|
|
||||||
restored is useless), data valuation-hierarchical storage
|
|
||||||
management, retention strategy, data placement, and workflow
|
|
||||||
automation.
|
|
||||||
|
|
||||||
Data grids
|
|
||||||
Data grids are helpful when answering questions around data
|
|
||||||
valuation. Data grids improve decision making through correlation of
|
|
||||||
access patterns, ownership, and business-unit revenue with other
|
|
||||||
metadata values to deliver actionable information about data.
|
|
||||||
|
|
||||||
When building a storage-focused OpenStack architecture, strive to build
|
|
||||||
a flexible design based on an industry standard core. One way of
|
|
||||||
accomplishing this might be through the use of different back ends
|
|
||||||
serving different use cases.
|
|
@ -1,61 +0,0 @@
|
|||||||
===============
|
|
||||||
Storage focused
|
|
||||||
===============
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
storage-focus-technical-considerations.rst
|
|
||||||
storage-focus-operational-considerations.rst
|
|
||||||
storage-focus-architecture.rst
|
|
||||||
storage-focus-prescriptive-examples.rst
|
|
||||||
|
|
||||||
Cloud storage is a model of data storage that stores digital data in
|
|
||||||
logical pools and physical storage that spans across multiple servers
|
|
||||||
and locations. Cloud storage commonly refers to a hosted object storage
|
|
||||||
service, however the term also includes other types of data storage that
|
|
||||||
are available as a service, for example block storage.
|
|
||||||
|
|
||||||
Cloud storage runs on virtualized infrastructure and resembles broader
|
|
||||||
cloud computing in terms of accessible interfaces, elasticity,
|
|
||||||
scalability, multi-tenancy, and metered resources. You can use cloud
|
|
||||||
storage services from an off-premises service or deploy on-premises.
|
|
||||||
|
|
||||||
Cloud storage consists of many distributed, synonymous resources, which
|
|
||||||
are often referred to as integrated storage clouds. Cloud storage is
|
|
||||||
highly fault tolerant through redundancy and the distribution of data.
|
|
||||||
It is highly durable through the creation of versioned copies, and can
|
|
||||||
be consistent with regard to data replicas.
|
|
||||||
|
|
||||||
At large scale, management of data operations is a resource intensive
|
|
||||||
process for an organization. Hierarchical storage management (HSM)
|
|
||||||
systems and data grids help annotate and report a baseline data
|
|
||||||
valuation to make intelligent decisions and automate data decisions. HSM
|
|
||||||
enables automated tiering and movement, as well as orchestration of data
|
|
||||||
operations. A data grid is an architecture, or set of services evolving
|
|
||||||
technology, that brings together sets of services enabling users to
|
|
||||||
manage large data sets.
|
|
||||||
|
|
||||||
Example applications deployed with cloud storage characteristics:
|
|
||||||
|
|
||||||
* Active archive, backups and hierarchical storage management.
|
|
||||||
|
|
||||||
* General content storage and synchronization. An example of this is
|
|
||||||
private dropbox.
|
|
||||||
|
|
||||||
* Data analytics with parallel file systems.
|
|
||||||
|
|
||||||
* Unstructured data store for services. For example, social media
|
|
||||||
back-end storage.
|
|
||||||
|
|
||||||
* Persistent block storage.
|
|
||||||
|
|
||||||
* Operating system and application image store.
|
|
||||||
|
|
||||||
* Media streaming.
|
|
||||||
|
|
||||||
* Databases.
|
|
||||||
|
|
||||||
* Content distribution.
|
|
||||||
|
|
||||||
* Cloud storage peering.
|
|