Adds updated install guide content
Adds install guides content to basic-install-guides folder. This content will soon be modified, edited and pushed back to install gudies. It will be linked from inside install guide and the copy in training guides will be deleted. This patch adds these files for easy transition and also to figure out different changes to install guides without having to compromise on quality and also to meet Juno2 release date. Change-Id: I8ad0860eae53304cf08448aa67f12b6e3ea9caae Implements: blueprint openstack-training-guides
@@ -0,0 +1,94 @@
|
||||
<?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_uids">
|
||||
<title>Reserved user IDs</title>
|
||||
|
||||
<para>
|
||||
In OpenStack, certain user IDs are reserved and used to run
|
||||
specific OpenStack services and own specific OpenStack
|
||||
files. These users 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>
|
||||
@@ -0,0 +1,85 @@
|
||||
<?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="0.1"
|
||||
xml:id="openstack-basic-install-manual-juno">
|
||||
<title>OpenStack Installation Guide for
|
||||
<phrase os="ubuntu">Ubuntu 12.04/14.04 (LTS)</phrase>
|
||||
</title>
|
||||
<?rax
|
||||
status.bar.text.font.size="40px"
|
||||
status.bar.text="Juno"?>
|
||||
<?rax subtitle.font.size="17px" title.font.size="32px"?>
|
||||
<titleabbrev>OpenStack Installation Guide for
|
||||
<phrase os="rhel;centos;fedora">Red Hat Enterprise Linux, CentOS, and Fedora</phrase>
|
||||
<phrase os="ubuntu">Ubuntu 12.04/14.04 (LTS)</phrase>
|
||||
<phrase os="opensuse">openSUSE and SUSE Linux Enterprise Server</phrase>
|
||||
<!--phrase os="debian">Debian 7.0 (Wheezy)</phrase-->
|
||||
</titleabbrev>
|
||||
<!-- para>
|
||||
<para>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.0 (code name: Wheezy).</phrase>
|
||||
<phrase os="ubuntu">This guide walks through an
|
||||
installation by using packages available through
|
||||
Ubuntu 12.04 (LTS) or 14.04 (LTS).</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 and its derivatives through the
|
||||
EPEL repository.</phrase>
|
||||
<phrase os="opensuse">This guide shows you how to
|
||||
install OpenStack by using packages on openSUSE
|
||||
through the Open Build Service Cloud
|
||||
repository.</phrase> Explanations of configuration
|
||||
options and sample configuration files are
|
||||
included.</para>
|
||||
</para -->
|
||||
<!--revhistory>
|
||||
<revision>
|
||||
<date>2014-07-16</date>
|
||||
<revdescription>
|
||||
<itemizedlist spacing="compact">
|
||||
<listitem>
|
||||
<para>Start documentation for Icehouse.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</revdescription>
|
||||
</revision>
|
||||
</revhistory-->
|
||||
<!-- Chapters are referred from the book file through these
|
||||
include statements. You can add additional chapters using
|
||||
these types of statements. -->
|
||||
<!-- xi:include href="http://git.openstack.org/cgit/openstack/openstack-manuals/plain/doc/common/ch_preface.xml"/ -->
|
||||
<xi:include href="ch_overview.xml"/>
|
||||
<xi:include href="ch_basics.xml"/>
|
||||
<xi:include href="ch_debconf.xml"/>
|
||||
<xi:include href="ch_keystone.xml"/>
|
||||
<xi:include href="ch_clients.xml"/>
|
||||
<xi:include href="ch_glance.xml"/>
|
||||
<xi:include href="ch_nova.xml"/>
|
||||
<xi:include href="ch_networking.xml"/>
|
||||
<xi:include href="ch_horizon.xml"/>
|
||||
<xi:include href="ch_cinder.xml"/>
|
||||
<xi:include href="ch_swift.xml"/>
|
||||
<xi:include href="ch_heat.xml"/>
|
||||
<xi:include href="ch_ceilometer.xml"/>
|
||||
<xi:include href="ch_trove.xml"/>
|
||||
<xi:include href="ch_launch-instance.xml"/>
|
||||
<xi:include href="app_reserved_uids.xml"/>
|
||||
<!-- xi:include href="http://git.openstack.org/cgit/openstack/openstack-manuals/plain/doc/common/app_support.xml"/-->
|
||||
<glossary role="auto"/>
|
||||
</book>
|
||||
|
||||
|
||||
|
||||
47
doc/training-guides/basic-install-guide/ch_basics.xml
Normal file
@@ -0,0 +1,47 @@
|
||||
<?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 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="object-storage-system-requirements"/-->. However, the
|
||||
dashboard will not work 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>
|
||||
<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>
|
||||
24
doc/training-guides/basic-install-guide/ch_ceilometer.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<?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="http://git.openstack.org/cgit/openstack/openstack-manuals/plain/doc/common/section_getstart_telemetry.xml"/>
|
||||
<xi:include href="section_ceilometer-install.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>
|
||||
26
doc/training-guides/basic-install-guide/ch_cinder.xml
Normal file
@@ -0,0 +1,26 @@
|
||||
<?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 works through the
|
||||
interaction of a series of daemon processes named <systemitem
|
||||
role="process">cinder-*</systemitem> that reside persistently on
|
||||
the host machine or machines. You can run the binaries from a
|
||||
single node or across multiple nodes. You can also run them on the
|
||||
same node as other OpenStack services. The following sections
|
||||
introduce Block Storage service components and concepts and show
|
||||
you how to configure and install the Block Storage service.</para>
|
||||
<xi:include href="http://git.openstack.org/cgit/openstack/openstack-manuals/plain/doc/common/section_getstart_block-storage.xml"/>
|
||||
<xi:include href="section_cinder-controller.xml"/>
|
||||
<xi:include href="section_cinder-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>
|
||||
49
doc/training-guides/basic-install-guide/ch_clients.xml
Normal file
@@ -0,0 +1,49 @@
|
||||
<?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>
|
||||
<xi:include href="http://git.openstack.org/cgit/openstack/openstack-manuals/plain/doc/common/section_cli_overview.xml"/>
|
||||
<xi:include href="http://git.openstack.org/cgit/openstack/openstack-manuals/plain/doc/common/section_cli_install.xml"/>
|
||||
<xi:include href="http://git.openstack.org/cgit/openstack/openstack-manuals/plain/doc/common/section_cli_openrc.xml"/>
|
||||
|
||||
<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>
|
||||
14
doc/training-guides/basic-install-guide/ch_debconf.xml
Normal file
@@ -0,0 +1,14 @@
|
||||
<?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>
|
||||
31
doc/training-guides/basic-install-guide/ch_glance.xml
Normal file
@@ -0,0 +1,31 @@
|
||||
<?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="http://git.openstack.org/cgit/openstack/openstack-manuals/plain/doc/common/section_getstart_image.xml"/>
|
||||
<xi:include href="section_glance-install.xml"/>
|
||||
<xi:include href="section_glance-verify.xml"/>
|
||||
</chapter>
|
||||
19
doc/training-guides/basic-install-guide/ch_heat.xml
Normal file
@@ -0,0 +1,19 @@
|
||||
<?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="http://git.openstack.org/cgit/openstack/openstack-manuals/plain/doc/common/section_getstart_orchestration.xml"/>
|
||||
<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>
|
||||
44
doc/training-guides/basic-install-guide/ch_horizon.xml
Normal file
@@ -0,0 +1,44 @@
|
||||
<?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>These instructions show an example deployment configured with
|
||||
an Apache web server.</para>
|
||||
<para>After you <link linkend="install_dashboard">install and
|
||||
configure the dashboard</link>, 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>.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Set up session storage for the dashboard. See <xref
|
||||
linkend="dashboard-sessions"/>.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
<xi:include href="section_dashboard-system-reqs.xml"/>
|
||||
<xi:include href="section_dashboard-install.xml"/>
|
||||
<xi:include href="http://git.openstack.org/cgit/openstack/openstack-manuals/plain/doc/common/section_dashboard_sessions.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>
|
||||
</section>
|
||||
</chapter>
|
||||
13
doc/training-guides/basic-install-guide/ch_keystone.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?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="common/section_keystone-concepts.xml"/>
|
||||
<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"/>
|
||||
</chapter>
|
||||
@@ -0,0 +1,33 @@
|
||||
<?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>
|
||||
46
doc/training-guides/basic-install-guide/ch_networking.xml
Normal file
@@ -0,0 +1,46 @@
|
||||
<?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"/>
|
||||
<section xml:id="section_neutron-networking-ml2">
|
||||
<title>Modular Layer 2 (ML2) plug-in</title>
|
||||
<xi:include href="section_neutron-ml2-controller-node.xml"/>
|
||||
<xi:include href="section_neutron-ml2-network-node.xml"/>
|
||||
<xi:include href="section_neutron-ml2-compute-node.xml"/>
|
||||
<xi:include href="section_neutron-initial-networks.xml"/>
|
||||
</section>
|
||||
</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>
|
||||
13
doc/training-guides/basic-install-guide/ch_nova.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?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="http://git.openstack.org/cgit/openstack/openstack-manuals/plain/doc/common/section_getstart_compute.xml"/>
|
||||
<xi:include href="section_nova-controller-install.xml"/>
|
||||
<xi:include href="section_nova-compute-install.xml"/>
|
||||
<xi:include href="section_nova-verify.xml"/>
|
||||
</chapter>
|
||||
141
doc/training-guides/basic-install-guide/ch_overview.xml
Normal file
@@ -0,0 +1,141 @@
|
||||
<?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>
|
||||
<xi:include href="http://git.openstack.org/cgit/openstack/openstack-manuals/plain/doc/common/ch_getstart.xml"
|
||||
xpointer="element(table1)"/>
|
||||
<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>
|
||||
<figure xml:id="conceptual-architecture">
|
||||
<title>Conceptual architecture</title>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata contentwidth="6in"
|
||||
fileref="http://git.openstack.org/cgit/openstack/openstack-manuals/plain/doc/common/figures/openstack_havana_conceptual_arch.png"/>
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
</figure>
|
||||
</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>
|
||||
<para>Three-node architecture with OpenStack Networking (neutron).
|
||||
To be implemented</para>
|
||||
<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>
|
||||
</itemizedlist>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
36
doc/training-guides/basic-install-guide/ch_swift.xml
Normal file
@@ -0,0 +1,36 @@
|
||||
<?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="http://git.openstack.org/cgit/openstack/openstack-manuals/plain/doc/common/section_getstart_object-storage.xml"/>
|
||||
<xi:include
|
||||
href="object-storage/section_object-storage-sys-requirements.xml"/>
|
||||
<xi:include
|
||||
href="object-storage/section_object-storage-network-planning.xml"/>
|
||||
<xi:include
|
||||
href="object-storage/section_object-storage-example-install-arch.xml"/>
|
||||
<xi:include href="object-storage/section_object-storage-install.xml"/>
|
||||
<xi:include
|
||||
href="object-storage/section_object-storage-install-config-storage-nodes.xml"/>
|
||||
<xi:include
|
||||
href="object-storage/section_object-storage-install-config-proxy-node.xml"/>
|
||||
<xi:include
|
||||
href="object-storage/section_start-storage-node-services.xml"/>
|
||||
<xi:include
|
||||
href="object-storage/section_object-storage-verifying-install.xml"/>
|
||||
<xi:include
|
||||
href="object-storage/section_object-storage-adding-proxy-server.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>
|
||||
16
doc/training-guides/basic-install-guide/ch_trove.xml
Normal file
@@ -0,0 +1,16 @@
|
||||
<?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="http://git.openstack.org/cgit/openstack/openstack-manuals/plain/doc/common/section_getstart_trove.xml"/>
|
||||
<xi:include href="section_trove-install.xml" />
|
||||
<xi:include href="section_trove-verify.xml" />
|
||||
</chapter>
|
||||
|
After Width: | Height: | Size: 214 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 61 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1,286 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,144 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,39 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,79 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,58 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,235 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,125 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,22 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,111 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,226 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,107 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,53 @@
|
||||
<?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>
|
||||
BIN
doc/training-guides/basic-install-guide/figures/NOVA_ARCH.png
Normal file
|
After Width: | Height: | Size: 504 KiB |
5907
doc/training-guides/basic-install-guide/figures/NOVA_ARCH.svg
Normal file
|
After Width: | Height: | Size: 205 KiB |
|
After Width: | Height: | Size: 63 KiB |
15676
doc/training-guides/basic-install-guide/figures/NOVA_install_arch.svg
Normal file
|
After Width: | Height: | Size: 629 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 9.8 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 8.3 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 58 KiB |
@@ -0,0 +1,995 @@
|
||||
<?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>
|
||||
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 42 KiB |
@@ -0,0 +1,737 @@
|
||||
<?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>
|
||||
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 48 KiB |
@@ -0,0 +1,622 @@
|
||||
<?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>
|
||||
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 51 KiB |
@@ -0,0 +1,790 @@
|
||||
<?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>
|
||||
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 112 KiB |
1176
doc/training-guides/basic-install-guide/figures/nova-external-1.svg
Normal file
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 75 KiB |
14932
doc/training-guides/basic-install-guide/figures/swift_install_arch.svg
Normal file
|
After Width: | Height: | Size: 602 KiB |
@@ -0,0 +1,54 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,56 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,200 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,117 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,135 @@
|
||||
<?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-openstack-object-storage">
|
||||
<title>Install Object Storage</title>
|
||||
<para>Though you can install OpenStack Object Storage for development or
|
||||
testing purposes on one server, a multiple-server installation enables
|
||||
the high availability and redundancy you want in a production
|
||||
distributed object storage system.</para>
|
||||
<para>To perform a single-node installation for development purposes from
|
||||
source code, use the Swift All In One instructions (Ubuntu) or DevStack
|
||||
(multiple distros). See <link
|
||||
xlink:href="http://swift.openstack.org/development_saio.html"
|
||||
>http://swift.openstack.org/development_saio.html</link> for manual
|
||||
instructions or <link xlink:href="http://devstack.org"
|
||||
>http://devstack.org</link> for all-in-one including authentication
|
||||
with the Identity Service (keystone) v2.0 API.</para>
|
||||
<warning>
|
||||
<para>In this guide we recommend installing and configuring the Identity
|
||||
service so that it implements Identity API v2.0. The Object Storage
|
||||
service is unaware of domains when implementing Access Control Lists
|
||||
(ACLs), so you must use the v2.0 API to avoid having identical user
|
||||
names in different domains, which would enable two users to access
|
||||
the same objects.</para>
|
||||
</warning>
|
||||
<section xml:id="before-you-begin-swift-install">
|
||||
<title>Before you begin</title>
|
||||
<para>Have a copy of the operating system installation media available
|
||||
if you are installing on a new server.</para>
|
||||
<para>These steps assume you have set up repositories for packages for
|
||||
your operating system as shown in <link linkend="basics-packages"
|
||||
>OpenStack Packages</link>.</para>
|
||||
<para>This document demonstrates how to install a cluster by using the
|
||||
following types of nodes:</para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>One proxy node which runs the
|
||||
<systemitem class="service">swift-proxy-server</systemitem>
|
||||
processes. The proxy server proxies requests to the
|
||||
appropriate storage nodes.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Five storage nodes that run the <systemitem
|
||||
class="service">swift-account-server</systemitem>,
|
||||
<systemitem
|
||||
class="service">swift-container-server</systemitem>,
|
||||
and <systemitem
|
||||
class="service">swift-object-server</systemitem>
|
||||
processes which control storage of the account
|
||||
databases, the container databases, as well as the
|
||||
actual stored objects.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
<note>
|
||||
<para>Fewer storage nodes can be used initially, but a minimum of
|
||||
five is recommended for a production cluster.</para>
|
||||
</note>
|
||||
</section>
|
||||
<section xml:id="general-installation-steps-swift">
|
||||
<title>General installation steps</title>
|
||||
<procedure>
|
||||
<step os="rhel;centos;fedora;opensuse;sles;ubuntu">
|
||||
<para>Create a <literal>swift</literal> user that the Object
|
||||
Storage Service can use to authenticate with the Identity
|
||||
Service. Choose a password and specify an email address for
|
||||
the <literal>swift</literal> user. Use the
|
||||
<literal>service</literal> tenant and give the user the
|
||||
<literal>admin</literal> role:</para>
|
||||
<screen><prompt>$</prompt> <userinput>keystone user-create --name=swift --pass=<replaceable>SWIFT_PASS</replaceable> \
|
||||
--email=<replaceable>swift@example.com</replaceable></userinput>
|
||||
<prompt>$</prompt> <userinput>keystone user-role-add --user=swift --tenant=service --role=admin</userinput></screen>
|
||||
</step>
|
||||
<step>
|
||||
<para>Create a service entry for the Object Storage
|
||||
Service:</para>
|
||||
<screen><prompt>$</prompt> <userinput>keystone service-create --name=swift --type=object-store \
|
||||
--description="OpenStack Object Storage"</userinput>
|
||||
<computeroutput>+-------------+----------------------------------+
|
||||
| Property | Value |
|
||||
+-------------+----------------------------------+
|
||||
| description | OpenStack Object Storage |
|
||||
| id | eede9296683e4b5ebfa13f5166375ef6 |
|
||||
| name | swift |
|
||||
| type | object-store |
|
||||
+-------------+----------------------------------+</computeroutput></screen>
|
||||
<note>
|
||||
<para>The service ID is randomly generated and is different
|
||||
from the one shown here.</para>
|
||||
</note>
|
||||
</step>
|
||||
<step>
|
||||
<para>Specify an API endpoint for the Object Storage Service by
|
||||
using the returned service ID. When you specify an endpoint,
|
||||
you provide URLs for the public API, internal API, and admin
|
||||
API. In this guide, the <literal>controller</literal> host
|
||||
name is used:</para>
|
||||
<screen><prompt>$</prompt> <userinput>keystone endpoint-create \
|
||||
--service-id=$(keystone service-list | awk '/ object-store / {print $2}') \
|
||||
--publicurl='http://<replaceable>controller</replaceable>:8080/v1/AUTH_%(tenant_id)s' \
|
||||
--internalurl='http://<replaceable>controller</replaceable>:8080/v1/AUTH_%(tenant_id)s' \
|
||||
--adminurl=http://<replaceable>controller</replaceable>:8080</userinput>
|
||||
<computeroutput>+-------------+---------------------------------------------------+
|
||||
| Property | Value |
|
||||
+-------------+---------------------------------------------------+
|
||||
| adminurl | http://controller:8080/ |
|
||||
| id | 9e3ce428f82b40d38922f242c095982e |
|
||||
| internalurl | http://controller:8080/v1/AUTH_%(tenant_id)s |
|
||||
| publicurl | http://controller:8080/v1/AUTH_%(tenant_id)s |
|
||||
| region | regionOne |
|
||||
| service_id | eede9296683e4b5ebfa13f5166375ef6 |
|
||||
+-------------+---------------------------------------------------+</computeroutput></screen>
|
||||
</step>
|
||||
<step>
|
||||
<para>Create the configuration directory on all nodes:</para>
|
||||
<screen><prompt>#</prompt> <userinput>mkdir -p /etc/swift</userinput></screen>
|
||||
</step>
|
||||
<step>
|
||||
<para>Create <filename>/etc/swift/swift.conf</filename> on all
|
||||
nodes:</para>
|
||||
<programlisting language="ini"><xi:include parse="text" href="../samples/swift.conf.txt"/></programlisting>
|
||||
</step>
|
||||
</procedure>
|
||||
<note>
|
||||
<para>The prefix and suffix value in <filename>/etc/swift/swift.conf</filename>
|
||||
should be set to some random string of text to be used as a salt
|
||||
when hashing to determine mappings in the ring. This file must
|
||||
be the same on every node in the cluster!</para>
|
||||
</note>
|
||||
<para>Next, set up your storage nodes and proxy node. This example uses
|
||||
the Identity Service for the common authentication piece.</para>
|
||||
</section>
|
||||
</section>
|
||||
@@ -0,0 +1,83 @@
|
||||
<?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="object-storage-network-planning">
|
||||
<title>Plan networking for Object Storage</title>
|
||||
<para>For both conserving network resources and ensuring that
|
||||
network administrators understand the needs for networks and
|
||||
public IP addresses for providing access to the APIs and storage
|
||||
network as necessary, this section offers recommendations and
|
||||
required minimum sizes. Throughput of at least 1000 Mbps is
|
||||
suggested.</para>
|
||||
<para>This guide describes the following networks:<itemizedlist>
|
||||
<listitem>
|
||||
<para>A mandatory public network. Connects to the proxy
|
||||
server.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>A mandatory storage network. Not accessible from outside
|
||||
the cluster. All nodes connect to this network.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>An optional replication network. Not accessible from
|
||||
outside the cluster. Dedicated to replication traffic among
|
||||
storage nodes. Must be configured in the Ring.</para>
|
||||
</listitem>
|
||||
</itemizedlist></para>
|
||||
<para>This figure shows the basic architecture for the public
|
||||
network, the storage network, and the optional replication
|
||||
network.</para>
|
||||
<para><inlinemediaobject>
|
||||
<imageobject>
|
||||
<imagedata
|
||||
fileref="../figures/networking-interactions-swift.png"
|
||||
/>
|
||||
</imageobject>
|
||||
</inlinemediaobject></para>
|
||||
<para>By default, all of the OpenStack Object Storage services, as
|
||||
well as the rsync daemon on the storage nodes, are configured to
|
||||
listen on their <literal>STORAGE_LOCAL_NET</literal> IP
|
||||
addresses.</para>
|
||||
<para>If you configure a replication network in the Ring, the
|
||||
Account, Container and Object servers listen on both the
|
||||
<literal>STORAGE_LOCAL_NET</literal> and
|
||||
<literal>STORAGE_REPLICATION_NET</literal> IP addresses. The
|
||||
rsync daemon only listens on the
|
||||
<literal>STORAGE_REPLICATION_NET</literal> IP address.</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>Public Network (Publicly routable IP range)</term>
|
||||
<listitem>
|
||||
<para>Provides public IP accessibility to the API endpoints
|
||||
within the cloud infrastructure.</para>
|
||||
<para>Minimum size: one IP address for each proxy
|
||||
server.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Storage Network (RFC1918 IP Range, not publicly
|
||||
routable)</term>
|
||||
<listitem>
|
||||
<para>Manages all inter-server communications within the
|
||||
Object Storage infrastructure.</para>
|
||||
<para>Minimum size: one IP address for each storage node and
|
||||
proxy server.</para>
|
||||
<para>Recommended size: as above, with room for expansion to
|
||||
the largest your cluster size. For example, 255 or CIDR
|
||||
/24.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Replication Network (RFC1918 IP Range, not publicly
|
||||
routable)</term>
|
||||
<listitem>
|
||||
<para>Manages replication-related communications among storage
|
||||
servers within the Object Storage infrastructure.</para>
|
||||
<para>Recommended size: as for
|
||||
<literal>STORAGE_LOCAL_NET</literal>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</section>
|
||||
@@ -0,0 +1,107 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE chapter [
|
||||
<!ENTITY % openstack SYSTEM "http://git.openstack.org/cgit/openstack/openstack-manuals/plain/doc/common/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="object-storage-system-requirements">
|
||||
<?dbhtml-stop-chunking?>
|
||||
<title>System requirements for Object Storage</title>
|
||||
<para><emphasis role="bold">Hardware</emphasis>: OpenStack Object
|
||||
Storage is designed to run on commodity hardware.</para>
|
||||
<note>
|
||||
<para>When you install only the Object Storage and Identity
|
||||
Service, you cannot use the dashboard unless you also
|
||||
install Compute and the Image Service.</para>
|
||||
</note>
|
||||
<table rules="all">
|
||||
<caption>Hardware recommendations</caption>
|
||||
<col width="20%"/>
|
||||
<col width="23%"/>
|
||||
<col width="57%"/>
|
||||
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Server</td>
|
||||
<td>Recommended Hardware</td>
|
||||
<td>Notes</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><para>Object Storage object servers</para></td>
|
||||
<td>
|
||||
<para>Processor: dual quad
|
||||
core</para><para>Memory: 8 or 12 GB RAM</para>
|
||||
<para>Disk space: optimized for cost per GB</para>
|
||||
<para>Network: one 1 GB Network Interface Card
|
||||
(NIC)</para></td>
|
||||
<td><para>The amount of disk space depends on how much
|
||||
you can fit into the rack efficiently. You
|
||||
want to optimize these for best cost per GB
|
||||
while still getting industry-standard failure
|
||||
rates. At Rackspace, our storage servers are
|
||||
currently running fairly generic 4U servers
|
||||
with 24 2T SATA drives and 8 cores of
|
||||
processing power. RAID on the storage drives
|
||||
is not required and not recommended. Swift's
|
||||
disk usage pattern is the worst case possible
|
||||
for RAID, and performance degrades very
|
||||
quickly using RAID 5 or 6.</para>
|
||||
<para>As an example, Rackspace runs Cloud Files
|
||||
storage servers with 24 2T SATA drives and 8
|
||||
cores of processing power. Most services
|
||||
support either a worker or concurrency value
|
||||
in the settings. This allows the services to
|
||||
make effective use of the cores
|
||||
available.</para></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><para>Object Storage container/account
|
||||
servers</para></td>
|
||||
<td>
|
||||
<para>Processor: dual quad core</para>
|
||||
<para>Memory: 8 or 12 GB RAM</para>
|
||||
<para>Network: one 1 GB Network Interface Card
|
||||
(NIC)</para></td>
|
||||
<td><para>Optimized for IOPS due to tracking with
|
||||
SQLite databases.</para></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><para>Object Storage proxy server</para></td>
|
||||
<td>
|
||||
<para>Processor: dual quad
|
||||
core</para><para>Network: one 1 GB Network
|
||||
Interface Card (NIC)</para></td>
|
||||
<td><para>Higher network throughput offers better
|
||||
performance for supporting many API
|
||||
requests.</para>
|
||||
<para>Optimize your proxy servers for best CPU
|
||||
performance. The Proxy Services are more CPU
|
||||
and network I/O intensive. If you are using 10
|
||||
GB networking to the proxy, or are terminating
|
||||
SSL traffic at the proxy, greater CPU power is
|
||||
required.</para></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<para><emphasis role="bold">Operating system</emphasis>: OpenStack
|
||||
Object Storage currently runs on Ubuntu, RHEL, CentOS, Fedora,
|
||||
openSUSE, or SLES.</para>
|
||||
<para><emphasis role="bold">Networking</emphasis>: 1 Gbps or 10
|
||||
Gbps is suggested internally. For OpenStack Object Storage, an
|
||||
external network should connect the outside world to the proxy
|
||||
servers, and the storage network is intended to be isolated on
|
||||
a private network or multiple private networks.</para>
|
||||
<para><emphasis role="bold">Database</emphasis>: For OpenStack
|
||||
Object Storage, a SQLite database is part of the OpenStack
|
||||
Object Storage container and account management
|
||||
process.</para>
|
||||
<para><emphasis role="bold">Permissions</emphasis>: You can
|
||||
install OpenStack Object Storage either as root or as a user
|
||||
with sudo permissions if you configure the sudoers file to
|
||||
enable all the permissions.</para>
|
||||
</section>
|
||||