未完成...脳内混乱。当分放棄...

作っている途中なのだが、、、なんかLustreでよくね?っても思う....

http://wiki.linux-nfs.org/wiki/index.php/PNFS_Setup_Instructions
http://people.redhat.com/steved/Lisa-11/LISA-11-pNFS-BoF-final.pdf
http://www.dcache.org/manuals/2011/20110906-acat-pnfs-patrick.pdf

思想はLustreと似ているのかな。Metadata Serversと複数のData Serversで構成され、
クライアントからのリクエストに応じてMetadata Serversを介して複数のData Serversが応じる。
だからパラレルっていう言われなのだろうか。

全体構成

ここでは、 Metadata Servers(MDS)を1台、Data Servers(DS)を2台用意してみる。
この3台にはpnfsカーネルと関連ツールを載せる。OSはCentOS6。クライアントは1台でこちらもCentOS6。

役割マシン名IPアドレスカーネル
Metadata Serversnfs.chaperone.jp192.168.0.41linux-pnfs(3.12-rc3)
Data Serversn1.chaperone.jp192.168.0.52linux-pnfs(3.12-rc3)
Data Serversn2.chaperone.jp192.168.0.53linux-pnfs(3.12-rc3)
クライアントclient.chaperone.jp192.168.0.20

pNFSカーネルソースと関連ツールの取得

まずはpnfsなカーネルを取得する

[root@nfs ~]# cd /usr/src/
[root@nfs src]# git clone git://linux-nfs.org/~bhalevy/linux-pnfs.git
Initialized empty Git repository in /usr/src/linux-pnfs/.git/
remote: Counting objects: 3526382, done.
remote: Compressing objects: 100% (549199/549199), done.
remote: Total 3526382 (delta 2957257), reused 3517296 (delta 2948202)
Receiving objects: 100% (3526382/3526382), 961.39 MiB | 332 KiB/s, done.
Resolving deltas: 100% (2957257/2957257), done.
[root@nfs src]#

このカーネル自体はMakefileからlinux-3.12-rc3に対して修正を施したようだ。

[root@nfs src]# wget http://ftp.riken.jp/Linux/kernel.org/linux/kernel/v3.x/testing/linux-3.12-rc3.tar.xz
[root@nfs src]# xz -cd linux-3.12-rc3.tar.xz | tar xf -
[root@nfs src]# rm -rf ./linux-3.12-rc3/{.gitignore,.mailmap}
[root@nfs src]# rm -rf ./linux-pnfs/{.git,.gitignore,.mailmap}
[root@nfs src]# diff -crN ./linux-3.12-rc3 ./linux-pnfs > pnfs.patch

として、修正箇所を抽出したpnfs.patchを見るとその変更範囲が良くわかる。
余談 このpnfs.patchを使うには

[root@n1 src]# xz -cd linux-3.12-rc3.tar.xz | tar xf -
[root@n1 src]# patch -p0 < pnfs.patch

とする。カーネルの他にも連携ツールもあって、それもダウンロードする

[root@nfs src]# git clone git://linux-nfs.org/~bhalevy/pnfs-nfs-utils.git
Initialized empty Git repository in /usr/src/pnfs-nfs-utils/.git/
remote: Counting objects: 12267, done.
remote: Compressing objects: 100% (3809/3809), done.
remote: Total 12267 (delta 9350), reused 11251 (delta 8398)
Receiving objects: 100% (12267/12267), 2.84 MiB | 570 KiB/s, done.
Resolving deltas: 100% (9350/9350), done.
[root@nfs src]#

linux-pnfsカーネルコンパイル

Metadata ServersData Serversには、pnfs向けのカーネルを載せる必要がある。
前段でそのカーネルは取得したので、ここではそのコンパイルを行う

[root@nfs ~]# cd /usr/src/linux-pnfs
[root@nfs linux-pnfs]# cp ../kernels/2.6.32-504.el6.x86_64/.config .
[root@nfs linux-pnfs]# make oldconfig
[root@nfs linux-pnfs]# make menuconfig
[root@nfs linux-pnfs]# time(make&& make modules&& make modules_install&& make install)

ここではvmware esxiで作った仮想マシンでテストをしている。
環境が一様なので様々な物を排除して使用した.configファイルはこれ。filelinux-pnfs.config
これを使うには

[root@nfs linux-pnfs]# cp ~/linux-pnfs.config .config
[root@nfs linux-pnfs]# time(make&& make modules&& make modules_install&& make install)

とする。

関連ツールのコンパイル

関連ツールと言ってもpNFS向けに

  • /usr/sbin/exportfs
  • /usr/sbin/rpc.mountd
  • /usr/sbin/rpc.nfsd
  • /usr/sbin/nfsstat

を作り直している。関連ツールは同じくgitで取得する

[root@nfs ~]# cd /usr/src
[root@nfs src]# git clone git://linux-nfs.org/~bhalevy/pnfs-nfs-utils.git
Initialized empty Git repository in /usr/src/pnfs-nfs-utils/.git/
remote: Counting objects: 12267, done.
remote: Compressing objects: 100% (3809/3809), done.
remote: Total 12267 (delta 9350), reused 11251 (delta 8398)
Receiving objects: 100% (12267/12267), 2.84 MiB | 394 KiB/s, done.
Resolving deltas: 100% (9350/9350), done.
[root@nfs src]#

コンパイルに必要なパッケージを事前にインストールしてから、ツールをコンパイル&インストール

[root@nfs ~]# yum install tcp_wrappers-devel libevent libevent-doc libevent-headers libevent-devel \
                          keyutils libgssglue libgssglue-devel libtirpc \
                          nfs-utils nfs-utils-lib rpcbind nfs-utils-lib-devel \
                          device-mapper-devel libselinux-devel libsepol-devel libudev-devel \
                          libblkid-devel libuuid-devel \
                          krb5-devel keyutils-libs-devel libcom_err-devel
 
