NFSサーバを構築して、複数サーバの共有ディレクトリを設定する。

先日作ったUSBサーバですが、アプリケーションサーバとして現在も快適に稼働しています。ただ、やはり画像等の保存を考えるとディスクスペースが足りなかったり、そもそもこれらのファイルは、複数のアプリケーションサーバで共有したかったり、というとこがあります。

というとこで、先日作ったRAID5のサーバを使って、NFSサーバを構築したいと思います。

NFS(NetworkFileSystem)の概要

NFSは、言わずと知れた枯れた技術ですが、リモートホスト上のファイルシステムをローカルホストにあるファイルシステムと同様に扱えるようにします。ファイルシステムを提供するホスト側がNFSサーバ、利用する側がNFSクライアントになります。

NFSサーバの設定

まずは、NFSサーバの構築です。

  1. 必要なパッケージをインストールします。

    # yum install nfc-utils nfs-utils-lib
  2. nfsを起動して、以降は、自動起動するように設定します。

    # /etc/init.d/nfs start
    # chkconfig nfs on
    # chkconfig nfs --list
    nfs         0:off   1:off   2:off   3:on    4:on    5:on    6:off
  3. nfslockの稼働と起動設定を確認しておきます。

    # /etc/init.d/nfslock status
    rpc.statd (pid  3306) を実行中...
    # chkconfig nfslock --list
    nfslock         0:off   1:off   2:off   3:on    4:on    5:on    6:off
  4. portmapの稼働と起動設定を確認しておきます。

    # /etc/init.d/portmap status
    portmap (pid 1353) を実行中...
    # chkconfig portmap --list
    portmap         0:off   1:off   2:off   3:on    4:on    5:on    6:off
  5. 共有するフォルダを作成します。

    # mkdir /var/share_dir
  6. 共有フォルダのエクスポート(export)の設定をします。

    まず、設定オプション等を確認してみます。
    (日本語版だとやや不足があるような感じがしたので、英語版の方を参照しました。)

    # man exportfs
    The default export options are sync,ro,root_squash,wdelay.

    とあるので、async,rw,no_root_squashのオプションを指定して変更することにします。

    • async:遅延書き込み有効
    • rw:読み書き有効
    • no_root_squash:ルート特権有効
    # man exportfs
    rw     Allow both read and write requests on this NFS volume. The default is to disallow any request which changes the
           filesystem.  This can also be made explicit by using the ro option.
    
    async  This option allows the NFS server to violate the NFS protocol and reply to requests before any changes made  by
           that request have been committed to stable storage (e.g. disc drive).
    
           Using this option might improve performance with version 2 only, but at the cost that an unclean server restart
           (i.e. a crash) can cause data to be lost or corrupted.
    
    no_root_squash
           Turn off root squashing. This option is mainly useful for diskless clients.
  7. エクスポート(export)の設定を記述します。

    # vi /etc/exports
    /var/share_dir 192.168.0.0/255.255.255.0(async,rw,no_root_squash)
  8. エクスポート(export)の設定を反映させます。

    # exportfs -av
    exporting 192.168.0.0/255.255.255.0:/var/share_dir
  9. 設定の反映を確認してみます。

    # exportfs -v
    /var/share_dir  192.168.0.0/255.255.255.0(rw,async,wdelay,no_root_squash,no_subtree_check,anonuid=65534,anongid=65534)
  10. 通信ポートの設定を行います。

    rpc.mountdデーモンが使用するポートを固定する為に、設定ファイル(/etc/sysconfig/nfs)を編集してMOUNTD_PORTを指定します。

    # vi /etc/sysconfig/nfs
    MOUNTD_PORT=892
  11. nfsを再起動して反映させます。

    # /etc/init.d/nfs restart
  12. ファイアウォールの設定を行います。

    # iptables -A INPUT -p udp ---dport 111 -j ACCEPT
    # iptables -A INPUT -p tcp ---dport 111 -j ACCEPT
    # iptables -A INPUT -p udp ---dport 892 -j ACCEPT
    # iptables -A INPUT -p tcp ---dport 892 -j ACCEPT
    # iptables -A INPUT -p tcp ---dport 2049 -j ACCEPT
    # /etc/init.d/iptables save
    # /etc/init.d/iptables restart

NFSクライアントの設定

続いて、NFSクライアントになるサーバに接続して、共有フォルダ(NFS)をマウントするよう設定します。

  1. マウントポイント(ディレクトリ)を作成します。

    # mkdir /var/www/html/share_mnt_dir
  2. マウントを実行します。(例:192.168.0.1 = NFSサーバ)

    # mount 192.168.0.1/var/share_dir /var/www/html/share_mnt_dir
  3. NFSサーバで、マウントされていることを確認してみます。

    # showmount
    Hosts on no02.server:
    192.168.0.2
    # showmount -d
    Directories on no02.server:
    /var/share_dir

netfsで起動時にマウント、停止時にアンマウント

上記までで動作の確認はできましたが、毎回、手動でマウントコマンドを打つのは現実的ではないので、netfsサービスを使って、システムの起動時にマウント、停止時にアンマウントを行うように設定します。

  1. NFSクライアントのサーバに戻って、一旦マウントを解除します。

    # umount /var/www/html/share_mnt_dir
  2. 「/etc/fstab」に、NFSマウントの設定を行います。

  3. # vi /etc/fstab
    192.168.0.1:/var/share_dir /var/www/html/share_mnt_dir nfs soft 0 0
  4. netfsを再起動して、設定を反映します。

    # /etc/init.d/netfs restart

以上で、NFSサーバ及びNFSクライアントの設定完了です。

カテゴリー: サーバ・インフラのこと   タグ: , , ,   この投稿のパーマリンク

トラックバック

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>