Linux

Moose File System , MooseFS , mfs

(参考:日経Linux を参考にしました)

moosefs.png

Linux、Mac 向け、分散ファイルシステム、MooseFS。
以下のような特徴があります。

  1. いろいろなハードウェアに付いているローカルHDDを利用可能
  2. 何台のサーバー、何十台のHDDであろうと1つのドライブとして認識する。
  3. 何台のサーバーが壊れても大丈夫にするか、設定ができる
  4. ブラウザを利用した管理コンソール
  5. 削除ファイルに対するゴミ箱機能
  6. 各ハードウェアに付いているHDDのフォーマットは
    一般的なフォーマット(EXT3 や EXT4)が利用可能。
  7. 各ハードウェアに付いている HDD 内は、既存データとの混在もOK
  8. システムの停止無しに HDD の追加、削除も容易。
  9. mdadm などのソフトウェア RAID に比べ格段に安定
  10. Google File System (GFS) に似ている
  11. Linux, Macは無料(Windowsは有料)
  12. データがサーバー毎に分散されるため高速

構成

  1. 管理サーバーが必要です。ここでは mfsmaster とします。
  2. 管理サーバーのバックアップです。ここでは mfsmetalogger とします。
  3. 各々の HDD が入っているPC、サーバーをここでは chunk server とします。

最初に構築した時

インストール手順

  1. DNS に mfsmaster を追加しましょう。
    • DNS サーバーが無い場合は、/etc/hosts ファイルに書きましょう。
    • hosts に追加するときは、127.0.0.1 で無くIPアドレスを記入しましょう。
  2. ./configure のオプションまとめ
    • --disable-mfsmaster
    • --disable-mfschunkserver
    • --disable-mfsmount
    • --enable-mfsmount
    • --prefix=DIRECTORY - install to given prefix (default is /usr/local)
    • --sysconfdir=DIRECTORY - select configuration files directory (default is ${prefix}/etc)
    • --localstatedir=DIRECTORY - select top variable data directory (default is ${prefix}/var; MFS metadata are stored in mfs subdirectory, i.e. ${prefix}/var/mfs by default)
    • --with-default-user=USER - user to run daemons as if not set in configuration files (default is nobody)
    • --with-default-group=GROUP - group to run daemons as if not set in configuration files (default is nogroup)
  3. mfsmaster のセットアップ
    1. インストール
      sudo yum -y install gcc zlib zlib-devel
    2. MooseFS ユーザ、グループの作成
      sudo groupadd mfs
      sudo useradd -g mfs mfs
    3. moosefs のダウンロード
    4. MooseFS の解凍
      tar xzfv mfs-1.6.27.tar.gz
    5. 3種類のサーバー機能のインストール(mfsmaster,metalogger,chunk server)
      cd mfs-1.6.27
      ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib --with-default-user=mfs --with-default-group=mfs
      make
      sudo make install
    6. サーバー設定ファイルのセットアップ(というか、コピー)
      cd /etc/mfs/
      sudo cp mfsmaster.cfg.dist mfsmaster.cfg
      sudo cp mfsexports.cfg.dist mfsexports.cfg
    7. metadata ファイルの準備
      cd /var/lib/mfs/
      sudo cp metadata.mfs.empty metadata.mfs
    8. master server の起動
      sudo /usr/sbin/mfsmaster start
      sudo /usr/sbin/mfscgiserv
    9. server コンソールの確認 http://mfsmaster:9425
  4. mfsmetalogger のセットアップ
    1. インストール
      sudo yum -y install gcc zlib zlib-devel
    2. MooseFS ユーザ、グループの作成
      sudo groupadd mfs
      sudo useradd -g mfs mfs
    3. moosefs のダウンロード
    4. MooseFS の解凍
      tar xzfv mfs-1.6.27-1.tar.gz
    5. 3種類のサーバー機能のインストール(mfsmaster,metalogger,chunk server)
      cd mfs-1.6.27
      ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib --with-default-user=mfs --with-default-group=mfs
      make
      sudo make install
    6. サーバー設定ファイルのセットアップ(というか、コピー)
      cd /etc/mfs/
      sudo cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
    7. metalogger server の起動
      sudo /usr/sbin/mfsmetalogger start
    8. 別のサーバで metalogger をマウント
      sudo /usr/sbin/mfsmetalogger start
      sudo mfsmount /mnt/mfsmeta -o mfsmeta,nonempty -H mfsmaster
  5. chunk server のセットアップ
    1. インストール
      sudo yum -y install gcc zlib zlib-devel
    2. MooseFS ユーザ、グループの作成
      sudo groupadd mfs
      sudo useradd -g mfs mfs
    3. moosefs のダウンロード
    4. MooseFS の解凍
      tar xzfv mfs-1.6.27-1.tar.gz
    5. 3種類のサーバー機能のインストール(mfsmaster,metalogger,chunk server)
      cd mfs-1.6.27
      ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib --with-default-user=mfs --with-default-group=mfs
      make
      sudo make install
    6. サーバー設定ファイルのセットアップ(というか、コピー)
      1. cd /etc/mfs/
        sudo cp mfshdd.cfg.sample mfshdd.cfg
        sudo cp mfschunkserver.cfg.sample mfschunkserver.cfg
      2. cd /etc/mfs/
        sudo cp mfshdd.cfg.dist mfshdd.cfg
        sudo cp mfschunkserver.cfg.dist mfschunkserver.cfg
    7. mfshdd.cfg の編集
      例)
      # mount points of HDD drives
      #
      #/mnt/hd1
      #/mnt/hd2
      #etc.
      
      /mnt/f-dra
    8. chunk server の起動
      sudo /usr/sbin/mfschunkserver start
    9. 複数サーバー、PCを chunk server にする場合は、
      上記の手順を繰り返して実行
  6. Web 画面で設定結果の確認

