Removes basic-install-guides from training guides

As per the discussion in the Kilo summit, the POC part was done for
basic install guides and there is no need to maintain or keep the
XML files in the repository. This is a clean up patch which is
mandatory for Icehouse release for training guides.

Change-Id: I7e5f2bbce86e0bdd292f0cb8b395995f9171e5eb
This commit is contained in:
Pranav Salunke 2014-11-30 18:29:42 +01:00
parent 557ca657b3
commit fbd2730a69
197 changed files with 0 additions and 61638 deletions

View File

@ -1,93 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<appendix xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="reserved_user_ids">
<title>Reserved user IDs</title>
<para>
OpenStack reserves certain user IDs to run specific services and
own specific files. These user IDs are set up according to the
distribution packages. The following table gives an overview.
</para>
<note os="debian;opensuse;sles;ubuntu">
<para>Some OpenStack packages generate and assign user IDs
automatically during package installation. In these cases, the
user ID value is not important. The existence of the user ID is
what matters.
</para>
</note>
<table rules="all">
<caption>Reserved user IDs</caption>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
<th>ID</th>
</tr>
</thead>
<tbody>
<!-- sorted by first column -->
<tr>
<td>ceilometer</td>
<td>OpenStack Ceilometer Daemons</td>
<td os="rhel;centos;fedora">166</td>
<td os="debian;opensuse;sles;ubuntu">Assigned during package installation</td>
</tr>
<tr>
<td>cinder</td>
<td>OpenStack Cinder Daemons</td>
<td os="rhel;centos;fedora">165</td>
<td os="debian;opensuse;sles;ubuntu">Assigned during package installation</td>
</tr>
<tr>
<td>glance</td>
<td>OpenStack Glance Daemons</td>
<td os="rhel;centos;fedora">161</td>
<td os="debian;opensuse;sles;ubuntu">Assigned during package installation</td>
</tr>
<tr>
<td>heat</td>
<td>OpenStack Heat Daemons</td>
<td os="rhel;centos;fedora">187</td>
<td os="debian;opensuse;sles;ubuntu">Assigned during package installation</td>
</tr>
<tr>
<td>keystone</td>
<td>OpenStack Keystone Daemons</td>
<td os="rhel;centos;fedora">163</td>
<td os="debian;opensuse;sles;ubuntu">Assigned during package installation</td>
</tr>
<tr>
<td>neutron</td>
<td>OpenStack Neutron Daemons</td>
<td os="rhel;centos;fedora">164</td>
<td os="debian;opensuse;sles;ubuntu">Assigned during package installation</td>
</tr>
<tr>
<td>nova</td>
<td>OpenStack Nova Daemons</td>
<td os="rhel;centos;fedora">162</td>
<td os="opensuse;sles">96</td>
<td os="debian;ubuntu">Assigned during package installation</td>
</tr>
<tr>
<td>swift</td>
<td>OpenStack Swift Daemons</td>
<td os="rhel;centos;fedora">160</td>
<td os="debian;opensuse;sles;ubuntu">Assigned during package installation</td>
</tr>
<tr>
<td>trove</td>
<td>OpenStack Trove Daemons</td>
<td os="debian;opensuse;sles;ubuntu;rhel;centos;fedora">Assigned during package installation</td>
</tr>
</tbody>
</table>
<para>Each user belongs to a user group with the same name as the
user.
</para>
</appendix>

View File

@ -1,99 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<book xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="openstack-basic-install-manual"
status="draft">
<title>OpenStack Basic Installation Guide for
<phrase os="rhel;centos;fedora">Red Hat Enterprise Linux 7, CentOS 7, and Fedora 20</phrase>
<phrase os="ubuntu">Ubuntu 14.04</phrase>
<phrase os="debian">Debian 7</phrase>
<phrase os="opensuse">openSUSE 13.1 and SUSE Linux Enterprise Server 11 SP3</phrase>
</title>
<?rax
status.bar.text.font.size="40px"
status.bar.text="Kilo"?>
<?rax subtitle.font.size="17px" title.font.size="32px"?>
<titleabbrev>OpenStack Basic Installation Guide for
<phrase os="rhel;centos;fedora">Red Hat Enterprise Linux, CentOS, and Fedora</phrase>
<phrase os="ubuntu">Ubuntu 14.04</phrase>
<phrase os="opensuse">openSUSE and SUSE Linux Enterprise Server</phrase>
<phrase os="debian">Debian 7</phrase>
</titleabbrev>
<info>
<author>
<personname>
<firstname/>
<surname/>
</personname>
<affiliation>
<orgname>OpenStack</orgname>
</affiliation>
</author>
<copyright>
<year>2012</year>
<year>2013</year>
<year>2014</year>
<holder>OpenStack Foundation</holder>
</copyright>
<releaseinfo>juno</releaseinfo>
<productname>OpenStack Basic Installation Guide</productname>
<pubdate/>
<legalnotice role="apache2">
<annotation>
<remark>Copyright details are filled in by the
template.</remark>
</annotation>
</legalnotice>
<abstract>
<para>Work in progress, please do not work on this patch.
The OpenStack® system consists of several key
projects that you install separately but that work
together depending on your cloud needs. These projects
include Compute, Identity Service, Networking, Image
Service, Block Storage, Object Storage, Telemetry,
Orchestration, and Database. You can install any of these
projects separately and configure them stand-alone or
as connected entities. <phrase
os="debian">This guide walks through an
installation by using packages available through
Debian 7 (code name: Wheezy).</phrase>
<phrase os="ubuntu">This guide walks through an
installation by using packages available through
Ubuntu 14.04.</phrase>
<phrase os="rhel;centos;fedora">This guide shows you
how to install OpenStack by using packages
available through Fedora 20 as well as on Red Hat
Enterprise Linux 7 and its derivatives through the
EPEL repository.</phrase>
<phrase os="opensuse;sles">This guide shows you how to
install OpenStack by using packages on openSUSE
13.1 and SUSE Linux Enterprise Server 11 SP3
through the Open Build Service Cloud
repository.</phrase> Explanations of configuration
options and sample configuration files are
included.</para>
</abstract>
</info>
<!-- xi:include href="./common/ch_preface.xml"/ -->
<xi:include href="ch_overview.xml"/>
<!-- Keystone-->
<xi:include href="ch_keystone.xml"/>
<!-- Glance -->
<xi:include href="ch_glance.xml"/>
<!-- Nova -->
<xi:include href="ch_nova.xml"/>
<!-- Networking -->
<xi:include href="ch_basic_networking.xml"/>
<!-- Horizon -->
<xi:include href="ch_horizon.xml"/>
<!-- Cinder -->
<xi:include href="ch_cinder.xml"/>
<xi:include href="ch_launch-instance.xml"/>
<xi:include href="app_reserved_uids.xml"/>
<glossary role="auto"/>
</book>

View File

@ -1,53 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="ch_basic_environment">
<?dbhtml stop-chunking?>
<title>Basic environment</title>
<note>
<para>
The trunk version of this guide focuses on the future Juno
release and will not work for the current Icehouse release. If
you want to install Icehouse, you must use the <link
xlink:href="http://docs.openstack.org">Icehouse version</link>
of this guide instead.
</para>
</note>
<para>This chapter explains how to configure each node in the
<link linkend="architecture_example-architectures">example architectures</link>
including the <link linkend="example-architecture-with-legacy-networking">
two-node architecture with legacy networking</link> and
<link linkend="example-architecture-with-neutron-networking">three-node
architecture with OpenStack Networking (neutron)</link>.</para>
<note>
<para>Although most environments include OpenStack Identity, Image Service,
Compute, at least one networking service, and the dashboard, OpenStack
Object Storage can operate independently of most other services. If your
use case only involves Object Storage, you can skip to
<xref linkend="ch_swift"/>. However, the dashboard will not run without
at least OpenStack Image Service and Compute.</para>
</note>
<note>
<para>You must use an account with administrative privileges to configure
each node. Either run the commands as the <literal>root</literal> user
or configure the <literal>sudo</literal> utility.</para>
</note>
<note>
<para>
The <command>systemctl enable</command> call on openSUSE outputs
a warning message when the service uses SysV Init scripts
instead of native systemd files. This warning can be ignored.
</para>
</note>
<xi:include href="section_basics-prerequisites.xml"/>
<xi:include href="section_basics-security.xml"/>
<xi:include href="section_basics-networking.xml"/>
<xi:include href="section_basics-ntp.xml"/>
<xi:include href="section_basics-packages.xml"/>
<xi:include href="section_basics-database.xml"/>
<xi:include href="section_basics-queue.xml"/>
</chapter>

View File

@ -1,37 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="ch_basic_networking">
<title>Add a networking component</title>
<para>This chapter explains how to install and configure either
OpenStack Networking (neutron) or the legacy <systemitem
class="service">nova-network</systemitem> networking service.
The <systemitem class="service">nova-network</systemitem> service
enables you to deploy one network type per instance and is
suitable for basic network functionality. OpenStack Networking
enables you to deploy multiple network types per instance and
includes <glossterm baseform="plug-in">plug-ins</glossterm> for a
variety of products that support <glossterm>virtual
networking</glossterm>.</para>
<para>For more information, see the <link
xlink:href="http://docs.openstack.org/admin-guide-cloud/content/ch_networking.html"
>Networking</link> chapter of the <citetitle>OpenStack Cloud
Administrator Guide</citetitle>.</para>
<section xml:id="section_neutron-networking">
<title>OpenStack Networking (neutron)</title>
<xi:include href="section_neutron-concepts.xml"/>
<xi:include href="section_neutron-controller-node.xml"/>
<xi:include href="section_neutron-network-node.xml"/>
<xi:include href="section_neutron-compute-node.xml"/>
<xi:include href="section_neutron-initial-networks.xml"/>
</section>
<section xml:id="section_networking_next_steps">
<title>Next steps</title>
<para>Your OpenStack environment now includes the core components
necessary to launch a basic instance. You can <link
linkend="launch-instance">launch an instance</link> or add
more OpenStack services to your environment.</para>
</section>
</chapter>

View File

@ -1,47 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="ch_basics">
<?dbhtml stop-chunking?>
<title>Basic environment configuration</title>
<note>
<para>
The trunk version of this guide focuses on the Icehouse
release and will not work for the current Juno release. If
you want to install Juno, you must use the <link
xlink:href="http://docs.openstack.org">Juno version</link>
of this guide instead.
</para>
</note>
<para>This chapter explains how to configure each node in the
<link linkend="architecture_example-architectures">example architectures</link>
including the <link linkend="example-architecture-with-legacy-networking">
two-node architecture with legacy networking</link> and
<link linkend="example-architecture-with-neutron-networking">three-node
architecture with OpenStack Networking (neutron)</link>.</para>
<note>
<para>Although most environments include OpenStack Identity, Image Service,
Compute, one networking service, and the dashboard, OpenStack
Object Storage can operate independently of most other services. If your
use case only involves Object Storage, you can skip to
<!-- xref linkend="object-storage-system-requirements"/-->. However, the
dashboard will not work without at least the OpenStack Image Service and
Compute.</para>
</note>
<note>
<para>You must use an account with administrative privileges to configure
each node. Either run the commands as the <literal>root</literal> user
or configure the <literal>sudo</literal> utility.</para>
</note>
<xi:include href="section_basics-prerequisites.xml"/>
<xi:include href="section_basics-networking.xml"/>
<xi:include href="section_basics-ntp.xml"/>
<xi:include href="section_basics-passwords.xml"/>
<xi:include href="section_basics-database.xml"/>
<xi:include href="section_basics-packages.xml"/>
<xi:include href="section_basics-queue.xml"/>
</chapter>

View File

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="ch_ceilometer">
<title>Add the Telemetry module</title>
<para>Telemetry provides a framework for monitoring and metering
the OpenStack cloud. It is also known as the ceilometer
project.</para>
<xi:include href="section_ceilometer-controller.xml"/>
<xi:include href="section_ceilometer-nova.xml"/>
<xi:include href="section_ceilometer-glance.xml"/>
<xi:include href="section_ceilometer-cinder.xml"/>
<xi:include href="section_ceilometer-swift.xml"/>
<xi:include href="section_ceilometer-verify.xml"/>
<section xml:id="section_ceilometer_next_steps">
<title>Next steps</title>
<para>Your OpenStack environment now includes Telemetry. You can
<link linkend="launch-instance">launch an instance</link> or add more
services to your environment in the previous chapters.</para>
</section>
</chapter>

View File

@ -1,29 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="ch_cinder">
<title>Add the Block Storage service</title>
<para>The OpenStack Block Storage service provides block storage devices
to instances using various backends. The Block Storage API and scheduler
services run on the controller node and the volume service runs on one
or more storage nodes. Storage nodes provide volumes to instances using
local block storage devices or SAN/NAS backends with the appropriate
drivers. For more information, see the
<link xlink:href="http://docs.openstack.org/juno/config-reference/content/section_volume-drivers.html"
><citetitle>Configuration Reference</citetitle></link>.</para>
<note>
<para>This chapter omits the backup manager because it depends on the
Object Storage service.</para>
</note>
<xi:include href="section_cinder-controller-node.xml"/>
<xi:include href="section_cinder-storage-node.xml"/>
<xi:include href="section_cinder-verify.xml"/>
<section xml:id="section_cinder_next_steps">
<title>Next steps</title>
<para>Your OpenStack environment now includes Block Storage. You can
<link linkend="launch-instance">launch an instance</link> or add more
services to your environment in the following chapters.</para>
</section>
</chapter>

View File

@ -1,45 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="ch_clients">
<title>Install and configure the OpenStack clients</title>
<para>The following sections contain information about working
with the OpenStack clients. Recall: in the previous section,
you used the <command>keystone</command> client.</para>
<para>You must install the client tools to complete the rest of
the installation.</para>
<para>Configure the clients on your desktop rather than on the
server so that you have a similar experience to your
users.</para>
<section xml:id="ch_clients_openrc_files">
<title>Create openrc.sh files</title>
<para>
As explained in <xref linkend="openrc-create"/>,
<phrase os="rhel;centos;fedora;opensuse;sles;ubuntu"> use the
credentials from <xref linkend="keystone-users"/> and</phrase>
create the following
<filename><replaceable>PROJECT</replaceable>-openrc.sh</filename>
files:
</para>
<itemizedlist>
<listitem>
<para>
<filename>admin-openrc.sh</filename> for the administrative user
</para>
</listitem>
<listitem>
<para>
<filename>demo-openrc.sh</filename> for the normal user:
<programlisting language="bash" audience="installer">export OS_USERNAME=demo
export OS_PASSWORD=<replaceable>DEMO_PASS</replaceable>
export OS_TENANT_NAME=demo
export OS_AUTH_URL=http://<replaceable>controller</replaceable>:35357/v2.0</programlisting>
</para>
</listitem>
</itemizedlist>
</section>
</chapter>

View File

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="ch_debconf"
os="debian">
<title>Configure OpenStack with debconf</title>
<xi:include href="section_debconf-concepts.xml"/>
<xi:include href="section_debconf-dbconfig-common.xml"/>
<xi:include href="section_debconf-rabbitmq.xml"/>
<xi:include href="section_debconf-keystone_authtoken.xml"/>
<xi:include href="section_debconf-api-endpoints.xml"/>
</chapter>

View File

@ -1,30 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="ch_glance">
<title>Add the Image Service</title>
<para>The OpenStack Image Service (glance) enables users to discover,
register, and retrieve virtual machine images. It offers a <glossterm
baseform="RESTful">REST</glossterm> API that enables you to
query virtual machine image metadata and retrieve an actual image.
You can store virtual machine images made available through the
Image Service in a variety of locations, from simple file systems
to object-storage systems like OpenStack Object Storage.</para>
<important>
<para>For simplicity, this guide describes configuring the Image Service to
use the <literal>file</literal> back end, which uploads and stores in a
directory on the controller node hosting the Image Service. By
default, this directory is <filename>/var/lib/glance/images/</filename>.
</para>
<para>Before you proceed, ensure that the controller node has at least
several gigabytes of space available in this directory.</para>
<para>For information on requirements for other back ends, see <link
xlink:href="http://docs.openstack.org/trunk/config-reference/content/ch_configuring-openstack-image-service.html"
><citetitle>Configuration
Reference</citetitle></link>.</para>
</important>
<xi:include href="section_glance-install.xml"/>
<xi:include href="section_glance-verify.xml"/>
</chapter>

View File

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="ch_heat">
<title>Add the Orchestration module</title>
<para>The Orchestration module (heat) uses a heat orchestration template
(HOT) to create and manage cloud resources.</para>
<xi:include href="section_heat-install.xml"/>
<xi:include href="section_heat-verify.xml"/>
<section xml:id="section_heat_next_steps">
<title>Next steps</title>
<para>Your OpenStack environment now includes Orchestration. You can
<link linkend="launch-instance">launch an instance</link> or add more
services to your environment in the following chapters.</para>
</section>
</chapter>

View File

@ -1,44 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="ch_horizon">
<title>Add the dashboard</title>
<para>The OpenStack dashboard, also known as <link
xlink:href="https://github.com/openstack/horizon/"
>Horizon</link>, is a Web interface that enables cloud
administrators and users to manage various OpenStack resources and
services.</para>
<para>The dashboard enables web-based interactions with the
OpenStack Compute cloud controller through the OpenStack
APIs.</para>
<para>Horizon enables you to customize the brand of the dashboard.</para>
<para>Horizon provides a set of core classes and reusable templates and tools.</para>
<para>This example deployment uses an Apache web server.</para>
<xi:include href="section_dashboard-system-reqs.xml"/>
<xi:include href="section_dashboard-install.xml"/>
<xi:include href="section_dashboard-verify.xml"/>
<section xml:id="section_horizon_next_steps">
<title>Next steps</title>
<para>Your OpenStack environment now includes the dashboard. You can
<link linkend="launch-instance">launch an instance</link> or add
more services to your environment in the following chapters.</para>
<para>After you install and configure the dashboard, you can
complete the following tasks:</para>
<itemizedlist>
<listitem>
<para>Customize your dashboard. See section <link xlink:href="http://docs.openstack.org/admin-guide-cloud/content/ch_install-dashboard.html#dashboard-custom-brand"
>Customize the dashboard</link> in the <link xlink:href="http://docs.openstack.org/admin-guide-cloud/content/"
><citetitle>OpenStack Cloud Administrator Guide</citetitle></link>
for information on setting up colors, logos, and site titles.</para>
</listitem>
<listitem>
<para>Set up session storage. See section <link xlink:href="http://docs.openstack.org/admin-guide-cloud/content/dashboard-sessions.html#dashboard-sessions">Set up session storage for the dashboard</link>
in the <link xlink:href="http://docs.openstack.org/admin-guide-cloud/content/"
><citetitle>OpenStack Cloud Administrator Guide</citetitle></link> for information on user
session data.</para>
</listitem>
</itemizedlist>
</section>
</chapter>

View File

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="ch_keystone">
<title>Add the Identity service</title>
<xi:include href="section_keystone-install.xml"/>
<xi:include href="section_keystone-users.xml"/>
<xi:include href="section_keystone-services.xml"/>
<xi:include href="section_keystone-verify.xml"/>
<xi:include href="section_keystone-openrc.xml"/>
</chapter>

View File

@ -1,33 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="launch-instance">
<title>Launch an instance</title>
<para>An instance is a VM that OpenStack provisions on a compute node.
This guide shows you how to launch a minimal instance using the
<glossterm>CirrOS</glossterm> image that you added to your environment
in the <xref linkend="ch_glance"/> chapter. In these steps, you use the
command-line interface (CLI) on your controller node or any system with
the appropriate OpenStack client libraries. To use the dashboard, see the
<link
xlink:href="http://docs.openstack.org/user-guide/content/ch_dashboard.html">
<citetitle>OpenStack User Guide</citetitle></link>.</para>
<para>Launch an instance using
<link linkend="launch-instance-neutron">OpenStack Networking (neutron)
</link> or
<link linkend="launch-instance-nova">legacy networking (nova-network)
</link>. For more
information, see the
<link
xlink:href="http://docs.openstack.org/user-guide/content/cli_launch_instances.html">
<citetitle>OpenStack User Guide</citetitle></link>.</para>
<note>
<para>These steps reference example components created in previous
chapters. You must adjust certain values such as IP addresses to
match your environment.</para>
</note>
<xi:include href="section_launch-instance-neutron.xml"/>
<xi:include href="section_launch-instance-nova.xml"/>
</chapter>

View File

