Merge "changes to section_compute-cells"

This commit is contained in:
Jenkins 2014-06-09 15:55:23 +00:00 committed by Gerrit Code Review
commit c871384c10
5 changed files with 239 additions and 152 deletions

View File

@ -18,6 +18,7 @@
</author> </author>
<copyright> <copyright>
<year>2013</year> <year>2013</year>
<year>2014</year>
<holder>OpenStack Foundation</holder> <holder>OpenStack Foundation</holder>
</copyright> </copyright>
<productname>OpenStack</productname> <productname>OpenStack</productname>

View File

@ -1,101 +1,118 @@
<section xml:id="section_compute-cells" <section xml:id="section_compute-cells"
xmlns="http://docbook.org/ns/docbook" xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xi="http://www.w3.org/2001/XInclude" version="5.0">
version="5.0">
<title>Cells</title> <title>Cells</title>
<?dbhtml stop-chunking?> <?dbhtml stop-chunking?>
<para><emphasis role="italic">Cells</emphasis> functionality allows you to scale an OpenStack <para><emphasis role="italic">Cells</emphasis> functionality
Compute cloud in a more distributed fashion without having to use complicated technologies enables you to scale an OpenStack Compute cloud in a more
like database and message queue clustering. It is intended to support very large distributed fashion without having to use complicated
deployments.</para> technologies like database and message queue clustering. It
<para>When this functionality is enabled, the hosts in an OpenStack Compute cloud are supports very large deployments.</para>
partitioned into groups called cells. Cells are configured as a tree. The top-level cell <para>When this functionality is enabled, the hosts in an
should have a host that runs a <systemitem class="service">nova-api</systemitem> service, OpenStack Compute cloud are partitioned into groups called
but no <systemitem class="service">nova-compute</systemitem> services. Each child cell cells. Cells are configured as a tree. The top-level cell
should run all of the typical <systemitem class="service">nova-*</systemitem> services in a should have a host that runs a <systemitem class="service"
regular Compute cloud except for <systemitem class="service">nova-api</systemitem>. You can >nova-api</systemitem> service, but no <systemitem
think of cells as a normal Compute deployment in that each cell has its own database server class="service">nova-compute</systemitem> services. Each
and message queue broker.</para> child cell should run all of the typical <systemitem
<para>The <systemitem class="service">nova-cells</systemitem> service handles communication class="service">nova-*</systemitem> services in a regular
between cells and selects cells for new instances. This service is required for every cell. Compute cloud except for <systemitem class="service"
Communication between cells is pluggable, and currently the only option is communication through >nova-api</systemitem>. You can think of cells as a normal
RPC.</para> Compute deployment in that each cell has its own database
<para>Cells scheduling is separate from host scheduling. <systemitem server and message queue broker.</para>
class="service">nova-cells</systemitem> <para>The <systemitem class="service">nova-cells</systemitem>
first picks a cell. Once a cell is selected and the new build service handles communication between cells and selects cells
request reaches its <systemitem for new instances. This service is required for every cell.
class="service">nova-cells</systemitem> service, it is sent Communication between cells is pluggable, and currently the
over to the host scheduler in that cell and the build proceeds only option is communication through RPC.</para>
as it would have without cells.</para> <para>Cells scheduling is separate from host scheduling.
<warning> <systemitem class="service">nova-cells</systemitem> first
<para>Cell functionality is currently considered experimental.</para> picks a cell. Once a cell is selected and the new build
</warning> request reaches its <systemitem class="service"
>nova-cells</systemitem> service, it is sent over to the
host scheduler in that cell and the build proceeds as it would
have without cells.</para>
<warning>
<para>Cell functionality is currently considered
experimental.</para>
</warning>
<section xml:id="cell-config-options"> <section xml:id="cell-config-options">
<title>Cell configuration options</title> <title>Cell configuration options</title>
<para>Cells are disabled by default. All cell-related configuration options go under a <para>Cells are disabled by default. All cell-related
<literal>[cells]</literal> section in <filename>nova.conf</filename>. The following configuration options appear in the
<literal>[cells]</literal> section in
<filename>nova.conf</filename>. The following
cell-related options are currently supported:<variablelist> cell-related options are currently supported:<variablelist>
<varlistentry> <varlistentry>
<term><literal>enable</literal></term> <term><option>enable</option></term>
<listitem> <listitem>
<para>Set this is <literal>True</literal> to turn on cell functionality, <para>Set to <literal>True</literal> to turn
which is off by default.</para> on cell functionality. Default is
<literal>false</literal>.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
<term><literal>name</literal></term> <term><option>name</option></term>
<listitem> <listitem>
<para>Name of the current cell. This must be unique for each cell.</para> <para>Name of the current cell. Must be unique
for each cell.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
<term><literal>capabilities</literal></term> <term><option>capabilities</option></term>
<listitem> <listitem>
<para>List of arbitrary <para>List of arbitrary
<literal><replaceable>key</replaceable>=<replaceable>value</replaceable></literal> <literal><replaceable>key</replaceable>=<replaceable>value</replaceable></literal>
pairs defining capabilities of the current cell. pairs defining capabilities of the current
Values include cell. Values include
<literal>hypervisor=xenserver;kvm,os=linux;windows</literal>.</para> <literal>hypervisor=xenserver;kvm,os=linux;windows</literal>.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
<term><literal>call_timeout</literal></term> <term><option>call_timeout</option></term>
<listitem> <listitem>
<para>How long in seconds to wait for replies from calls <para>How long in seconds to wait for replies
between cells.</para> from calls between cells.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
<term>scheduler_filter_classes</term> <term>scheduler_filter_classes</term>
<listitem> <listitem>
<para>Filter classes that the cells scheduler should use. By default, uses <para>Filter classes that the cells scheduler
"<literal>nova.cells.filters.all_filters</literal>" to map to all should use. By default, uses
cells filters included with Compute.</para> "<literal>nova.cells.filters.all_filters</literal>"
to map to all cells filters included with
Compute.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
<term>scheduler_weight_classes</term> <term>scheduler_weight_classes</term>
<listitem><para>Weight classes the cells scheduler should use. By default, uses <listitem>
<para>Weight classes the cells scheduler
should use. By default, uses
"<literal>nova.cells.weights.all_weighers</literal>" "<literal>nova.cells.weights.all_weighers</literal>"
to map to all cells weight algorithms (weighers) to map to all cells weight algorithms
included with Compute.</para></listitem> (weighers) included with Compute.</para>
</listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
<term>ram_weight_multiplier</term> <term>ram_weight_multiplier</term>
<listitem> <listitem>
<para>Multiplier used for weighing ram. Negative numbers <para>Multiplier used for weighing ram.
mean you want Compute to stack VMs on one host Negative numbers mean you want Compute to
instead of spreading out new VMs to more hosts in stack VMs on one host instead of spreading
the cell. Default value is 10.0.</para> out new VMs to more hosts in the cell. The
default value is 10.0.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
</variablelist></para> </variablelist></para>
</section> </section>
<section xml:id="config-API-cell"> <section xml:id="config-API-cell">
<title>Configure the API (top-level) cell</title> <title>Configure the API (top-level) cell</title>
<para>The compute API class must be changed in the API cell so that requests can be proxied <para>The compute API class must be changed in the API cell so
through nova-cells down to the correct cell properly. Add the following to that requests can be proxied through nova-cells down to
the correct cell properly. Add the following line to
<filename>nova.conf</filename> in the API <filename>nova.conf</filename> in the API
cell:<programlisting language="ini">[DEFAULT] cell:<programlisting language="ini">[DEFAULT]
compute_api_class=nova.compute.cells_api.ComputeCellsAPI compute_api_class=nova.compute.cells_api.ComputeCellsAPI
@ -107,8 +124,10 @@ name=api</programlisting></para>
</section> </section>
<section xml:id="config-child-cell"> <section xml:id="config-child-cell">
<title>Configure the child cells</title> <title>Configure the child cells</title>
<para>Add the following to <filename>nova.conf</filename> in the child cells, replacing <para>Add the following lines to
<replaceable>cell1</replaceable> with the name of each <filename>nova.conf</filename> in the child cells,
replacing <replaceable>cell1</replaceable> with the name
of each
cell:<programlisting language="ini">[DEFAULT] cell:<programlisting language="ini">[DEFAULT]
# Disable quota checking in child cells. Let API cell do it exclusively. # Disable quota checking in child cells. Let API cell do it exclusively.
quota_driver=nova.quota.NoopQuotaDriver quota_driver=nova.quota.NoopQuotaDriver
@ -119,13 +138,15 @@ name=<replaceable>cell1</replaceable></programlisting></para>
</section> </section>
<section xml:id="config-cell-db"> <section xml:id="config-cell-db">
<title>Configure the database in each cell</title> <title>Configure the database in each cell</title>
<para>Before bringing the services online, the database in each cell needs to be configured <para>Before bringing the services online, the database in
with information about related cells. In particular, the API cell needs to know about each cell needs to be configured with information about
its immediate children, and the child cells must know about their immediate agents. related cells. In particular, the API cell needs to know
The information needed is the <application>RabbitMQ</application> server credentials about its immediate children, and the child cells must
for the particular cell.</para> know about their immediate agents. The information needed
<para>Use the <command>nova-manage cell create</command> command to add this information to is the <application>RabbitMQ</application> server
the database in each credentials for the particular cell.</para>
<para>Use the <command>nova-manage cell create</command>
command to add this information to the database in each
cell:<screen><prompt>#</prompt> <userinput>nova-manage cell create -h</userinput> cell:<screen><prompt>#</prompt> <userinput>nova-manage cell create -h</userinput>
<computeroutput>Options: <computeroutput>Options:
-h, --help show this help message and exit -h, --help show this help message and exit
@ -144,117 +165,158 @@ name=<replaceable>cell1</replaceable></programlisting></para>
--woffset=&lt;float> --woffset=&lt;float>
(weight offset) It might be used by some cell scheduling code in the future (weight offset) It might be used by some cell scheduling code in the future
--wscale=&lt;float> --wscale=&lt;float>
(weight scale) It might be used by some cell scheduling code in the future (weight scale) It might be used by some cell scheduling code in the future</computeroutput></screen></para>
</computeroutput></screen></para> <para>As an example, assume an API cell named
<para>As an example, assume we have an API cell named <literal>api</literal> and a child <literal>api</literal> and a child cell named
cell named <literal>cell1</literal>. Within the api cell, we have the following RabbitMQ <literal>cell1</literal>.</para>
server <para>Within the <literal>api</literal> cell, specify the
info:<programlisting language="ini">rabbit_host=10.0.0.10 following RabbitMQ server
information:<programlisting language="ini">rabbit_host=10.0.0.10
rabbit_port=5672 rabbit_port=5672
rabbit_username=api_user rabbit_username=api_user
rabbit_password=api_passwd rabbit_password=api_passwd
rabbit_virtual_host=api_vhost</programlisting></para> rabbit_virtual_host=api_vhost</programlisting></para>
<para>And in the child cell named <literal>cell1</literal> we have the following RabbitMQ <para>Within the <literal>cell1</literal> child cell, specify
server the following RabbitMQ server
info:<programlisting language="ini">rabbit_host=10.0.1.10 information:<programlisting language="ini">rabbit_host=10.0.1.10
rabbit_port=5673 rabbit_port=5673
rabbit_username=cell1_user rabbit_username=cell1_user
rabbit_password=cell1_passwd rabbit_password=cell1_passwd
rabbit_virtual_host=cell1_vhost</programlisting></para> rabbit_virtual_host=cell1_vhost</programlisting></para>
<para>We would run this in the API cell, as <para>You can run this in the API cell as
root.<screen><prompt>#</prompt> <userinput>nova-manage cell create --name=cell1 --cell_type=child \ root:<screen><prompt>#</prompt> <userinput>nova-manage cell create --name=cell1 --cell_type=child \
--username=cell1_user --password=cell1_passwd --hostname=10.0.1.10 \ --username=cell1_user --password=cell1_passwd --hostname=10.0.1.10 \
--port=5673 --virtual_host=cell1_vhost --woffset=1.0 --wscale=1.0</userinput></screen> --port=5673 --virtual_host=cell1_vhost --woffset=1.0 --wscale=1.0</userinput></screen></para>
</para> <para>Repeat the previous steps for all child cells.</para>
<para>Repeat the above for all child cells.</para> <para>In the child cell, run the following, as
<para>In the child cell, we would run the following, as
root:<screen><prompt>#</prompt> <userinput>nova-manage cell create --name=api --cell_type=parent \ root:<screen><prompt>#</prompt> <userinput>nova-manage cell create --name=api --cell_type=parent \
--username=api_user --password=api_passwd --hostname=10.0.0.10 \ --username=api_user --password=api_passwd --hostname=10.0.0.10 \
--port=5672 --virtual_host=api_vhost --woffset=1.0 --wscale=1.0</userinput></screen> --port=5672 --virtual_host=api_vhost --woffset=1.0 --wscale=1.0</userinput></screen></para>
</para> <para>To customize the Compute cells, use the configuration
<para>To customize the Compute cells, use the configuration option option settings documented in <xref
settings documented in <xref
linkend="config_table_nova_cells"/>.</para> linkend="config_table_nova_cells"/>.</para>
</section> </section>
<section xml:id="cell-weights-filters"> <section xml:id="cell-weights-filters">
<title>Cell scheduling configuration</title> <title>Cell scheduling configuration</title>
<para>To determine the best cell for launching a new instance, Compute uses a set of <para>To determine the best cell to use to launch a new
filters and weights configured in <filename>/etc/nova/nova.conf</filename>. The instance, Compute uses a set of filters and weights
following options are available to prioritize cells for scheduling:</para> defined in the <filename>/etc/nova/nova.conf</filename>
<para> file. The following options are available to prioritize
<itemizedlist> cells for scheduling:</para>
<variablelist>
<varlistentry>
<term><option>scheduler_filter_classes</option></term>
<listitem> <listitem>
<para><code>scheduler_filter_classes</code> - Specifies the list of filter <para>. Specifies the list of filter classes. By
classes. By default <code>nova.cells.weights.all_filters</code> is default
specified, which maps to all cells filters included with Compute (see <option>nova.cells.weights.all_filters</option>
<xref linkend="scheduler-filters"/>).</para> is specified, which maps to all cells filters
included with Compute (see <xref
linkend="scheduler-filters"/>).</para>
</listitem> </listitem>
</varlistentry>
<varlistentry>
<term><option>scheduler_weight_classes</option></term>
<listitem> <listitem>
<para><code>scheduler_weight_classes</code> - Specifies the list of weight <para>Specifies the list of weight classes. By
classes. By default <code>nova.cells.weights.all_weighers</code> is default
specified, which maps to all cell weight algorithms (weighers) included with <option>nova.cells.weights.all_weighers</option>
Compute. The following modules are available:</para> is specified, which maps to all cell weight
<itemizedlist><listitem> algorithms (weighers) included with Compute.
<para><code>mute_child</code>: Downgrades the likelihood of child cells The following modules are available:</para>
being chosen for scheduling requests, which haven't sent capacity or <itemizedlist>
capability updates in a while. Options include <listitem>
<code>mute_weight_multiplier</code> (multiplier for mute <para><literal>mute_child</literal>.
children; value should be negative) and Downgrades the likelihood of child
<code>mute_weight_value</code> (assigned to mute children; cells being chosen for scheduling
should be a positive value).</para> requests, which haven't sent capacity
or capability updates in a while.
Options include
<option>mute_weight_multiplier</option>
(multiplier for mute children; value
should be negative) and
<option>mute_weight_value</option>
(assigned to mute children; should be
a positive value).</para>
</listitem> </listitem>
<listitem> <listitem>
<para><code>ram_by_instance_type</code>: Select cells with the most RAM <para><literal>ram_by_instance_type</literal>.
capacity for the instance type being requested. Because higher Select cells with the most RAM
weights win, Compute returns the number of available units for the capacity for the instance type being
instance type requested. The <code>ram_weight_multiplier</code> requested. Because higher weights win,
option defaults to 10.0 that adds to the weight by a factor of 10. Compute returns the number of
Use a negative number to stack VMs on one host instead of spreading available units for the instance type
out new VMs to more hosts in the cell.</para> requested. The
<option>ram_weight_multiplier</option>
option defaults to 10.0 that adds to
the weight by a factor of 10. Use a
negative number to stack VMs on one
host instead of spreading out new VMs
to more hosts in the cell.</para>
</listitem> </listitem>
<listitem><para><code>weight_offset</code>: Allows modifying the database to weight a particular cell. You can <listitem>
use this when you want to disable a cell (for example, '0'), or to <para><literal>weight_offset</literal>.
set a default cell by making its weight_offset very high (for Allows modifying the database to
example, '999999999999999'). The highest weight will be the first weight a particular cell. You can use
cell to be scheduled for launching an instance.</para></listitem></itemizedlist> this when you want to disable a cell
(for example, '0'), or to set a
default cell by making its
weight_offset very high (for example,
'999999999999999'). The highest weight
will be the first cell to be scheduled
for launching an instance.</para>
</listitem>
</itemizedlist>
</listitem> </listitem>
</itemizedlist> </varlistentry>
</para> </variablelist>
<para>Additionally, the following options are available for the cell scheduler:</para> <para>Additionally, the following options are available for
<para> the cell scheduler:</para>
<itemizedlist> <variablelist>
<varlistentry>
<term><option>scheduler_retries</option></term>
<listitem> <listitem>
<para><code>scheduler_retries</code> - Specifies how many times the scheduler <para>Specifies how many times the scheduler tries
tries to launch a new instance when no cells are available (default=10).</para> to launch a new instance when no cells are
available (default=10).</para>
</listitem> </listitem>
</varlistentry>
<varlistentry>
<term><option>scheduler_retry_delay</option></term>
<listitem> <listitem>
<para><code>scheduler_retry_delay</code> - Specifies the delay (in seconds) <para>Specifies the delay (in seconds) between
between retries (default=2).</para> retries (default=2).</para>
</listitem> </listitem>
</itemizedlist> </varlistentry>
</para> </variablelist>
<para>As an admin user, you can also add a filter that directs builds to <para>As an admin user, you can also add a filter that directs
a particular cell. The <filename>policy.json</filename> file must builds to a particular cell. The
have a line with <literal>"cells_scheduler_filter:TargetCellFilter" <filename>policy.json</filename> file must have a line
: "is_admin:True"</literal> to let an admin user specify a with <literal>"cells_scheduler_filter:TargetCellFilter" :
scheduler hint to direct a build to a particular cell.</para> "is_admin:True"</literal> to let an admin user specify
a scheduler hint to direct a build to a particular
cell.</para>
</section> </section>
<section xml:id="cell-config-optional-json"> <section xml:id="cell-config-optional-json">
<title>Optional cell configuration</title> <title>Optional cell configuration</title>
<para>Cells currently keeps all inter-cell communication data, including <para>Cells store all inter-cell communication data, including
user names and passwords, in the database. This is undesirable and user names and passwords, in the database. Because the
unnecessary since cells data isn't updated very frequently. Instead, cells data is not updated very frequently, use the
create a JSON file to input cells data specified via a <option>[cells]cells_config</option> option to specify
<code>[cells]cells_config</code> option. When specified, the a JSON file to store cells data. With this configuration,
database is no longer consulted when reloading cells data. The file the database is no longer consulted when reloading the
will need the columns present in the Cell model (excluding common cells data. The file must have columns present in the Cell
database fields and the <code>id</code> column). The queue model (excluding common database fields and the
connection information must be specified through a <option>id</option> column). You must specify the
<code>transport_url</code> field, instead of queue connection information through a
<code>username</code>, <code>password</code>, and so on. The <option>transport_url</option> field, instead of
<code>transport_url</code> has the following form:</para> <option>username</option>, <option>password</option>,
<programlisting>rabbit://<replaceable>USERNAME</replaceable>:<replaceable>PASSWORD</replaceable>@<replaceable>HOSTNAME</replaceable>:<replaceable>PORT</replaceable>/<replaceable>VIRTUAL_HOST</replaceable></programlisting> and so on. The <option>transport_url</option> has the
<para>The scheme can be either <literal>qpid</literal> or <literal>rabbit</literal>, as shown previously. The following sample shows this optional configuration:</para> following form:</para>
<programlisting>rabbit://<replaceable>USERNAME</replaceable>:<replaceable>PASSWORD</replaceable>@<replaceable>HOSTNAME</replaceable>:<replaceable>PORT</replaceable>/<replaceable>VIRTUAL_HOST</replaceable></programlisting>
<para>The scheme can be either <literal>qpid</literal> or
<literal>rabbit</literal>, as shown previously. The
following sample shows this optional configuration:</para>
<programlisting language="json"><xi:include href="samples/cells-resp.json" parse="text"/></programlisting> <programlisting language="json"><xi:include href="samples/cells-resp.json" parse="text"/></programlisting>
</section> </section>
</section> </section>

