Azure下共享目录的使用方法

前言

公有云基础架构与传统IT架构有很大的区别,特别是在网络和存储方面。
以存储为例,Azure没有share disk,所以在传统的aluster、rac等无法部署,虽然有人通过在vm安装配置软iscsi target方式实现,但是效率太低,而且不稳定。从公有云设计思路来看,我们需要尽可能的使用Paas服务,将底层的安全和稳定性交给公有云去解决。如果一定需要通过vm来实施的组件,尽可能无状态化。
但是理想是丰满的,现实是骨感的,难免有些应用需要vm间保持一致,例如apache的配置文件,多台vm共同提供的文件服务等。如果通过应用在vm间同步文件,效率低,而且一致性很难保证。为了解决此问题,Azure提供了文件共享服务。
当然,由于一些不可描述的原因,Azure不同于其它公有云,文件共享只提供SMB而不是NFS。下边就看看如何在Azure里共享文件。

共享目录

共享目录定义

共享目录在Azure里属于文件存储,用来存放文件,并以SMB方式提供给vm访问,目前支持SMB2.1和SMB3.0两个版本。
如同其它存储服务,文件服务隶属于一个存储账号(storage account),有自己的共享名(share),在文件服务里还可以创建目录(directory)及子目录,以及存放文件。举个例子,创建一个名为smbdemo的存储账户,并在其下创建名为sharefolder的共享目录,其url为:
https://smbdemo.file.core.chinacloudapi.cn/sharefolder/
如果我们在其下创建了名为dir1的目录,并放入图片1.jpg,则可以通过url:
https://smbdemo.file.core.chinacloudapi.cn/sharefolder/dir1/1.jpg
Azure的共享没有文件数量限制,只有单个共享不能超过5TB、单个文件不能超过1TB的限制。

共享目录创建

登录Azure门户预览,进入存储账户:
mark
添加一个存储账户测试用(账号类型选择常规用途):
mark
稍等片刻,新存储账户创建完成后点击进入,可以看到常规用途的存储支持Blob、文件、表、队列四种类型的存储,而共享存储属于文件类型:
mark
点击文件进入文件服务,添加文件共享:
mark
可以看到,共享目录的大小有配额限制,最大5120GB,如果不填写配额,默认5120GB,点击刷新,新创建的共享目录出现在列表里:
mark
点击共享目录,进入文件夹属性,可以进行配额修改、创建目录、上传文件等操作:
mark
点击连接,可以看到在不同平台下连接到共享文件夹的方式:
mark
现在该共享里创建目录dir1,并上传1.jpg到该目录:
mark
当然,如果有大量数据需要上传,可以选择专门的Azure存储管理工具,如MS自己出品的Azure Storage Explorer、VS2017等,以及第三方工具,当然还可以在程序里使用API上传。
如果数据量巨大,带宽无法满足,MS还提供数据导入服务,用户可以将数据拷贝到硬盘等物理介质,送到机房导入。

VM挂载共享目录

Windows挂载共享目录

根据文档,windows对不同版本的SMB支持如下:
CIFS – The ancient version of SMB that was part of Microsoft Windows NT 4.0 in 1996. SMB1 supersedes this version. *
*SMB 1.0 (or SMB1) – The version used in Windows 2000, Windows XP, Windows Server 2003 and Windows Server 2003 R2 *
*SMB 2.0 (or SMB2) – The version used in Windows Vista (SP1 or later) and Windows Server 2008 *
*SMB 2.1 (or SMB2.1) – The version used in Windows 7 and Windows Server 2008 R2 *
*SMB 3.0 (or SMB3) – The version used in Windows 8 and Windows Server 2012 *
*SMB 3.02 (or SMB3) – The version used in Windows 8.1 and Windows Server 2012 R2 *
可见Azure所支持的SMB2.1和SMB3.0基本对现有windows系统均可兼容。两个版本的主要区别如下:
*SMB2.1:支持同一区域的虚机

SMB3.0:支持同一区域、不同区域、的虚机以及客户端应用程序
首先配置并开启一台windows虚机,通过远程桌面连接。
windows下挂载共享目录比较简单,直接将共享目录—连接里,windows连接的命令复制到windows的命令行或powershell窗口(注意将Drive letter改为需要挂载的盘符如z:,不能被占用),直接回车执行,成功执行后会看到资源管理器多出一个共享目录如下:
mark
如果希望通过\\网络路径的方式去访问共享目录,如下图:
mark
会发现需要输入用户名和口令:
mark
这时候我们需要通过cmdkey命令将连接共享目录的凭据添加到windows系统,具体步骤如下:
打开存储账户,选择访问密钥,可以看到该存储账户的用户名(和存储账户名一样)及密钥:
mark
回到windows系统,在命令行或powershell窗口输入:
cmdkey /add:smbdemo.file.core.chinacloudapi.cn /user:smbdemo /pass:2p1C2XE8EkqC1TvUOfz6sLQLS46zNtZA+ksYvHfb1Q2AFPvWY3pddkpWXpiovGbgBRDLvAL2juz8CRQyGUw0Gw==
添加凭据,再通过\\网络路径的方式去打开共享目录,发现可顺利打开
mark
系统重启后凭据依然有效。

Linux挂载共享目录

Linux发行版较多,Azure里也包含了Centos、RedHat、Ubuntu等众多版本。下边以Centos7为例说明。
开启一台Centos7虚机,通过putty等工具ssh连接。
Linux不原生支持smb,所以需要安装smb的客户端以及cifs文件系统支持的软件包,所需软件包:samba-client samba-common cifs-utils。需要注意一点,由于linux的smb客户端不支持加密,所以linux主机和共享目录需要在同一个Azure区域里。
通过yum命令直接在线安装或升级所需软件包:
mark
mark
为共享目录创建一个挂载点:,并通过mount命令挂载共享目录:(命令可以从共享目录的连接里复制,须将mount point修改为正确的挂载点),挂载完成后,可看到共享目录下所见目录和上传的文件:
mark
将挂载参数vers=3.0修改为vers=2.1,再次执行,可以看到仍然成功,说明centos7的amb客户端可以同时支持2.1和3.0两个版本:
mark
如果希望开机自动挂载,可在/etc/fstab文件加入:
//myaccountname.file.core.chinacloudapi.cn/mysharename /mymountpoint cifs vers=3.0,username= myaccountname,password= StorageAccountKeyEndingIn==,dir_mode=0777,file_mode=0777
再测试一下Centos6,创建并开启一台Centos6虚机,远程连接安装软件,创建挂载点,然后执行mount命令挂载共享目录:
mark
发现无论2.1还是3.0都无法挂载。
后来查到文档说明:
The kernel version included in RHEL 6 contains an older cifs.ko kernel
module that only supports SMB1 protocol. SMB2 (and later) protocols
require a later cifs.ko and thus a later kernel. RHEL 7 has initial support
for SMB2 protocol in the cifs.ko kernel module and so can act as a SMB2
client.

只能通过升级os版本才能支持。

后续

本文档主要初步介绍Azure环境里共享目录使用,未涉及权限管理等。后续待补充。