OSSクラウド基盤 OpenStackの全て【最終回】
OpenStackの大容量ストレージサービス、Swiftの使い方
OpenStackの大容量ストレージサービス、Swiftの利用方法について解説する。インストールや環境設定の仕方、サービスの起動/停止、Swiftコマンドの使い方などを詳しく紹介する。
前回の記事「OpenStackの大容量ストレージサービス、Swiftの仕組み」で詳しく解説したように、OpenStack ObjectStorage(Swift)とはAmazon Simple Storage Service(Amazon S3)のようなオブジェクトストレージサービスを提供するソフトウェアである。今回はSwiftの具体的な使い方について説明する。
1.はじめに
まず、Swiftのシステムを構成するための基本的な考え方を説明しておく。
Swiftのシステムを構成するサーバの種別を大きく3つ、(1)プロキシサーバ、(2)認証サーバ、(3)ストレージサーバに分けて考える。
(3)ストレージサーバはデータの実体を保持するサーバであり、前回の記事「OpenStackの大容量ストレージサービス、Swiftの仕組み」の図1では「バックエンドサーバ群」と説明した。具体的には、「アカウントサーバ」「コンテナサーバ」「オブジェクトサーバ」に対応する。
実運用では、基本的に大容量のHDDを積めるだけ積んだサーバを多数並べて、システムを構成することになる。プロキシサーバと認証サーバは、一般的にWebサーバに使用する程度のスペックで構わない。
図1で使っている「ゾーン」とは、故障を分離する単位である。運用環境では、異なる電源系統ごとに、ラック単位程度でゾーンを配置し、5ゾーン以上の構成とすることが推奨されている。
2.前提条件
2.1.システム構成
本稿では、基礎的な機能評価を手早く行いたい方のために、図1-1のように1台のサーバに全ての関連コンポーネントをインストールして構成する方法を紹介する。図1-2のように、複数サーバ化する際の留意点や差分のポイントは補足で説明する。
なお、図1-2はやや簡略化した図だが、運用環境ではプロキシサーバはロードバランサーやDNSラウンドロビンなどを用いた冗長化を、認証サーバはクラスタソフトを用いたHA化を検討することになる。
2.2.ハードウェア条件
Swiftでは、特に仮想化支援機能を要求しない。仮想マシンでも動作可能である。また、データの冗長化はSwiftがソフトウェアで実現するため、データを格納するストレージサーバについては、HDDをRAID構成にする必要はなく、逆にJBOD構成が推奨されている。
以下の説明では、VMware Workstationで8GバイトのHDDを5台(うち1台はベースOS用)定義した仮想マシンを用いて説明する。
2.3.ソフトウェア条件
国内ではRed Hat Enterprise Linux(RHEL)系のディストリビューションの需要が高いことから、今回はベースOSとしてRHEL 6.1互換のScientific Linux 6.1(64ビット版)を用いる。
OpenStackとしては、2011年9月22日に予定されている第4版(Diablo)と、バグ修正以外は同等の内容となる見込みであるため、現状の開発(trunk)版RHEL用RPMパッケージを用いる。
2.4.ネットワーク条件
本稿では、ベースOSもSwiftも、ネットワークインストールを前提に説明する。このためインターネット接続が必要である。
3.環境構築
以下、全てrootユーザーで操作する。
3.1.ベースOSのインストール
・3.1.1.インストールメディアの用意
Scientific Linux 6.1のインストールDVDイメージを入手してDVDを作成する。国内にも複数のミラーが存在するが、筆者はJAISTのミラーで入手した。
・3.1.2.ベースOSのインストール
インストールDVDを起動して1台目のHDDにインストールする。インストールタイプは“Base Server”で十分である(図2)。
・3.1.3.ベースOSの環境設定
今回は検証用途が目的なので、トラブルを避けるため、最低限の環境設定として以下を行っておく。
- ファイアウォールの無効化
# chkconfig iptables off
# chkconfig ip6tables off
- SELinuxの無効化
「/etc/sysconfig/selinux」の「SELINUX=enforcing」をdisabledに修正する。
- OSの再起動(必須)
3.2.Swiftのインストール
・3.2.1.リポジトリの設定
リポジトリの設定のためのパッケージを配布元からダウンロードする。
ファイル名は、「openstack-repo-2011.3-X.Y.noarch.rpm」であるが、本稿執筆時点で「X.Y」は「0.2」なので、以下0.2として説明する。
# wget http://yum.griddynamics.net/yum/master/openstack/openstack-repo-2011.3-0.2.noarch.rpm
なお、2011年9月22日に予定されている第4版(Diablo)リリース以降は、配布元のWebサイト(図3)の“Cactus RPMs”の下に、“Diablo RPMs”というリンクが追加されるはずなので、上記の代わりに「openstack-repo-2011.3-1.noarch.rpm」をダウンロードして使用してほしい(パッケージングの都合により、2011.3-1が2011.3-2以降になることも考えられるが最新版を使用のこと)。
このファイルを以下のようにインストールすると、「/etc/yum.repos.d/」以下に「openstack.repo」が追加され、リポジトリが設定される。
# rpm -ivh openstack-repo-2011.3-0.2.noarch.rpm
なお、インターネットに接続できない場合は、内部ネットワークにミラーを作成しておき、上述の「/etc/yum.repos.d/openstack.repo」のbaseurlパラメータを適宜ミラーの環境に合わせて書き換えればよい。
・3.2.2.OpenStack関連パッケージのインストール
次に、OpenStack関連パッケージをインストールする。
# yum install openstack-swift ¥
openstack-swift-proxy ¥
openstack-swift-account ¥
openstack-swift-container ¥
openstack-swift-object ¥
openstack-swift-doc ¥
openstack-keystone ¥
memcached ¥
python-memcached ¥
xinetd ¥
start-stop-daemon
上記の行末の“¥”は行継続の意味である。まとめて一行で記述してもよい。この過程で、GPG鍵をインポートするかどうか(2回)質問されるので、ログ1で示したように[y]と答えて前に進む。
これで、OpenStackのサービスは全て先頭が「openstack-」ではじまる13種類のサービスとしてインストールされる。また、この段階で「swiftユーザー/グループ」と「keystoneユーザー」がOSに登録される。
以下、必要コンポーネントの環境設定に入る。
3.3.認証サーバ(KeyStone)の環境設定
OpenStackの第3版(Cactus)までは、Swiftには独自の認証サーバ(swift-auth)が付属していた。しかし、NovaやGlanceなどが独立して認証を行うのは不便であるため、第4版(Diablo)以降swift-authは廃止されて、OpenStackプロジェクト共通の認証サーバが用意されることになった。これが「KeyStone」である。
・3.3.1.環境定義ファイルの作成
リスト1にkeystoneの設定ファイルのサンプルを示す。これを、
/etc/keystone/keystone.conf
として保存しておく。
・3.3.2.サービスの登録と起動
KeyStoneのサービスの「openstack-keystone」は、パッケージをインストールしただけではシステムに登録されないので、
# chkconfig --add openstack-keystone
# chkconfig openstack-keystone on
として登録し有効にしておく。その後、以下のようにサービスを起動する。
# service openstack-keystone start
・3.3.3.初期データの投入
次に、ユーザーやパスワードなどの初期データを登録する。リスト2に初期データ投入用スクリプトのサンプルを示す。IPアドレスを各自の環境に合わせて修正して起動すること。
# sh initial_data.sh
これにより、adminとdemoという2つのユーザーがパスワードsecreteで作成される。
ここで、よくあるKeyStoneのトラブル事例を紹介しておく。端末からrootユーザーで「/usr/bin/keystone」を直接起動した場合や、サービスを起動せずに「keystone-manage」コマンドを使った場合に、rootユーザー権限でファイルが作成されてしまい、KeyStoneがサービスとして起動できない、もしくは起動できても異常終了してしまうことがある。この場合は「/var/lib/keystone/keystone.db」や「/var/log/keystone/keystone.log」などのオーナーを修正して再起動すればよい。
また、検証作業の都合などで、全部やり直したい場合は/var/lib/keystone/keystone.dbを削除して再起動すればよい。
3.4.Swiftの環境設定
・3.4.1.HDDの設定
(1)パーティションの作成
# fdisk /dev/sdb
HDD全体を1つのパーティションとして作成する。
(2)ファイルシステムの作成
Swiftは、拡張属性(xattr)が使えれば、どんなファイルシステムでも原則動作可能であるが、開発元の米RackSpaceではXFSが利用されており、マニュアルでもXFSが推奨されている。以下のようにファイルシステムを作成する。
# mkfs.xfs -i size=1024 /dev/sdb1
# mkfs.xfs -i size=1024 /dev/sdc1
# mkfs.xfs -i size=1024 /dev/sdd1
# mkfs.xfs -i size=1024 /dev/sde1
(3)マウントポイントの作成
# mkdir -p /srv/1/node/sdb /srv/2/node/sdc /srv/3/node/sdd /srv/4/node/sde
(4)/etc/fstabの設定
/etc/fstabに以下の4行を追加する。
/dev/sdb1 /srv/1/node/sdb xfs noatime,nodiratime,nobarrier,logbufs=8 0 0
/dev/sdc1 /srv/2/node/sdc xfs noatime,nodiratime,nobarrier,logbufs=8 0 0
/dev/sdd1 /srv/3/node/sdd xfs noatime,nodiratime,nobarrier,logbufs=8 0 0
/dev/sde1 /srv/4/node/sde xfs noatime,nodiratime,nobarrier,logbufs=8 0 0
マウントポイントの「/srv/1/node/sdb」のsdbは、後で作成するringファイルにおけるデバイスの名前に対応する。コミュニティーのWebページでは、sdb1の中のゾーンに対応するディレクトリにsdb1、sdb2などと名前を付けるが、これはHDDのパーティションとは関係ないのに注意のこと。また、複数サーバで構成する場合は/srv/1/node/sdbの“1”などは不要で、単に「/srv/node/sdb」などとすればよい。
(5)マウント
ストレージ用の4つのHDDを全てマウントする。
# mount -a
・3.4.2.rsyncdの設定
Swiftの遅延レプリケーション処理は、「rsyncd」を利用して実現されているので、rsyncdの設定を行う。RHEL系のディストリビューションでは、rsyncdは「xinetd」経由で起動する設定をする。
(1)/etc/xinetd.d/rsyncの設定
リスト3に示すように「/etc/xinetd.d/rsync」を修正し、rsyncdを有効とする。disableを[yes]から[no]に修正する他、デフォルトではIPv6のみ有効となってしまうため、flagをコメントアウトする。
(2)/etc/rsyncd.confの設定
リスト4にrsyncdの環境定義のサンプルを示す。
複数サーバで構成する場合、例えば、[object6010]~[object6040]の4つは、[object]の1つだけでよい。
(3)xinetdの再起動
# service xinetd restart
・3.4.3.memcachedの有効化と起動
Swiftでは、プロキシサーバが「memcached」を使用する。関連パッケージの中でmemcachedもインストールしたが、これだけでは有効になっていないため、以下のように有効に設定した上でサービスを起動しておく。
# chkconfig memcached on
# service memcached start
・3.4.4.ringファイルの作成
リスト5に、今回の条件に即した作成スクリプトのサンプルを示す。IPアドレスを各自の環境に合わせて修正してほしい。
ringファイルの作成は、大きく3ステップの手順で行う。
(1)builderファイルの初期化
builderファイルの初期化コマンドの書式は以下の通りである。
swift-ring-builder <builder_file> create <part_power> <replicas> <min_part_hours>
part_powerは、システム全体でのパーティションの数を指定する引数である。ここで言うパーティションとは、/dev/sda1などのディスクパーティションと名前が同じなので紛らわしいが、Swiftがデータを配置する論理的な単位のことである。ディスクパーティションとは関係ないので注意のこと。
part_powerの決め方の指針は、最終的にシステム全体として使う見込みのHDDの台数を100倍して、2のベキ乗に切り上げた数値の、2を底とした指数部を指定すればよい。
サンプルの例では、最終的に10台と仮定し、10(HDD台数)*100=1000を2のベキ乗に切り上げて1024(=2^10)として、指数部の10を使用した。
コミュニティーのWebページでは、18が使われているが、これは2^18=262144/100≒2600台程度のHDDを使うケースに対応する。
(2)デバイス(HDD)の追加
デバイス追加の書式は以下の通りである。
swift-ring-builder <builder_file> add z<zone>-<ip>:<port>/<device_name>_<meta> <weight>
ゾーンの番号は1で始まる必要がある。<_meta>で指定されるメタデータは省略可能である。
以上を基に、サンプルを見て分かる通り、今回は1台のサーバで、4台のHDDごとに1つずつ、合計4つのゾーンを構成している。また、冗長度は3である。
アカウントサーバ、コンテナサーバ、オブジェクトサーバのポート番号として、ゾーン1~ゾーン4に対応して、6010番台~6040番台を使用しているのがご理解いただけると思う。
(3)ringファイルの作成(rebalance)
ringファイルの作成は、「rebalance」コマンドのみでパラメータはない。
今回は初期化時の<replicas>、つまりデータの冗長度として3を指定している。rebalanceした際にゾーン数が<replicas>指定値未満だと警告が出るが、Swiftの起動は可能である。
運用環境向けには、<replicas>は3、またゾーンの数が5つ以上で構成することが推奨されている。
・3.4.5.プロキシサーバの設定
(1)SSL証明書の作成
# cd /etc/swift
# openssl req -new -x509 -nodes -out cert.crt -keyout cert.key
国コードなどの入力を求められるので適宜入力のこと。
(2)/etc/swift/swift.confの設定
リスト6に「/etc/swift.conf」のサンプルを示す。[swift-hash]セクションに「swift_hash_path_suffix」を記述するだけである。これはどんな文字列でも構わない。ただし、きちんと記録しておくこと。
(3)/etc/swift/proxy-server.confの設定
リスト7に「/etc/swift/proxy-server.conf」のサンプルを示す。リスト7のポイントは以下だ。
- KeyStoneと連携させて動作させる上で、[app:proxy-server]セクションにaccount_autocreateを設定する
- swift3はS3 APIサポートの有効化である
- staticwebを記述することでSwiftをCDN的に使えるようになる
- swift内蔵の認証システムである「tempauth」を使う場合は、サンプルでコメントアウトされている[pipeline: main]セクションのpipeline行の入れ替え、[pipeline:tempauth]セクションと[pipeline:keystone]セクションの入れ替えを行う
・3.4.6.ストレージサーバ(account/container/object)の設定
リスト8、リスト9、リスト10に、「account-server/container-server/object-server」の設定ファイルのサンプルを示す。
今回は検証用途のため、1台のサーバ上に複数ゾーンを定義し、各ゾーン用のaccount-server/container-server/object-serverのセットを動作させているため、例えば account-serverであれば、
/etc/swift/account-server/1.conf ~ /etc/swift/account-server/4.conf
と、ディレクトリを作成した上で、4つのファイルに分けた。
しかし、運用環境で1台のサーバが1つのゾーンにしか属さない場合は、
/etc/swift/account-server.conf
とすればよい。
また、この場合、各.confファイルの「devices = /srv/1/node」などは、単純に「devices = /srv/node」にすればよい。「bind_port = 6012(もしくは、6022、6032、6042)」は、Swiftデフォルト値の「bind_port = 6002」とすればよい。
これらの事情は、container-serverやobject-serverでも同様である。ただし、containerサーバのデフォルトポート番号は6001、objectサーバは6000である。
・3.4.7./etc/swiftと/srvの属性設定
# chown -R swift:swift /etc/swift /srv
として、オーナーとグループを書き換えておく。
3.5.サービスの起動/停止
Swiftサービスの起動は、
# swift-init all start
停止は、
# swift-init all stop
でする。自動起動にしたい場合は、
# chkconfig --list | grep openstack-swift
で、表示される全てのサービスをonにする。
なお、全部やり直したい場合は、サービスを停止した後、/srv/以下にあるHDDのマウントポイント以下の全てのファイルを削除すればよい。
4.Swiftの利用
Swiftを利用するには、GUIツールや、CreationLineのSwift検証報告で紹介されているようにcurlコマンドで直接Swiftプロトコルを使う方法もあるが、一般的に最も利用しやすいツールは、付属のswiftコマンドである。
なお、swiftコマンドは第3版(Cactus)まではstコマンドという名前だったが、他のソフトウェアのコマンドと衝突するため、名前が変更された経緯がある。
4.1.swiftコマンドによる利用
・4.1.1.swiftコマンドの使い方
swiftコマンドの書式は以下の通りである。
# swift [-A AUTH_URL] [-U USER] [-K PASSSWORD] COMMAND [prameters]
-A、-U、-Kは環境変数で指定できるため、以下のように環境変数に設定しておくのが便利である。
# export ST_AUTH=http://192.168.30.133:5000/v1.0
# export ST_USER=admin
# export ST_KEY=secret
192.168.30.133:5000は、KeyStoneのアドレスとポートである。
コマンドとしては、以下の6種類の操作がサポートされている。
| コマンド | 操作 |
|---|---|
| swift stat | 統計情報の出力 |
| swift list | コンテナ(フォルダ)、オブジェクトの一覧表示 |
| swift post | コンテナの作成、各種管理情報の設定 |
| swift upload | ファイルもしくはコンテナ単位のアップロード |
| swift download | ファイルもしくはコンテナ単位のダウンロード |
| swift delete | ファイルもしくはコンテナ単位の削除 |
・4.1.2.具体的な使用例
以下、swiftコマンドによる統計情報の表示、コンテナ(フォルダ)の作成、オブジェクト(ファイル)のアップロード/ダウンロード、一括アップロード/ダウンロードについて実際の使用例を紹介する。
まず統計情報を表示する。まだ何も作成していないため、Containers:とObjects:は0と表示される。
# swift stat
Account: AUTH_admin
Containers: 0
Objects: 0
Bytes: 0
Accept-Ranges: bytes
コンテナの一覧を表示する。同じく、まだ何も作成していないため何も表示されない。
# swift list
次に、folder1とfolder2というコンテナを作成する。
# swift post folder1
# swift post folder2
コンテナの一覧を表示すると、確かに今作成した2つが表示された。
# swift list
folder1
folder2
コンテナfolder1の中身を表示する。まだ何も中身がない。
# swift list folder1
コンテナfolder1にファイルをアップロードする。ここではインストールに使用したリポジトリのパッケージを使った。
# swift upload folder1 openstack-repo-2011.3-0.2.noarch.rpm
openstack-repo-2011.3-0.2.noarch.rpm
コンテナfolder1の内容一覧を表示すると、今アップロードしたオブジェクトが表示される。
# swift list folder1
openstack-repo-2011.3-0.2.noarch.rpm
統計情報を表示すると、今作成した2つのコンテナと1つのオブジェクトの情報が反映されているのが分かる。
# swift stat
Account: AUTH_admin
Containers: 2
Objects: 1
Bytes: 6191
Accept-Ranges: bytes
次に、フォルダごとアップロードを行う。手元のフォルダuploadfolder1には5つの画像ファイルが格納されている。
# ls uploadfolder1
DSCF0001.JPG DSCF0002.JPG DSCF0003.JPG DSCF0004.JPG DSCF0005.JPG
uploadfolder1ごとアップロードする。2つ目のuploadfolder1は、格納先のコンテナの名前である。
# swift upload uploadfolder1 uploadfolder1
uploadfolder1/DSCF0003.JPG
uploadfolder1/DSCF0002.JPG
uploadfolder1/DSCF0004.JPG
uploadfolder1/DSCF0001.JPG
uploadfolder1/DSCF0005.JPG
アップロード先のコンテナの内容一覧を表示する。uploadfolder1というコンテナが作成され、中身の画像ファイルも一括アップロードされたことが分かる。
# swift list uploadfolder1
uploadfolder1/DSCF0001.JPG
uploadfolder1/DSCF0002.JPG
uploadfolder1/DSCF0003.JPG
uploadfolder1/DSCF0004.JPG
uploadfolder1/DSCF0005.JPG
次にコンテナごとダウンロードする。/tmpに移動し、今、一括アップロードしたuploadfolder1を一括ダウンロードする。
# cd /tmp
# swift download uploadfolder1
uploadfolder1/DSCF0002.JPG
uploadfolder1/DSCF0004.JPG
uploadfolder1/DSCF0001.JPG
uploadfolder1/DSCF0003.JPG
uploadfolder1/DSCF0005.JPG
5つのファイルがコンテナuploadfolder1ごとダウンロードされたことが分かる。
# ls /tmp/uploadfolder1/
DSCF0001.JPG DSCF0002.JPG DSCF0003.JPG DSCF0004.JPG DSCF0005.JPG
4.2.GUIツールでの利用
・4.2.1.CyberDuck
CyberDuckは、SwiftプロトコルをサポートするGUIツールだ。Windowsでも配布されるようになった。ただし、CyberDuckはSSL経由の認証サーバ(今回の場合はKeyStone)への接続しかサポートしていない。だが、本稿執筆時点のKeyStoneは、まだSSLをサポートしていないため、残念ながら今回紹介した組み合わせではCyberDuckによる利用はできない。swauthを別途入手して設定を行う必要がある。
しかし、CyberDuckはポピュラーで使いやすいツールであり、近くKeyStoneにSSLサポートが追加される見込みのため、Amazon S3 I/Fで使えるGUIツールのCloudBerryを含めてスクリーンキャプチャーを示しておく(図4、図5)。
5.まとめ
今回は、Swiftの具体的な使い方について、来たるべき第4版(Diablo)の内容を先取りして紹介した。認証サーバのSSLの件などは、リリース前という事情で幾つか制限もあるが、第4版(Diablo)以降、どのように使えばよいのか、概要をご理解いただけたと思う。
2010年の12月末から7回にわたって、OpenStackプロジェクトの背景から、主要コンポーネント(NovaおよびSwift)の使い方まで含めて解説を行ってきた。今回で連載は終了するが、今後も日本OpenStackユーザ会などを通じてプロジェクトの最新動向や各種ノウハウの紹介を行っていくので参考にしていただければ幸いである。
(参考)
-RackSpaceのCloudBuilderチームによるOpenStackインストール用ツールのWebページ(GitHub)
-OpenStack プロジェクト の Swift インストール関連ページ
Swift Installation Instructions
Swift v1.4.4-dev documentation:SAIO - Swift All In One
Swift v1.4.4-dev documentation:Instructions for a Multiple Server Swift Installation(Ubuntu)
Copyright © ITmedia, Inc. All Rights Reserved.
OSSクラウド基盤 OpenStackの全て
この記事の著者
関連記事
こんなメディアも見られています
TechTargetジャパンに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
ベンダーコンテンツ PR
From Informa TechTarget
SpecialPR
アクセスランキング
-
1
「Excel至上主義」の終わらせ方 丸2日の手作業地獄から情シスと現場を救うには
-
2
「Microsoft 365のセキュリティ運用」に関するアンケート
-
3
取手市がVDIと決別した理由 更改費用「4倍超」を約1.7倍に圧縮
-
4
急増する「AIはこう言ってる」マン 判断を狂わせる「AI忖度」を防ぐには?
-
5
221人調査で分かった「情シス最大のストレス」は?
-
6
「Salesforceのテスト自動化ツール」に関するアンケート
-
7
IT製品の導入に関するアンケート「サーバ&ストレージ」編
-
8
「データストレージの活用方法」に関するアンケート
-
9
「AI時代の統合基盤・エンタープライズAI管理」に関するアンケート
-
10
自宅のWi-Fiが「遅い」「途切れる」本当の原因は? Dellが推奨する鉄則
ホワイトペーパーランキング PR
-
1
年収2000万「クラウドセキュリティのプロ」になれる資格とは
-
2
セキュリティソフトをすり抜ける標的型攻撃メール、不審メールの見破り方とは?
-
3
Windows Updateの通信集中で回線が逼迫、ネットワーク刷新事例に学ぶ解決策
-
4
財務を戦略的組織へ進化させるAI活用術、4つの主要な障壁と解消方法
-
5
「NAS」「SAN」「DAS」は何が違う? いまさら聞けないストレージの基礎
-
6
“あのファイル転送”で暗躍するノーウェアランサム
-
7
標的型攻撃メールを見破るには? サンプル文面を例に傾向を解説
-
8
商用利用の安全性を確保し大量のコンテンツを高速で生成する、AI活用の秘訣
-
9
マンガで解説、1日で生成AI環境を構築できるワークショップの中身とは?
-
10
Dark AIが台頭する時代の新発想、「より高度なAIで対抗する」具体的方法とは?
TechTargetジャパン SNS
インフォメーション
注目情報をチェック
TechTargetジャパンをフォロー