技術情報

技術情報

OpenStack: 分散オブジェクトストレージ Swift

2012年11月8日

技術文書トップへ

インストール手順

RHELやCentOS上にSwiftをインストールすることも出来ないことはありませんが、採用するディストリビューションに制約が無いのであれば、Ubuntuを選択するのが賢明です。OpenStackプロジェクトでは、Ubuntuを標準プラットホームとして開発を進めているため、Ubuntu用のパッケージが標準で用意されており、また最も動作実績のあるプラットホームとなっています。

ここでは、UbuntuにSwiftをインストールする手順を解説します。
まず、本編で使用する用語の定義を以下に記載します。

  • ノード
    1つ以上のSwiftのサーバが実行されるマシン。
  • プロキシ (Proxy) ノード
    プロキシ (Proxy) サーバが実行され、リクエストを適切なストレージノードに中継するマシン。認証機能swauthもこのノードにて実行されます。
  • ストレージノード
    アカウント (Accont) サーバ、コンテナ (Container) サーバ、オブジェクト (Object) サーバが実行され、データの実体を保持するマシン。
  • リング
    Swiftが管理するデータと物理デバイスを対応付けるテーブル。

ここでは、Swiftで推奨される最小システム構成 (プロキシノード1台、5つのゾーン、各ゾーンにストレージノード1台の構成) へのインストールを例として解説していきます。
システム構成は以下の通りです。

サービスの窓口となるプロキシノードのみを外部ネットワークに接続し、プロキシノードと複数のストレージノード間は内部ネットワークで接続します。

本編では個々のストレージノードをリング内のそれぞれ独立したゾーンとして扱います。実運用では最低5つのゾーンを設けることを推奨します。
ゾーンの数を減らしてもSwiftは動作可能ですが、業務として運用するクラスタでは、耐障害性を持たせるために最低5つのゾーンを用意することが望ましいです。

ゾーンとは、他のノードから (サーバ、ネットワーク、電源、物理的な設置場所が) 分離された一群のノードを指します。
リングは、あらゆるデータのレプリカがそれぞれ異なるゾーンに格納されることを保証します。実際のシステムでは、プロキシノードも複数台用意し、プロキシノードの可用性とパフォーマンスを稼ぐとよいでしょう。

