自 Windows Server 2012 起,微软引入了 SMB 3.0 的概念,通过 SMB 3.0,可以实现很多新的功能,包括我们介绍过的"SMB 多通道",以及将虚拟机的存储安装在 SMB 3.0 的文件共享服务器上,实现另外一种高可用性。

相对于硬件存储而言,搭建 SMB 的文件共享服务器成本更为低廉。将虚拟机部署在 SMB 3.0 上,可以实现基本等同于 Hyper-V 故障转移群集的效果。

9.1 SMB 3.0 的特性

9.1.1 SMB 3.0 的部署和使用条件

SMB 3.0 是一项新技术,因此在带来新功能的同时,对部署环境和使用条件也有一定的限制。

  • 部署一个常见的 Active Directory 域环境,对于域中的林和域的功能级别,SMB 3.0 并没有硬性要求。
  • 使用 SMB 3.0 的客户端和服务器均必须支持 SMB 3.0。如 Windows Server 2012/2012 R2,Windows 8/8.1。
  • 如果希望应用于 Hyper-V 主机,则 Hyper-V 角色和 SMB 3.0 角色不能同时存在于一台主机上,SMB 3.0 不支持环回的配置。
  • 可以使用非微软的文件共享服务器,但必须同样支持 SMB 3.0。

     

9.1.2SMB 3.0 功能

SMB 3.0 相对于 Windows Server 2008 中存在的 SMB 2.0,增加了一些对于 Hyper-V 有用的功能:

  • SMB 透明的故障转移,在 SMB 2.0 中,如果管理员对 SMB 群集进行维护,则客户端会中断连接,用户必须重新连接才可以继续使用服务。而在 SMB 3.0 中,这一情况得到了改变。
  • SMB 多通道,该功能要求客户端和服务器双方都必须支持 SMB 3.0,但其实现的功能也是非常有用的,可以对客户端和服务器之间的流量在不同网卡之间分流、故障转移。
  • SMB 直通(RDMA),该功能只在 Windows Server 平台上使用,同样该功能要求客户端和服务器均需支持 SMB 3.0,同时需要主机拥有支持 RDMA 的网卡。
  • SMB 加密,在客户端和服务器均支持 SMB 3.0 的前提下,可以使用 SMB 3.0 加密功能。

     SMB PowerShell,在 Windows Server 2012 和 Windows8 起,开始引入 SMB PowerShell。需要注意的是,SMB PowerShell 仅支持 Windows Server 2012 以上的操作系统,之前的版本还需要使用 net.exe 或其他 API 进行管理。

9.2 部署 SMB 3.0

 

9.2.1 添加文件服务器角色

首先准备一台 Windows Server 2012 R2 的虚拟机,其 FQDN 为 fs.contoso.com。在生产环境中,为了保证良好的用户体验,可以使用物理机来实现。

第 1 步,依次打开"服务器管理器"→"添加角色和功能向导",在"安装类型"对话框中勾选"基于角色或基于功能的安装",如图 9-1 所示,点击"下一步"继续。

图 9-1 添加角色和功能

第 2 步,在"服务器选择"对话框,点选所需要添加角色的服务器,如图 9-2 所示,点击"下一步"继续。

图 9-2 选择需要添加角色的服务器

第 3 步,在"服务器角色"对话框,勾选"文件和 iSCSI 服务"下的"文件服务器",如图 9-3 所示,点击"下一步"继续。

图 9-3 安装文件服务器角色

第 4 步,功能对话框不勾选任何选项,点击"下一步"进入到"确认"对话框,点击"安装"完成,如图 9-4 所示。

图 9-4 确认安装角色

如果使用 PowerShell 在 fs.contoso.com 本地进行安装,则可以以管理员方式运行 PowerShell,执行以下命令。

Install-WindowsFeature
File-Services,
FS-FileServer

如果使用 PowerShell 在远程服务器上安装,则可以使用如下命令。

Invoke-Command
-ComputerName
fs
-Command{Install-WindowsFeature
-Name
File-Services,
FS-

FileServer }

 

9.2.2 添加共享文件夹

为了将 SMB 3.0 应用于 Hyper-V,还需要创建特定的共享文件夹方可使用。和普通的共享文件夹应用不同的是,Hyper-V 访问共享文件夹不是以"用户"的身份去进行访问,而是以"计算机"的身份进行访问,因此在配置共享文件夹时需要进行一些特殊的配置。第 1 步,依次点击"服务器管理器"→"文件和存储服务"→"共享",如图 9-5 所示。