@ -1,43 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="ch_networking">
<title>Add a networking component</title>
<para>This chapter explains how to install and configure either
OpenStack Networking (neutron) or the legacy <systemitem
class="service">nova-network</systemitem> networking service.
The <systemitem class="service">nova-network</systemitem> service
enables you to deploy one network type per instance and is
suitable for basic network functionality. OpenStack Networking
enables you to deploy multiple network types per instance and
includes <glossterm baseform="plug-in">plug-ins</glossterm> for a
variety of products that support <glossterm>virtual
networking</glossterm>.</para>
<para>For more information, see the <link
xlink:href="http://docs.openstack.org/admin-guide-cloud/content/ch_networking.html"
>Networking</link> chapter of the <citetitle>OpenStack Cloud
Administrator Guide</citetitle>.</para>
<section xml:id="section_neutron-networking">
<title>OpenStack Networking (neutron)</title>
<xi:include href="section_neutron-concepts.xml"/>
<xi:include href="section_neutron-controller-node.xml"/>
<xi:include href="section_neutron-network-node.xml"/>
<xi:include href="section_neutron-compute-node.xml"/>
<xi:include href="section_neutron-initial-networks.xml"/>
</section>
<section xml:id="section_nova-networking">
<title>Legacy networking (nova-network)</title>
<xi:include href="section_nova-networking-controller-node.xml"/>
<xi:include href="section_nova-networking-compute-node.xml"/>
<xi:include href="section_nova-networking-initial-network.xml"/>
</section>
<section xml:id="section_networking_next_steps">
<title>Next steps</title>
<para>Your OpenStack environment now includes the core components
necessary to launch a basic instance. You can <link
linkend="launch-instance">launch an instance</link> or add
more OpenStack services to your environment.</para>
</section>
</chapter>

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="ch_nova">
<?dbhtml stop-chunking?>
<title>Add the Compute service</title>
<xi:include href="section_nova-controller-install.xml"/>
<xi:include href="section_nova-compute-install.xml"/>
<xi:include href="section_nova-verify.xml"/>
</chapter>

View File

@ -1,148 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="ch_overview">
<?dbhtml stop-chunking?>
<title>Architecture</title>
<section xml:id="architecture_overview">
<title>Overview</title>
<para>The <glossterm>OpenStack</glossterm> project is an open source cloud
computing platform that supports all types of cloud environments. The
project aims for simple implementation, massive scalability, and a rich
set of features. Cloud computing experts from around the world
contribute to the project.</para>
<para>OpenStack provides an Infrastructure-as-a-Service
(<glossterm>IaaS</glossterm>) solution through a variety of complemental
services. Each service offers an application programming interface
(<glossterm>API</glossterm>) that facilitates this integration. The
following table provides a list of OpenStack services:</para>
<para>This guide describes how to deploy these services in a functional
test environment and, by example, teaches you how to build a production
environment.</para>
</section>
<section xml:id="architecture_conceptual-architecture">
<title>Conceptual architecture</title>
<para>Launching a virtual machine or instance involves many interactions
among several services. The following diagram provides the conceptual
architecture of a typical OpenStack environment.</para>
</section>
<section xml:id="architecture_example-architectures">
<title>Example architectures</title>
<para>OpenStack is highly configurable to meet different needs with various
compute, networking, and storage options. This guide enables you to
choose your own OpenStack adventure using a combination of basic and
optional services. This guide uses the following example
architectures:</para>
<itemizedlist>
<listitem>
<itemizedlist>
<listitem>
<para>The basic controller node runs the Identity service, Image
Service, management portions of Compute and Networking,
Networking plug-in, and the dashboard. It also includes
supporting services such as a database,
<glossterm>message broker</glossterm>, and
<glossterm>Network Time Protocol (NTP)</glossterm>.
</para>
<para>Optionally, the controller node also runs portions of
Block Storage, Object Storage, Database Service, Orchestration,
and Telemetry. These components provide additional features for
your environment.</para>
</listitem>
<listitem>
<para>The network node runs the Networking plug-in, layer-2 agent,
and several layer-3 agents that provision and operate tenant
networks. Layer-2 services include provisioning of virtual
networks and tunnels. Layer-3 services include routing,
<glossterm baseform="Network Address Translation (NAT)">NAT</glossterm>,
and <glossterm>DHCP</glossterm>. This node also handles
external (Internet) connectivity for tenant virtual machines
or instances.</para>
</listitem>
<listitem>
<para>The compute node runs the hypervisor portion of Compute,
which operates tenant virtual machines or instances. By default
Compute uses KVM as the hypervisor. The compute node also runs
the Networking plug-in and layer-2 agent which operate tenant
networks and implement security groups. You can run more than
one compute node.</para>
<para>Optionally, the compute node also runs the Telemetry
agent. This component provides additional features for
your environment.</para>
</listitem>
<listitem>
<para>The optional storage node contains the disks that the Block
Storage service uses to serve volumes. You can run more than one
storage node.</para>
<para>Optionally, the storage node also runs the Telemetry
agent. This component provides additional features for
your environment.</para>
</listitem>
</itemizedlist>
<note>
<para>When you implement this architecture, skip
To use optional services, you
might need to install additional nodes, as described in
subsequent chapters.</para>
</note>
<figure xml:id="example-architecture-with-neutron-networking">
<title>Three-node architecture with OpenStack Networking (neutron)</title>
<mediaobject>
<imageobject>
<imagedata contentwidth="6in"
fileref="figures/installguide_arch-neutron.png"/>
</imageobject>
</mediaobject>
</figure>
</listitem>
<listitem>
<para>Two-node architecture with legacy networking (nova-network). See</para>
<itemizedlist>
<listitem>
<para>The basic
<glossterm baseform="cloud controller node">controller node</glossterm>
runs the Identity service, Image Service, management portion of
Compute, and the dashboard necessary to launch a simple instance.
It also includes supporting services such as a database, message
broker, and NTP.</para>
<para>Optionally, the controller node also runs portions of
Block Storage, Object Storage, Database Service, Orchestration,
and Telemetry. These components provide additional features for
your environment.</para>
</listitem>
<listitem>
<para>The basic <glossterm>compute node</glossterm> runs the
<glossterm>hypervisor</glossterm> portion of Compute,
which operates <glossterm>tenant</glossterm>
<glossterm baseform="virtual machine (VM)">virtual machines</glossterm>
or instances. By default, Compute uses
<glossterm baseform="kernel-based VM (KVM)">KVM</glossterm>
as the <glossterm>hypervisor</glossterm>. Compute also
provisions and operates tenant networks and implements
<glossterm baseform="security group">security groups</glossterm>.
You can run more than one compute node.</para>
<para>Optionally, the compute node also runs the Telemetry
agent. This component provides additional features for
your environment.</para>
</listitem>
</itemizedlist>
<note>
<para>When you implement this architecture, skip
might need to install additional nodes, as described in
subsequent chapters.</para>
</note>
<figure xml:id="example-architecture-with-legacy-networking">
<title>Two-node architecture with legacy networking (nova-network)</title>
<mediaobject>
<imageobject>
<imagedata contentwidth="6in"
fileref="figures/installguide_arch-nova.png"/>
</imageobject>
</mediaobject>
</figure>
</listitem>
</itemizedlist>
</section>
</chapter>

View File

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="ch_sahara">
<title>Add the Data processing service</title>
<para>The Data processing service (sahara) enables users to provide a
scalable data processing stack and associated management interfaces.
This includes provision and operation of data processing clusters as
well as scheduling and operation of data processing jobs.
</para>
<warning><para>This chapter is a work in progress. It may contain
incorrect information, and will be updated frequently.</para></warning>
<xi:include href="section_sahara-install.xml" />
<xi:include href="section_sahara-verify.xml" />
</chapter>

View File

@ -1,32 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="ch_swift">
<title>Add Object Storage</title>
<para>The OpenStack Object Storage services work together to provide
object storage and retrieval through a REST API. For this example
architecture, you must have already installed the Identity
Service, also known as Keystone.</para>
<xi:include
href="object-storage/section_swift-system-reqs.xml"/>
<xi:include
href="object-storage/section_swift-example-arch.xml"/>
<xi:include
href="object-storage/section_swift-controller-node.xml"/>
<xi:include
href="object-storage/section_swift-storage-node.xml"/>
<xi:include
href="object-storage/section_swift-initial-rings.xml"/>
<xi:include
href="object-storage/section_swift-finalize-installation.xml"/>
<xi:include
href="object-storage/section_swift-verify.xml"/>
<section xml:id="section_swift_next_steps">
<title>Next steps</title>
<para>Your OpenStack environment now includes Object Storage. You can
<link linkend="launch-instance">launch an instance</link> or add more
services to your environment in the following chapters.</para>
</section>
</chapter>

View File

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="ch_trove">
<title>Add the Database service</title>
<para>Use the <glossterm baseform="Database Service">Database
module</glossterm> to create cloud database resources. The
integrated project name is <glossterm>trove</glossterm>.</para>
<warning><para>This chapter is a work in progress. It may contain
incorrect information, and will be updated frequently.</para></warning>
<xi:include href="section_trove-install.xml" />
<xi:include href="section_trove-verify.xml" />
</chapter>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

View File

@ -1,286 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="getting-started-with-vnc-proxy">
<title>VNC console proxy</title>
<para>The VNC proxy is an OpenStack component that enables compute
service users to access their instances through VNC
clients.</para>
<para>The VNC console connection works as follows:</para>
<orderedlist>
<listitem>
<para>A user connects to the API and gets an
<literal>access_url</literal> such as,
<literal>http://<replaceable>ip:port</replaceable>/?token=xyz</literal>.
</para>
</listitem>
<listitem>
<para>The user pastes the URL in a browser or uses it as a
client parameter.</para>
</listitem>
<listitem>
<para>The browser or client connects to the proxy.</para>
</listitem>
<listitem>
<para>The proxy talks to <systemitem class="service"
>nova-consoleauth</systemitem> to authorize the token for
the user, and maps the token to the
<emphasis>private</emphasis> host and port of the VNC server
for an instance.</para>
<para>The compute host specifies the address that the proxy
should use to connect through the
<filename>nova.conf</filename> file option,
<option>vncserver_proxyclient_address</option>. In this way,
the VNC proxy works as a bridge between the public network and
private host network.</para>
</listitem>
<listitem>
<para>The proxy initiates the connection to VNC server and
continues to proxy until the session ends.</para>
</listitem>
</orderedlist>
<para>The proxy also tunnels the VNC protocol over WebSockets so that the
<systemitem>noVNC</systemitem> client can talk to VNC servers. In general, the VNC
proxy:</para>
<itemizedlist>
<listitem>
<para>Bridges between the public network where the clients live and the private network where
VNC servers live.</para>
</listitem>
<listitem>
<para>Mediates token authentication.</para>
</listitem>
<listitem>
<para>Transparently deals with hypervisor-specific connection
details to provide a uniform client experience.</para>
<figure xml:id="novnc-process">
<title>noVNC process</title>
<mediaobject>
<imageobject>
<imagedata
fileref="../common/figures/novnc/SCH_5009_V00_NUAC-VNC_OpenStack.png"
format="PNG" width="5in"/>
</imageobject>
</mediaobject>
</figure>
</listitem>
</itemizedlist>
<section xml:id="about-nova-consoleauth">
<info>
<title>About nova-consoleauth</title>
</info>
<para>Both client proxies leverage a shared service to manage
token authentication called <systemitem class="service"
>nova-consoleauth</systemitem>. This service must be running
for either proxy to work. Many proxies of either type can be run
against a single <systemitem class="service"
>nova-consoleauth</systemitem> service in a cluster
configuration.</para>
<para>Do not confuse the <systemitem class="service"
>nova-consoleauth</systemitem> shared service with
<literal>nova-console</literal>, which is a XenAPI-specific
service that most recent VNC proxy architectures do not
use.</para>
</section>
<section xml:id="typical-deployment">
<title>Typical deployment</title>
<para>A typical deployment has the following components:</para>
<itemizedlist>
<listitem>
<para>A <systemitem class="service"
>nova-consoleauth</systemitem> process. Typically runs on
the controller host.</para>
</listitem>
<listitem>
<para>One or more <systemitem class="service"
>nova-novncproxy</systemitem> services. Supports
browser-based noVNC clients. For simple deployments, this
service typically runs on the same machine as <systemitem
class="service">nova-api</systemitem> because it operates
as a proxy between the public network and the private
compute host network.</para>
</listitem>
<listitem>
<para>One or more <literal>nova-xvpvncproxy</literal>
services. Supports the special Java client discussed here.
For simple deployments, this service typically runs on the
same machine as <systemitem class="service"
>nova-api</systemitem> because it acts as a proxy between
the public network and the private compute host
network.</para>
</listitem>
<listitem>
<para>One or more compute hosts. These compute hosts must have
correctly configured options, as follows.</para>
</listitem>
</itemizedlist>
</section>
<section xml:id="vnc-configuration-options">
<title>VNC configuration options</title>
<para>To customize the VNC console, use the following configuration options:</para>
<xi:include href="../common/tables/nova-vnc.xml"/>
<note>
<para>To support <link
xlink:href="http://docs.openstack.org/trunk/config-reference/content/configuring-openstack-compute-basics.html#section_configuring-compute-migrations"
>live migration</link>, you cannot specify a specific IP
address for <literal>vncserver_listen</literal>, because that
IP address does not exist on the destination host.</para>
</note>
<note>
<para>
<itemizedlist>
<listitem>
<para>The <literal>vncserver_proxyclient_address</literal> defaults to
<literal>127.0.0.1</literal>, which is the address of the compute host that
Compute instructs proxies to use when connecting to instance servers.
</para>
</listitem>
<listitem><para>For all-in-one XenServer domU deployments, set this to 169.254.0.1.</para></listitem>
<listitem><para>For multi-host XenServer domU deployments, set to a dom0 management IP on the
same network as the proxies.</para></listitem>
<listitem><para>For multi-host libvirt deployments, set to a host management IP on the same
network as the proxies.</para></listitem>
</itemizedlist>
</para>
</note>
</section>
<section xml:id="nova-vncproxy-replaced-with-nova-novncproxy">
<info>
<title>nova-novncproxy (noVNC)</title>
</info>
<para>You must install the <package>noVNC</package> package, which contains the <systemitem
class="service">nova-novncproxy</systemitem> service. As root, run the following
command:</para>
<programlisting language="bash" role="gutter: false"><prompt>#</prompt> <userinput>apt-get install novnc</userinput></programlisting>
<para>The service starts automatically on installation.</para>
<para>To restart the service, run:</para>
<programlisting language="bash" role="gutter: false"><prompt>#</prompt> <userinput>service novnc restart</userinput></programlisting>
<para>The configuration option parameter should point to your
<filename>nova.conf</filename> file, which includes the
message queue server address and credentials.</para>
<para>By default, <systemitem class="service"
>nova-novncproxy</systemitem> binds on
<literal>0.0.0.0:6080</literal>.</para>
<para>To connect the service to your Compute deployment, add the following configuration options
to your <filename>nova.conf</filename> file:</para>
<itemizedlist>
<listitem>
<para>
<literal>vncserver_listen</literal>=<replaceable>0.0.0.0</replaceable>
</para>
<para>Specifies the address on which the VNC service should
bind. Make sure it is assigned one of the compute node
interfaces. This address is the one used by your domain
file.</para>
<programlisting language="bash" role="gutter: false"> &lt;graphics type="vnc" autoport="yes" keymap="en-us" listen="0.0.0.0"/></programlisting>
<note>
<para>To use live migration, use the
<replaceable>0.0.0.0</replaceable> address.</para>
</note>
</listitem>
<listitem>
<para>
<literal>vncserver_proxyclient_address</literal>=<replaceable>127.0.0.1</replaceable>
</para>
<para>The address of the compute host that Compute instructs proxies to use when connecting
to instance <literal>vncservers</literal>.</para>
</listitem>
</itemizedlist>
</section>
<section xml:id="faq-about-vnc">
<info>
<title>Frequently asked questions about VNC access to virtual
machines</title>
</info>
<itemizedlist>
<listitem>
<para><emphasis role="bold">Q: What is the difference between
<literal>nova-xvpvncproxy</literal> and <systemitem
class="service">nova-novncproxy</systemitem>?</emphasis>
</para>
<para>A: <literal>nova-xvpvncproxy</literal>, which ships with OpenStack Compute, is a proxy
that supports a simple Java client. <systemitem class="service"
>nova-novncproxy</systemitem> uses noVNC to provide VNC support through a web
browser.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Q: I want VNC support in the OpenStack dashboard. What services
do I need? </emphasis></para>
<para>A: You need <systemitem class="service"
>nova-novncproxy</systemitem>, <systemitem class="service"
>nova-consoleauth</systemitem>, and correctly configured
compute hosts.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Q: When I use <command>nova get-vnc-console</command> or click
on the VNC tab of the OpenStack dashboard, it hangs. Why? </emphasis></para>
<para>A: Make sure you are running <systemitem class="service"
>nova-consoleauth</systemitem> (in addition to <systemitem
class="service">nova-novncproxy</systemitem>). The proxies
rely on <systemitem class="service"
>nova-consoleauth</systemitem> to validate tokens, and
waits for a reply from them until a timeout is reached.
</para>
</listitem>
<listitem>
<para><emphasis role="bold">Q: My VNC proxy worked fine during
my all-in-one test, but now it doesn't work on multi host.
Why? </emphasis></para>
<para>A: The default options work for an all-in-one install,
but changes must be made on your compute hosts once you
start to build a cluster. As an example, suppose you have
two servers:</para>
<programlisting language="bash" role="gutter: false">PROXYSERVER (public_ip=172.24.1.1, management_ip=192.168.1.1)
COMPUTESERVER (management_ip=192.168.1.2)</programlisting>
<para>Your <systemitem class="service"
>nova-compute</systemitem> configuration file must set the
following values:</para>
<programlisting language="bash" role="gutter: false"># These flags help construct a connection data structure
vncserver_proxyclient_address=192.168.1.2
novncproxy_base_url=http://172.24.1.1:6080/vnc_auto.html
xvpvncproxy_base_url=http://172.24.1.1:6081/console
# This is the address where the underlying vncserver (not the proxy)
# will listen for connections.
vncserver_listen=192.168.1.2</programlisting>
<note>
<para><literal>novncproxy_base_url</literal> and
<literal>xvpvncproxy_base_url</literal> use a public IP;
this is the URL that is ultimately returned to clients,
which generally do not have access to your private
network. Your PROXYSERVER must be able to reach
<literal>vncserver_proxyclient_address</literal>,
because that is the address over which the VNC connection
is proxied.</para>
</note>
</listitem>
<listitem>
<para>
<emphasis role="bold">Q: My noVNC does not work with recent
versions of web browsers. Why?</emphasis>
</para>
<para>A: Make sure you have installed
<literal>python-numpy</literal>, which is required to
support a newer version of the WebSocket protocol
(HyBi-07+).</para>
</listitem>
<listitem>
<para>
<emphasis role="bold">Q: How do I adjust the dimensions of
the VNC window image in the OpenStack
dashboard?</emphasis></para>
<para>A: These values are hard-coded in a Django HTML
template. To alter them, edit the
<filename>_detail_vnc.html</filename> template file. The
location of this file varies based on Linux distribution. On
Ubuntu 12.04, the file is at
<filename>/usr/share/pyshared/horizon/dashboards/nova/instances/templates/instances/_detail_vnc.html</filename>.</para>
<para>Modify the <option>width</option> and
<option>height</option> options, as follows:</para>
<programlisting language="bash" role="gutter: false">&lt;iframe src="{{ vnc_url }}" width="720" height="430"&gt;&lt;/iframe&gt;</programlisting>
</listitem>
</itemizedlist>
</section>
</section>

View File

@ -1,144 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="keystone-concepts">
<?dbhtml stop-chunking?>
<title>OpenStack Identity concepts</title>
<para>The OpenStack<glossterm>Identity Service</glossterm> performs the
following functions:</para>
<itemizedlist spacing="compact">
<listitem>
<para>Tracking users and their permissions.</para>
</listitem>
<listitem>
<para>Providing a catalog of available services with their API
endpoints.</para>
</listitem>
</itemizedlist>
<para>When installing OpenStack Identity service, you must register
each service in your OpenStack installation. Identity service
can then track which OpenStack services are installed, and
where they are located on the network.</para>
<para>To understand OpenStack Identity, you must understand the
following concepts:</para>
<variablelist>
<varlistentry>
<term>User</term>
<listitem>
<para>Digital representation of a person, system, or
service who uses OpenStack cloud services. The
Identity service validates that incoming requests
are made by the user who claims to be making the
call. Users have a login and may be assigned
tokens to access resources. Users can be directly
assigned to a particular tenant and behave as if
they are contained in that tenant.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Credentials</term>
<listitem>
<para>Data that confirms the user's identity. For
example: user name and password, user name and API
key, or an authentication token provided by the
Identity Service.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Authentication</term>
<listitem>
<para>The process of confirming the identity of a user.
OpenStack Identity confirms an incoming request
by validating a set of credentials supplied by the
user.</para>
<para>These credentials are initially a user name and
password, or a user name and API key. When user
credentials are validated, OpenStack Identity issues an
authentication token which the user provides in subsequent
requests.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Token</term>
<listitem>
<para>An alpha-numeric string of text used to access
OpenStack APIs and resources. A token may be
revoked at any time and is valid for a
finite duration.</para>
<para>While OpenStack Identity supports token-based
authentication in this release, the intention is
to support additional protocols in the future.
Its main purpose is to be an integration service,
and not aspire to be a full-fledged identity store
and management solution.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Tenant</term>
<listitem>
<para>A container used to group or isolate resources.
Tenants also group or isolate identity objects.
Depending on the service operator, a tenant may map
to a customer, account, organization, or project.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Service</term>
<listitem>
<para>An OpenStack service, such as Compute (nova),
Object Storage (swift), or Image Service (glance).
It provides one or more endpoints in which
users can access resources and perform operations.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Endpoint</term>
<listitem>
<para>A network-accessible address where you access a service,
usually a URL address. If you are using an extension for
templates, an endpoint template can be created, which
represents the templates of all the consumable services
that are available across the regions.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Role</term>
<listitem>
<para>A personality with a defined set of user rights and
privileges to perform a specific set of operations.</para>
<para>In the Identity service, a token that is issued
to a user includes the list of roles. Services that are
being called by that user determine how they interpret the
set of roles a user has and to which operations or
resources each role grants access.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Keystone Client</term>
<listitem>
<para>A command line interface for the OpenStack
Identity API. For example, users can run the
<command>keystone service-create</command> and
<command>keystone endpoint-create</command> commands
to register services in their OpenStack
installations.</para>
</listitem>
</varlistentry>
</variablelist>
<para>The following diagram shows the OpenStack Identity process
flow:</para>
<mediaobject>
<imageobject role="fo">
<imagedata
fileref="figures/SCH_5002_V00_NUAC-Keystone.png"
format="PNG" contentwidth="6in"/>
</imageobject>
<imageobject role="html">
<imagedata
fileref="figures/SCH_5002_V00_NUAC-Keystone.png"
format="PNG" contentwidth="6in"/>
</imageobject>
</mediaobject>
</section>

