Removes basic-install-guides from training guides
As per the discussion in the Kilo summit, the POC part was done for basic install guides and there is no need to maintain or keep the XML files in the repository. This is a clean up patch which is mandatory for Icehouse release for training guides. Change-Id: I7e5f2bbce86e0bdd292f0cb8b395995f9171e5eb
@ -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 Width: | Height: | Size: 214 KiB |
Before Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 61 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | 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 Width: | Height: | Size: 504 KiB |
Before Width: | Height: | Size: 205 KiB |
Before Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 629 KiB |
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 9.8 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 8.2 KiB |
Before Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | 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 Width: | Height: | Size: 42 KiB |
Before Width: | Height: | 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 Width: | Height: | Size: 31 KiB |
Before Width: | Height: | 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 Width: | Height: | Size: 26 KiB |
Before Width: | Height: | 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 Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 75 KiB |
Before Width: | Height: | 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>
|