韩源,资深工程师,存储和灾备专家。
前言
公有云基础架构与传统 IT 架构有很大的区别,特别是在网络和存储方面。以存储为例,Azure 没有 share disk,所以在传统的 aluster、rac 等无法部署,虽然有人通过在 vm 安装配置软 iscsi target 方式实现,但是效率太低,而且不稳定。从公有云设计思路来看,我们需要尽可能的使用 Paas 服务,将底层的安全和稳定性交给公有云去解决。如果一定需要通过 vm 来实施的组件,尽可能无状态化。但是理想是丰满的,现实是骨感的,难免有些应用需要 vm 间保持一致,例如 apache 的配置文件,多台共同提供的文件服务等。如果通过应用在 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.jpgAzure 的共享没有文件数量限制,只有单个共享不能超过 5TB、单个文件不能超过 1TB 的限制。
共享目录创建
登录 Azure 门户预览,进入存储账户
添加一个存储账户测试用(账号类型选择常规用途):
稍等片刻,新存储账户创建完成后点击进入,可以看到常规用途的存储支持 Blob、文件、表、队列四种类型的存储,而共享存储属于文件类型:
点击文件进入文件服务,添加文件共享:
可以看到,共享目录的大小有配额限制,最大 5120GB,如果不填写配额,默认 5120GB,点击刷新,新创建的共享目录出现在列表里:
点击共享目录,进入文件夹属性,可以进行配额修改、创建目录、上传文件等操作:
点击连接,可以看到在不同平台下连接到共享文件夹的方式:
现在该共享里创建目录 dir1,并上传 1.jpg 到该目录:
当然,如果有大量数据需要上传,可以选择专门的 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:,不能被占用),直接回车执行,成功执行后会看到资源管理器多出一个共享目录如下:
如果希望通过\\网络路径的方式去访问共享目录,如下图:
会发现需要输入用户名和口令:
这时候我们需要通过 cmdkey 命令将连接共享目录的凭据添加到 windows 系统,具体步骤如下: 打开存储账户,选择访问密钥,可以看到该存储账户的用户名(和存储账户名一样)及密钥:
回到 windows 系统,在命令行或 powershell 窗口输入: cmdkey /add:smbdemo.file.core.chinacloudapi.cn /user:smbdemo /pass:2p1C2XE8EkqC1TvUOfz6sLQLS46zNtZA+ksYvHfb1Q2AFPvWY3pddkpWXpiovGbgBRDLvAL2juz8CRQyGUw0Gw== 添加凭据,再通过\\网络路径的方式去打开共享目录,发现可顺利打开 :
系统重启后凭据依然有效。
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 命令直接在线安装或升级所需软件包:
为共享目录创建一个挂载点:,并通过 mount 命令挂载共享目录:(命令可以从共享目录的连接里复制,须将 mount point 修改为正确的挂载点),挂载完成后,可看到共享目录下所见目录和上传的文件:
将挂载参数 vers=3.0 修改为 vers=2.1,再次执行,可以看到仍然成功,说明 centos7 的 amb 客户端可以同时支持 2.1 和 3.0 两个版本:
如果希望开机自动挂载,可在/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 命令挂载共享目录:
发现无论 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 环境里共享目录使用,未涉及权限管理等。
立即访问http://market.azure.cn