图 9-5 共享管理界面

第 2 步,在"共享"对话框,点击"任务"按钮,选择"新建共享",启动"新建共享向导"。在"选择配置文件"对话框中,必须点选"SMB 共享-应用程序",仅此配置文件适用于 Hyper-V,如图 9-6 所示,点击"下一步"继续。

图 9-6 创建"SMB 共享-应用程序"

第 3 步,在"共享位置"对话框,点选"按卷选择"按钮,选择 D 盘,如图 9-7 所示,点击"下一步"继续。

图 9-7 创建"共享位置"

第 4 步,在"共享名称"对话框,依次输入"共享名称"和"共享描述",此处可以输入中文的名称和描述以方便识别。根据共享名称的不同,系统会自动在所选的 D 盘下创建"share\共享名称"目录,同时将其共享为"\\服务器名\共享名称"。如图 9-8 所示,点击"下一步"继续。

图 9-8 创建"共享名称"

第 5 步,在"其他设置"对话框,可以配置"启用基于存取的枚举"、"允许共享缓存"、 "加密数据访问"功能是否开启。由于所选共享配置文件以及本例未安装 BranchCache 功能的缘故,因此上两项功能无法使用,如图 9-9 所示,不勾选任何选项,直接点击"下一步" 继续。

图 9-9 创建"其他设置"

第 6 步,在"权限"对话框,需要配置能够访问该共享目录的安全权限和共享权限。点击"自定义权限"进入配置界面,如图 9-10 所示。

图 9-10 创建"其他设置"

第 7 步,在"高级安全设置"对话框,于默认的"权限"选项卡下,点击"添加",如图 9-11 所示。

图 9-11 添加安全权限

第 8 步,点击"选择主体"按钮,于弹出的"选择用户、计算机、服务账户或组"对话框中选择"对象类型",如图 9-12 所示。

图 9-12 选择对象类型

第 9 步,在"对象类型"对话框中,勾选"计算机"对象类型,点击"确定"返回上一级窗口,如图 9-13 所示。

图 9-13 选中"计算机"类型

第 10 步,在"选择用户、计算机、服务账户或组"对话框中,可以输入 hv2.contoso.com 的计算机名,如未进行过第 8-9 步的操作,则默认情况下无法选用计算机账户。点击"确定",如图 9-14 所示。

图 9-14 添加计算机账户

第 11 步,返回至特定安全主体的权限配置页面,可以对 hv2.contoso.com 对该共享文件夹的访问权限进行设定。此处勾选"完全控制",点击"确定"完成配置。如图 9-15 所示。

图 9-15 为计算机账户配置权限

第 12 步,依次对 hv3.contoso.com 和 hypervha.contoso.com(群集地址)添加相同的完全控制权限。原则上有多少台需要访问该目录的计算机,就需要添加多少个共享权限。如图 9-16 所示。

图 9-16 重复配置计算机安全权限

第 13 步,检查"共享"权限配置是否正确,依次对 hv3.contoso.com 和 hypervha.contoso.com(群集地址)添加相同的完全控制权限。原则上有多少台需要访问该目录的计算机,就需要添加多少个"共享"权限。如图 9-17 所示。

图 9-17 重复配置计算机安全权限

第 14 步,在"权限"对话框中,可以检查共享文件夹的安全权限配置是否正确。如图

9-18 所示,点击"下一步"继续。

图 9-18 检查安全权限的配置第 15 步,在"确认"对话框中,可以检查共享文件夹的整体配置是否正确。如图 9-19 所示,点击"创建"继续。

图 9-19 检查共享文件夹的整体配置

第 16 步,在"结果"对话框中,耐心等待共享文件夹的创建结束,如图 9-20 所示,点击"关闭"完成配置。

图 9-20 完成共享文件夹配置

第 17 步,回到"服务器管理器",可以"共享"下看到已创建的文件夹。如图 9-21 所示。

图 9-21 在服务器管理器中的共享文件夹

第 18 步,在运行中输入\\fs
可以看到已创建的文件夹,右键点击该文件夹,选择"属性",可以看到其安全权限的配置,后续的权限修改也可以在此进行。如图 9-22 所示。

图 9-22 检查共享文件夹配置

9.3 在 SMB 3.0 上创建虚拟机

9.3.1 创建虚拟机

完成共享文件夹的创建后,可以使用被允许的 Hyper-V 主机将虚拟机创建在该共享文件夹上。

第 1 步,远程登录 hv2.contoso.com,打开"Hyper-V 管理器",如图 9-23 所示。

