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