なお、本編ではルート権限が必要となる作業はrootユーザで行っています。実行例のプロンプトがクロスハッチ (#) のものはrootユーザで行っている操作です。rootユーザでの操作を行わない場合、sudoコマンドを使った操作に読み替えてください。

ページトップ

Ubuntuへのインストール

ここの例では、Ubuntu 11.04 (Natty Narwhal) のサーバ版 (64bit) にSwiftをインストールすることにします。 Ubuntu 11.04には、Swift 1.3.0のパッケージが用意されているためインストールは容易です。

【OSのインストール】
ストレージノードでは、ディスクのパーティション作成を手動で行い、Swift専用パーティションを作成するか、専用ディスクを用意する必要があります。
このインストール例では、以下のような指定を行っています。

  • 言語は英語を選択
  • パーティショニングは手動で行い、Swift専用パーティションを作成
  • OSインストール時には追加のパッケージは選択しない

Swift専用パーティションには、以下の条件を満たすファイルシステムを使用します。

  • 拡張属性(xattr)をサポートしていること。更に拡張属性の領域サイズに制限がないことが望ましい。
  • 大きなファイルの入出力を考慮したものが望ましい。

ext4も拡張属性をサポートしていますが、サイズはinodeサイズ、blockサイズによって制限されるため、保存できる拡張属性のサイズに制限がないXFSの利用を推奨します。
また、LVMは性能の問題および耐障害性の問題から、スナップショット機能を利用しないのであれば、使用しないことを推奨します。LVMを使用する場合でも、LVMのボリュームグループには物理ディスク1つのみを登録することを勧めます。これは、LVMを構成する物理ディスクの内、1つが壊れるとボリューム全体が使用不能になるためです。

【Swiftのインストール】
プロキシノードおよびストレージノードのパッケージインストール手順を解説します。

プロキシノード

プロキシノードには、swift、swift-proxy、memcached、ntp の4つのパッケージをインストールします。その他の必要となるパッケージは、自動的にインストールされます。以下に、パッケージインストールの実行例を記載します。

root@proxy:~# apt-get install swift swift-proxy memcached ntp
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
libevent-1.4-2 python-eventlet python-formencode python-greenlet
python-netifaces python-openid python-paste python-pastedeploy
python-pastescript python-scgi python-setuptools python-swift python-webob
python-xattr
Suggested packages:
libcache-memcached-perl libmemcached ntp-doc python-egenix-mxdatetime
python-dns python-greenlet-doc python-greenlet-dev python-greenlet-dbg
python-pastewebkit libapache2-mod-wsgi libapache2-mod-python
libapache2-mod-scgi python-pgsql libjs-mochikit python-cherrypy3
python-cherrypy python-flup python-cheetah
The following NEW packages will be installed:
libevent-1.4-2 memcached ntp python-eventlet python-formencode
python-greenlet python-netifaces python-openid python-paste
python-pastedeploy python-pastescript python-scgi python-setuptools
python-swift python-webob python-xattr swift swift-proxy
0 upgraded, 18 newly installed, 0 to remove and 49 not upgraded.
Need to get 0 B/2,719 kB of archives.
After this operation, 17.0 MB of additional disk space will be used.
Do you want to continue [Y/n]? <Enter>
:(省略)
Setting up libevent-1.4-2 (1.4.13-stable-1) ...
Setting up memcached (1.4.5-1ubuntu2) ...
Starting memcached: memcached.
Setting up python-greenlet (0.3.1-1ubuntu1build1) ...
Setting up python-eventlet (0.9.14-0ubuntu2) ...
Setting up python-formencode (1.2.2-1ubuntu5) ...
Setting up python-netifaces (0.5-2.1build1) ...
Setting up python-openid (2.2.4-1build1) ...
Setting up python-paste (1.7.5.1-1ubuntu1) ...
Setting up python-pastedeploy (1.3.3-3ubuntu2) ...
Setting up python-setuptools (0.6.15-1ubuntu1) ...
Setting up python-pastescript (1.7.3-6) ...
Setting up python-scgi (1.13-1build1) ...
Setting up python-webob (1.0-1) ...
Setting up python-xattr (0.6-1build1) ...
Setting up python-swift (1.3.0-0ubuntu1) ...
Setting up swift (1.3.0-0ubuntu1) ...
Setting up swift-proxy (1.3.0-0ubuntu1) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
Processing triggers for python-support ...
root@proxy:~#

インストールされたこと、および行頭が「ii」になっていることを確認します。

root@proxy:~# dpkg -l swift swift-proxy memcached ntp
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Description
+++-==============-==============-============================================
ii memcached 1.4.5-1ubuntu2 A high-performance memory object caching sys
ii ntp 1:4.2.6.p2+dfs Network Time Protocol daemon and utility pro
ii swift 1.3.0-0ubuntu1 A distributed virtual object store (common f
ii swift-proxy 1.3.0-0ubuntu1 The swift proxy server
root@proxy:~#

ストレージノード

ストレージノードにはswift-account、swift-container、swift-object、xfsprogs、ntpの5つのパッケージをインストールします。その他の必要となるパッケージは、自動的にインストールされます。

以下に、パッケージインストールの実行例を記載します。
なお、この例ではxfsprogsは既にインストール済みです。

root@stor1:~# apt-get install \
> swift-account \
> swift-container \
> swift-object \
> xfsprogs \
> ntp
Reading package lists... Done
Building dependency tree
Reading state information... Done
xfsprogs is already the newest version.
The following extra packages will be installed:
python-eventlet python-formencode python-greenlet python-netifaces
python-openid python-paste python-pastedeploy python-pastescript python-scgi
python-setuptools python-swift python-webob python-xattr
Suggested packages:
ntp-doc python-egenix-mxdatetime python-dns python-greenlet-doc
python-greenlet-dev python-greenlet-dbg python-pastewebkit
libapache2-mod-wsgi libapache2-mod-python libapache2-mod-scgi python-pgsql
libjs-mochikit python-cherrypy3 python-cherrypy python-flup python-cheetah
The following NEW packages will be installed:
ntp python-eventlet python-formencode python-greenlet python-netifaces
python-openid python-paste python-pastedeploy python-pastescript python-scgi
python-setuptools python-swift python-webob python-xattr swift-account
swift-container swift-object
0 upgraded, 17 newly installed, 0 to remove and 49 not upgraded.
Need to get 0 B/2,567 kB of archives.
After this operation, 16.5 MB of additional disk space will be used.
Do you want to continue [Y/n]? <Enter>
:(省略)
Setting up ntp (1:4.2.6.p2+dfsg-1ubuntu5.1) ...
* Starting NTP server ntpd [ OK ]
Setting up python-greenlet (0.3.1-1ubuntu1build1) ...
Setting up python-eventlet (0.9.14-0ubuntu2) ...
Setting up python-formencode (1.2.2-1ubuntu5) ...
Setting up python-netifaces (0.5-2.1build1) ...
Setting up python-openid (2.2.4-1build1) ...
Setting up python-paste (1.7.5.1-1ubuntu1) ...
Setting up python-pastedeploy (1.3.3-3ubuntu2) ...
Setting up python-setuptools (0.6.15-1ubuntu1) ...
Setting up python-pastescript (1.7.3-6) ...
Setting up python-scgi (1.13-1build1) ...
Setting up python-webob (1.0-1) ...
Setting up python-xattr (0.6-1build1) ...
Setting up python-swift (1.3.0-0ubuntu1) ...
Setting up swift-account (1.3.0-0ubuntu1) ...
Setting up swift-container (1.3.0-0ubuntu1) ...
Setting up swift-object (1.3.0-0ubuntu1) ...
Processing triggers for python-support ...
root@stor1:~#

インストールされたこと、および行頭が「ii」になっていることを確認します。

root@stor1:~# dpkg -l swift-account swift-container swift-object xfsprogs ntp
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Description
+++-==============-==============-============================================
ii ntp 1:4.2.6.p2+dfs Network Time Protocol daemon and utility pro
ii swift-account 1.3.0-0ubuntu1 The swift account server
ii swift-containe 1.3.0-0ubuntu1 The swift container server
ii swift-object 1.3.0-0ubuntu1 The swift object server
ii xfsprogs 3.1.4ubuntu2 Utilities for managing the XFS filesystem
root@stor1:~#
ページトップ