Linux on Azureでファイル共有する方法
ファイル共有、あまりおすすめしないです
いきなりタイトルを否定しました。ロック。
さて、これからクラウド、というお客様に、よく聞かれる質問があります。それは「NFSとかの、ファイル共有使える?」です。頻出です。クラウド頻出質問選手権では、西東京予選で毎年ベスト8入りするレベルの強豪校です。
ですが個人的にはあまりおすすめしません。クラウドはなるべく共有部分を減らして、スケーラブルに、かつ障害の影響範囲を局所化するべき、と考えるからです。特にストレージはボトルネックや広範囲な障害の要因になりやすい。障害事例が物語ってます。その代わりにオブジェクトストレージなど、クラウド向きの機能がおすすめです。
でも、否定はしません。アプリの作りを変えられないケースもあるかと思います。
そこで、もしAzureでファイル共有が必要であれば、Azure File Storageを検討してみてください。Azureのマネージドサービスなので、わざわざ自分でサーバたてて運用する必要がありません。楽。
対応プロトコルは、SMB2.1 or 3.0。LinuxからはNFSじゃなくSMBでつついてください。
使い方は公式ドキュメントを。
“Azure Storage での Azure CLI の使用”
“Linux で Azure File Storage を使用する方法”
もうちょっと情報欲しいですね。補足のためにわたしも流します。
Azure CLIでストレージアカウントを作成し、ファイル共有を設定
ストレージアカウントを作ります。fspocは事前に作っておいたリソースグループです。
local$ azure storage account create tomakabefspoc -l "Japan East" --type LRS -g fspoc
ストレージアカウントの接続情報を確認します。必要なのはdata: connectionstring:の行にあるAccountKey=以降の文字列です。このキーを使ってshareの作成、VMからのマウントを行うので、控えておいてください。
local$ azure storage account connectionstring show tomakabefspoc -g fspoc
info: Executing command storage account connectionstring show
+ Getting storage account keys
data: connectionstring: DefaultEndpointsProtocol=https;AccountName=tomakabefspoc;AccountKey=qwertyuiopasdfghjklzxcvbnm==
info: storage account connectionstring show command OK
shareを作成します。share名はfspocshareとしました。
local$ azure storage share create -a tomakabefspoc -k qwertyuiopasdfghjklzxcvbnm== fspocshare
エンドポイントを確認しておきましょう。VMからのマウントの際に必要です。
local$ azure storage account show tomakabefspoc -g fspoc
[snip]
data: Primary Endpoints: file https://tomakabefspoc.file.core.windows.net/
Linux * 2VMで共有
Ubuntuでやりますよ。SMBクライアントとしてcifs-utilsパッケージをインストールします。Marketplace提供の14.04 LTSであれば、すでに入ってるはずです。
fspocvm01:~$ sudo apt-get install cifs-utils
マウントポイントを作り、マウントします。接続先の指定はエンドポイント+share名で。usernameはストレージアカウント名。パスワードはストレージアカウントのキーです。 パーミッションは要件に合わせてください。
fspocvm01:~$ sudo mkdir -p /mnt/fspoc
fspocvm01:~$ sudo mount -t cifs //tomakabefspoc.file.core.windows.net/fspocshare /mnt/fspoc -o vers=3.0,username=tomakabefspoc,password=qwertyuiopasdfghjklzxcvbnm==,dir_mode=0777,file_mode=0777
マウント完了。確認用のファイルを作っておきます。
fspocvm01:~$ echo "test" > /mnt/fspoc/test.txt
fspocvm01:~$ cat /mnt/fspoc/test.txt
test
2台目のVMでも同様のマウント作業を。
fspocvm02:~$ sudo apt-get install cifs-utils
fspocvm02:~$ sudo mkdir -p /mnt/fspoc
fspocvm02:~$ sudo mount -t cifs //tomakabefspoc.file.core.windows.net/fspocshare /mnt/fspoc -o vers=3.0,username=tomakabefspoc,password=qwertyuiopasdfghjklzxcvbnm==,dir_mode=0777,file_mode=0777
1台目で作ったファイルが見えますね。
fspocvm02:~$ ls /mnt/fspoc
test.txt
fspocvm02:~$ cat /mnt/fspoc/test.txt
test
ファイルをいじりましょう。
fspocvm02:~$ echo "onemoretest" >> /mnt/fspoc/test.txt
fspocvm02:~$ cat /mnt/fspoc/test.txt
test
onemoretest
1台目から確認。
fspocvm01:~$ cat /mnt/fspoc/test.txt
test
onemoretest
ご利用は計画的に
2016年2月時点で、Azure File Storageには最大容量:5TB/share、1TB/file、ストレージアカウントあたりの帯域:60MBytes/sという制約があります。これを超えるガチ共有案件では、Lustreなど別の共有方法を検討してください。
なおファイルサーバ用途であれば、Azure File Storageではなく、OneDriveなどオンラインストレージSaaSに移行した方が幸せになれると思います。企業向けが使いやすくなってきましたし。運用から解放されるだけじゃなく、便利ですよ。