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や定期バックアップの組み合わせが不可欠です。