View File

@ -1,39 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="section_objectstorage-account-reaper">
<title>Account reaper</title>
<para>In the background, the account reaper removes data from the deleted accounts.</para>
<para>A reseller marks an account for deletion by issuing a <code>DELETE</code> request on the accounts
storage URL. This action sets the <code>status</code> column of the account_stat table in the account
database and replicas to <code>DELETED</code>, marking the account's data for deletion.</para>
<para>Typically, a specific retention time or undelete are not provided. However, you can set a
<code>delay_reaping</code> value in the <code>[account-reaper]</code> section of the
account-server.conf to delay the actual deletion of data. At this time, to undelete you have
to update the account database replicas directly, setting the status column to an empty
string and updating the put_timestamp to be greater than the delete_timestamp.
<note><para>It's on the developers' to-do list to write a utility that performs this task, preferably
through a ReST call.</para></note>
</para>
<para>The account reaper runs on each account server and scans the server occasionally for
account databases marked for deletion. It only fires up on the accounts for which the server
is the primary node, so that multiple account servers arent trying to do it simultaneously.
Using multiple servers to delete one account might improve the deletion speed but requires
coordination to avoid duplication. Speed really is not a big concern with data deletion, and
large accounts arent deleted often.</para>
<para>Deleting an account is simple. For each account container, all objects are deleted and
then the container is deleted. Deletion requests that fail will not stop the overall process
but will cause the overall process to fail eventually (for example, if an object delete
times out, you will not be able to delete the container or the account). The account reaper
keeps trying to delete an account until it is empty, at which point the database reclaim
process within the db_replicator will remove the database files.</para>
<para>A persistent error state may prevent the deletion of an object
or container. If this happens, you will see
a message such as <code>“Account &lt;name&gt; has not been reaped
since &lt;date&gt;</code> in the log. You can control when this is
logged with the <code>reap_warn_after</code> value in the <code>[account-reaper]</code>
section of the account-server.conf file. The default value is 30
days.</para>
</section>

View File

@ -1,79 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE section [
<!ENTITY % openstack SYSTEM "entities/openstack.ent">
%openstack;
]>
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="section_objectstorage-cluster-architecture">
<title>Cluster architecture</title>
<section xml:id="section_access-tier">
<title>Access tier</title>
<para>Large-scale deployments segment off an access tier, which is considered the Object Storage
system's central hub. The access tier fields the incoming API requests from clients and
moves data in and out of the system. This tier consists of front-end load balancers,
ssl-terminators, and authentication services. It runs the (distributed) brain of the
Object Storage system: the proxy server processes.</para>
<figure>
<title>Object Storage architecture</title>
<mediaobject>
<imageobject>
<imagedata fileref="../common/figures/objectstorage-arch.png"/>
</imageobject>
</mediaobject>
</figure>
<para>Because access servers are collocated in their own tier, you can scale out read/write
access regardless of the storage capacity. For example, if a cluster is on the public
Internet, requires SSL termination, and has a high demand for data access, you can
provision many access servers. However, if the cluster is on a private network and used
primarily for archival purposes, you need fewer access servers.</para>
<para>Since this is an HTTP addressable storage service, you may incorporate a load balancer
into the access tier.</para>
<para>Typically, the tier consists of a collection of 1U servers. These machines use a
moderate amount of RAM and are network I/O intensive. Since these systems field each
incoming API request, you should provision them with two high-throughput (10GbE)
interfaces - one for the incoming "front-end" requests and the other for the "back-end"
access to the object storage nodes to put and fetch data.</para>
<section xml:id="section_access-tier-considerations">
<title>Factors to consider</title>
<para>For most publicly facing deployments as well as private deployments available
across a wide-reaching corporate network, you use SSL to encrypt traffic to the
client. SSL adds significant processing load to establish sessions between clients,
which is why you have to provision more capacity in the access layer. SSL may not be
required for private deployments on trusted networks.</para>
</section>
</section>
<section xml:id="section_storage-nodes">
<title>Storage nodes</title>
<para>In most configurations, each of the five zones should have an equal amount of storage
capacity. Storage nodes use a reasonable amount of memory and CPU. Metadata needs to be
readily available to return objects quickly. The object stores run services not only to
field incoming requests from the access tier, but to also run replicators, auditors, and
reapers. You can provision object stores provisioned with single gigabit or 10 gigabit
network interface depending on the expected workload and desired performance.</para>
<figure>
<title>Object Storage (swift)</title>
<mediaobject>
<imageobject>
<imagedata fileref="../common/figures/objectstorage-nodes.png"/>
</imageobject>
</mediaobject>
</figure>
<para>Currently, a 2 TB or 3 TB SATA disk delivers
good performance for the price. You can use desktop-grade
drives if you have responsive remote hands in the datacenter
and enterprise-grade drives if you don't.</para>
<section xml:id="section_storage-nodes-considerations">
<title>Factors to consider</title>
<para>You should keep in mind the desired I/O performance for single-threaded requests .
This system does not use RAID, so a single disk handles each request for an object.
Disk performance impacts single-threaded response rates.</para>
<para>To achieve apparent higher throughput, the object storage system is designed to
handle concurrent uploads/downloads. The network I/O capacity (1GbE, bonded 1GbE
pair, or 10GbE) should match your desired concurrent throughput needs for reads and
writes.</para>
</section>
</section>
</section>

View File

@ -1,58 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="objectstorage_characteristics">
<title>Object Storage characteristics</title>
<para>The key characteristics of Object Storage are that:</para>
<itemizedlist>
<listitem>
<para>All objects stored in Object Storage have a URL.</para>
</listitem>
<listitem>
<para>All objects stored are replicated 3&#10005; in as-unique-as-possible zones, which
can be defined as a group of drives, a node, a rack, and so on.</para>
</listitem>
<listitem>
<para>All objects have their own metadata.</para>
</listitem>
<listitem>
<para>Developers interact with the object storage system through a RESTful HTTP
API.</para>
</listitem>
<listitem>
<para>Object data can be located anywhere in the cluster.</para>
</listitem>
<listitem>
<para>The cluster scales by adding additional nodes without sacrificing performance,
which allows a more cost-effective linear storage expansion than fork-lift
upgrades.</para>
</listitem>
<listitem>
<para>Data doesn't have to be migrate to an entirely new storage system.</para>
</listitem>
<listitem>
<para>New nodes can be added to the cluster without downtime.</para>
</listitem>
<listitem>
<para>Failed nodes and disks can be swapped out without downtime.</para>
</listitem>
<listitem>
<para>It runs on industry-standard hardware, such as Dell, HP, and Supermicro.</para>
</listitem>
</itemizedlist>
<figure>
<title>Object Storage (swift)</title>
<mediaobject>
<imageobject>
<imagedata fileref="../common/figures/objectstorage.png"/>
</imageobject>
</mediaobject>
</figure>
<para>Developers can either write directly to the Swift API or use one of the many client
libraries that exist for all of the popular programming languages, such as Java, Python,
Ruby, and C#. Amazon S3 and RackSpace Cloud Files users should be very familiar with Object
Storage. Users new to object storage systems will have to adjust to a different approach and
mindset than those required for a traditional filesystem.</para>
</section>

View File

@ -1,235 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="section_objectstorage-components">
<title>Components</title>
<para>The components that enable Object Storage to deliver high availability, high
durability, and high concurrency are:</para>
<itemizedlist>
<listitem>
<para><emphasis role="bold">Proxy servers.</emphasis> Handle all of the incoming
API requests.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Rings.</emphasis> Map logical names of data to
locations on particular disks.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Zones.</emphasis> Isolate data from other zones. A
failure in one zone doesnt impact the rest of the cluster because data is
replicated across zones.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Accounts and containers.</emphasis> Each account and
container are individual databases that are distributed across the cluster. An
account database contains the list of containers in that account. A container
database contains the list of objects in that container.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Objects.</emphasis> The data itself.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Partitions.</emphasis> A partition stores objects,
account databases, and container databases and helps manage locations where data
lives in the cluster.</para>
</listitem>
</itemizedlist>
<figure>
<title>Object Storage building blocks</title>
<mediaobject>
<imageobject>
<imagedata fileref="../common/figures/objectstorage-buildingblocks.png"/>
</imageobject>
</mediaobject>
</figure>
<section xml:id="section_proxy-servers">
<title>Proxy servers</title>
<para>Proxy servers are the public face of Object Storage and handle all of the incoming API
requests. Once a proxy server receives a request, it determines the storage node based
on the object's URL, for example, https://swift.example.com/v1/account/container/object.
Proxy servers also coordinate responses, handle failures, and coordinate
timestamps.</para>
<para>Proxy servers use a shared-nothing architecture and can be scaled as needed based on
projected workloads. A minimum of two proxy servers should be deployed for redundancy.
If one proxy server fails, the others take over.</para>
</section>
<section xml:id="section_ring">
<title>Rings</title>
<para>A ring represents a mapping between the names of entities stored on disk and their
physical locations. There are separate rings for accounts, containers, and objects. When
other components need to perform any operation on an object, container, or account, they
need to interact with the appropriate ring to determine their location in the
cluster.</para>
<para>The ring maintains this mapping using zones, devices, partitions, and replicas. Each
partition in the ring is replicated, by default, three times across the cluster, and
partition locations are stored in the mapping maintained by the ring. The ring is also
responsible for determining which devices are used for handoff in failure
scenarios.</para>
<para>Data can be isolated into zones in the ring. Each partition replica is guaranteed to
reside in a different zone. A zone could represent a drive, a server, a cabinet, a
switch, or even a data center.</para>
<para>The partitions of the ring are equally divided among all of the devices in the Object
Storage installation. When partitions need to be moved around (for example, if a device
is added to the cluster), the ring ensures that a minimum number of partitions are moved
at a time, and only one replica of a partition is moved at a time.</para>
<para>You can use weights to balance the distribution of partitions on drives across the
cluster. This can be useful, for example, when differently sized drives are used in a
cluster.</para>
<para>The ring is used by the proxy server and several background processes (like
replication).</para>
<figure>
<title>The <emphasis role="bold">ring</emphasis></title>
<mediaobject>
<imageobject>
<imagedata fileref="../common/figures/objectstorage-ring.png"/>
</imageobject>
</mediaobject>
</figure>
<para>These rings are externally managed, in that the server processes themselves do not
modify the rings, they are instead given new rings modified by other tools.</para>
<para>The ring uses a configurable number of bits from an
MD5 hash for a path as a partition index that designates a
device. The number of bits kept from the hash is known as
the partition power, and 2 to the partition power
indicates the partition count. Partitioning the full MD5
hash ring allows other parts of the cluster to work in
batches of items at once which ends up either more
efficient or at least less complex than working with each
item separately or the entire cluster all at once.</para>
<para>Another configurable value is the replica count, which indicates how many of the
partition-device assignments make up a single ring. For a given partition number, each
replicas device will not be in the same zone as any other replica's device. Zones can
be used to group devices based on physical locations, power separations, network
separations, or any other attribute that would improve the availability of multiple
replicas at the same time.</para>
</section>
<section xml:id="section_zones">
<title>Zones</title>
<para>Object Storage allows configuring zones in order to isolate failure boundaries.
Each data replica resides in a separate zone, if possible. At the smallest level, a zone
could be a single drive or a grouping of a few drives. If there were five object storage
servers, then each server would represent its own zone. Larger deployments would have an
entire rack (or multiple racks) of object servers, each representing a zone. The goal of
zones is to allow the cluster to tolerate significant outages of storage servers without
losing all replicas of the data.</para>
<para>As mentioned earlier, everything in Object Storage is stored, by default, three
times. Swift will place each replica "as-uniquely-as-possible" to ensure both high
availability and high durability. This means that when chosing a replica location,
Object Storage chooses a server in an unused zone before an unused server in a zone that
already has a replica of the data.</para>
<figure>
<title>Zones</title>
<mediaobject>
<imageobject>
<imagedata fileref="../common/figures/objectstorage-zones.png"/>
</imageobject>
</mediaobject>
</figure>
<para>When a disk fails, replica data is automatically distributed to the other zones to
ensure there are three copies of the data.</para>
</section>
<section xml:id="section_accounts-containers">
<title>Accounts and containers</title>
<para>Each account and container is an individual SQLite
database that is distributed across the cluster. An
account database contains the list of containers in
that account. A container database contains the list
of objects in that container.</para>
<figure>
<title>Accounts and containers</title>
<mediaobject>
<imageobject>
<imagedata fileref="../common/figures/objectstorage-accountscontainers.png"/>
</imageobject>
</mediaobject>
</figure>
<para>To keep track of object data locations, each account in the system has a database
that references all of its containers, and each container database references each
object.</para>
</section>
<section xml:id="section_partitions">
<title>Partitions</title>
<para>A partition is a collection of stored data, including account databases, container
databases, and objects. Partitions are core to the replication system.</para>
<para>Think of a partition as a bin moving throughout a fulfillment center warehouse.
Individual orders get thrown into the bin. The system treats that bin as a cohesive
entity as it moves throughout the system. A bin is easier to deal with than many little
things. It makes for fewer moving parts throughout the system.</para>
<para>System replicators and object uploads/downloads operate on partitions. As the
system scales up, its behavior continues to be predictable because the number of
partitions is a fixed number.</para>
<para>Implementing a partition is conceptually simple, a partition is just a
directory sitting on a disk with a corresponding hash table of what it contains.</para>
<figure>
<title>Partitions</title>
<mediaobject>
<imageobject>
<imagedata fileref="../common/figures/objectstorage-partitions.png"/>
</imageobject>
</mediaobject>
</figure>
</section>
<section xml:id="section_replicators">
<title>Replicators</title>
<para>In order to ensure that there are three copies of the data everywhere, replicators
continuously examine each partition. For each local partition, the replicator compares
it against the replicated copies in the other zones to see if there are any
differences.</para>
<para>The replicator knows if replication needs to take place by examining hashes. A hash
file is created for each partition, which contains hashes of each directory in the
partition. Each of the three hash files is compared. For a given partition, the hash
files for each of the partition's copies are compared. If the hashes are different, then
it is time to replicate, and the directory that needs to be replicated is copied
over.</para>
<para>This is where partitions come in handy. With fewer things in the system, larger
chunks of data are transferred around (rather than lots of little TCP connections, which
is inefficient) and there is a consistent number of hashes to compare.</para>
<para>The cluster eventually has a consistent behavior where the newest data has a
priority.</para>
<figure>
<title>Replication</title>
<mediaobject>
<imageobject>
<imagedata fileref="../common/figures/objectstorage-replication.png"/>
</imageobject>
</mediaobject>
</figure>
<para>If a zone goes down, one of the nodes containing a replica notices and proactively
copies data to a handoff location.</para>
</section>
<section xml:id="section_usecases">
<title>Use cases</title>
<para>The following sections show use cases for object uploads and downloads and introduce the components.</para>
<section xml:id="upload">
<title>Upload</title>
<para>A client uses the REST API to make a HTTP request to PUT an object into an existing
container. The cluster receives the request. First, the system must figure out where
the data is going to go. To do this, the account name, container name, and object
name are all used to determine the partition where this object should live.</para>
<para>Then a lookup in the ring figures out which storage nodes contain the partitions in
question.</para>
<para>The data is then sent to each storage node where it is placed in the appropriate
partition. At least two of the three writes must be successful before the client is
notified that the upload was successful.</para>
<para>Next, the container database is updated asynchronously to reflect that there is a new
object in it.</para>
<figure>
<title>Object Storage in use</title>
<mediaobject>
<imageobject>
<imagedata fileref="../common/figures/objectstorage-usecase.png"/>
</imageobject>
</mediaobject>
</figure>
</section>
<section xml:id="section_swift-component-download">
<title>Download</title>
<para>A request comes in for an account/container/object. Using the same consistent hashing,
the partition name is generated. A lookup in the ring reveals which storage nodes
contain that partition. A request is made to one of the storage nodes to fetch the
object and, if that fails, requests are made to the other nodes.</para>
</section>
</section>
</section>

View File