图 9-23 远程的登录 hv2.contoso.com

第 2 步,通过"新建虚拟机向导"创建虚拟机,在"指定名称和位置"对话框,修改虚拟机的存储位置为上一阶段创建的共享文件夹:"\\fs\Hyper-V
存储共享\",如图 9-24 所示,点击"下一步"继续。

图 9-24 修改虚拟机存储位置。

第 3 步,依次进行其他配置,完成虚拟机的创建。如图 9-25 所示。

图 9-25 修改虚拟机存储位置。

第 4 步,在"Hyper-V 管理器"中,右键点击该虚拟机,选择"设置",可以检查该虚拟机的硬盘驱动器设置,能够发现其保存位置也确实在共享文件夹上。如图 9-26 所示。

图 9-26 检查虚拟机存储位置。

9.3.2 SMB3.0 上创建虚拟机的局限性

以上完成了在 SMB3.0 上创建虚拟机的操作,然而需要注意的是,如果仅仅是完成了以上操作,则只能登陆相应的 Hyper-V 主机,方可在共享文件夹上创建虚拟机。如登陆 hv2.contoso.com 后,只能在 hv2.contoso.com 上创建虚拟机,而无法使用"Hyper-V管理器" 在 hv3.contoso.com 上创建虚拟机。例如,在 hv1.contoso.com 上打开"Hyper-V 管理器",为 hv2.contoso.com 创建基于共享文件的虚拟机,则会出现如下错误提示,如图 9-27 共享文件夹上创建虚拟机的局限性。

图 9-27 所示。

9.4 权限委派

9.4.1 委派的意义

为了解决 SMB3.0 上创建虚拟机的局限性,需要引入一个新的概念"委派"。"委派"在Windows Server 中拥有久远的历史。其解决的是集中管理的问题,当只有少数的服务器时,服务器管理员可以远程登录到每一台服务器上,发起相应的操作,服务器和服务器之间通过用户密码或其他凭据进行正常的通信。如图 1 所示 9-28 所示。

图 9-28 无需使用委派的场景。

由于 Windows Server 默认只信任"自己"所发起的一些操作。当有人"代表"它进行操作时,默认是不成功的,这也就解释了默认情况下无法使用"Hyper-V 管理器"为其他 Hyper-V 主机创建虚拟机的问题,如图 9-29 所示。

图 9-29 不委派导致失败的场景。

然而当所需要管理的计算机越来越多时,每次都要登录到相应的计算机去操作显然不现实。此时就需要使用"委派"来解决这个问题,"委派"就好比一个声明,又可以理解为"领导"对"员工"工作的具体指派:"我允许你访问 a 资源和 b 资源,我允许 b 主机访问 c 资源和 d 资源"。委派是域内使用的一种策略,其策略实施不需要被委派方的回应。当实施委派后,就可以进行类似 hv1.contoso.com 上的"Hyper-V 管理器"操作 hv2.contoso.com 或 hv3.contoso.com 这种操作了,如图 9-30 所示。

图 9-30 委派的场景。

9.4.2 委派的分类

委派分为两种方式,分别是"委派"和"约束委派",顾名思义,委派就是将所有权限都委派给某一台计算机,而约束委派则是将某个或某几个应用的权限委派给某一台计算机。相对而言,约束委派的安全性要更好一些。但操作也稍微复杂一些。本例将以约束委派进行示例进行讲解。

9.4.3 委派的配置

本例要实现的最终目标是,可以在 hv1.contoso.com 上用 "Hyper-V 管理器 " 在 hv2.contoso.com、hv3.contoso.com 以及 hypervha.contoso.com(群集地址)上创建虚拟机。

委派的前提是需要操作计算机处于域环境中,对于非域环境的计算机,无法使用委派功能。

第 1 步,使用域管理员账号登录域控制器,打开"Active Directory 用户和计算机",在相应的 OU 下找到需要操作的计算机账户,本例中专门创建了一个 OU"物理主机",默认情况下,所有计算机账户位于"Computers"下。如图 9-31 所示。

图 9-31 打开"Active Directory 用户和计算机"

第 2 步,右键点击需要委派的计算机账户,选择"属性",如图 9-32 所示。

图 9-32 选择计算机账户的属性

第 3 步,在"属性"对话框中,切换至"委派"选项卡,如图 9-33 所示。此处有三个选项:

  • 不信任此计算机来委派:默认值,表示不启用委派。
  • 信任此计算机来委派任何服务(仅 Kerberos):即"委派",表示该计算机拥有"代表"其他计算机的所有权限。相对而言,使用"委派"所需的鼠标点击操作较少,但因为安全风险的缘故,不建议轻易使用。
  • 仅信任此计算机来委派指定的服务:即"约束委派",表示该计算机可以对部分指定的应用或服务拥有"代表"的权限。

图 9-33 委派选项卡

第 4 步,点击"仅信任此计算机来委派指定的服务",默认点选"仅使用 Kerberos"。点击右下角的"添加"按钮。如图 9-34 所示。

图 9-34 指定"仅信任此计算机来委派指定的服务"

第 5 步,点击"用户或计算机",在弹出的"选择用户或计算机"对话框中,输入 hv2 或 hv2.contoso.com(需要委派的第一台 Hyper-V 主机),如图 9-35 所示,点击"确定"。

图 9-35 指定需委派的计算机

第 6 步,在弹出的"添加服务"对话框中,可以选择需要添加的各类服务,按下"Ctrl" 键可进行复选。本例中选择 cifs 即可。即表示允许 hv1.contoso.com 对 hv2.contoso.com 进行 cifs(Common Internet File System 通用 Internet 文件系统,即微软自家的 SMB 共享)的相应访问操作。如图 9-36 所示,点击"确定"。

图 9-36 委派 cifs 服务

第 7 步,除了 hv2.contoso.com 外,还需要依次添加 hv3.contoso.com 和

hypervha.contoso.com 的相应委派权限,以及需要访问的文件共享服务器(fs.contoso.com)的相应委派权限,如图 9-37 所示,点击"确定"完成约束委派的设置。

图 9-37 依次添加所有涉及的服务

第 8 步,在生产中,为了后期操作方便,而不局限于只能在 hv1.contoso.com 上管理,可以依次对其他所涉及的 Hyper-V 主机委派相应的权限,如图 9-38 所示。

图 9-38 依次对所有涉及的 Hyper-V 主机进行相同操作

第 9 步,在"Active Directory 用户和计算机"上完成委派后,策略可能不会即时生效,如遇这种情况,需要重启所涉及的 Hyper-V 主机,并刷新组策略方可生效。

委派生效后,即可解决未配置委派时,无法用"Hyper-V 管理器"远端创建和维护虚拟机的问题。

9.4.4 委派的其他作用

在微软的虚拟化和私有云中,委派还有另外两个重要的作用,通过委派"Hyper-V Replica Service"和"Microsoft Virtual System Migration Service",可以为虚拟化环境带来"实时迁移" 和"Hyper-V 副本"两项重要的功能。配置如图 9-39 所示,如果未正确配置委派,则这两项功能无法使用,和配置 cifs 的委派同理,该操作需要在所有涉及的 Hyper-V 主机上设置。

图 9-39 配置委派 Hyper-V 副本和实时迁移功能

9.5 小结

本章通过创建 SMB 文件共享和委派,实现了使用"Hyper-V 管理器"将虚拟机创建在共享文件夹上的操作。在 SMB 上创建虚拟机是一种廉价的高可用解决方案,无需企业拥有独立的硬件存储,配置方面也非常简单。通过 SMB 文件共享,可以实现接下来将要介绍的共享实时迁移。

而委派这项操作,尽管并非实时迁移的必要准备条件。但未配置"Microsoft Virtual System Migration Service"委派的情况下,就必须登录到目标主机上进行操作,这将会极大的降低工作效率。因此实际的生产活动当中,委派可以说是一项必备条件。

 

 

