構築MooseFS分布式ファイルシステム:マスターサーバーからクライアントまで

1. Master Server の構築

Master Server はMooseFSの中央制御ノードであり、メタデータを管理します。以下の手順でインストールと設定を行います。

1.1 必要パッケージのインストール

[root@master ~]# yum -y install gcc gcc-c++ zlib-devel

1.2 専用ユーザーの作成

[root@master ~]# useradd -s /sbin/nologin moosefs

1.3 ソースコードのコンパイルとインストール

[root@master ~]# tar xzf moosefs-1.6.27-5.tar.gz
[root@master ~]# cd moosefs-1.6.27
[root@master moosefs-1.6.27]# ./configure \
  --prefix=/opt/moosefs \
  --with-default-user=moosefs \
  --with-default-group=moosefs \
  --disable-mfschunkserver \
  --disable-mfsmount
[root@master moosefs-1.6.27]# make && make install

オプションの意味:

  • --prefix:インストール先ディレクトリ
  • --with-default-user/group:サービス実行ユーザー・グループ
  • --disable-mfschunkserver:Chunk Server機能を無効化
  • --disable-mfsmount:FUSEマウント機能を無効化

1.4 設定ファイルの準備

[root@master ~]# cd /opt/moosefs/etc/moosefs/
[root@master moosefs]# cp mfsexports.cfg.dist mfsexports.cfg
[root@master moosefs]# cp mfsmaster.cfg.dist mfsmaster.cfg
[root@master moosefs]# cp mfstopology.cfg.dist mfstopology.cfg

[root@master ~]# cd /opt/moosefs/var/moosefs/
[root@master moosefs]# cp metadata.mfs.empty metadata.mfs

1.5 mfsmaster.cfg の主要設定

# サービス実行ユーザー・グループ
WORKING_USER = moosefs
WORKING_GROUP = moosefs

# ログ識別子(syslog用)
SYSLOG_IDENT = mfsmaster

# メタデータ保存ディレクトリ
DATA_PATH = /opt/moosefs/var/moosefs

# メタログの保持数(変更履歴)
BACK_LOGS = 50

# Chunk Server 接続設定
MATOCS_LISTEN_HOST = *
MATOCS_LISTEN_PORT = 9420

# クライアント接続設定
MATOCL_LISTEN_HOST = *
MATOCL_LISTEN_PORT = 9421

# Metalogger 接続設定
MATOML_LISTEN_HOST = *
MATOML_LISTEN_PORT = 9419

# リプリケーション遅延(切断時)
REPLICATIONS_DELAY_DISCONNECT = 3600

# セッション維持時間(秒)
SESSION_SUSTAIN_TIME = 86400

1.6 mfsexports.cfg のアクセス制御

クライアントのIPとマウント権限を定義します。

# 全クライアントにルートディレクトリへの読み書き権限を付与
* / rw,alldirs,maproot=0

# Metalogger用メタデータ領域へのアクセス
* . rw

フォーマット:

  • クライアント指定*(全IP)、192.168.1.0/24(サブネット)、192.168.1.50-100(範囲)
  • マウントパス/(MooseFSルート)、.mfsmetaメタデータ)
  • 権限rw(読み書き)、ro(読み取り専用)、alldirs(サブディレクトリ許可)、maproot=0(root権限マッピング)

1.7 パスの簡略化

[root@master ~]# ln -s /opt/moosefs/sbin/* /usr/local/bin/

1.8 サービス起動

[root@master ~]# mfsmaster start
[root@master ~]# netstat -tlnp | grep ':942[0-1]'

1.9 systemdサービス定義

[root@master ~]# cat > /etc/systemd/system/moosefs-master.service <<EOF
[Unit]
Description=MooseFS Master Server
After=network.target

[Service]
Type=forking
ExecStart=/opt/moosefs/sbin/mfsmaster start
ExecStop=/opt/moosefs/sbin/mfsmaster stop
Restart=on-failure
User=moosefs
Group=moosefs
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF

[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl enable moosefs-master

2. Metalogger Server の構築

メタログサーバーは、Masterの変更ログ(changelog)をリアルタイムでバックアップします。

2.1 インストール(Masterと同様)

コンパイル時に --disable-mfsmaster--disable-mfschunkserver を指定。

2.2 設定ファイルの編集

[root@metalogger ~]# cd /opt/moosefs/etc/moosefs/
[root@metalogger moosefs]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

主な設定:

# MasterサーバーのIPとポート
MASTER_HOST = 192.168.1.10
MASTER_PORT = 9419

# ログ保存ディレクトリ
BACK_LOGS = 50

2.3 起動

[root@metalogger ~]# mfsmetalogger start

3. Chunk Server の構築(3台以上推奨)

Chunk Server は実データを分散保存します。各ノードで同様の設定を行います。

3.1 インストール

[root@chunk01 ~]# ./configure \
  --prefix=/opt/moosefs \
  --with-default-user=moosefs \
  --with-default-group=moosefs \
  --disable-mfsmaster \
  --disable-mfsmount

3.2 設定ファイル

mfschunkserver.cfg

MASTER_HOST = 192.168.1.10
MASTER_PORT = 9420

mfshdd.cfg

/data/moosefs/chunks

3.3 ストレージディレクトリの準備

[root@chunk01 ~]# mkdir -p /data/moosefs/chunks
[root@chunk01 ~]# chown -R moosefs:moosefs /data/moosefs

3.4 起動

[root@chunk01 ~]# mfschunkserver start

4. クライアントの設定

4.1 FUSEのインストール

[root@client ~]# tar xzf fuse-2.9.2.tar.gz
[root@client ~]# cd fuse-2.9.2
[root@client fuse-2.9.2]# ./configure && make && make install

4.2 環境変数の設定

[root@client ~]# echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' >> /etc/profile
[root@client ~]# source /etc/profile

4.3 MooseFSクライアントのインストール

[root@client ~]# ./configure \
  --prefix=/opt/moosefs \
  --with-default-user=moosefs \
  --with-default-group=moosefs \
  --disable-mfsmaster \
  --disable-mfschunkserver \
  --enable-mfsmount
[root@client ~]# make && make install

4.4 マウント

[root@client ~]# mkdir -p /mnt/mfs
[root@client ~]# modprobe fuse
[root@client ~]# /opt/moosefs/bin/mfsmount /mnt/mfs -H 192.168.1.10
[root@client ~]# df -h /mnt/mfs

5. Web監視ツールの利用

[root@master ~]# mfscgiserv start

ブラウザでアクセス:http://192.168.1.10:9425/mfs.cgi

6. 高可用性(HA)とデータ保護

6.1 メタデータのバックアップ戦略

  • 定期的に metadata.mfs.back を取得(Masterの DATA_PATH 内)
  • Metaloggerから changelog_ml.*.mfs を収集
  • 復旧時は mfsmetarestore -a で自動復元

6.2 DRBD + Keepalived の導入

MasterのメタデータディレクトリをDRBDで同期し、Keepalivedで仮想IPを切り替える構成。

haresources の例:

master1 drbddisk::r0 Filesystem::/dev/drbd0::/opt/moosefs/var/moosefs::ext3 moosefs-master Ipaddr::192.168.1.100/24

重要:サービス起動順は DRBD → ファイルシステム → MooseFS Master。逆順で停止。

6.3 データ整合性の検証

  • 10万ファイルを書き込み、MD5チェックサムを記録
  • Masterを手動で切り替え、再書き込み後MD5を再確認
  • 結果:完全一致。データ損失なし

7. データ管理と修復

7.1 ファイルの複製数設定(Goal)

[root@client ~]# mfssetgoal 2 /mnt/mfs/project/    # 新規ファイルに2コピーを適用
[root@client ~]# mfssetgoal -r 2 /mnt/mfs/project/ # 既存ファイルにも2コピーを適用

7.2 損傷ファイルの修復

[root@client ~]# /opt/moosefs/bin/mfsfilerepair /mnt/mfs/largefile.tar.gz
  • 欠損チャンクはゼロで埋められる
  • チャンクバージョン不一致時はMasterが知る最新バージョンに強制更新
  • 注意:修復後はファイルをコピーし、元を削除することを推奨

7.3 スナップショット

[root@client ~]# mfsmakesnapshot /mnt/mfs/src /mnt/mfs/backup/snapshot

同一MooseFS内でのみ可能。外部ファイルシステムへのコピーは不可。

7.4 削除ファイルの復元(Trash)

  • 削除されたファイルは /mnt/mfs/.trash に一時保存(デフォルト90秒)
  • mfsgettrashtime で確認、mfssettrashtime で変更
  • 復元: mv /mnt/mfs/.trash/filename /mnt/mfs/
  • /mnt/mfs/.trash/undel には復元可能なファイルが一時格納
  • /mnt/mfs/.trash/reserved:開かれているファイル(閉じられると自動削除)

7.5 ストレージ容量の注意点

  • 各Chunk Serverは、実使用量に加えて、各パーティションあたり256MBを「オーバーヘッド」として報告
  • 例:3サーバー × 7ディスク = 3×7×256MB ≈ 5.3GBの表示容量増加
  • 正確な使用量は mfsdirinfo /mnt/mfs で確認

7.6 ファイル記述子の調整

大量小ファイル処理時は、デフォルトの1024では不足するため:

[root@master ~]# echo '* - nofile 65535' >> /etc/security/limits.conf

MasterとChunk Serverの両方に適用。

8. 起動・停止のベストプラクティス

  • 起動順:Master → Chunk Server → Metalogger → Client
  • 停止順:Client → Metalogger → Chunk Server → Master
  • 電源断はMasterのみリスクあり。復旧には mfsmetarestore が必要
  • DRBD環境では、Masterプロセスの正常終了が必須。強制終了するとメタデータ破損リスクあり

以上により、MooseFSは耐障害性の高い分散ファイルシステムとして実用化可能です。ただし、メタデータの信頼性を確保するためには、DRBDや定期バックアップの組み合わせが不可欠です。

タグ: MooseFS ChunkServer MetaLogger DRBD HA

7月24日 01:02 投稿