@ -1,125 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="section_objectstorage_features">
<title>Features and benefits</title>
<informaltable>
<thead>
<tr>
<th>Features</th>
<th>Benefits</th>
</tr>
</thead>
<tbody>
<tr>
<td><emphasis role="bold">Leverages commodity hardware</emphasis></td>
<td>No lock-in, lower price/GB.</td>
</tr>
<tr>
<td><emphasis role="bold">HDD/node failure agnostic</emphasis></td>
<td>Self-healing, reliable, data redundancy protects from
failures.</td>
</tr>
<tr>
<td><emphasis role="bold">Unlimited storage</emphasis></td>
<td>Large and flat namespace, highly scalable read/write
access, able to serve content directly from storage system.</td>
</tr>
<tr>
<td><emphasis role="bold">Multi-dimensional scalability</emphasis>
</td>
<td>Scale-out architecture: Scale vertically and
horizontally-distributed storage. Backs up and archives
large amounts of data with linear performance.</td>
</tr>
<tr>
<td><emphasis role="bold">Account/container/object structure</emphasis></td>
<td>No nesting, not a traditional file system: Optimized
for scale, it scales to multiple petabytes and billions of
objects.</td>
</tr>
<tr>
<td><emphasis role="bold">Built-in replication 3&#10005; +
data redundancy (compared with 2&#10005; on RAID)</emphasis>
</td>
<td>A configurable number of accounts, containers and
object copies for high availability.</td>
</tr>
<tr>
<td><emphasis role="bold">Easily add capacity (unlike
RAID resize)</emphasis></td>
<td>Elastic data scaling with ease</td>
</tr>
<tr>
<td><emphasis role="bold">No central database</emphasis></td>
<td>Higher performance, no bottlenecks</td>
</tr>
<tr>
<td><emphasis role="bold">RAID not required</emphasis></td>
<td>Handle many small, random reads and writes efficiently</td>
</tr>
<tr>
<td><emphasis role="bold">Built-in management utilities</emphasis></td>
<td>Account management: Create, add, verify, and delete
users; Container management: Upload, download, and verify;
Monitoring: Capacity, host, network, log trawling, and
cluster health.</td>
</tr>
<tr>
<td><emphasis role="bold">Drive auditing</emphasis></td>
<td>Detect drive failures preempting data corruption</td>
</tr>
<tr>
<td><emphasis role="bold">Expiring objects</emphasis></td>
<td>Users can set an expiration time or a TTL on an object
to control access</td>
</tr>
<tr>
<td><emphasis role="bold">Direct object access</emphasis></td>
<td>Enable direct browser access to content, such as for
a control panel</td>
</tr>
<tr>
<td><emphasis role="bold">Realtime visibility into client
requests</emphasis></td>
<td>Know what users are requesting.</td>
</tr>
<tr>
<td><emphasis role="bold">Supports S3 API</emphasis></td>
<td>Utilize tools that were designed for the popular S3
API.</td>
</tr>
<tr>
<td><emphasis role="bold">Restrict containers per
account</emphasis></td>
<td>Limit access to control usage by user.</td>
</tr>
<tr>
<td><emphasis role="bold">Support for NetApp, Nexenta,
SolidFire</emphasis></td>
<td>Unified support for block volumes using a variety of
storage systems.</td>
</tr>
<tr>
<td><emphasis role="bold">Snapshot and backup API for
block volumes</emphasis></td>
<td>Data protection and recovery for VM data.</td>
</tr>
<tr>
<td><emphasis role="bold">Standalone volume API
available</emphasis></td>
<td>Separate endpoint and API for integration with other
compute systems.</td>
</tr>
<tr>
<td><emphasis role="bold">Integration with
Compute</emphasis></td>
<td>Fully integrated with Compute for attaching block
volumes and reporting on usage.</td>
</tr>
</tbody>
</informaltable>
</section>

View File

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="section_objectstorage-intro">
<title>Introduction to Object Storage</title>
<para>OpenStack Object Storage (code-named swift) is open source software for creating
redundant, scalable data storage using clusters of standardized servers to store petabytes
of accessible data. It is a long-term storage system for large amounts of static data that
can be retrieved, leveraged, and updated. Object Storage uses a distributed architecture
with no central point of control, providing greater scalability, redundancy, and permanence.
Objects are written to multiple hardware devices, with the OpenStack software responsible
for ensuring data replication and integrity across the cluster. Storage clusters scale
horizontally by adding new nodes. Should a node fail, OpenStack works to replicate its
content from other active nodes. Because OpenStack uses software logic to ensure data
replication and distribution across different devices, inexpensive commodity hard drives and
servers can be used in lieu of more expensive equipment.</para>
<para>Object Storage is ideal for cost effective, scale-out storage. It provides a fully
distributed, API-accessible storage platform that can be integrated directly into
applications or used for backup, archiving, and data retention.</para>
</section>

View File

@ -1,111 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="section_objectstorage-replication">
<title>Replication</title>
<para>Because each replica in Object Storage functions
independently and clients generally require only a simple
majority of nodes to respond to consider an operation
successful, transient failures like network partitions can
quickly cause replicas to diverge. These differences are
eventually reconciled by asynchronous, peer-to-peer replicator
processes. The replicator processes traverse their local file
systems and concurrently perform operations in a manner that
balances load across physical disks.</para>
<para>Replication uses a push model, with records and files
generally only being copied from local to remote replicas.
This is important because data on the node might not belong
there (as in the case of hand offs and ring changes), and a
replicator cannot know which data it should pull in from
elsewhere in the cluster. Any node that contains data must
ensure that data gets to where it belongs. The ring handles
replica placement.</para>
<para>To replicate deletions in addition to creations, every
deleted record or file in the system is marked by a tombstone.
The replication process cleans up tombstones after a time
period known as the <emphasis role="italic">consistency
window</emphasis>. This window defines the duration of the
replication and how long transient failure can remove a node
from the cluster. Tombstone cleanup must be tied to
replication to reach replica convergence.</para>
<para>If a replicator detects that a remote drive has failed, the
replicator uses the <literal>get_more_nodes</literal>
interface for the ring to choose an alternate node with which
to synchronize. The replicator can maintain desired levels of
replication during disk failures, though some replicas might
not be in an immediately usable location.</para>
<note>
<para>The replicator does not maintain desired levels of
replication when failures such as entire node failures
occur; most failures are transient.</para>
</note>
<para>The main replication types are:</para>
<itemizedlist>
<listitem>
<para><emphasis role="bold">Database
replication</emphasis>. Replicates containers and
objects.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Object replication</emphasis>.
Replicates object data.</para>
</listitem>
</itemizedlist>
<section xml:id="section_database-replication">
<title>Database replication</title>
<para>Database replication completes a low-cost hash
comparison to determine whether two replicas already
match. Normally, this check can quickly verify that most
databases in the system are already synchronized. If the
hashes differ, the replicator synchronizes the databases
by sharing records added since the last synchronization
point.</para>
<para>This synchronization point is a high water mark that
notes the last record at which two databases were known to
be synchronized, and is stored in each database as a tuple
of the remote database ID and record ID. Database IDs are
unique across all replicas of the database, and record IDs
are monotonically increasing integers. After all new
records are pushed to the remote database, the entire
synchronization table of the local database is pushed, so
the remote database can guarantee that it is synchronized
with everything with which the local database was
previously synchronized.</para>
<para>If a replica is missing, the whole local database file
is transmitted to the peer by using rsync(1) and is
assigned a new unique ID.</para>
<para>In practice, database replication can process hundreds
of databases per concurrency setting per second (up to the
number of available CPUs or disks) and is bound by the
number of database transactions that must be
performed.</para>
</section>
<section xml:id="section_object-replication">
<title>Object replication</title>
<para>The initial implementation of object replication
performed an rsync to push data from a local partition to
all remote servers where it was expected to reside. While
this worked at small scale, replication times skyrocketed
once directory structures could no longer be held in RAM.
This scheme was modified to save a hash of the contents
for each suffix directory to a per-partition hashes file.
The hash for a suffix directory is no longer valid when
the contents of that suffix directory is modified.</para>
<para>The object replication process reads in hash files and
calculates any invalidated hashes. Then, it transmits the
hashes to each remote server that should hold the
partition, and only suffix directories with differing
hashes on the remote server are rsynced. After pushing
files to the remote server, the replication process
notifies it to recalculate hashes for the rsynced suffix
directories.</para>
<para>The number of uncached directories that object
replication must traverse, usually as a result of
invalidated suffix directory hashes, impedes performance.
To provide acceptable replication speeds, object
replication is designed to invalidate around 2 percent of
the hash space on a normal node each day.</para>
</section>
</section>

View File

@ -1,226 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="section_objectstorage-ringbuilder">
<title>Ring-builder</title>
<para>Use the swift-ring-builder utility to build and manage rings. This
utility assigns partitions to devices and writes an optimized
Python structure to a gzipped, serialized file on disk for
transmission to the servers. The server processes occasionally
check the modification time of the file and reload in-memory
copies of the ring structure as needed. If you use a slightly
older version of the ring, one of the three replicas for a
partition subset will be incorrect because of the way the
ring-builder manages changes to the ring. You can work around
this issue.</para>
<para>The ring-builder also keeps its own builder file with the
ring information and additional data required to build future
rings. It is very important to keep multiple backup copies of
these builder files. One option is to copy the builder files
out to every server while copying the ring files themselves.
Another is to upload the builder files into the cluster
itself. If you lose the builder file, you have to create a new
ring from scratch. Nearly all partitions would be assigned to
different devices and, therefore, nearly all of the stored
data would have to be replicated to new locations. So,
recovery from a builder file loss is possible, but data would
be unreachable for an extended time.</para>
<section xml:id="section_ring-data-structure">
<title>Ring data structure</title>
<para>The ring data structure consists of three top level
fields: a list of devices in the cluster, a list of lists
of device ids indicating partition to device assignments,
and an integer indicating the number of bits to shift an
MD5 hash to calculate the partition for the hash.</para>
</section>
<section xml:id="section_partition-assignment">
<title>Partition assignment list</title>
<para>This is a list of <literal>array(H)</literal> of
devices ids. The outermost list contains an
<literal>array(H)</literal> for each replica. Each
<literal>array(H)</literal> has a length equal to
the partition count for the ring. Each integer in the
<literal>array(H)</literal> is an index into the
above list of devices. The partition list is known
internally to the Ring class as
<literal>_replica2part2dev_id</literal>.</para>
<para>So, to create a list of device dictionaries assigned to
a partition, the Python code would look like:
<programlisting>devices = [self.devs[part2dev_id[partition]] for
part2dev_id in self._replica2part2dev_id]</programlisting></para>
<para>That code is a little simplistic because it does not
account for the removal of duplicate devices. If a ring
has more replicas than devices, a partition will have more
than one replica on a device.</para>
<para><literal>array(H)</literal> is used for memory
conservation as there may be millions of
partitions.</para>
</section>
<section xml:id="section_fractional-replicas">
<title>Replica counts</title>
<para>To support the gradual change in replica counts, a ring
can have a real number of replicas and is not restricted
to an integer number of replicas.</para>
<para>A fractional replica count is for the whole ring and not
for individual partitions. It indicates the average number
of replicas for each partition. For example, a replica
count of 3.2 means that 20 percent of partitions have four
replicas and 80 percent have three replicas.</para>
<para>The replica count is adjustable.</para>
<para>Example:</para>
<screen><prompt>$</prompt> <userinput>swift-ring-builder account.builder set_replicas 4</userinput>
<prompt>$</prompt> <userinput>swift-ring-builder account.builder rebalance</userinput></screen>
<para>You must rebalance the replica ring in globally
distributed clusters. Operators of these clusters
generally want an equal number of replicas and regions.
Therefore, when an operator adds or removes a region, the
operator adds or removes a replica. Removing unneeded
replicas saves on the cost of disks.</para>
<para>You can gradually increase the replica count at a rate
that does not adversely affect cluster performance.</para>
<para>For example:</para>
<screen><prompt>$</prompt> <userinput>swift-ring-builder object.builder set_replicas 3.01</userinput>
<prompt>$</prompt> <userinput>swift-ring-builder object.builder rebalance</userinput>
<computeroutput>&lt;distribute rings and wait&gt;...</computeroutput>
<prompt>$</prompt> <userinput>swift-ring-builder object.builder set_replicas 3.02</userinput>
<prompt>$</prompt> <userinput>swift-ring-builder object.builder rebalance</userinput>
<computeroutput>&lt;creatdistribute rings and wait&gt;...</computeroutput></screen>
<para>Changes take effect after the ring is rebalanced.
Therefore, if you intend to change from 3 replicas to 3.01
but you accidentally type <literal>2.01</literal>, no data
is lost.</para>
<para>Additionally, <command>swift-ring-builder
<replaceable>X.builder</replaceable>
create</command> can now take a decimal argument for
the number of replicas.</para>
</section>
<section xml:id="section_partition-shift-value">
<title>Partition shift value</title>
<para>The partition shift value is known internally to the
Ring class as <literal>_part_shift</literal>. This value
is used to shift an MD5 hash to calculate the partition
where the data for that hash should reside. Only the top
four bytes of the hash is used in this process. For
example, to compute the partition for the
<literal>/account/container/object</literal> path, the
Python code might look like the following code:
<programlisting>partition = unpack_from('&gt;I',
md5('/account/container/object').digest())[0] &gt;&gt;
self._part_shift</programlisting></para>
<para>For a ring generated with part_power P, the partition
shift value is <literal>32 - P</literal>.</para>
</section>
<section xml:id="section_build-ring">
<title>Build the ring</title>
<para>The ring builder process includes these high-level
steps:</para>
<orderedlist>
<listitem>
<para>The utility calculates the number of partitions to
assign to each device based on the weight of the
device. For example, for a partition at the power
of 20, the ring has 1,048,576 partitions. One
thousand devices of equal weight each want
1,048.576 partitions. The devices are sorted by
the number of partitions they desire and kept in
order throughout the initialization
process.</para>
<note>
<para>Each device is also assigned a random
tiebreaker value that is used when two devices
desire the same number of partitions. This
tiebreaker is not stored on disk anywhere, and
so two different rings created with the same
parameters will have different partition
assignments. For repeatable partition
assignments,
<literal>RingBuilder.rebalance()</literal>
takes an optional seed value that seeds the
Python pseudo-random number generator.</para>
</note>
</listitem>
<listitem>
<para>The ring builder assigns each partition replica
to the device that requires most partitions at
that point while keeping it as far away as
possible from other replicas. The ring builder
prefers to assign a replica to a device in a
region that does not already have a replica. If no
such region is available, the ring builder
searches for a device in a different zone, or on a
different server. If it does not find one, it
looks for a device with no replicas. Finally, if
all options are exhausted, the ring builder
assigns the replica to the device that has the
fewest replicas already assigned.</para>
<note>
<para>The ring builder assigns multiple replicas
to one device only if the ring has fewer
devices than it has replicas.</para>
</note>
</listitem>
<listitem>
<para>When building a new ring from an old ring, the
ring builder recalculates the desired number of
partitions that each device wants.</para>
</listitem>
<listitem>
<para>The ring builder unassigns partitions and
gathers these partitions for reassignment, as
follows: <itemizedlist>
<listitem>
<para>The ring builder unassigns any
assigned partitions from any removed
devices and adds these partitions to
the gathered list.</para>
</listitem>
<listitem>
<para>The ring builder unassigns any
partition replicas that can be spread
out for better durability and adds
these partitions to the gathered list.
</para>
</listitem>
<listitem>
<para>The ring builder unassigns random
partitions from any devices that have
more partitions than they need and
adds these partitions to the gathered
list.</para>
</listitem>
</itemizedlist></para>
</listitem>
<listitem>
<para>The ring builder reassigns the gathered
partitions to devices by using a similar method to
the one described previously.</para>
</listitem>
<listitem>
<para>When the ring builder reassigns a replica to a
partition, the ring builder records the time of
the reassignment. The ring builder uses this value
when it gathers partitions for reassignment so
that no partition is moved twice in a configurable
amount of time. The RingBuilder class knows this
configurable amount of time as
<literal>min_part_hours</literal>. The ring
builder ignores this restriction for replicas of
partitions on removed devices because removal of a
device happens on device failure only, and
reassignment is the only choice.</para>
</listitem>
</orderedlist>
<para>Theses steps do not always perfectly rebalance a ring
due to the random nature of gathering partitions for
reassignment. To help reach a more balanced ring, the
rebalance process is repeated until near perfect (less
than 1 percent off) or when the balance does not improve
by at least 1 percent (indicating we probably cannot get
perfect balance due to wildly imbalanced zones or too many
partitions recently moved).</para>
</section>
</section>

View File

@ -1,107 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="troubleshooting-openstack-object-storage">
<title>Troubleshoot Object Storage</title>
<para>For Object Storage, everything is logged in <filename>/var/log/syslog</filename> (or messages on some distros).
Several settings enable further customization of logging, such as <literal>log_name</literal>, <literal>log_facility</literal>,
and <literal>log_level</literal>, within the object server configuration files.</para>
<section xml:id="drive-failure">
<title>Drive failure</title>
<para>In the event that a drive has failed, the first step is to make sure the drive is
unmounted. This will make it easier for Object Storage to work around the failure until
it has been resolved. If the drive is going to be replaced immediately, then it is just
best to replace the drive, format it, remount it, and let replication fill it up.</para>
<para>If the drive cant be replaced immediately, then it is best to leave it
unmounted, and remove the drive from the ring. This will allow all the replicas
that were on that drive to be replicated elsewhere until the drive is replaced.
Once the drive is replaced, it can be re-added to the ring.</para>
<para>You can look at error messages in <filename>/var/log/kern.log</filename> for hints of drive failure.</para>
</section>
<section xml:id="server-failure">
<title>Server failure</title>
<para>If a server is having hardware issues, it is a good idea to make sure the
Object Storage services are not running. This will allow Object Storage to
work around the failure while you troubleshoot.</para>
<para>If the server just needs a reboot, or a small amount of work that should only
last a couple of hours, then it is probably best to let Object Storage work
around the failure and get the machine fixed and back online. When the machine
comes back online, replication will make sure that anything that is missing
during the downtime will get updated.</para>
<para>If the server has more serious issues, then it is probably best to remove all
of the servers devices from the ring. Once the server has been repaired and is
back online, the servers devices can be added back into the ring. It is
important that the devices are reformatted before putting them back into the
ring as it is likely to be responsible for a different set of partitions than
before.</para>
</section>
<section xml:id="detect-failed-drives">
<title>Detect failed drives</title>
<para>It has been our experience that when a drive is about to fail, error messages will spew into
/var/log/kern.log. There is a script called swift-drive-audit that can be run via cron
to watch for bad drives. If errors are detected, it will unmount the bad drive, so that
Object Storage can work around it. The script takes a configuration file with the
following settings:</para>
<xi:include href="tables/swift-drive-audit-drive-audit.xml"/>
<para>This script has only been tested on Ubuntu 10.04, so if you are using a
different distro or OS, some care should be taken before using in production.
</para>
</section>
<section xml:id="recover-ring-builder-file">
<title>Emergency recovery of ring builder files</title>
<para>You should always keep a backup of swift ring builder files. However, if an
emergency occurs, this procedure may assist in returning your cluster to an
operational state.</para>
<para>Using existing swift tools, there is no way to recover a builder file from a
<filename>ring.gz</filename> file. However, if you have a knowledge of Python, it is possible to
construct a builder file that is pretty close to the one you have lost. The
following is what you will need to do.</para>
<warning>
<para>This procedure is a last-resort for emergency circumstances. It
requires knowledge of the swift python code and may not succeed.</para>
</warning>
<para>First, load the ring and a new ringbuilder object in a Python REPL:</para>
<programlisting language="python">>>> from swift.common.ring import RingData, RingBuilder
>>> ring = RingData.load('/path/to/account.ring.gz')</programlisting>
<para>Now, start copying the data we have in the ring into the builder.</para>
<programlisting language="python">
>>> import math
>>> partitions = len(ring._replica2part2dev_id[0])
>>> replicas = len(ring._replica2part2dev_id)
>>> builder = RingBuilder(int(Math.log(partitions, 2)), replicas, 1)
>>> builder.devs = ring.devs
>>> builder._replica2part2dev = ring.replica2part2dev_id
>>> builder._last_part_moves_epoch = 0
>>> builder._last_part_moves = array('B', (0 for _ in xrange(self.parts)))
>>> builder._set_parts_wanted()
>>> for d in builder._iter_devs():
d['parts'] = 0
>>> for p2d in builder._replica2part2dev:
for dev_id in p2d:
builder.devs[dev_id]['parts'] += 1</programlisting>
<para>This is the extent of the recoverable fields. For
<literal>min_part_hours</literal> you'll either have to remember what the
value you used was, or just make up a new one.</para>
<programlisting language="python">
>>> builder.change_min_part_hours(24) # or whatever you want it to be</programlisting>
<para>Try some validation: if this doesn't raise an exception, you may feel some
hope. Not too much, though.</para>
<programlisting language="python">>>> builder.validate()</programlisting>
<para>Save the builder.</para>
<programlisting language="python">
>>> import pickle
>>> pickle.dump(builder.to_dict(), open('account.builder', 'wb'), protocol=2)</programlisting>
<para>You should now have a file called 'account.builder' in the current working
directory. Next, run <literal>swift-ring-builder account.builder write_ring</literal>
and compare the new account.ring.gz to the account.ring.gz that you started
from. They probably won't be byte-for-byte identical, but if you load them up
in a REPL and their <literal>_replica2part2dev_id</literal> and
<literal>devs</literal> attributes are the same (or nearly so), then you're
in good shape.</para>
<para>Next, repeat the procedure for <filename>container.ring.gz</filename>
and <filename>object.ring.gz</filename>, and you might get usable builder files.</para>
</section>
</section>

View File

@ -1,53 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="configuring-tenant-specific-storage-for-images">
<title>Configure tenant-specific image locations with Object
Storage</title>
<para>For some deployers, it is not ideal to store all images in
one place to enable all tenants and users to access them. You
can configure the Image Service to store image data in
tenant-specific image locations. Then, only the following
tenants can use the Image Service to access the created image:<itemizedlist>
<listitem>
<para>The tenant who owns the image</para>
</listitem>
<listitem>
<para>Tenants that are defined in
<option>swift_store_admin_tenants</option> and
that have admin-level accounts</para>
</listitem>
</itemizedlist></para>
<procedure>
<title>To configure tenant-specific image locations</title>
<step>
<para>Configure swift as your
<option>default_store</option> in the
<filename>glance-api.conf</filename> file.</para>
</step>
<step>
<para>Set these configuration options in the
<filename>glance-api.conf</filename> file: <itemizedlist>
<listitem>
<para><option>swift_store_multi_tenant</option>.
Set to <literal>True</literal> to enable
tenant-specific storage locations. Default
is <literal>False</literal>.</para>
</listitem>
<listitem>
<para><option>swift_store_admin_tenants</option>.
Specify a list of tenant IDs that can
grant read and write access to all Object
Storage containers that are created by the
Image Service.</para>
</listitem>
</itemizedlist></para>
</step>
</procedure>
<para>With this configuration, images are stored in an
Object Storage service (swift) endpoint that is pulled
from the service catalog for the authenticated
user.</para>
</section>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 504 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 629 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 33 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

View File

@ -1,995 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="680"
height="530.00006"
id="svg4396"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="installguide_arch-neutron.svg">
<defs
id="defs4398" />
<sodipodi:namedview
inkscape:document-units="mm"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="469.99999"
inkscape:cy="269.75908"
inkscape:current-layer="layer1"
id="namedview4400"
showgrid="true"
inkscape:snap-bbox="true"
inkscape:bbox-nodes="true"
units="mm"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1366"
inkscape:window-height="746"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1">
<inkscape:grid
type="xygrid"
id="grid4405"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
originx="-20.000007px"
originy="-399.98715px"
dotted="false" />
</sodipodi:namedview>
<metadata
id="metadata4402">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-9.9999943,-14.09445)">
<g
transform="translate(1.2516975e-5,-308.26769)"
id="g3657">
<rect
ry="4.999999"
rx="5"
y="323.34317"
x="530.98096"
height="528.03802"
width="158.03801"
id="rect7705-0-8"
style="fill:#e0e0e0;fill-opacity:1;stroke:#000000;stroke-width:1.96199989;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7739-1-5"
y="342.36218"
x="610"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:16px;text-align:center;text-anchor:middle"
y="342.36218"
x="610"
id="tspan7741-9-9"
sodipodi:role="line">Compute Node</tspan><tspan
style="font-size:14px;font-style:oblique;text-align:center;text-anchor:middle;-inkscape-font-specification:Sans Oblique"
id="tspan7743-5-4"
y="360.73312"
x="610"
sodipodi:role="line">compute1</tspan></text>
</g>
<g
transform="translate(1.2516975e-5,-308.26769)"
id="g3602">
<rect
ry="4.9999986"
rx="5"
y="323.34314"
x="350.98099"
height="528.03796"
width="158.03801"
id="rect7705-0"
style="fill:#e0e0e0;fill-opacity:1;stroke:#000000;stroke-width:1.96199977;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7739-1"
y="342.36215"
x="429.99997"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:16px;text-align:center;text-anchor:middle"
y="342.36215"
x="429.99997"
id="tspan7741-9"
sodipodi:role="line">Network Node</tspan><tspan
style="font-size:14px;font-style:oblique;text-align:center;text-anchor:middle;-inkscape-font-specification:Sans Oblique"
id="tspan7743-5"
y="360.73309"
x="429.99997"
sodipodi:role="line">network</tspan></text>
</g>
<g
transform="translate(1.2516975e-5,-308.26769)"
id="g3548">
<rect
ry="4.9999995"
rx="5"
y="323.34317"
x="10.980982"
height="528.03802"
width="318.03802"
id="rect7705"
style="fill:#e0e0e0;fill-opacity:1;stroke:#000000;stroke-width:1.96200001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7739"
y="342.36218"
x="170"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:16px;text-align:center;text-anchor:middle"
y="342.36218"
x="170"
id="tspan7741"
sodipodi:role="line">Controller Node</tspan><tspan
style="font-size:14px;font-style:oblique;text-align:center;text-anchor:middle;-inkscape-font-specification:Sans Oblique"
id="tspan7743"
y="360.73312"
x="170"
sodipodi:role="line">controller</tspan></text>
</g>
<rect
style="fill:#606060;fill-opacity:1;stroke:#000000;stroke-width:1.96200013;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect7939-2"
width="138.03801"
height="268.03799"
x="182.146"
y="155.0755"
rx="5"
ry="4.999999" />
<g
transform="translate(1.2516975e-5,-308.26769)"
id="g3554">
<rect
ry="4.9999995"
rx="5.0000005"
y="373.34317"
x="20.980988"
height="68.025177"
width="298.03802"
id="rect9004"
style="fill:#606060;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.96200013;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5.0000005"
y="392.94467"
x="30.582485"
height="40"
width="118.835"
id="rect7725-7-6-5"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-2-7"
y="412.36218"
x="89.999985"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px"
y="412.36218"
x="89.999985"
id="tspan7729-1-3-4"
sodipodi:role="line">Database</tspan><tspan
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-8-7"
y="428.22711"
x="89.999985"
sodipodi:role="line">MySQL or MariaDB</tspan></text>
<rect
ry="5"
rx="5.0000005"
y="392.94467"
x="190.58249"
height="40"
width="118.835"
id="rect7725-7-6-5-3"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-2-7-4"
y="412.36218"
x="249.99997"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px;font-style:normal;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-8-7-8"
y="412.36218"
x="249.99997"
sodipodi:role="line">Message Broker</tspan><tspan
id="tspan9002"
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
y="428.22711"
x="249.99997"
sodipodi:role="line">RabbitMQ or Qpid</tspan></text>
<text
sodipodi:linespacing="125%"
id="text9036"
y="386.50281"
x="98.292946"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:16px;fill:#ffffff;fill-opacity:1"
y="386.50281"
x="98.292946"
id="tspan9038"
sodipodi:role="line">Supporting Services</tspan></text>
</g>
<g
transform="translate(1.2516975e-5,-308.26769)"
id="g3567">
<rect
ry="4.9999995"
rx="5"
y="462.17822"
x="20.980995"
height="289.203"
width="138.03799"
id="rect7939"
style="fill:#606060;fill-opacity:1;stroke:#000000;stroke-width:1.96200013;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5"
y="581.77966"
x="30.582497"
height="40"
width="118.835"
id="rect7725-7-0"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-4"
y="602.36218"
x="89.999985"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px"
y="602.36218"
x="89.999985"
id="tspan7729-1-9"
sodipodi:role="line">Compute</tspan><tspan
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-4"
y="618.22711"
x="89.999985"
sodipodi:role="line">Nova Management</tspan></text>
<rect
ry="5"
rx="5"
y="631.77972"
x="30.582497"
height="58.834942"
width="118.835"
id="rect7725-7-0-0"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-4-3"
y="652.36224"
x="89.999985"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px"
y="652.36224"
x="89.999985"
id="tspan7729-1-9-6"
sodipodi:role="line">Networking</tspan><tspan
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-4-2"
y="668.22717"
x="89.999985"
sodipodi:role="line">Neutron Server</tspan><tspan
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
y="683.22717"
x="89.999985"
sodipodi:role="line"
id="tspan8066">ML2 Plug-In</tspan></text>
<rect
ry="5"
rx="5"
y="531.77966"
x="30.582497"
height="40"
width="118.835"
id="rect7725-7"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7"
y="552.36218"
x="89.999985"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px"
y="552.36218"
x="89.999985"
id="tspan7729-1"
sodipodi:role="line">Image Service</tspan><tspan
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2"
y="568.22711"
x="89.999985"
sodipodi:role="line">Glance</tspan></text>
<rect
ry="5"
rx="5.0000005"
y="481.77966"
x="30.582497"
height="40"
width="118.835"
id="rect7725-7-6"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-2"
y="502.34937"
x="89.999977"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px"
y="502.34937"
x="89.999977"
id="tspan7729-1-3"
sodipodi:role="line">Identity</tspan><tspan
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-8"
y="518.21429"
x="89.999977"
sodipodi:role="line">Keystone</tspan></text>
<rect
ry="5"
rx="5"
y="701.19714"
x="30.582497"
height="40"
width="118.83499"
id="rect7725-7-0-0-5-2"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-4-3-8-7"
y="721.77966"
x="89.417488"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px"
y="721.77966"
x="89.417488"
id="tspan7729-1-9-6-8-5"
sodipodi:role="line">Dashboard</tspan><tspan
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-4-2-1-7"
y="737.64459"
x="89.417488"
sodipodi:role="line">Horizon</tspan></text>
<text
sodipodi:linespacing="125%"
id="text8032"
y="478.08875"
x="37.222656"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:16px;fill:#ffffff;fill-opacity:1"
y="478.08875"
x="37.222656"
id="tspan8034"
sodipodi:role="line">Basic Services</tspan></text>
</g>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="187.18752"
y="168.33278"
id="text8032-9"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan8034-2"
x="187.18752"
y="168.33278"
style="font-size:16px;fill:#ffffff;fill-opacity:1">Optional Services</tspan></text>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect7725-7-6-2"
width="118.835"
height="40"
x="191.74751"
y="173.51198"
rx="5"
ry="5" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="250.00002"
y="194.0945"
id="text7727-7-2-0"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan7729-1-3-5"
x="250.00002"
y="194.0945"
style="font-size:14px">Block Storage</tspan><tspan
sodipodi:role="line"
x="250.00002"
y="209.95941"
id="tspan7731-2-8-5"
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique">Cinder Management</tspan></text>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect7725-7-6-2-7"
width="118.835"
height="40"
x="191.74751"
y="223.51198"
rx="5"
ry="5" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="249.99998"
y="244.0945"
id="text7727-7-2-0-6"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan7729-1-3-5-7"
x="249.99998"
y="244.0945"
style="font-size:14px">Object Storage</tspan><tspan
sodipodi:role="line"
x="249.99998"
y="259.95941"
id="tspan7731-2-8-5-8"
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique">Swift Proxy</tspan></text>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect7725-7-0-0-5-2-2"
width="118.835"
height="40"
x="191.74751"
y="323.51199"
rx="5"
ry="5" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="251.16502"
y="344.09451"
id="text7727-7-4-3-8-7-7"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan7729-1-9-6-8-5-8"
x="251.16502"
y="344.09451"
style="font-size:14px">Orchestration</tspan><tspan
sodipodi:role="line"
x="251.16502"
y="359.95944"
id="tspan7731-2-4-2-1-7-0"
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique">Heat</tspan></text>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect7725-7-0-0-5-2-2-8"
width="118.835"
height="40"
x="191.74751"
y="374.67703"
rx="5"
ry="5" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="251.16502"
y="395.25955"
id="text7727-7-4-3-8-7-7-1"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan7729-1-9-6-8-5-8-6"
x="251.16502"
y="395.25955"
style="font-size:14px">Telemetry</tspan><tspan
sodipodi:role="line"
x="251.16502"
y="411.12448"
id="tspan7731-2-4-2-1-7-0-0"
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique">Ceilometer Core</tspan></text>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect7725-7-0-0-5-2-2-5"
width="118.83501"
height="40"
x="191.74751"
y="274.67697"
rx="5"
ry="5" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="251.16502"
y="295.25955"
id="text7727-7-4-3-8-7-7-8"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan7729-1-9-6-8-5-8-9"
x="251.16502"
y="295.25955"
style="font-size:14px">Database Service</tspan><tspan
sodipodi:role="line"
x="251.16502"
y="311.12448"
id="tspan7731-2-4-2-1-7-0-00"
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique">Trove Management</tspan></text>
<g
transform="translate(1.2516975e-5,-308.26769)"
id="g3593">
<rect
ry="4.9999995"
rx="5"
y="773.3432"
x="100.981"
height="68.037994"
width="138.03799"
id="rect8524"
style="fill:#606060;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.96200013;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5"
y="791.77966"
x="110.5825"
height="40"
width="118.835"
id="rect7725-7-0-0-5-1"
style="fill:#c00000;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-4-3-8-4"
y="812.36218"
x="170"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:12px;font-style:oblique;fill:#ffffff;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-4-2-1-8"
y="812.36218"
x="171.94141"
sodipodi:role="line"><tspan
id="tspan3127"
style="font-size:14px;font-style:normal;fill:#ffffff">1: Management </tspan></tspan><tspan
style="font-size:12px;font-style:oblique;fill:#ffffff;-inkscape-font-specification:Sans Oblique"
y="828.22711"
x="170"
sodipodi:role="line"
id="tspan3129">10.0.0.11/24</tspan></text>
<text
sodipodi:linespacing="125%"
id="text8526"
y="788.09265"
x="102.98046"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:16px;fill:#ffffff;fill-opacity:1"
y="788.09265"
x="102.98046"
id="tspan8528"
sodipodi:role="line">Network Interfaces</tspan></text>
</g>
<g
transform="translate(1.2516975e-5,-308.26769)"
id="g3608">
<rect
ry="4.999999"
rx="5"
y="373.34317"
x="360.98099"
height="119.20304"
width="138.03801"
id="rect7939-2-2"
style="fill:#606060;fill-opacity:1;stroke:#000000;stroke-width:1.96200013;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5"
y="394.10971"
x="370.58249"
height="91.165047"
width="118.835"
id="rect7725-7-6-2-2"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-2-0-1"
y="412.36218"
x="428.83493"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px"
y="412.36218"
x="428.83493"
id="tspan7729-1-3-5-4"
sodipodi:role="line">Networking</tspan><tspan
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-8-5-86"
y="428.22711"
x="428.83493"
sodipodi:role="line">ML2 Plug-In</tspan><tspan
id="tspan8860"
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
y="443.22711"
x="428.83493"
sodipodi:role="line">Layer 2 Agent (OVS)</tspan><tspan
id="tspan8862"
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
y="458.22711"
x="428.83493"
sodipodi:role="line">Layer 3 Agent</tspan><tspan
id="tspan8864"
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
y="473.22711"
x="428.83493"
sodipodi:role="line">DHCP Agent</tspan></text>
<text
sodipodi:linespacing="125%"
id="text7739-1-31"
y="388.08875"
x="429.72266"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:16px;font-style:normal;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;-inkscape-font-specification:Sans Oblique"
id="tspan7743-5-8"
y="388.08875"
x="429.72266"
sodipodi:role="line">Basic Services</tspan></text>
</g>
<g
transform="translate(1.2516975e-5,-308.26769)"
id="g3634">
<rect
ry="4.9999995"
rx="5"
y="671.38116"
x="360.98099"
height="169.99995"
width="138.03799"
id="rect8524-1"
style="fill:#606060;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.96200001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5"
y="691.7796"
x="370.58249"
height="40"
width="118.835"
id="rect7725-7-0-0-5-1-4"
style="fill:#c00000;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-4-3-8-4-9"
y="712.36212"
x="429.99997"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:12px;font-style:oblique;fill:#ffffff;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-4-2-1-8-0"
y="712.36212"
x="429.99997"
sodipodi:role="line"><tspan
id="tspan3131"
style="font-size:14px;font-style:normal;fill:#ffffff">1: Management</tspan></tspan><tspan
style="font-size:12px;font-style:oblique;fill:#ffffff;-inkscape-font-specification:Sans Oblique"
y="728.22705"
x="429.99997"
sodipodi:role="line"
id="tspan3133">10.0.0.21/24</tspan></text>
<text
sodipodi:linespacing="125%"
id="text8526-3"
y="688.09259"
x="362.98044"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:16px;fill:#ffffff;fill-opacity:1"
y="688.09259"
x="362.98044"
id="tspan8528-0"
sodipodi:role="line">Network Interfaces</tspan></text>
<rect
ry="5"
rx="5"
y="741.7796"
x="370.58249"
height="40"
width="118.835"
id="rect7725-7-0-0-5-1-4-7"
style="fill:#00c000;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5"
y="791.7796"
x="370.58249"
height="40"
width="118.835"
id="rect7725-7-0-0-5-1-4-7-6"
style="fill:#0000c0;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-4-3-8-4-9-6"
y="812.36212"
x="429.99997"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:12px;font-style:oblique;fill:#ffffff;fill-opacity:1;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-4-2-1-8-0-4"
y="812.36212"
x="429.99997"
sodipodi:role="line"><tspan
id="tspan3139"
style="font-size:14px;font-style:normal;fill:#ffffff;fill-opacity:1">3: External</tspan></tspan><tspan
style="font-size:12px;font-style:oblique;fill:#ffffff;fill-opacity:1;-inkscape-font-specification:Sans Oblique"
y="828.22705"
x="429.99997"
sodipodi:role="line"
id="tspan3141">(unnumbered)</tspan></text>
<text
sodipodi:linespacing="125%"
id="text7727-7-4-3-8-4-9-7"
y="762.36212"
x="429.99997"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:13px;font-style:normal;fill:#ffffff;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-4-2-1-8-0-3"
y="762.36212"
x="429.99997"
sodipodi:role="line">2: Instance Tunnels</tspan><tspan
style="font-size:12px;font-style:oblique;fill:#ffffff;-inkscape-font-specification:Sans Oblique"
y="778.22705"
x="429.99997"
sodipodi:role="line"
id="tspan3137">10.0.1.21/24</tspan></text>
</g>
<g
transform="translate(1.2516975e-5,-308.26769)"
id="g3678">
<rect
ry="4.999999"
rx="5"
y="553.3432"
x="540.98096"
height="68.037971"
width="138.03801"
id="rect7939-2-2-7"
style="fill:#606060;fill-opacity:1;stroke:#000000;stroke-width:1.96200001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7739-1-31-2"
y="568.08875"
x="609.72266"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:16px;font-style:normal;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;-inkscape-font-specification:Sans Oblique"
id="tspan7743-5-8-6"
y="568.08875"
x="609.72266"
sodipodi:role="line">Optional Services</tspan></text>
<rect
ry="5"
rx="5"
y="572.9447"
x="550.58252"
height="38.834995"
width="118.835"
id="rect7725-7-6-2-2-1"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7352"
y="592.36218"
x="610"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px;text-align:center;text-anchor:middle"
y="592.36218"
x="610"
id="tspan7354"
sodipodi:role="line">Telemetry</tspan><tspan
style="font-style:oblique;text-align:center;text-anchor:middle;-inkscape-font-specification:Sans Oblique"
id="tspan7356"
y="608.22711"
x="610"
sodipodi:role="line">Ceilometer Agent</tspan></text>
</g>
<g
transform="translate(1.2516975e-5,-308.26769)"
id="g3687">
<rect
ry="4.9999995"
rx="5"
y="721.38123"
x="540.98096"
height="119.99995"
width="138.03799"
id="rect8524-1-9"
style="fill:#606060;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.96200001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5"
y="741.77966"
x="550.58252"
height="40"
width="118.835"
id="rect7725-7-0-0-5-1-4-3"
style="fill:#c00000;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-4-3-8-4-9-1"
y="762.36218"
x="610"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:12px;font-style:oblique;fill:#ffffff;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-4-2-1-8-0-9"
y="762.36218"
x="610"
sodipodi:role="line"><tspan
id="tspan3143"
style="font-size:14px;font-style:normal;fill:#ffffff">1: Management</tspan></tspan><tspan
style="font-size:12px;font-style:oblique;fill:#ffffff;-inkscape-font-specification:Sans Oblique"
y="778.22711"
x="610"
sodipodi:role="line"
id="tspan3145">10.0.0.31/24</tspan></text>
<rect
ry="5"
rx="5"
y="791.77966"
x="550.58252"
height="40"
width="118.835"
id="rect7725-7-0-0-5-1-4-7-5"
style="fill:#00c000;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-4-3-8-4-9-7-5"
y="812.36218"
x="610"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:13px;font-style:normal;fill:#ffffff;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-4-2-1-8-0-3-0"
y="812.36218"
x="610"
sodipodi:role="line">2: Instance Tunnels</tspan><tspan
style="font-size:12px;font-style:oblique;fill:#ffffff;-inkscape-font-specification:Sans Oblique"
y="828.22711"
x="610"
sodipodi:role="line"
id="tspan3149">10.0.1.31/24</tspan></text>
<text
sodipodi:linespacing="125%"
id="text8526-3-9"
y="738.09265"
x="542.98047"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:16px;fill:#ffffff;fill-opacity:1"
y="738.09265"
x="542.98047"
id="tspan8528-0-5"
sodipodi:role="line">Network Interfaces</tspan></text>
</g>
<g
transform="translate(1.2516975e-5,-308.26769)"
id="g3663">
<rect
ry="4.999999"
rx="5"
y="373.34317"
x="540.98096"
height="159.20305"
width="138.03801"
id="rect7939-2-2-1"
style="fill:#606060;fill-opacity:1;stroke:#000000;stroke-width:1.96200013;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5"
y="392.94467"
x="550.58252"
height="61.165047"
width="118.835"
id="rect7725-7-6-2-2-5"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-2-0-1-2"
y="412.36218"
x="610"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px"
y="412.36218"
x="610"
id="tspan7729-1-3-5-4-3"
sodipodi:role="line">Compute</tspan><tspan
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-8-5-86-2"
y="428.22711"
x="610"
sodipodi:role="line">Nova Hypervisor</tspan><tspan
id="tspan8864-6"
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
y="443.22711"
x="610"
sodipodi:role="line">KVM or QEMU</tspan></text>
<rect
ry="5"
rx="5"
y="462.94467"
x="550.58252"
height="61.165047"
width="118.835"
id="rect7725-7-6-2-2-6"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-2-0-1-2-2"
y="482.36218"
x="610"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px"
y="482.36218"
x="610"
id="tspan7729-1-3-5-4-3-9"
sodipodi:role="line">Networking</tspan><tspan
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-8-5-86-2-0"
y="498.22711"
x="610"
sodipodi:role="line">ML2 Plug-In</tspan><tspan
id="tspan8864-6-4"
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
y="513.22711"
x="610"
sodipodi:role="line">Layer 2 Agent (OVS)</tspan></text>
<text
sodipodi:linespacing="125%"
id="text7739-1-31-8"
y="388.08875"
x="609.72266"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:16px;font-style:normal;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;-inkscape-font-specification:Sans Oblique"
id="tspan7743-5-8-2"
y="388.08875"
x="609.72266"
sodipodi:role="line">Basic Services</tspan></text>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

