Swiftを使ってクラウドストレージサービスを構築する 3ページ

ストレージノードの準備

 続いて、ストレージノードの構築手順について説明していこう。まず、次のようにyumコマンドを実行してストレージノードで稼働させるObjectサービスおよびContainerサービス、Accountサービスが含まれるパッケージをインストールしておく。

yum install --enablerepo=epel openstack-swift-account openstack-swift-container openstack-swift-object

XFS形式のファイルシステム作成とマウント

 前述のようにオブジェクトなどを保存するストレージのファイルシステムにはXFSを使用するため、XFS関連のツールが含まれたxfsprogsパッケージをインストールし、ストレージ用パーティションをXFS形式でフォーマットしておく。

# yum install xfsprogs

 XFS形式でのフォーマットは、mkfs.xfsコマンドで行える。たとえば/dev/sda5パーションをフォーマットするには以下のようにする。

# mkfs.xfs -i size=1024 /dev/sda5

 作成したファイルシステムは、「/srv/node/<ストレージデバイス名>」というディレクトリにマウントしておく。まず、マウントを行うために/etc/fstabファイルに以下の行を追加する。

/dev/sda5       /srv/node/sda5  xfs     noatime,nodiratime,nobarrier,logbufs=8	0 0

 続いてマウント先ディレクトリを作成してファイルシステムをマウントし、Swiftがアクセスできるようにパーミッションを設定しておく。

# mkdir -p /srv/node/sda5
# mount /srv/node/sda5
# chown -R swift:swift /srv/node

データの同期に使用するrsyncdを設定する

 Swiftでは障害などでファイルシステムが破損した場合、復旧後にrsyncを使ってデータの同期を行う。そのため、rsyncdが利用できるようになっている必要がある。

 まず、CentOS 6.3ではrsyncdがxinetd経由で起動されるため、xinetdのインストールを行っておく。

# yum install xinetd

 続いて/etc/rsyncd.confを作成し、以下の内容を記述しておく。

uid = swift
gid = swift
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
address = <ストレージノード自身のIPアドレス>

[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  

 最後に、chkconfigコマンドでrsyncを有効にし、xinetdを起動させる。

# chkconfig rsync on
# service xinetd start

各種ストレージサービスの設定

 続いてストレージサービスの設定を行っていく。編集が必要な設定ファイルは以下の4つだ。

  • /etc/swift/swift.conf
  • /etc/swift/account-server.conf
  • /etc/swift/container-server.conf
  • /etc/swift/object-server.conf

 まず/etc/swift/swift.confだが、プロクシノードの場合と同様に「swift_hash_path_suffix」項目を編集しておく。たとえばプロクシノードで「SourceForge20130401」という文字列を設定していた場合、こちらでも同じ値を指定する。

[swift-hash]
swift_hash_path_suffix = SourceForge20130401

 それ以外の設定ファイルについては、サービスを稼働させるIPアドレスの指定のみが必要だ。まずアカウントサービスの設定ファイルである/etc/swift/account-server.confファイルは以下のようになる。

[DEFAULT]
bind_ip = <ストレージノード自身のIPアドレス>
bind_port = 6002
workers = 2

[pipeline:main]
pipeline = account-server

[app:account-server]
use = egg:swift#account

[account-replicator]

[account-auditor]

[account-reaper]

 Containerサービスの設定ファイルである/etc/swift/container-server.confでも、同様に「bind_ip」にストレージノードのIPアドレスを指定しておく。

[DEFAULT]
bind_ip = <ストレージノード自身のIPアドレス>
bind_port = 6001
workers = 2

[pipeline:main]
pipeline = container-server

[app:container-server]
use = egg:swift#container

[container-replicator]

[container-updater]

[container-auditor]

[container-sync]

 Objectサービスの設定ファイルは/etc/swift/object-server.confだ。こちらも「bind_ip」の指定を行っておく。

[DEFAULT]
bind_ip = <ストレージノード自身のIPアドレス>
bind_port = 6000
workers = 3

[pipeline:main]
pipeline = object-server

[app:object-server]
use = egg:swift#object

[object-replicator]

[object-updater]

[object-auditor]

ringファイルの配置

 続いて、プロクシサーバーで作成したring情報が含まれたファイルをscpなどでコピーし、/etc/swiftディレクトリにコピーしておく。以下の例は、プロクシサーバーからコピーを行う例だ。

# scp /etc/swift/*.gz <ストレージノードのホスト名>:/etc/swift/

サービスの起動

 以上でストレージノードの設定は完了だ。swift-initコマンドでサービスを起動させよう。なお、swift-initの第一引数に「main」を指定することで、Swiftを構成している主サービスすべてをまとめて指定できる。これで問題が無ければ、続いて「rest」を指定してそのほかに必要となるサービスを起動させる。

# swift-init main start
# swift-init rest start