クライアントで MooseFS のマウント

ファイル冗長化の設定(goal 数の設定)

  1. 現在の goal (冗長化)数の確認
    mfsgetgoal /mnt/mfs/
  2. 現在の goal (冗長化)数のセット
    mfssetgoal -r 3 /mnt/mfs/

Master Server の障害対策

  1. mfsmetalogger サーバーを昇格
    sudo /usr/sbin/mfsmetalogger stop
    sudo mfsmaster -a
    cd /etc/mfs/
    sudo cp mfsmaster.cfg.dist mfsmaster.cfg
    sudo cp mfsexports.cfg.dist mfsexports.cfg
    sudo /usr/sbin/mfsmaster start
    sudo /usr/sbin/mfscgiserv &

missing となった時のデータ削除(消去)方法

  1. 以下のコマンドを実行し、どのファイルが missing かを探す
     sudo find /mnt/mfs/ -type f -print0 | xargs -0 mfscheckfile | grep -b1 "chunks with 0 copies:" | grep :$ | sed 's/:$//g'
  2. さらにデリート処理をするために、mfs_missing.log に書き出す。
     sudo find /mnt/mfs/ -type f -print0 | xargs -0 mfscheckfile | grep -b1 "chunks with 0 copies:" | grep :$ | sed 's/:$//g' > mfs_missing.log
  3. missing file を消すための script を作成する PHP プログラム
    <?php
    
    	$fp = fopen("mfs_missing.log", "r");
    
    	$sh_detail="";
    	while ($line = fgets($fp)) {
    		$fileName=substr($line,8,strlen($line)-9);
    		$sh_detail=$sh_detail."mfssettrashtime 1 \"".trim($fileName)."\"\n";
    		$sh_detail=$sh_detail."rm \"".trim($fileName)."\"\n";
    	}
    	fclose($fp);
    	
    	$fp = fopen("mfs_delete_log.sh", "w");
    	fwrite($fp, $sh_detail);
    	fclose($fp);
    ?>
  4. mfs_missing.log 例
    151342-/mnt/mfs/backup/ozubuntu1204_rsync/var/var/www/index.html
    151437-/mnt/mfs/backup/ozubuntu1204_rsync/var/var/tmp/kdecache-dramsuko/ksycoca4stamp
  5. mfs_delete_log.sh 例
    mfssettrashtime 1 "/mnt/mfs/backup/ozubuntu1204_rsync/var/var/lib/dpkg/info/libnss-mdns.md5sums"
    rm "/mnt/mfs/backup/ozubuntu1204_rsync/var/var/lib/dpkg/info/libnss-mdns.md5sums"
  6. sudo find /mnt/mfsmeta/trash/ -name "*|data|*" -print0 | xargs -0 rm -fv

間違えて削除してしまったファイルの復活

CentOS で mfsmount