View File

@ -1,737 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="500.00003"
height="530"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="installguide_arch-nova.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.01"
inkscape:cx="292.46304"
inkscape:cy="269.03294"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:snap-global="true"
showguides="true"
inkscape:snap-bbox="true"
inkscape:snap-bbox-midpoints="false"
inkscape:window-width="1366"
inkscape:window-height="746"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:snap-nodes="false"
inkscape:bbox-nodes="true"
inkscape:bbox-paths="true"
inkscape:snap-bbox-edge-midpoints="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<inkscape:grid
type="xygrid"
id="grid3755"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
dotted="false"
originx="-9.9999837px"
originy="-198.83497px" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-9.9999837,-323.52718)">
<g
id="g3781">
<rect
ry="4.999999"
rx="5"
y="324.50818"
x="350.98102"
height="528.03802"
width="158.03801"
id="rect7705-0-8"
style="fill:#e0e0e0;fill-opacity:1;stroke:#000000;stroke-width:1.96199989;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7739-1-5"
y="343.52719"
x="430"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:16px;text-align:center;text-anchor:middle"
y="343.52719"
x="430"
id="tspan7741-9-9"
sodipodi:role="line">Compute Node</tspan><tspan
style="font-size:14px;font-style:oblique;text-align:center;text-anchor:middle;-inkscape-font-specification:Sans Oblique"
id="tspan7743-5-4"
y="361.89813"
x="430"
sodipodi:role="line">compute1</tspan></text>
</g>
<g
id="g3706">
<rect
ry="4.9999995"
rx="5"
y="324.50818"
x="10.980984"
height="528.03802"
width="318.03802"
id="rect7705"
style="fill:#e0e0e0;fill-opacity:1;stroke:#000000;stroke-width:1.96200001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
</g>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="170"
y="343.52719"
id="text7739"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan7741"
x="170"
y="343.52719"
style="font-size:16px;text-align:center;text-anchor:middle">Controller Node</tspan><tspan
sodipodi:role="line"
x="170"
y="361.89813"
id="tspan7743"
style="font-size:14px;font-style:oblique;text-align:center;text-anchor:middle;-inkscape-font-specification:Sans Oblique">controller</tspan></text>
<g
id="g3237">
<rect
ry="4.999999"
rx="5"
y="374.50818"
x="360.98102"
height="98.038002"
width="138.03801"
id="rect7939-2-2-1"
style="fill:#606060;fill-opacity:1;stroke:#000000;stroke-width:1.96200013;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5"
y="394.10968"
x="370.58252"
height="68.834999"
width="118.835"
id="rect7725-7-6-2-2-5"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-2-0-1-2"
y="413.52719"
x="430"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px"
y="413.52719"
x="430"
id="tspan7729-1-3-5-4-3"
sodipodi:role="line">Compute</tspan><tspan
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-8-5-86-2"
y="429.39212"
x="430"
sodipodi:role="line">Nova Hypervisor</tspan><tspan
id="tspan3925"
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
y="444.39212"
x="430"
sodipodi:role="line">KVM or QEMU</tspan><tspan
id="tspan8864-6"
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
y="459.39212"
x="430"
sodipodi:role="line">Nova Networking</tspan></text>
<text
sodipodi:linespacing="125%"
id="text7739-1-31-8"
y="388.08871"
x="429.72266"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:16px;font-style:normal;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;-inkscape-font-specification:Sans Oblique"
id="tspan7743-5-8-2"
y="388.08871"
x="429.72266"
sodipodi:role="line">Basic Services</tspan></text>
</g>
<g
id="g3228">
<rect
ry="4.999999"
rx="5"
y="494.50818"
x="360.98099"
height="68.037971"
width="138.03801"
id="rect7939-2-2-7"
style="fill:#606060;fill-opacity:1;stroke:#000000;stroke-width:1.96200001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5"
y="514.10968"
x="370.58249"
height="38.834995"
width="118.835"
id="rect7725-7-6-2-2-1"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7352"
y="533.52716"
x="430"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px;text-align:center;text-anchor:middle"
y="533.52716"
x="430"
id="tspan7354"
sodipodi:role="line">Telemetry</tspan><tspan
style="font-style:oblique;text-align:center;text-anchor:middle;-inkscape-font-specification:Sans Oblique"
id="tspan7356"
y="549.39209"
x="430"
sodipodi:role="line">Ceilometer Agent</tspan></text>
<text
sodipodi:linespacing="125%"
id="text7739-1-31-2"
y="509.25372"
x="429.72266"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:16px;font-style:normal;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;-inkscape-font-specification:Sans Oblique"
id="tspan7743-5-8-6"
y="509.25372"
x="429.72266"
sodipodi:role="line">Optional Services</tspan></text>
</g>
<g
id="g3215">
<rect
ry="4.9999995"
rx="5"
y="722.5462"
x="360.98102"
height="119.99995"
width="138.03799"
id="rect8524-1-9"
style="fill:#606060;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.96200001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5"
y="742.94464"
x="370.58252"
height="40"
width="118.835"
id="rect7725-7-0-0-5-1-4-3"
style="fill:#c00000;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-4-3-8-4-9-1"
y="763.52716"
x="430"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:12px;font-style:oblique;fill:#ffffff;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-4-2-1-8-0-9"
y="763.52716"
x="430"
sodipodi:role="line"><tspan
id="tspan3207"
style="font-size:14px;font-style:normal;fill:#ffffff">1: Management</tspan></tspan><tspan
style="font-size:12px;font-style:oblique;fill:#ffffff;-inkscape-font-specification:Sans Oblique"
y="779.39209"
x="430"
sodipodi:role="line"
id="tspan3209">10.0.0.31/24</tspan></text>
<rect
ry="5"
rx="5"
y="792.94464"
x="370.58252"
height="40"
width="118.835"
id="rect7725-7-0-0-5-1-4-7-5"
style="fill:#0000c0;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-4-3-8-4-9-7-5"
y="813.52716"
x="430"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:12px;font-style:oblique;fill:#ffffff;fill-opacity:1;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-4-2-1-8-0-3-0"
y="813.52716"
x="430"
sodipodi:role="line"><tspan
id="tspan3199"
style="font-size:14px;font-style:normal;fill:#ffffff;fill-opacity:1">2: External</tspan></tspan><tspan
style="font-size:12px;font-style:oblique;fill:#ffffff;fill-opacity:1;-inkscape-font-specification:Sans Oblique"
y="829.39209"
x="430"
sodipodi:role="line"
id="tspan3201">(unnumbered)</tspan></text>
<text
sodipodi:linespacing="125%"
id="text8526-3-9"
y="739.25763"
x="362.98047"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:16px;fill:#ffffff;fill-opacity:1"
y="739.25763"
x="362.98047"
id="tspan8528-0-5"
sodipodi:role="line">Network Interfaces</tspan></text>
</g>
<g
id="g3722">
<rect
ry="4.9999995"
rx="5"
y="463.34323"
x="20.980999"
height="218.03793"
width="138.03799"
id="rect7939"
style="fill:#606060;fill-opacity:1;stroke:#000000;stroke-width:1.96200013;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5"
y="582.9447"
x="30.5825"
height="40"
width="118.835"
id="rect7725-7-0"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5"
y="532.9447"
x="30.5825"
height="40"
width="118.835"
id="rect7725-7"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5.0000005"
y="482.94467"
x="30.5825"
height="40"
width="118.835"
id="rect7725-7-6"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5"
y="631.77966"
x="30.582508"
height="40"
width="118.83499"
id="rect7725-7-0-0-5-2"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-4"
y="603.52722"
x="89.999992"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px"
y="603.52722"
x="89.999992"
id="tspan7729-1-9"
sodipodi:role="line">Compute</tspan><tspan
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-4"
y="619.39215"
x="89.999992"
sodipodi:role="line">Nova Management</tspan></text>
<text
sodipodi:linespacing="125%"
id="text7727-7"
y="553.52722"
x="89.999992"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px"
y="553.52722"
x="89.999992"
id="tspan7729-1"
sodipodi:role="line">Image Service</tspan><tspan
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2"
y="569.39215"
x="89.999992"
sodipodi:role="line">Glance</tspan></text>
<text
sodipodi:linespacing="125%"
id="text7727-7-2"
y="502.36215"
x="90"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px"
y="502.36215"
x="90"
id="tspan7729-1-3"
sodipodi:role="line">Identity</tspan><tspan
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-8"
y="518.22705"
x="90"
sodipodi:role="line">Keystone</tspan></text>
<text
sodipodi:linespacing="125%"
id="text7727-7-4-3-8-7"
y="652.36218"
x="90"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px"
y="652.36218"
x="90"
id="tspan7729-1-9-6-8-5"
sodipodi:role="line">Dashboard</tspan><tspan
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-4-2-1-7"
y="668.22711"
x="90"
sodipodi:role="line">Horizon</tspan></text>
<text
sodipodi:linespacing="125%"
id="text8032"
y="478.08871"
x="37.222656"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:16px;fill:#ffffff;fill-opacity:1"
y="478.08871"
x="37.222656"
id="tspan8034"
sodipodi:role="line">Basic Services</tspan></text>
</g>
<g
id="g3743">
<rect
ry="4.999999"
rx="5"
y="464.50818"
x="182.146"
height="266.87299"
width="138.03801"
id="rect7939-2"
style="fill:#606060;fill-opacity:1;stroke:#000000;stroke-width:1.96200013;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5"
y="482.94467"
x="191.7475"
height="40"
width="118.835"
id="rect7725-7-6-2"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5"
y="532.9447"
x="191.7475"
height="40"
width="118.835"
id="rect7725-7-6-2-7"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5"
y="632.9447"
x="191.7475"
height="40"
width="118.835"
id="rect7725-7-0-0-5-2-2"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5"
y="682.9447"
x="190.5825"
height="40"
width="118.835"
id="rect7725-7-0-0-5-2-2-8"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5"
y="582.9447"
x="190.58249"
height="40"
width="118.83501"
id="rect7725-7-0-0-5-2-2-5"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-2-0"
y="503.52719"
x="250"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px"
y="503.52719"
x="250"
id="tspan7729-1-3-5"
sodipodi:role="line">Block Storage</tspan><tspan
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-8-5"
y="519.39209"
x="250"
sodipodi:role="line">Cinder Management</tspan></text>
<text
sodipodi:linespacing="125%"
id="text7727-7-2-0-6"
y="553.52722"
x="249.99998"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px"
y="553.52722"
x="249.99998"
id="tspan7729-1-3-5-7"
sodipodi:role="line">Object Storage</tspan><tspan
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-8-5-8"
y="569.39215"
x="249.99998"
sodipodi:role="line">Swift Proxy</tspan></text>
<text
sodipodi:linespacing="125%"
id="text7727-7-4-3-8-7-7"
y="653.52722"
x="251.16501"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px"
y="653.52722"
x="251.16501"
id="tspan7729-1-9-6-8-5-8"
sodipodi:role="line">Orchestration</tspan><tspan
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-4-2-1-7-0"
y="669.39215"
x="251.16501"
sodipodi:role="line">Heat</tspan></text>
<text
sodipodi:linespacing="125%"
id="text7727-7-4-3-8-7-7-1"
y="704.69226"
x="251.16501"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px"
y="704.69226"
x="251.16501"
id="tspan7729-1-9-6-8-5-8-6"
sodipodi:role="line">Telemetry</tspan><tspan
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-4-2-1-7-0-0"
y="720.55719"
x="251.16501"
sodipodi:role="line">Ceilometer Core</tspan></text>
<text
sodipodi:linespacing="125%"
id="text7727-7-4-3-8-7-7-8"
y="602.36218"
x="250"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px"
y="602.36218"
x="250"
id="tspan7729-1-9-6-8-5-8-9"
sodipodi:role="line">Database Service</tspan><tspan
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-4-2-1-7-0-00"
y="618.22711"
x="250"
sodipodi:role="line">Trove Management</tspan></text>
<text
sodipodi:linespacing="125%"
id="text8032-9"
y="477.76547"
x="188.35251"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:16px;fill:#ffffff;fill-opacity:1"
y="477.76547"
x="188.35251"
id="tspan8034-2"
sodipodi:role="line">Optional Services</tspan></text>
</g>
<g
id="g3709">
<rect
ry="4.9999995"
rx="5.0000005"
y="374.50815"
x="20.980988"
height="66.873001"
width="298.03802"
id="rect9004"
style="fill:#606060;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.96200001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5.0000005"
y="392.94467"
x="30.582487"
height="40"
width="118.835"
id="rect7725-7-6-5"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-2-7"
y="413.52719"
x="89.999985"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px"
y="413.52719"
x="89.999985"
id="tspan7729-1-3-4"
sodipodi:role="line">Database</tspan><tspan
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-8-7"
y="429.39212"
x="89.999985"
sodipodi:role="line">MySQL or MariaDB</tspan></text>
<rect
ry="5"
rx="5.0000005"
y="394.10968"
x="190.58249"
height="40"
width="118.835"
id="rect7725-7-6-5-3"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-2-7-4"
y="413.52719"
x="249.99998"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:14px;font-style:normal;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-8-7-8"
y="413.52719"
x="249.99998"
sodipodi:role="line">Message Broker</tspan><tspan
id="tspan9002"
style="font-size:12px;font-style:oblique;-inkscape-font-specification:Sans Oblique"
y="429.39212"
x="249.99998"
sodipodi:role="line">RabbitMQ or Qpid</tspan></text>
<text
sodipodi:linespacing="125%"
id="text9036"
y="386.50281"
x="98.292969"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:16px;fill:#ffffff;fill-opacity:1"
y="386.50281"
x="98.292969"
id="tspan9038"
sodipodi:role="line">Supporting Services</tspan></text>
</g>
<g
id="g3768">
<rect
ry="4.9999995"
rx="5"
y="774.50824"
x="100.981"
height="68.037994"
width="138.03799"
id="rect8524"
style="fill:#606060;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.96200013;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
ry="5"
rx="5"
y="792.9447"
x="110.5825"
height="40"
width="118.835"
id="rect7725-7-0-0-5-1"
style="fill:#c00000;fill-opacity:1;stroke:#000000;stroke-width:1.16499996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<text
sodipodi:linespacing="125%"
id="text7727-7-4-3-8-4"
y="813.52722"
x="170"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:12px;font-style:oblique;fill:#ffffff;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-4-2-1-8"
y="813.52722"
x="170"
sodipodi:role="line"><tspan
id="tspan3203"
style="font-size:14px;font-style:normal;fill:#ffffff">1: Management</tspan></tspan><tspan
style="font-size:12px;font-style:oblique;fill:#ffffff;-inkscape-font-specification:Sans Oblique"
y="829.39215"
x="170"
sodipodi:role="line"
id="tspan3205">10.0.0.11/24</tspan></text>
<text
sodipodi:linespacing="125%"
id="text8526"
y="789.25769"
x="102.98046"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:16px;fill:#ffffff;fill-opacity:1"
y="789.25769"
x="102.98046"
id="tspan8528"
sodipodi:role="line">Network Interfaces</tspan></text>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

