openstack-manuals/doc/install-guide/object-storage/section_object-storage-install-config-proxy-node.xml
Gauvain Pocentek 5427452057 Make the object storage section less Ubuntu centric
The Swift section of the install guide tends to assume that the user
uses Ubuntu. This change provide more information for other
distributions.

backport: havana
Closes-Bug: #1274473
Closes-Bug: #1274405
Change-Id: I1c1fbea43d29724067185e3ab261cd20b2e0ed72
2014-02-02 10:41:08 +01:00

194 lines
11 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<section xml:id="installing-and-configuring-the-proxy-node"
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">
<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> <phrase os="ubuntu;debian;rhel;centos;fedora"
>swift:swift</phrase><phrase os="opensuse;sles"
>openstack-swift:openstack-swift</phrase></literal>. The default
user is <literal><phrase os="ubuntu;debian;rhel;centos;fedora"
>swift</phrase><phrase os="opensuse;sles"
>openstack-swift</phrase></literal>.</para>
</note>
<procedure>
<step>
<para>Install swift-proxy service:</para>
<screen os="ubuntu"><prompt>#</prompt> <userinput>apt-get install 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
<phrase os="rhel;centos;fedora;ubuntu;debian">user = swift</phrase><phrase
os="opensuse;sles">user = openstack-swift</phrase>
[pipeline:main]
pipeline = healthcheck cache authtoken keystoneauth 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
# cache directory for signing certificate
signing_dir = /home/swift/keystone-signing
# auth_* settings refer to the Keystone server
auth_protocol = http
auth_host = <replaceable>controller</replaceable>
auth_port = 35357
# 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:cache]
use = egg:swift#memcache
[filter:catch_errors]
use = egg:swift#catch_errors
[filter:healthcheck]
use = egg:swift#healthcheck
</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>
</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:6005/sdb1 100</userinput>
<prompt>#</prompt> <userinput>swift-ring-builder object.builder add z1-10.0.0.1:6000R10.0.1.1:6005/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 os="ubuntu;debian;rhel;centos;fedora"><prompt>#</prompt> <userinput>chown -R swift:swift /etc/swift</userinput></screen>
<screen os="opensuse;sles"><prompt>#</prompt> <userinput>chown -R openstack-swift:openstack-swift /etc/swift</userinput></screen>
</step>
<step os="ubuntu;debian">
<para>Restart the Proxy service:</para>
<screen><prompt>#</prompt> <userinput>service proxy-server 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>