第九章 通过 SMB 共享虚拟机的更多相关文章

  1. 《深入理解java虚拟机》读书笔记八——第九章

    第九章 类加载及执行子系统的案例与实战 Q:如果有10个WEB应用程序都是用Spring来进行组织管理的话,可以把Spring放到Common或Shared目录下(Tomcat5.0)让这些程序共享. ...

  2. 精通Web Analytics 2.0 (11) 第九章: 新兴分析—社交,移动和视频

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第九章: 新兴分析-社交,移动和视频 网络在过去几年中发生了不可思议的发展变化:从单向对话到双向对话的转变; 由视频,Ajax和 ...

  3. 第九章 C语言在嵌入式中的应用

    上章回顾 编码的规范和程序版式 版权管理和申明 头文件结构和作用 程序命名 程序注释和代码布局规范 assert断言函数的应用 与0或NULL值的比较 内存的分配和释放细节,避免内存泄露 常量特性 g ...

  4. Android群英传》读书笔记 (4) 第八章 Activity和Activity调用栈分析 + 第九章 系统信息与安全机制 + 第十章 性能优化

    第八章 Activity和Activity调用栈分析 1.Activity生命周期理解生命周期就是两张图:第一张图是回字型的生命周期图第二张图是金字塔型的生命周期图 注意点(1)从stopped状态重 ...

  5. [转]Windows Shell 编程 第九章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987969】

    第九章 图标与Windows任务条 如果问一个非程序人员Windows最好的特色是什么,得到的答案应该是系统最有吸引力的图标.无论是Windows98现在支持的通用串行总线(USB)还是WDM(看上去 ...

  6. Android群英传笔记——第九章:Android系统信息和安全机制

    Android群英传笔记--第九章:Android系统信息和安全机制 本书也正式的进入尾声了,在android的世界了,不同的软件,硬件信息就像一个国家的经济水平,军事水平,不同的配置参数,代表着一个 ...

  7. 《linux就该这么学》第十一节课: 第九章,网卡绑定与sshd服务

    8.4.服务的访问控制列表 TCPwrappers是RHEL7中默认启用的流量监控程序,能够对服务做出允许或拒绝. TCPwrappers服务由两个文件控制:  /etc/hosts.allow    ...

  8. 鸟哥的Linux私房菜——第九章

    视频链接,推荐看B站 土豆网:http://www.tudou.com/programs/view/XmMDbjJHJC8 B站:http://www.bilibili.com/video/av966 ...

  9. C++ Primer Plus学习:第九章

    C++第九章:内存模型与名称空间 C++在内存中存储数据方面提供了多种选择.可直接选择保留在内存中的时间长度(存储持续性)以及程序哪一部分可以访问数据(作用域和链接)等. 单独编译 程序分为三个部分: ...

随机推荐

  1. 如何在Eclipse上使用SVN,安装、提交、拉取代码、解决冲突等操作

    https://blog.csdn.net/zhanlv/article/details/76504414 将SVN集成到Eclpise第一种方法第一种方法是通过zip文件在Eclipse中安装(本插 ...

  2. lua的table元类

    Lua中提供的元表是用于帮助Lua数据变量完成某些非预定义功能的个性化行为,如两个table的相加.假设a和b都是table,通过元表可以定义如何计算表达式a+b.当Lua试图将两个table相加时, ...

  3. Javascript 定时器调用传递参数的方法

    文章来源:  https://m.jb51.net/article/20880.htm 备注:先记下,以后整理: Javascript 定时器调用传递参数的方法,需要的朋友可以参考下. 无论是wind ...

  4. 《C#并发编程经典实例》学习笔记-关于并发编程的几个误解

    误解一:并发就是多线程 实际上多线程只是并发编程的一种形式,在C#中还有很多更实用.更方便的并发编程技术,包括异步编程.并行编程.TPL 数据流.响应式编程等. 误解二:只有大型服务器程序才需要考虑并 ...

  5. 32.QT-制作最强电压电阻表盘,可以自定义阴影效果,渐变颜色,图标,文字标签等-附带demo程序

    由于上位机需要绘制电压电阻表盘,如下图所示: 后来,在网上找阿找,还是没找到满意的,索性自己来画控件算了,由于第一次画控件,所以花了我2天时间,才画好 效果图如下: 上图的所有颜色(包括滑动的渐变/单 ...

  6. Struts2_属性驱动

    在jsp页面提交到action中的表单元素在action中是以对象的形式存在的, action中的对象name必须与jsp页面中的表单元素name相同,struts框架自动为action的对象赋值. ...

  7. java回调函数学习

    前不久学习了代理模式,其中有一个核心之一是Proxy.newProxyInstance();这里有三个参数, loader:目标对象的类加载器 interfaces:目标对象实现的所有接口组成的数组 ...

  8. 程序员晋级CTO之路的8大准则

    推荐阅读: 大数据智慧平台落地方案 Nginx + 阿里云SSL + tomcat 实现https访问代理 永远别忘了TD 再确认测试代码前,先找别人帮你检查下是否无误.在别人做之前尽量检查出bug并 ...

  9. Java中static与final

    修饰变量:static:静态变量,是属于这个类的final :常量,只能赋值一次static final:静态常量,必须立即初始化(同时具有static.final的特点) 修饰方法:static:静 ...

  10. Html中的img标签 加载失败

    在Http请求时,有时会遇到img图片标签加载失败,不显示的情况: 解决方法,在重新给src属性赋值时,先将onerror事件清除掉,再赋值,这样就不会存在循环调用问题了,代码如下; <img ...