View File

@ -1,622 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="340"
height="896.8075"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="installguide_neutron-initial-networks.svg">
<defs
id="defs4">
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mend"
style="overflow:visible">
<path
id="path7091"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.4,0,0,-0.4,-4,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend"
style="overflow:visible">
<path
id="path7109"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend"
style="overflow:visible">
<path
id="path7103"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
inkscape:connector-curvature="0" />
</marker>
<linearGradient
id="linearGradient6753">
<stop
id="stop6761"
offset="0"
style="stop-color:#80ff00;stop-opacity:1;" />
<stop
style="stop-color:#0080ff;stop-opacity:1;"
offset="1"
id="stop6757" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6753"
id="linearGradient6759"
x1="157.56857"
y1="529.86218"
x2="253.43143"
y2="529.86218"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.95000001,2.9780565,364.63374)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6753-8"
id="linearGradient6759-1"
x1="157.56857"
y1="529.86218"
x2="253.43143"
y2="529.86218"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,175)" />
<linearGradient
id="linearGradient6753-8">
<stop
id="stop6761-9"
offset="0"
style="stop-color:#80ff00;stop-opacity:1;" />
<stop
style="stop-color:#0080ff;stop-opacity:1;"
offset="1"
id="stop6757-2" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.16"
inkscape:cx="132.16466"
inkscape:cy="507.88406"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:snap-bbox="true"
inkscape:snap-bbox-midpoints="false"
inkscape:snap-bbox-edge-midpoints="false"
inkscape:bbox-paths="false"
inkscape:bbox-nodes="false"
inkscape:snap-nodes="false"
inkscape:snap-global="true"
inkscape:window-width="1366"
inkscape:window-height="746"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<inkscape:grid
type="xygrid"
id="grid2985"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
units="px"
spacingx="1px"
spacingy="1px"
originx="-29.999991px"
originy="-432.53907px"
dotted="false" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-10,-11.375)">
<text
sodipodi:linespacing="125%"
x="515.35541"
y="458.09265"
id="text8526"
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
x="515.35541"
y="458.09265"
id="tspan8528"
style="font-size:16px;fill:#ffffff;fill-opacity:1">Network Interfaces</tspan></text>
<rect
style="fill:#e0e0e0;fill-opacity:1;stroke:#000000;stroke-width:1.96199918;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect7705-0"
y="233.34317"
x="10.980995"
ry="4.999999"
rx="4.9999976"
height="398.03802"
width="338.03793" />
<text
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"
id="text7739-1"
y="248.82126"
x="179.72656"
sodipodi:linespacing="125%"><tspan
style="font-size:16px;text-align:center;text-anchor:middle"
id="tspan7741-9"
y="248.82126"
x="179.72656">Network Node</tspan><tspan
style="font-size:14px;font-style:oblique;text-align:center;text-anchor:middle;-inkscape-font-specification:Sans Oblique"
id="tspan7743-5"
y="267.19217"
x="179.72656">network</tspan></text>
<rect
style="fill:#0000c0;fill-opacity:1;stroke:#000000;stroke-width:1.16499984;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect7725-7-0-0-5-1-4-7-6"
y="572.9447"
x="90.582497"
ry="5"
rx="5.000001"
height="38.83498"
width="178.83501" />
<text
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"
id="text7727-7-4-3-8-4-9-6"
y="588.26318"
x="179.74023"
sodipodi:linespacing="125%"><tspan
style="font-size:14px;fill:#ffffff;fill-opacity:1"
id="tspan7729-1-9-6-8-9-9-4"
y="588.26318"
x="179.74023">External Network Interface</tspan><tspan
style="font-size:12px;font-style:oblique;fill:#ffffff;fill-opacity:1;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-4-2-1-8-0-4"
y="604.12817"
x="179.74023">(unnumbered)</tspan></text>
<rect
style="fill:#e0e0e0;fill-opacity:1;stroke:#000000;stroke-width:1.96199977;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect7705-0-8"
y="12.343173"
x="10.980999"
ry="4.999999"
rx="5"
height="179.03801"
width="338.03799" />
<text
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"
id="text7739-1-5"
y="27.609818"
x="179.9375"
sodipodi:linespacing="125%"><tspan
style="font-size:16px;text-align:center;text-anchor:middle"
id="tspan7741-9-9"
y="27.609818"
x="179.9375">Compute Node</tspan><tspan
style="font-size:14px;font-style:oblique;text-align:center;text-anchor:middle;-inkscape-font-specification:Sans Oblique"
id="tspan7743-5-4"
y="45.980759"
x="179.9375">compute1</tspan></text>
<flowRoot
xml:space="preserve"
id="flowRoot6249"
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
transform="translate(0,308.2677)"><flowRegion
id="flowRegion6251"><rect
id="rect6253"
width="6"
height="88"
x="249"
y="367.09448" /></flowRegion><flowPara
id="flowPara6255" /></flowRoot> <rect
style="fill:#80ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect6380"
width="319"
height="60.499996"
x="21"
y="351.36218"
rx="5"
ry="4.999999" />
<text
xml:space="preserve"
style="font-size:14px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="180"
y="370.36218"
id="text6376"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
x="180"
y="370.36218"
id="tspan6382"
style="text-align:center;text-anchor:middle">Tenant Virtual Network (demo-net)</tspan><tspan
sodipodi:role="line"
x="180"
y="386.22711"
id="tspan6386"
style="font-size:12px;font-style:oblique;text-align:center;text-anchor:middle;-inkscape-font-specification:Sans Oblique">Subnet: 192.168.1.0/24 (demo-subnet)</tspan><tspan
sodipodi:role="line"
x="181.66406"
y="401.22711"
id="tspan6388"
style="font-size:12px;font-style:oblique;text-align:center;text-anchor:middle;-inkscape-font-specification:Sans Oblique">Gateway: 192.168.1.1 </tspan></text>
<rect
style="fill:#0080ff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect6380-8"
width="319"
height="61"
x="20.5"
y="490.86218"
rx="5"
ry="4.999999" />
<text
xml:space="preserve"
style="font-size:14px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="179.70605"
y="508.76324"
id="text6376-8"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
x="179.70605"
y="508.76324"
style="font-style:oblique;text-align:center;text-anchor:middle;-inkscape-font-specification:Sans Oblique"
id="tspan6722"><tspan
id="tspan6724"
style="font-style:normal;text-align:center;text-anchor:middle">External Virtual Network (ext-net)</tspan></tspan><tspan
sodipodi:role="line"
x="179.70605"
y="524.62817"
id="tspan6386-4"
style="font-size:12px;font-style:oblique;text-align:center;text-anchor:middle;-inkscape-font-specification:Sans Oblique">Subnet: 203.0.113.0/24 (ext-subnet)</tspan><tspan
sodipodi:role="line"
x="179.70605"
y="539.62817"
style="font-size:12px;font-style:oblique;text-align:center;text-anchor:middle;-inkscape-font-specification:Sans Oblique"
id="tspan6441">Gateway: 203.0.113.1</tspan><tspan
sodipodi:role="line"
x="179.70605"
y="554.62817"
id="tspan6388-5"
style="font-size:12px;font-style:oblique;text-align:center;text-anchor:middle;-inkscape-font-specification:Sans Oblique" /></text>
<rect
style="fill:#00c000;fill-opacity:1;stroke:#000000;stroke-width:1.16499984;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect7725-7-0-0-5-1-4-7-5"
y="290.94467"
x="90.582497"
ry="5"
rx="4.9999995"
height="40.835011"
width="178.83499" />
<text
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"
id="text7727-7-4-3-8-4-9-7-5"
y="307.45267"
x="179.64111"
sodipodi:linespacing="125%"><tspan
style="font-size:14px;fill:#ffffff"
id="tspan7729-1-9-6-8-9-9-8-6"
y="307.45267"
x="179.64111">Instance Tunnels Interface</tspan><tspan
style="font-size:12px;font-style:oblique;fill:#ffffff;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-4-2-1-8-0-3-0"
y="323.3176"
x="179.64111">10.0.1.21/24</tspan></text>
<text
style="font-size:12px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"
id="text8526-3-9"
y="458.09265"
x="592.98047"
sodipodi:linespacing="125%"><tspan
style="font-size:16px;fill:#ffffff;fill-opacity:1"
id="tspan8528-0-5"
y="458.09265"
x="592.98047">Network Interfaces</tspan></text>
<rect
style="fill:#e0e0e0;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect6380-8-1"
width="338"
height="178.00024"
x="11"
y="673.36206"
rx="5.0000005"
ry="4.9999995" />
<text
xml:space="preserve"
style="font-size:14px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans"
x="179.6748"
y="692.69537"
id="text6376-8-5"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
x="179.6748"
y="692.69537"
id="tspan6382-2-2"
style="font-size:16px;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1">External Physical Network</tspan><tspan
sodipodi:role="line"
x="179.6748"
y="711.06628"
id="tspan6388-5-1"
style="font-size:14px;font-style:oblique;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;-inkscape-font-specification:Sans Oblique">Subnet: 203.0.113.0/24</tspan></text>
<path
sodipodi:type="arc"
style="fill:url(#linearGradient6759);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.84100455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path6671"
sodipodi:cx="205.5"
sodipodi:cy="529.86218"
sodipodi:rx="47.5"
sodipodi:ry="47.5"
d="m 253,529.86218 c 0,26.23353 -21.26647,47.5 -47.5,47.5 -26.23353,0 -47.5,-21.26647 -47.5,-47.5 0,-26.23352 21.26647,-47.5 47.5,-47.5 26.23353,0 47.5,21.26648 47.5,47.5 z"
transform="matrix(3.3578947,0,0,0.42105263,-510.04736,228.76232)" />
<rect
style="fill:#00c000;fill-opacity:1;stroke:#000000;stroke-width:1.16499984;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect7725-7-0-0-5-1-4-7-5-4"
y="132.94469"
x="90.582497"
ry="5"
rx="4.9999995"
height="40"
width="178.83499" />
<text
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"
id="text7727-7-4-3-8-4-9-7-5-2"
y="149.45267"
x="179.64111"
sodipodi:linespacing="125%"><tspan
style="font-size:14px;fill:#ffffff"
id="tspan7729-1-9-6-8-9-9-8-6-3"
y="149.45267"
x="179.64111">Instance Tunnels Interface</tspan><tspan
style="font-size:12px;font-style:oblique;fill:#ffffff;-inkscape-font-specification:Sans Oblique"
id="tspan7731-2-4-2-1-8-0-3-0-2"
y="165.3176"
x="179.64111">10.0.1.31/24</tspan></text>
<text
xml:space="preserve"
style="font-size:14px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="68.724609"
y="453.98523"
id="text6714"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan6716"
x="68.724609"
y="453.98523">Tenant Virtual Router (demo-router)</tspan></text>
<rect
style="fill:#80ff00;fill-opacity:1;stroke:#000000;stroke-width:1.16499984;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect7725-7-0-0-5-1-4-7-5-4-2"
y="72.362183"
x="70.582497"
ry="5"
rx="4.999999"
height="40"
width="218.83501" />
<text
xml:space="preserve"
style="font-size:14px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="180"
y="92.362183"
id="text6793"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan6795"
x="180"
y="92.362183"
style="text-align:center;text-anchor:middle">Instance (demo1)</tspan><tspan
sodipodi:role="line"
x="180"
y="108.2271"
id="tspan6797"
style="font-size:12px;font-style:oblique;text-align:center;text-anchor:middle;-inkscape-font-specification:Sans Oblique">Subnet: 192.168.1.0/24 (demo-subnet)</tspan></text>
<path
sodipodi:type="arc"
style="fill:#0000c0;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85723114;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path6671-7"
sodipodi:cx="205.5"
sodipodi:cy="529.86218"
sodipodi:rx="47.5"
sodipodi:ry="47.5"
d="m 253,529.86218 c 0,26.23353 -21.26647,47.5 -47.5,47.5 -26.23353,0 -47.5,-21.26647 -47.5,-47.5 0,-26.23352 21.26647,-47.5 47.5,-47.5 26.23353,0 47.5,21.26648 47.5,47.5 z"
transform="matrix(3.3578947,0,0,0.40526322,-510.04736,597.87852)" />
<text
xml:space="preserve"
style="font-size:14px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="179.35742"
y="809.36432"
id="text6620"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan6622"
x="179.35742"
y="809.36432"
style="text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1">External Physical Router</tspan><tspan
sodipodi:role="line"
x="179.35742"
y="825.22925"
id="tspan6624"
style="font-size:12px;font-style:oblique;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;-inkscape-font-specification:Sans Oblique">IP Address: 203.0.113.1</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none"
d="m 180,112.36218 -1e-5,20.58251"
id="path6841"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect7725-7-0-0-5-1-4-7-5-4-2"
inkscape:connection-start-point="d4"
inkscape:connection-end="#rect7725-7-0-0-5-1-4-7-5-4"
inkscape:connection-end-point="d4" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 179.99999,311.36218 0,0"
id="path7029"
inkscape:connector-type="polyline"
inkscape:connector-curvature="20"
inkscape:connection-start="#rect7725-7-0-0-5-1-4-7-5"
inkscape:connection-start-point="d4"
inkscape:connection-end="#rect7725-7-0-0-5-1-4-7-5"
inkscape:connection-end-point="d4" />
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 180.14531,331.77968 0.13938,19.5825"
id="path7037"
inkscape:connector-type="polyline"
inkscape:connector-curvature="20"
inkscape:connection-start="#rect7725-7-0-0-5-1-4-7-5"
inkscape:connection-start-point="d4"
inkscape:connection-end="#rect6380"
inkscape:connection-end-point="d4" />
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 180.2847,411.86218 -0.14235,20.00001"
id="path7039"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect6380"
inkscape:connection-start-point="d4"
inkscape:connection-end="#path6671"
inkscape:connection-end-point="d4" />
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 180,471.86219 0,18.99999"
id="path7041"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path6671"
inkscape:connection-start-point="d4"
inkscape:connection-end="#rect6380-8"
inkscape:connection-end-point="d4" />
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 180,551.86218 0,21.08252"
id="path7043"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect6380-8"
inkscape:connection-start-point="d4"
inkscape:connection-end="#rect7725-7-0-0-5-1-4-7-6"
inkscape:connection-end-point="d4" />
<rect
style="fill:#0000c0;fill-opacity:1;stroke:#000000;stroke-width:1.16499984;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect7725-7-0-0-5-1-4-7-6-9"
y="732.9447"
x="90.582497"
ry="5.0000005"
rx="5.000001"
height="38.834999"
width="178.83501" />
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 180,771.7797 0,21.58247"
id="path7074"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect7725-7-0-0-5-1-4-7-6-9"
inkscape:connection-start-point="d4"
inkscape:connection-end="#path6671-7"
inkscape:connection-end-point="d4" />
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Mend);display:inline"
d="m 180,831.86218 0,60.5"
id="path7076"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path6671-7"
inkscape:connection-start-point="d4" />
<text
xml:space="preserve"
style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="150.49506"
y="913.74829"
id="text7896"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan7898"
x="150.49506"
y="913.74829" /></text>
<text
xml:space="preserve"
style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="152.16797"
y="907.995"
id="text7900"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan7902"
x="152.16797"
y="907.995">Internet</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 270.39755,591.56673 c 79.43842,33.98981 78.43974,142.67834 0,164.20454"
id="path7904"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 270.39755,150.25991 c 79.43842,33.98981 78.43974,142.67834 0,164.20454"
id="path7904-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="103.62207"
y="755.98523"
id="text7928"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan7930"
x="103.62207"
y="755.98523"
style="font-size:14px;fill:#ffffff;fill-opacity:1">External Physical Switch</tspan></text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

