読者です 読者をやめる 読者になる 読者になる

Database JUNKY

MySQL,MariaDBを中心としたブログです

容量無制限!! NFSからAmazon Elastic File System (EFS) に移行する

AWS EFS NFS Linux 共有ディレクトリ mount umount fstab mount.nfs4: Connection timed out SG

今までec2のインスタンスnfsサーバを立てて運用していましたが、ディスクの使用率が逼迫してくると、ディスクの追加作業が面倒な上に、時間がかかるので、今回、既存のec2 nfsサーバをEFSに移行しちゃおうと考えたわけです。

旧構成

f:id:hit10231023:20160919182637j:plain

上記、図の通りawsのec2でやってますよ!とはいいつつも、別にec2でなくてもいい構成ですね。一台の、ec2サーバにディスクを盛大に乗っけてnfsサーバにしているわけです。 これを、awsのefsに移行する手順を公開したいと思います

BLUENEXT ELANVITAL ワイヤレスステレオレシーバーAirCLIPII シルバー EVSH-03SR

BLUENEXT ELANVITAL ワイヤレスステレオレシーバーAirCLIPII シルバー EVSH-03SR

Fire タブレット 8GB、ブラック

Fire タブレット 8GB、ブラック

新構成

f:id:hit10231023:20160919183929j:plain

上記通り、ec2で作成したnfsを廃止し、全てefsでかいけつできるように改修するのが今回の目的です

10.0.1.100 の構成

こちらがnfsサーバの構成です

# cat /etc/exports
# /usr/local/public 10.0.0.0/16(rw,no_root_squash)

10.0.1.10 の構成

こちらが、nfsクライアントの構成です。ちなみに、例では1台しか載せておりませんが、実際はこれが5-10台あります

# cat /etc/fstab 
#
LABEL=/     /           ext4    defaults,noatime  1   1
tmpfs       /dev/shm    tmpfs   defaults        0   0
devpts      /dev/pts    devpts  gid=5,mode=620  0   0
sysfs       /sys        sysfs   defaults        0   0
proc        /proc       proc    defaults        0   0
/dev/sdb        /media/ephemeral0       auto    defaults,nofail,comment=cloudconfig     0       2
10.0.0.100:/usr/local/public  /usr/local/public                  nfs     defaults        0 0

設定手順

では、早速にnfsからefsに移行する手順を書きたいと思います

amazon EFSの設定

  • amazonの管理コンソールを開きます

f:id:hit10231023:20160919191316j:plain

  • 初回は以下のような画面になると思います、「Create file system」をクリックしてください

f:id:hit10231023:20160919191502j:plain

  • 下記のような画面になると思います。とりあえずこのまま進めましょう(これがあとでハマるけど・・)

f:id:hit10231023:20160919191618j:plain

  • タグの設定です。わかりやすいような名前にしましょう

f:id:hit10231023:20160919191739j:plain

  • こんな画面になると思います。「Create file system」をクリックしてください

f:id:hit10231023:20160919191825j:plain

  • EFSの作成中の画面になります。しばらく待ちますと完了します。管理コンソールでの作業は以下の通りです

f:id:hit10231023:20160919192014j:plain

10.0.1.100 (nfs server)

今回は、efsを作る!だけの話ではなく、旧nfsサーバからのデータ移行も含みますので、コンソールでの作業も必要になります。まずは、nfsサーバでの作業からです。

mkdir -p /public_new
chmod -Rf 775 /public_new
  • efsサーバにmountします

ここでハマりました、タイムアウトエラーが発生・・・

mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 $(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone).fs-02f33d4b.efs.us-east-1.amazonaws.com:/ /public_new      

-------------------------------------------------
mount.nfs4: Connection timed out
  • SGの設定をデフォルトで進めたのが良くなかったようです

おそらく、他の皆様も、VPCで構築し、独自のSGを設定しているかと思います。そのSGの中に、以下のポート(2379)を追加してください。

  • 再度、efsサーバにmountします。こんどは無事に接続できたかと思います
mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 $(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone).fs-65f13f2c.efs.us-east-1.amazonaws.com:/ /public_new
vi /etc/exports
---------------------------------------
# /usr/local/public 10.0.0.0/16(rw,no_root_squash)
  • データをコピーする

では、早速データ移行を開始しましょう。下記作業は、旧nfsディレクトリの中身をすべて、efsにコピーする作業になっております

cp -arf /usr/local/public/*  /public_new
  • ryncする

データコピー中も、データが更新されているかもしれません、コピーが終わったら念のためrsyncして、データを同期しましょう

rsync -avr --delete /usr/local/public/* /public_new
  • 接続をumoun する

サーバ側の設定はこれで終わりなので速やかにumountしておきましょう。

umount /public_new

10.0.1.10 (nfs client)

次はnfsクライアントの設定になります。基本的には、マウントポイントを変更するだけです

  • 既存のマウントポイントを、アンマウントする

旧mount設定を一旦解除し、efs用のマウントを行います

umount /usr/local/public
mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 $(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone).fs-02f33d4b.efs.us-east-1.amazonaws.com:/ /usr/local/public 
  • マウントされているか確認してみる
# df -h
ファイルシス                                         サイズ  使用  残り 使用% マウント位置
/dev/xvda1                                              99G  5.3G   93G    6% /
devtmpfs                                               7.5G   64K  7.5G    1% /dev
tmpfs                                                  7.5G     0  7.5G    0% /dev/shm
us-east-1a.fs-bbaf11f2c.efs.us-east-1.amazonaws.com:/   8.0E   94G  8.0E    1% /usr/local/public

マウントできているようですね。ここのus-east-1a.fs-bbaf11f2c.efs.us-east-1.amazonaws.coは覚えておいてください

  • /etc/fstab の編集

旧mount設定はコメントアウトし、新設定をここに入れ込みます

vi /etx/fstab
--------------------
#
LABEL=/     /           ext4    defaults,noatime  1   1
tmpfs       /dev/shm    tmpfs   defaults        0   0
devpts      /dev/pts    devpts  gid=5,mode=620  0   0
sysfs       /sys        sysfs   defaults        0   0
proc        /proc       proc    defaults        0   0
/dev/sdb        /media/ephemeral0       auto    defaults,nofail,comment=cloudconfig     0       2
# 10.0.0.100:/usr/local/public  /usr/local/public                  nfs     defaults        0 0
us-east-1a.fs-bbaf11f2c.efs.us-east-1.amazonaws.com:/  /usr/local/public nfs4    defaults        0       0

設定はこれで完了です。どうでしょう?思ったよりかんたんだったのではないでしょうか?ちなみにdfで出力された結果が8.0Eとなっております。8.0Eってエクサバイト????まじですげえ!!!