View File

@ -3,11 +3,34 @@
xmlns="http://docbook.org/ns/docbook" xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xi="http://www.w3.org/2001/XInclude"> xmlns:xi="http://www.w3.org/2001/XInclude">
<title>Configuring Backends</title> <title>Configure back ends</title>
<para>The image service supports several different backends <para>The Image Service supports several back ends for storing
for storing virtual machine images, including Cinder, a directory on a virtual machine images:<itemizedlist>
local file system, GridFS, Ceph RBD, Amazon S3, Sheepdog, OpenStack Object <listitem>
Storage or VMWare ESX. The following tables detail the options available <para>OpenStack Block Storage (cinder)</para>
</listitem>
<listitem>
<para>A directory on a local file system</para>
</listitem>
<listitem>
<para>GridFS</para>
</listitem>
<listitem>
<para>Ceph RBD</para>
</listitem>
<listitem>
<para>Amazon S3</para>
</listitem>
<listitem>
<para>Sheepdog</para>
</listitem>
<listitem>
<para>OpenStack Object Storage (swift)</para>
</listitem>
<listitem>
<para>VMWare ESX</para>
</listitem>
</itemizedlist> The following tables detail the options available
for each.</para> for each.</para>
<xi:include href="../../common/tables/glance-cinder.xml"/> <xi:include href="../../common/tables/glance-cinder.xml"/>
<xi:include href="../../common/tables/glance-filesystem.xml"/> <xi:include href="../../common/tables/glance-filesystem.xml"/>

View File

@ -2,7 +2,8 @@
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
xml:id="section_image-service-sample-configuration-files"> xml:id="section_image-service-sample-configuration-files">
<title>Image Service sample configuration files</title> <title>Image Service sample configuration files</title>
<para>All the files in this section can be found in the <filename class="directory">/etc/glance/</filename> <para>You can find the files that are described in this section in
the <filename class="directory">/etc/glance/</filename>
directory.</para> directory.</para>
<section xml:id="section_glance-api.conf"> <section xml:id="section_glance-api.conf">
<title>glance-api.conf</title> <title>glance-api.conf</title>

View File

@ -48,7 +48,7 @@
<plugin> <plugin>
<groupId>com.rackspace.cloud.api</groupId> <groupId>com.rackspace.cloud.api</groupId>
<artifactId>clouddocs-maven-plugin</artifactId> <artifactId>clouddocs-maven-plugin</artifactId>
<version>2.0.2</version> <version>2.0.4</version>
</plugin> </plugin>
</plugins> </plugins>
</build> </build>