View File

@ -1,790 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
viewBox="-12 -7 582 380"
width="582pt"
height="380pt"
id="svg2"
inkscape:version="0.48.2 r9819"
sodipodi:docname="networking-interactions-swift.svg">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1593"
inkscape:window-height="944"
id="namedview250"
showgrid="false"
inkscape:zoom="1.2518949"
inkscape:cx="514.23319"
inkscape:cy="180.69728"
inkscape:window-x="65"
inkscape:window-y="38"
inkscape:window-maximized="0"
inkscape:current-layer="g39" />
<metadata
id="metadata4">
<dc:date>2014-03-28 03:35Z</dc:date>
<!-- Produced by OmniGraffle Professional 5.4.4 -->
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6">
<filter
id="Shadow"
filterUnits="userSpaceOnUse">
<feGaussianBlur
in="SourceAlpha"
result="blur"
stdDeviation="3.488"
id="feGaussianBlur9" />
<feOffset
in="blur"
result="offset"
dx="0"
dy="4"
id="feOffset11" />
<feFlood
flood-color="black"
flood-opacity=".75"
result="flood"
id="feFlood13" />
<feComposite
in="flood"
in2="offset"
operator="in"
id="feComposite15" />
</filter>
<font-face
font-family="Helvetica"
font-size="12"
units-per-em="1000"
underline-position="-75.683594"
underline-thickness="49.316406"
slope="0"
x-height="522.94922"
cap-height="717.28516"
ascent="770.01953"
descent="-229.98047"
font-weight="500"
id="font-face17">
<font-face-src
id="font-face-src19">
<font-face-name
name="Helvetica"
id="font-face-name21" />
</font-face-src>
</font-face>
<font-face
font-family="Helvetica"
font-size="14"
units-per-em="1000"
underline-position="-75.683594"
underline-thickness="49.316406"
slope="0"
x-height="522.94922"
cap-height="717.28516"
ascent="770.01953"
descent="-229.98047"
font-weight="500"
id="font-face23">
<font-face-src
id="font-face-src25">
<font-face-name
name="Helvetica"
id="font-face-name27" />
</font-face-src>
</font-face>
<marker
orient="auto"
overflow="visible"
markerUnits="strokeWidth"
id="FilledArrow_Marker"
viewBox="-9 -4 10 8"
markerWidth="10"
markerHeight="8"
color="black">
<g
id="g30">
<path
d="M -8 0 L 0 3 L 0 -3 Z"
fill="currentColor"
stroke="currentColor"
stroke-width="1"
id="path32" />
</g>
</marker>
<marker
orient="auto"
overflow="visible"
markerUnits="strokeWidth"
id="FilledArrow_Marker_2"
viewBox="-1 -4 10 8"
markerWidth="10"
markerHeight="8"
color="black">
<g
id="g35">
<path
d="M 8 0 L 0 -3 L 0 3 Z"
fill="currentColor"
stroke="currentColor"
stroke-width="1"
id="path37" />
</g>
</marker>
</defs>
<g
stroke="none"
stroke-opacity="1"
stroke-dasharray="none"
fill="none"
fill-opacity="1"
id="g39">
<title
id="title41">Canvas 1</title>
<g
id="g49"
transform="translate(-5.7512816,-0.63903128)">
<g
transform="translate(-5.7512816,-0.63903128)"
id="use51"
style="filter:url(#Shadow)">
<rect
x="47.454109"
y="113.5"
width="140"
height="155"
id="rect3745"
style="stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round" />
</g>
<g
transform="translate(-5.7512816,-0.63903128)"
id="use53"
style="filter:url(#Shadow)">
<rect
x="56.454109"
y="120.5"
width="140"
height="155"
id="rect3741"
style="stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round" />
</g>
<g
transform="translate(-5.7512816,-0.63903128)"
id="use55"
style="filter:url(#Shadow)">
<rect
x="83"
y="145"
width="140"
height="155"
id="rect3753"
style="stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round" />
</g>
<g
transform="translate(-5.7512816,-0.63903128)"
id="use57"
style="filter:url(#Shadow)">
<rect
x="74"
y="136"
width="140"
height="155"
id="rect3757"
style="stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round" />
</g>
<g
transform="translate(-5.7512816,-0.63903128)"
id="use59"
style="filter:url(#Shadow)">
<rect
x="74"
y="136"
width="140"
height="155"
id="rect3749"
style="stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round" />
</g>
<g
transform="translate(-5.7512816,-0.63903128)"
id="use61"
style="filter:url(#Shadow)">
<rect
x="65"
y="127"
width="140"
height="155"
id="rect3737"
style="stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round" />
</g>
<use
height="380"
width="582"
y="0"
x="0"
style="filter:url(#Shadow)"
id="use63"
xlink:href="#id2959_Graphic"
transform="translate(-0.63903128,-30.03447)" />
<use
height="380"
width="582"
y="0"
x="0"
style="filter:url(#Shadow)"
id="use65"
xlink:href="#id2961_Graphic"
transform="translate(-0.63903128,-30.03447)" />
<use
height="380"
width="582"
y="0"
x="0"
style="filter:url(#Shadow)"
id="use67"
xlink:href="#id2998_Graphic" />
<use
height="380"
width="582"
y="0"
x="0"
style="filter:url(#Shadow)"
id="use69"
xlink:href="#id2991_Graphic"
transform="translate(-0.63903128,-30.03447)" />
<use
height="380"
width="582"
y="0"
x="0"
style="filter:url(#Shadow)"
id="use71"
xlink:href="#id2992_Graphic"
transform="translate(-0.63903128,-30.03447)" />
<use
height="380"
width="582"
y="0"
x="0"
style="filter:url(#Shadow)"
id="use73"
xlink:href="#id3007_Graphic"
transform="translate(-0.63903128,-0.31951564)" />
<use
height="380"
width="582"
y="0"
x="0"
style="filter:url(#Shadow)"
id="use75"
xlink:href="#id3008_Graphic"
transform="translate(-0.63903128,-30.03447)" />
</g>
<g
id="id2959_Graphic"
transform="translate(-5.1122503,29.395439)">
<rect
style="stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round"
id="rect96"
height="189"
width="142"
y="45"
x="8" />
</g>
<g
id="id2961_Graphic"
transform="translate(-5.1122503,29.395439)">
<rect
style="fill:#ffffff"
id="rect99"
height="33"
width="116.90818"
y="75"
x="22.091818" />
<rect
style="stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round"
id="rect101"
height="33"
width="116.90818"
y="75"
x="22.091818" />
<text
style="fill:#000000"
id="text103"
x="25.174723"
y="74.914536">
<tspan
style="font-size:9.60000038px;font-weight:500;font-family:Helvetica"
id="tspan105"
textLength="102.07617"
y="85.914536"
x="27.590729"
font-weight="500"
font-size="12">swift-container-server</tspan>
</text>
</g>
<text
style="fill:#000000"
id="text107"
x="27.841843"
y="85.395439">
<tspan
style="font-size:14px;font-weight:500;font-family:Helvetica"
id="tspan109"
textLength="91.06836"
y="99.395439"
x="27.841843"
font-weight="500"
font-size="14">Storage nodes</tspan>
</text>
<line
style="stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round"
id="line111"
y2="267.4903"
x2="394.80969"
y1="267.4903"
x1="351.60968" />
<text
style="fill:#000000"
id="text113"
x="418.24872"
y="258.36099">
<tspan
style="font-size:14px;font-weight:500;font-family:Helvetica"
id="tspan115"
textLength="38.13086"
y="272.36099"
x="418.24872"
font-weight="500"
font-size="14">Public</tspan>
</text>
<line
style="stroke:#ff0000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:8, 4, 1, 4"
id="line117"
y2="315.86096"
x2="395.44873"
y1="315.86096"
x1="352.24872" />
<text
style="fill:#000000"
id="text119"
x="418.24872"
y="307.86099">
<tspan
style="font-size:14px;font-weight:500;font-family:Helvetica"
id="tspan121"
textLength="131.5166"
y="321.86099"
x="418.24872"
font-weight="500"
font-size="14">Replication (optional)</tspan>
</text>
<line
style="stroke:#0033cc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:8, 5"
id="line123"
y2="287.86096"
x2="396.44873"
y1="287.86096"
x1="351.24875" />
<text
style="fill:#000000"
id="text125"
x="418.24872"
y="279.36102">
<tspan
style="font-size:14px;font-weight:500;font-family:Helvetica"
id="tspan127"
textLength="104.268555"
y="293.36102"
x="418.24872"
font-weight="500"
font-size="14">Storage Network</tspan>
</text>
<rect
style="fill:#ffffff"
id="rect129"
height="40"
width="116.90818"
y="8.3609686"
x="199.99873" />
<rect
style="stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round"
id="rect131"
height="40"
width="116.90818"
y="8.3609686"
x="199.99873" />
<text
style="fill:#000000"
id="text133"
x="204.99873"
y="14.360969">
<tspan
style="font-size:12px;font-weight:500;font-family:Helvetica"
id="tspan135"
textLength="62.701172"
y="25.36097"
x="228.76923"
font-weight="500"
font-size="12">OpenStack</tspan>
<tspan
style="font-size:12px;font-weight:500;font-family:Helvetica"
id="tspan137"
textLength="58.705078"
y="39.36097"
x="229.10028"
font-weight="500"
font-size="12">Dashboard</tspan>
</text>
<rect
style="stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round"
id="rect141"
height="23.746155"
width="116.90818"
y="157.85469"
x="400.01553" />
<text
style="fill:#000000"
id="text143"
x="401.50085"
y="161.77165">
<tspan
style="font-size:11.19999981px;font-weight:500;font-family:Helvetica"
id="tspan145"
textLength="101.390625"
y="172.77165"
x="404.25964"
font-weight="500"
font-size="12">OpenStack Identity</tspan>
</text>
<g
id="id2998_Graphic"
transform="translate(-5.7512816,-0.63903128)">
<rect
style="fill:#ffffff"
id="rect148"
height="41"
width="116.90818"
y="308"
x="136.09181" />
<rect
style="stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round"
id="rect150"
height="41"
width="116.90818"
y="308"
x="136.09181" />
<text
style="fill:#000000"
id="text152"
transform="translate(141.09181,321.5)">
<tspan
style="font-size:12px;font-weight:500;font-family:Helvetica"
id="tspan154"
textLength="91.39453"
y="11"
x="7.7568254"
font-weight="500"
font-size="12">all storage nodes</tspan>
</text>
</g>
<text
style="fill:#000000"
id="text156"
x="348.24872"
y="236.86099">
<tspan
style="font-size:14px;font-weight:500;font-family:Helvetica"
id="tspan158"
textLength="58.344727"
y="250.86099"
x="348.24872"
font-weight="500"
font-size="14">Networks</tspan>
</text>
<rect
style="stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round"
id="rect160"
height="155"
width="140"
y="32.86097"
x="388.24872" />
<rect
style="fill:#ffffff"
id="rect162"
height="27"
width="116.90818"
y="93.36097"
x="400.74869" />
<rect
style="stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round"
id="rect164"
height="27"
width="116.90818"
y="93.36097"
x="400.74869" />
<text
style="fill:#000000"
id="text166"
x="402.55353"
y="100.18049">
<tspan
style="font-size:11.19999981px;font-weight:500;font-family:Helvetica"
id="tspan168"
textLength="98.683594"
y="111.18049"
x="406.66583"
font-weight="500"
font-size="12">swift-proxy-server</tspan>
</text>
<text
style="fill:#000000"
id="text170"
x="402.01978"
y="48.985329">
<tspan
style="font-size:14px;font-weight:500;font-family:Helvetica"
id="tspan172"
textLength="101.9375"
y="62.985329"
x="402.01978"
font-weight="500"
font-size="14">Cloud controller/</tspan>
<tspan
style="font-size:14px;font-weight:500;font-family:Helvetica"
id="tspan174"
textLength="78.572266"
y="79.985329"
x="402.01978"
font-weight="500"
font-size="14">Proxy server</tspan>
</text>
<text
style="fill:#ff0000"
id="text176"
x="151.24872"
y="218.36098">
<tspan
style="font-size:12px;font-weight:500;fill:#ff0000;font-family:Helvetica"
id="tspan178"
textLength="90.697266"
y="229.36098"
x="151.40009"
font-weight="500"
font-size="12">Networking inter-</tspan>
<tspan
style="font-size:12px;font-weight:500;fill:#ff0000;font-family:Helvetica"
id="tspan180"
textLength="86.70117"
y="243.36098"
x="153.39813"
font-weight="500"
font-size="12">communications</tspan>
</text>
<g
id="id2991_Graphic"
transform="translate(-5.1122503,29.395439)">
<rect
style="fill:#ffffff"
id="rect205"
height="33"
width="116.90818"
y="110"
x="22.091818" />
<rect
style="stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round"
id="rect207"
height="33"
width="116.90818"
y="110"
x="22.091818" />
<text
style="fill:#000000"
id="text209"
x="22.618599"
y="86.909409">
<tspan
style="font-size:9.60000038px;font-weight:500;font-family:Helvetica"
id="tspan211"
textLength="94.740234"
y="97.909409"
x="28.702574"
font-weight="500"
font-size="12">swift-account-server</tspan>
</text>
</g>
<g
id="id2992_Graphic"
transform="translate(-5.1122503,29.395439)">
<rect
style="fill:#ffffff"
id="rect214"
height="33"
width="116.90818"
y="145.5"
x="22.091818" />
<rect
style="stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round"
id="rect216"
height="33"
width="116.90818"
y="145.5"
x="22.091818" />
<text
style="fill:#000000"
id="text218"
x="0.25250414"
y="153.72192">
<tspan
style="font-size:9.60000038px;font-weight:500;font-family:Helvetica"
id="tspan220"
textLength="38.021484"
y="164.72192"
x="34.695854"
font-weight="500"
font-size="12">swift-object-server</tspan>
</text>
</g>
<line
style="stroke:#0033cc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:7.99999999, 4.99999999"
id="line222"
y2="74.395447"
x2="144.80484"
y1="36.477646"
x1="199.5034" />
<line
style="stroke:#0033cc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:8.0000001, 5.00000007"
id="line226"
y2="25.970657"
x2="318.05356"
y1="70.259567"
x1="387.81421" />
<g
id="id3007_Graphic"
transform="translate(-5.1122503,-0.31951564)">
<rect
style="fill:#ffffff"
id="rect231"
height="27"
width="116.90818"
y="127"
x="405.5459" />
<rect
style="stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round"
id="rect233"
height="27"
width="116.90818"
y="127"
x="405.5459" />
<text
style="fill:#000000"
id="text235"
x="407.35074"
y="133.5">
<tspan
style="font-size:11.19999981px;font-weight:500;font-family:Helvetica"
id="tspan237"
textLength="106.70508"
y="144.5"
x="407.4523"
font-weight="500"
font-size="12">memcached service</tspan>
</text>
</g>
<g
id="id3008_Graphic"
transform="translate(-5.1122503,29.395439)">
<rect
style="fill:#ffffff"
id="rect240"
height="33"
width="116.90818"
y="181"
x="22.091818" />
<rect
style="stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round"
id="rect242"
height="33"
width="116.90818"
y="181"
x="22.091818" />
<text
style="fill:#000000"
id="text244"
transform="translate(27.091818,190.5)">
<tspan
style="font-size:9.60000038px;font-weight:500;font-family:Helvetica"
id="tspan246"
textLength="28.669922"
y="11"
x="39.119129"
font-weight="500"
font-size="12">rsync</tspan>
</text>
</g>
<line
style="stroke:#ff0000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:8, 4, 1, 4"
id="line248"
y2="233.78802"
x2="131.04532"
y1="315.36096"
x1="180.71121" />
<text
xml:space="preserve"
style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="230.19286"
y="67.543045"
id="text3701"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3703"
x="230.19286"
y="67.543045"
style="font-size:11.19999981px">Tenant API</tspan></text>
<text
xml:space="preserve"
style="font-size:32px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="54.459255"
y="159.56354"
id="text3731"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3733"
x="54.459255"
y="159.56354"
style="font-size:10.39999962px">SQLite</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 410.5776,68.416345 499.24319,145.1001"
id="path3781"
inkscape:connector-curvature="0"
transform="matrix(0.8,0,0,0.8,-12,-7)" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 264.39919,69.215135 196.50212,145.89889"
id="path3783"
inkscape:connector-curvature="0"
transform="matrix(0.8,0,0,0.8,-12,-7)" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 602 KiB