sudo yum install fuse-libs
sudo rpm -ivh mfs-client-1.6.27-18.1.i386.rpm


mfs-client-1.6.27-18.1.i386.rpm

/etc/fstab

version 2

version 3

quota の設定

エラーの対応

chunkserver がサーバーサイドで認識しない対応

このエラーにえんらい苦しめられました。
調べてもなかなか情報が無いし。。。
いろいろと試してようやくわかりました。

2回目構築(少し簡単になりました)

debian / ubuntu

  1. dns や hosts の設定は先に書きましょう
    • DNS サーバーが無い場合は、/etc/hosts ファイルに書きましょう。
    • hosts に追加するときは、127.0.0.1 で無くIPアドレスを記入しましょう。
  2. ユーザーとグループを作ります
    sudo groupadd -g 1001 mfs
    sudo useradd -u 1001 -g 1001 mfs
  3. apt-get へ key のインポート
    1. Ubuntu 20.04
      sudo wget -O - https://ppa.moosefs.com/moosefs.key | sudo apt-key add -
    2. 少し前
      sudo wget -O - http://ppa.moosefs.com/moosefs.key | sudo apt-key add -
    3. さらに前
      sudo wget -O - http://ppa.moosefs.com/stable/apt/moosefs.key > key
      sudo apt-key add key
  4. apt-get の souce list へソースを追加
    sudo vi /etc/apt/sources.list
    • 以下のどれかを追加
    • For Ubuntu 20.04
      echo "deb [arch=amd64] http://ppa.moosefs.com/moosefs-3/apt/ubuntu/focal focal main" > /etc/apt/sources.list.d/moosefs.list
    • For Ubuntu 18.04
      echo "deb http://ppa.moosefs.com/moosefs-3/apt/ubuntu/bionic bionic main" > /etc/apt/sources.list.d/moosefs.list
    • For Ubuntu 14.04 Trusty:
      sudo echo "deb http://ppa.moosefs.com/moosefs-3/apt/ubuntu/trusty trusty main" > /etc/apt/sources.list.d/moosefs.list
      • 少し前
        deb http://ppa.moosefs.com/moosefs-3/apt/ubuntu/trusty trusty main
      • さらに前
        deb http://ppa.moosefs.com/stable/apt/ubuntu/trusty trusty main
    • For Ubuntu 12.04 Precise:
      deb http://ppa.moosefs.com/stable/apt/ubuntu/precise precise main
    • For Ubuntu 10.10 Maverick:
      deb http://ppa.moosefs.com/stable/apt/ubuntu/maverick maverick main
    • For Debian 7.0 Wheezy:
      • deb http://ppa.moosefs.com/moosefs-3/apt/debian/wheezy wheezy main
      • 少し前
        deb http://ppa.moosefs.com/stable/apt/debian/wheezy wheezy main
    • For Debian 6.0 Squeeze:
      deb http://ppa.moosefs.com/stable/apt/debian/squeeze squeeze main
    • For Debian 5.0 Lenny:
      deb http://ppa.moosefs.com/stable/apt/debian/lenny lenny main
  5. apt-get の更新
    sudo apt-get update

必要なものをインストール

Web Console URL

  1. DNS 名前解決出来ない時
    http://(IP):9425/
    or
  2. DNS 名前解決できる時
    http://mfsmaster.hogehoge.com:9425/

CentOS yum のインストール

(以下の作業は全て root 権限が必要です)

  1. key のインポート
    curl "http://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS
  2. repository の追加
    1. Ver8
      curl "http://ppa.moosefs.com/MooseFS-3-el8.repo" > /etc/yum.repos.d/MooseFS.repo
    2. Ver7
      curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo
    3. Ver6
      curl "http://ppa.moosefs.com/MooseFS-3-el6.repo" > /etc/yum.repos.d/MooseFS.repo
  3. moose file system のインストール
    1. Master Server
      yum install moosefs-master moosefs-cli moosefs-cgi moosefs-cgiserv
    2. Chunkservers:
      yum install moosefs-chunkserver
    3. Metaloggers:
      yum install moosefs-metalogger
    4. Clients:
      yum install moosefs-client fuse
      • fstabの例
        mfsmount     /mnt/mfs     fuse     defaults,mfsdelayedinit,mfsmaster=mfsmaster.tar3.net,mfsport=9421     0     0

mac

download package of moose file system

install fuse

mount


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS