Merge "Removes basic-install-guides from training guides"
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
Before ![]() (image error) Size: 214 KiB |
BIN
doc/training-guides/basic-install-guide/common/figures/novnc/SCH_5009_V00_NUAC-VNC_OpenStack.png
Before ![]() (image error) Size: 68 KiB |
Before ![]() (image error) Size: 32 KiB |
Before ![]() (image error) Size: 56 KiB |
Before ![]() (image error) Size: 48 KiB |
Before ![]() (image error) Size: 58 KiB |
Before ![]() (image error) Size: 28 KiB |
Before ![]() (image error) Size: 45 KiB |
Before ![]() (image error) Size: 23 KiB |
Before ![]() (image error) Size: 61 KiB |
Before ![]() (image error) Size: 10 KiB |
Before ![]() (image error) Size: 23 KiB |
@ -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"> <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"><iframe src="{{ vnc_url }}" width="720" height="430"></iframe></programlisting>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</section>
|
||||
</section>
|
@ -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>
|
@ -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 account’s
|
||||
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 aren’t 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 aren’t 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 <name> has not been reaped
|
||||
since <date>”</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>
|
@ -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>
|
@ -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✕ 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>
|
@ -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 doesn’t 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
|
||||
replica’s 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>
|
@ -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✕ +
|
||||
data redundancy (compared with 2✕ 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>
|
@ -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>
|
@ -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>
|
@ -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><distribute rings and wait>...</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><creatdistribute rings and wait>...</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('>I',
|
||||
md5('/account/container/object').digest())[0] >>
|
||||
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>
|
@ -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 can’t 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 server’s devices from the ring. Once the server has been repaired and is
|
||||
back online, the server’s 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>
|
@ -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>
|
Before ![]() (image error) Size: 504 KiB |
Before (image error) Size: 205 KiB |
Before ![]() (image error) Size: 63 KiB |
Before (image error) Size: 629 KiB |
Before (image error) Size: 33 KiB |
Before (image error) Size: 42 KiB |
Before ![]() (image error) Size: 28 KiB |
Before ![]() (image error) Size: 13 KiB |
Before ![]() (image error) Size: 10 KiB |
Before ![]() (image error) Size: 20 KiB |
BIN
doc/training-guides/basic-install-guide/figures/debconf-screenshots/api-endpoint_5_region_name.png
Before ![]() (image error) Size: 16 KiB |
Before ![]() (image error) Size: 44 KiB |
BIN
doc/training-guides/basic-install-guide/figures/debconf-screenshots/dbconfig-common_2_db-types.png
Before ![]() (image error) Size: 28 KiB |
Before ![]() (image error) Size: 35 KiB |
Before ![]() (image error) Size: 14 KiB |
Before ![]() (image error) Size: 15 KiB |
Before ![]() (image error) Size: 6.4 KiB |
Before ![]() (image error) Size: 42 KiB |
Before ![]() (image error) Size: 37 KiB |
Before ![]() (image error) Size: 38 KiB |
Before ![]() (image error) Size: 10 KiB |
Before ![]() (image error) Size: 14 KiB |
BIN
doc/training-guides/basic-install-guide/figures/debconf-screenshots/keystone_3_admin_user_name.png
Before ![]() (image error) Size: 9.8 KiB |
BIN
doc/training-guides/basic-install-guide/figures/debconf-screenshots/keystone_4_admin_user_email.png
Before ![]() (image error) Size: 11 KiB |
BIN
doc/training-guides/basic-install-guide/figures/debconf-screenshots/keystone_5_admin_user_pass.png
Before ![]() (image error) Size: 10 KiB |
Before ![]() (image error) Size: 11 KiB |
BIN
doc/training-guides/basic-install-guide/figures/debconf-screenshots/keystone_7_register_endpoint.png
Before ![]() (image error) Size: 17 KiB |
BIN
doc/training-guides/basic-install-guide/figures/debconf-screenshots/neutron_1_plugin_selection.png
Before ![]() (image error) Size: 49 KiB |
BIN
doc/training-guides/basic-install-guide/figures/debconf-screenshots/neutron_2_networking_type.png
Before ![]() (image error) Size: 24 KiB |
Before ![]() (image error) Size: 11 KiB |
Before ![]() (image error) Size: 16 KiB |
Before ![]() (image error) Size: 18 KiB |
Before ![]() (image error) Size: 19 KiB |
Before ![]() (image error) Size: 8.2 KiB |
Before ![]() (image error) Size: 8.3 KiB |
Before ![]() (image error) Size: 18 KiB |
Before ![]() (image error) Size: 8.1 KiB |
Before ![]() (image error) Size: 58 KiB |
@ -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 (image error) Size: 42 KiB |
Before ![]() (image error) Size: 42 KiB |
@ -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 (image error) Size: 31 KiB |
Before ![]() (image error) Size: 48 KiB |
@ -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 (image error) Size: 26 KiB |
Before ![]() (image error) Size: 51 KiB |
@ -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 (image error) Size: 22 KiB |
Before ![]() (image error) Size: 112 KiB |
Before (image error) Size: 35 KiB |
Before ![]() (image error) Size: 54 KiB |
Before (image error) Size: 15 KiB |
Before ![]() (image error) Size: 75 KiB |
Before (image error) Size: 602 KiB |
@ -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>
|
@ -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>
|
@ -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>
|
@ -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" >> /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>
|