View File

@ -1,54 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="adding-proxy-server">
<title>Add another proxy server</title>
<para>To provide additional reliability and bandwidth
to your cluster, you can add proxy servers. You can
set up an additional proxy node the same way
that you set up the first proxy node but with
additional configuration steps.</para>
<para>After you have more than two proxies, you must
load balance them; your storage endpoint (what
clients use to connect to your storage) also
changes. You can select from different
strategies for load balancing. For example,
you could use round-robin DNS, or a software
or hardware load balancer (like pound) in
front of the two proxies. You can then point your
storage URL to the load balancer, configure an initial
proxy node and complete these steps to add proxy
servers.</para>
<procedure>
<step>
<para>Update the list of memcache
servers in the
<filename>/etc/swift/proxy-server.conf</filename>
file for added proxy servers. If
you run multiple memcache servers,
use this pattern for the multiple
IP:port listings in each proxy
server configuration file:</para>
<literallayout class="monospaced">10.1.2.3:11211,10.1.2.4:11211</literallayout>
<literallayout class="monospaced">[filter:cache]
use = egg:swift#memcache
memcache_servers = <replaceable>PROXY_LOCAL_NET_IP</replaceable>:11211</literallayout>
</step>
<step>
<para>Copy ring information to all
nodes, including new proxy nodes.
Also, ensure that the ring
information gets to all storage
nodes.</para>
</step>
<step>
<para>After you sync all nodes, make
sure that the admin has keys in
<filename>/etc/swift</filename> and
the ownership for the ring file is
correct.</para>
</step>
</procedure>
</section>

View File

@ -1,56 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="example-object-storage-installation-architecture">
<title>Example of Object Storage installation architecture</title>
<itemizedlist>
<listitem>
<para>Node: A host machine that runs one or more OpenStack
Object Storage services.</para>
</listitem>
<listitem>
<para>Proxy node: Runs proxy services.</para>
</listitem>
<listitem>
<para>Storage node: Runs account, container, and object
services. Contains the SQLite databases.</para>
</listitem>
<listitem>
<para>Ring: A set of mappings between OpenStack Object
Storage data to physical devices.</para>
</listitem>
<listitem>
<para>Replica: A copy of an object. By default, three
copies are maintained in the cluster.</para>
</listitem>
<listitem>
<para>Zone: A logically separate section of the cluster,
related to independent failure characteristics.</para>
</listitem>
<listitem>
<para>Region (optional): A logically separate section of
the cluster, representing distinct physical locations
such as cities or countries. Similar to zones but
representing physical locations of portions of the
cluster rather than logical segments.</para>
</listitem>
</itemizedlist>
<para>To increase reliability and performance, you can add
additional proxy servers.</para>
<para>This document describes each storage node as a separate zone
in the ring. At a minimum, five zones are recommended. A zone
is a group of nodes that are as isolated as possible from other
nodes (separate servers, network, power, even geography). The
ring guarantees that every replica is stored in a separate
zone. This diagram shows one possible configuration for a
minimal installation:</para>
<para><inlinemediaobject>
<imageobject>
<imagedata
fileref="../figures/swift_install_arch.png"
/>
</imageobject>
</inlinemediaobject></para>
</section>

View File

@ -1,200 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="installing-and-configuring-the-proxy-node">
<title>Install and configure the proxy node</title>
<para>The proxy server takes each request and looks up locations
for the account, container, or object and routes the requests
correctly. The proxy server also handles API requests. You
enable account management by configuring it in the
<filename>/etc/swift/proxy-server.conf</filename> file.</para>
<note>
<para>The Object Storage processes run under a separate user
and group, set by configuration options, and referred to as
<literal>swift:swift</literal>. The default
user is <literal>swift</literal>.</para>
</note>
<procedure>
<step>
<para>Install swift-proxy service:</para>
<screen os="ubuntu;debian"><prompt>#</prompt> <userinput>apt-get install swift swift-proxy memcached python-keystoneclient python-swiftclient python-webob</userinput></screen>
<screen os="rhel;centos;fedora"><prompt>#</prompt> <userinput>yum install openstack-swift-proxy memcached python-swiftclient python-keystone-auth-token</userinput></screen>
<screen os="opensuse;sles"><prompt>#</prompt> <userinput>zypper install openstack-swift-proxy memcached python-swiftclient python-keystoneclient python-xml</userinput></screen>
</step>
<step os="ubuntu;debian">
<para>Modify memcached to listen on the default interface
on a local, non-public network. Edit this line in
the <filename>/etc/memcached.conf</filename> file:</para>
<programlisting>-l 127.0.0.1</programlisting>
<para>Change it to:</para>
<programlisting>-l <replaceable>PROXY_LOCAL_NET_IP</replaceable></programlisting>
</step>
<step os="rhel;centos;fedora;opensuse;sles">
<para>Modify memcached to listen on the default interface
on a local, non-public network. Edit
the <filename>/etc/sysconfig/memcached</filename> file:</para>
<programlisting os="rhel;centos;fedora">OPTIONS="-l <replaceable>PROXY_LOCAL_NET_IP</replaceable>"</programlisting>
<programlisting os="opensuse;sles">MEMCACHED_PARAMS="-l <replaceable>PROXY_LOCAL_NET_IP</replaceable>"</programlisting>
</step>
<step os="ubuntu;debian">
<para>Restart the memcached service:</para>
<screen><prompt>#</prompt> <userinput>service memcached restart</userinput></screen>
</step>
<step os="rhel;centos;fedora;opensuse;sles">
<para>Start the memcached service and configure it to start when
the system boots:</para>
<screen><prompt>#</prompt> <userinput>service memcached start</userinput>
<prompt>#</prompt> <userinput>chkconfig memcached on</userinput></screen>
</step>
<step>
<para><phrase os="ubuntu;debian">Create</phrase>
<phrase os="rhel;centos;fedora;opensuse;sles">Edit</phrase>
<filename>/etc/swift/proxy-server.conf</filename>:</para>
<programlisting language="ini">[DEFAULT]
bind_port = 8080
user = swift
[pipeline:main]
pipeline = catch_errors gatekeeper healthcheck proxy-logging cache authtoken keystoneauth proxy-logging proxy-server
[app:proxy-server]
use = egg:swift#proxy
allow_account_management = true
account_autocreate = true
[filter:keystoneauth]
use = egg:swift#keystoneauth
operator_roles = Member,admin,swiftoperator
[filter:authtoken]
paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory
# Delaying the auth decision is required to support token-less
# usage for anonymous referrers ('.r:*').
delay_auth_decision = true
# auth_* settings refer to the Keystone server
auth_protocol = http
auth_host = <replaceable>controller</replaceable>
auth_uri = http://controller:5000
# the service tenant and swift username and password created in Keystone
admin_tenant_name = service
admin_user = swift
admin_password = <replaceable>SWIFT_PASS</replaceable>
[filter:healthcheck]
use = egg:swift#healthcheck
[filter:cache]
use = egg:swift#memcache
set log_name = cache
[filter:catch_errors]
use = egg:swift#catch_errors
[filter:gatekeeper]
use = egg:swift#gatekeeper
[filter:proxy-logging]
use = egg:swift#proxy_logging
</programlisting>
<note>
<para>If you run multiple memcache servers, put the
multiple IP:port listings in the [filter:cache]
section of the
<filename>/etc/swift/proxy-server.conf</filename> file:</para>
<literallayout class="monospaced">10.1.2.3:11211,10.1.2.4:11211</literallayout>
<para>Only the proxy server uses memcache.</para>
</note>
<warning>
<para><literal>keystoneclient.middleware.auth_token</literal>: You
must configure <literal>auth_uri</literal> to point to the public
identity endpoint. Otherwise, clients might not be able to
authenticate against an admin endpoint.
</para>
</warning>
</step>
<step>
<para>Create the account, container, and object rings. The
builder command creates a builder file
with a few parameters. The parameter with the value of
18 represents 2 ^ 18th, the value that the partition
is sized to. Set this “partition power” value
based on the total amount of storage you expect your
entire ring to use. The value 3 represents the
number of replicas of each object, with the last value
being the number of hours to restrict moving a
partition more than once.</para>
<screen><prompt>#</prompt> <userinput>cd /etc/swift</userinput>
<prompt>#</prompt> <userinput>swift-ring-builder account.builder create 18 3 1</userinput>
<prompt>#</prompt> <userinput>swift-ring-builder container.builder create 18 3 1</userinput>
<prompt>#</prompt> <userinput>swift-ring-builder object.builder create 18 3 1</userinput></screen>
</step>
<step>
<para>For every storage device on each node add entries to
each ring:</para>
<screen><prompt>#</prompt> <userinput>swift-ring-builder account.builder add z<replaceable>ZONE</replaceable>-<replaceable>STORAGE_LOCAL_NET_IP</replaceable>:6002[R<replaceable>STORAGE_REPLICATION_NET_IP</replaceable>:6005]/<replaceable>DEVICE</replaceable> 100</userinput>
<prompt>#</prompt> <userinput>swift-ring-builder container.builder add z<replaceable>ZONE</replaceable>-<replaceable>STORAGE_LOCAL_NET_IP_1</replaceable>:6001[R<replaceable>STORAGE_REPLICATION_NET_IP</replaceable>:6004]/<replaceable>DEVICE</replaceable> 100</userinput>
<prompt>#</prompt> <userinput>swift-ring-builder object.builder add z<replaceable>ZONE</replaceable>-<replaceable>STORAGE_LOCAL_NET_IP_1</replaceable>:6000[R<replaceable>STORAGE_REPLICATION_NET_IP</replaceable>:6003]/<replaceable>DEVICE</replaceable> 100</userinput></screen>
<note>
<para>You must omit the optional <parameter>STORAGE_REPLICATION_NET_IP</parameter> parameter if you
do not want to use dedicated network for
replication.</para>
</note>
<para>For example, if a storage node
has a partition in Zone 1 on IP 10.0.0.1, the storage node has
address 10.0.1.1 from replication network. The mount point of
this partition is <filename>/srv/node/sdb1</filename>, and the
path in <filename>/etc/rsyncd.conf</filename> is
<filename>/srv/node/</filename>, the DEVICE would be sdb1 and
the commands are:</para>
<screen><prompt>#</prompt> <userinput>swift-ring-builder account.builder add z1-10.0.0.1:6002R10.0.1.1:6005/sdb1 100</userinput>
<prompt>#</prompt> <userinput>swift-ring-builder container.builder add z1-10.0.0.1:6001R10.0.1.1:6004/sdb1 100</userinput>
<prompt>#</prompt> <userinput>swift-ring-builder object.builder add z1-10.0.0.1:6000R10.0.1.1:6003/sdb1 100</userinput></screen>
<note>
<para>If you assume five zones with one node for each
zone, start ZONE at 1. For each additional node,
increment ZONE by 1.</para>
</note>
</step>
<step>
<para>Verify the ring contents for each ring:</para>
<screen><prompt>#</prompt> <userinput>swift-ring-builder account.builder</userinput>
<prompt>#</prompt> <userinput>swift-ring-builder container.builder</userinput>
<prompt>#</prompt> <userinput>swift-ring-builder object.builder</userinput></screen>
</step>
<step>
<para>Rebalance the rings:</para>
<screen><prompt>#</prompt> <userinput>swift-ring-builder account.builder rebalance</userinput>
<prompt>#</prompt> <userinput>swift-ring-builder container.builder rebalance</userinput>
<prompt>#</prompt> <userinput>swift-ring-builder object.builder rebalance</userinput></screen>
<note>
<para>Rebalancing rings can take some time.</para>
</note>
</step>
<step>
<para>Copy the <filename>account.ring.gz</filename>,
<filename>container.ring.gz</filename>, and
<filename>object.ring.gz</filename> files to each
of the Proxy and Storage nodes in <filename>/etc/swift</filename>.</para>
</step>
<step>
<para>Make sure the swift user owns all configuration files:</para>
<screen><prompt>#</prompt> <userinput>chown -R swift:swift /etc/swift</userinput></screen>
</step>
<step os="ubuntu;debian">
<para>Restart the Proxy service:</para>
<screen><prompt>#</prompt> <userinput>service swift-proxy restart</userinput></screen>
</step>
<step os="rhel;centos;fedora;sles;opensuse">
<para>Start the Proxy service and configure it to start when the
system boots:</para>
<screen><prompt>#</prompt> <userinput>service openstack-swift-proxy start</userinput>
<prompt>#</prompt> <userinput>chkconfig openstack-swift-proxy on</userinput></screen>
</step>
</procedure>
</section>

View File

@ -1,117 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="installing-and-configuring-storage-nodes">
<title>Install and configure storage nodes</title>
<note>
<para>Object Storage works on any file system that supports
Extended Attributes (XATTRS). XFS shows the best overall
performance for the swift use case after considerable
testing and benchmarking at Rackspace. It is also the only
file system that has been thoroughly tested. See the <link
xlink:href="http://docs.openstack.org/trunk/config-reference/content/"
><citetitle>OpenStack Configuration
Reference</citetitle></link> for additional
recommendations.</para>
</note>
<procedure>
<step>
<para>Install storage node packages:</para>
<para>
<screen os="ubuntu;debian"><prompt>#</prompt> <userinput>apt-get install swift swift-account swift-container swift-object xfsprogs</userinput></screen>
<screen os="rhel;centos;fedora"><prompt>#</prompt> <userinput>yum install openstack-swift-account openstack-swift-container \
openstack-swift-object xfsprogs xinetd</userinput></screen>
<screen os="opensuse;sles"><prompt>#</prompt> <userinput>zypper install openstack-swift-account openstack-swift-container \
openstack-swift-object python-xml xfsprogs xinetd</userinput></screen></para>
</step>
<step>
<para>For each device on the node that you want to use for
storage, set up the XFS volume
(<literal>/dev/sdb</literal> is used as an
example). Use a single partition per drive. For
example, in a server with 12 disks you may use one or
two disks for the operating system which should not be
touched in this step. The other 10 or 11 disks should
be partitioned with a single partition, then formatted
in XFS.</para>
<screen><prompt>#</prompt> <userinput>fdisk /dev/sdb</userinput>
<prompt>#</prompt> <userinput>mkfs.xfs /dev/sdb1</userinput>
<prompt>#</prompt> <userinput>echo "/dev/sdb1 /srv/node/sdb1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0" &gt;&gt; /etc/fstab</userinput>
<prompt>#</prompt> <userinput>mkdir -p /srv/node/sdb1</userinput>
<prompt>#</prompt> <userinput>mount /srv/node/sdb1</userinput>
<prompt>#</prompt> <userinput>chown -R swift:swift /srv/node</userinput></screen>
</step>
<step>
<para os="ubuntu;debian;rhel;centos;fedora">Create
<filename>/etc/rsyncd.conf</filename>:</para>
<para os="sles;opensuse">Replace the content of
<filename>/etc/rsyncd.conf</filename> with:</para>
<programlisting language="ini">uid = swift
gid = swift
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
address = <replaceable>STORAGE_LOCAL_NET_IP</replaceable>
[account]
max connections = 2
path = /srv/node/
read only = false
lock file = /var/lock/account.lock
[container]
max connections = 2
path = /srv/node/
read only = false
lock file = /var/lock/container.lock
[object]
max connections = 2
path = /srv/node/
read only = false
lock file = /var/lock/object.lock</programlisting>
</step>
<step>
<para>(Optional) If you want to separate rsync and
replication traffic to replication network, set
<literal>STORAGE_REPLICATION_NET_IP</literal>
instead of
<literal>STORAGE_LOCAL_NET_IP</literal>:</para>
<programlisting language="ini">address = <replaceable>STORAGE_REPLICATION_NET_IP</replaceable></programlisting>
</step>
<step os="ubuntu;debian">
<para>Edit the following line in
<filename>/etc/default/rsync</filename>:</para>
<programlisting language="ini">RSYNC_ENABLE=true</programlisting>
</step>
<step os="rhel;centos;fedora;sles;opensuse">
<para>Edit the following line in
<filename>/etc/xinetd.d/rsync</filename>:</para>
<programlisting language="ini">disable = no</programlisting>
</step>
<step>
<para os="ubuntu;debian">Start the <systemitem
class="service">rsync</systemitem> service:</para>
<screen os="ubuntu;debian"><prompt>#</prompt> <userinput>service rsync start</userinput></screen>
<para os="rhel;centos;fedora">Start the <systemitem
class="service">xinetd</systemitem> service:</para>
<screen os="rhel;centos;fedora"><prompt>#</prompt> <userinput>service xinetd start</userinput></screen>
<para os="sles;opensuse">Start the <systemitem
class="service">xinetd</systemitem> service and configure it to
start when the system boots:</para>
<screen os="sles;opensuse"><prompt>#</prompt> <userinput>service xinetd start</userinput>
<prompt>#</prompt> <userinput>chkconfig xinetd on</userinput></screen>
<note>
<para>The rsync service requires no authentication, so
run it on a local, private network.</para>
</note>
</step>
<step>
<para>Create the swift recon cache directory and set its
permissions:</para>
<screen><prompt>#</prompt> <userinput>mkdir -p /var/swift/recon</userinput>
<prompt>#</prompt> <userinput>chown -R swift:swift /var/swift/recon</userinput></screen>
</step>
</procedure>
</section>

Some files were not shown because too many files have changed in this diff Show More