[root@nfs ~]# cd /usr/src/pnfs-nfs-utils/
[root@nfs pnfs-nfs-utils]# ./autogen.sh
[root@nfs pnfs-nfs-utils]# ./configure
[root@nfs pnfs-nfs-utils]# make; make install

留意 CentOS6のlibgssglue、libgssglue-develはバージョンが 0.1 で pnfs-nfs-utils には0.3以上が必要。なので、libgssglueのsrpmを取得して、そのSPECを使って最新のlibgssglueを用意します。

[root@nfs ~]# wget http://vault.centos.org/6.6/os/Source/SPackages/libgssglue-0.1-11.el6.src.rpm
[root@nfs ~]# rpm -Uvh libgssglue-0.1-11.el6.src.rpm
[root@nfs ~]# cd rpmbuild/SOURCES
[root@nfs SOURCES]# wget http://www.citi.umich.edu/projects/nfsv4/linux/libgssglue/libgssglue-0.4.tar.gz
[root@nfs SOURCES]# ls -l
合計 692
-rw-r--r--. 1 root root    668  4月  1 03:25 2011 libgssglue-0.1-develbytes.patch
-rw-r--r--. 1 root root    772  5月 20 13:41 2009 libgssglue-0.1-gssglue.patch
-rw-rw-r--. 1 root root 351504  5月 20 13:41 2009 libgssglue-0.1.tar.gz
-rw-r--r--  1 root root 346984  5月  9 02:57 2012 libgssglue-0.4.tar.gz
[root@nfs SOURCES]#
[root@nfs SOURCES]# cd ../SPECS/
[root@nfs SPECS]#
[root@nfs SPECS]# sed -i 's/Version: 0.1/Version: 0.4/' libgssglue.spec
[root@nfs SPECS]# sed -i 's/Release: 11%{?dist}/Release: %{?dist}/' libgssglue.spec
[root@nfs SPECS]# cd ~/
[root@nfs ~]# rpmbuild -bb rpmbuild/SPECS/libgssglue.spec
[root@nfs ~]# ls -l rpmbuild/RPMS/x86_64/
合計 112
-rw-r--r-- 1 root root 22644 11月 17 22:49 2014 libgssglue-0.4-.el6.x86_64.rpm
-rw-r--r-- 1 root root 74704 11月 17 22:49 2014 libgssglue-debuginfo-0.4-.el6.x86_64.rpm
-rw-r--r-- 1 root root 10636 11月 17 22:49 2014 libgssglue-devel-0.4-.el6.x86_64.rpm
[root@nfs ~]#
[root@nfs ~]# cd rpmbuild/RPMS/x86_64/
[root@nfs x86_64]# rpm -Uvh libgssglue-0.4-.el6.x86_64.rpm libgssglue-devel-0.4-.el6.x86_64.rpm
準備中...                ########################################### [100%]
   1:libgssglue             ########################################### [ 50%]
   2:libgssglue-devel       ########################################### [100%]
[root@nfs x86_64]#

*rpmuserで作るべきなのだろうが、、、

Step 1: Setup NFSv4 servers

Metadata Serversと全てのData Serversに /etc/exports を用意する

/export  *(rw,sync,fsid=0,insecure,no_subtree_check)

Metadata Serversにてデーモンを起動

[root@nfs ~]# /etc/init.d/rpcbind start
rpcbind を起動中:                                          [  OK  ]
[root@nfs ~]# /etc/init.d/nfs start
NFS サービスを起動中:                                      [  OK  ]
NFS mountd を起動中:                                       [  OK  ]
NFS デーモンを起動中:                                      [  OK  ]
RPC idmapd を起動中:                                       [  OK  ]
[root@nfs ~]#
[root@nfs ~]# ls -l /proc/fs/nfsd/
合計 0
-r--r--r-- 1 root root 0 11月 22 15:58 2014 export_features
-r--r--r-- 1 root root 0 11月 22 15:58 2014 exports
-rw------- 1 root root 0 11月 22 15:58 2014 filehandle
-rw-r--r-- 1 root root 0 11月 22 15:58 2014 max_block_size
-rw------- 1 root root 0 11月 22 15:58 2014 nfsv4gracetime
-rw------- 1 root root 0 11月 22 15:58 2014 nfsv4leasetime
-rw------- 1 root root 0 11月 22 15:58 2014 nfsv4recoverydir
-rw------- 1 root root 0 11月 22 15:58 2014 pnfs_dlm_device
-r--r--r-- 1 root root 0 11月 22 15:58 2014 pool_stats
-rw------- 1 root root 0 11月 22 15:58 2014 pool_threads
-rw-r--r-- 1 root root 0 11月 22 15:58 2014 portlist
-r--r--r-- 1 root root 0 11月 22 15:58 2014 reply_cache_stats
-r--r--r-- 1 root root 0 11月 22 15:58 2014 supported_krb5_enctypes
-rw------- 1 root root 0 11月 22 15:58 2014 threads
-rw------- 1 root root 0 11月 22 15:58 2014 unlock_filesystem
-rw------- 1 root root 0 11月 22 15:58 2014 unlock_ip
-rw------- 1 root root 0 11月 22 15:58 2014 versions
[root@nfs ~]#

/proc/fs/nfsd/pnfs_dlm_deviceにData Serversのありかを伝える

[root@nfs ~]# echo "/dev/sdb:192.168.0.52,192.168.0.53" > /proc/fs/nfsd/pnfs_dlm_device
[root@nfs ~]#

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2014-11-23 (日) 16:28:52 (977d)