本篇是我在IT168的约稿,原文地址:http://tech.it168.com/a2014/0620/1637/000001637358_all.shtml
IT行业已经进入了云时代,未来越来越多的企业IT基础架构将会部署在公有云、私有云或者混合云上,而数据库作为IT基础架构中最重要的部分与云的结合将变得非常重要。SQL Server 2014打通了公有云与组织内部的关系,无论是运行在企业内部还是运行在Microsoft Azure虚拟机上,SQL Server 2014直接支持将数据文件和日志部署到Microsoft Azure公有云存储,从而可以无缝打通公有云和私有云的边界,架构如图1所示。
图1.SQL Server 2014直接支持将数据库文件部署在Azure Blob
为什么需要将SQL Server数据文件部署在Microsoft Azure
将数据直接部署在Azure Blob存储中可以直接带来诸如性能、数据迁移、数据虚拟化、高可用和灾备方面的好处。但最主要适用场景和优势如下:
- 可移植性:在Azure虚拟机环境下,将数据部署在Azure Blob中会更加容易移植,只需要简单将数据库分离,并附加到另一台Azure虚拟机中即可,无需移动数据库文件本身。
- 数据库虚拟化:在为租户提供服务的云环境中,可以结合SQL Server 2012之后的包含数据库特性,将负载较高的虚拟机上的数据库平滑移动到其他虚拟机上,从而不会影响该虚拟机环境的正常运行。
- 高可用和灾备:由于现在数据库文件位于Microsoft Azure的Blob存储上,因此即使虚拟机本身崩溃,只需要将数据库文件附加到另一台备机上即可。数据库可以在很短的时间内恢复并且数据本身不受虚拟机损坏的影响,从而保证了高RTO和RPO。
- 可扩展性:无论在Azure虚拟机上还是在企业内部,存储的IOPS都收到具体环境的限制,而在Azure Blob存储上,IOPS可以非常高。
SQL Server 2014与Azure Blob存储的全新交互模块并不仅仅是在现有软件环境中的一个适配机制,而是直接集成于SQL Server存储引擎。数据访问机制如图2所示。
图2.数据库文件在Azure Blob上的数据访问机制
由图2可以看出,该数据交互机制不再需要虚拟机通过宿主机和IO通道进行交互,此时虚拟机可以直接通过REST API调用存储。从而比在虚拟机上直接访问本地存储有更好的性能。
将SQL Server数据文件部署在Microsoft Azure
下面通过一个例子展示如何将SQL Server数据库文件部署在Azure Blob存储上。首先,需要在Azure存储中建立存储SQL Server数据库文件的容器,如图3所示。
图3.建立存储数据库文件的容器
将容器起名为testsqlfile,访问类型为私有,容器名称标识了数据库文件的访问地址,如图4所示。
图4.新建容器
接下来,创建访问容器的策略以及共享访问签名(shared access signature)。SQL Server需要这个策略和签名才能够与Azure存储上的数据文件进行交互,创建策略和签名的方式可以使用编程的方式,也可以使用REST APIs,在本例中,使用CodePlex现有的一个工具进行创建(可在http://azurestorageexplorer.codeplex.com 下载)。
首先在Microsoft门户中找到访问存储的账户名称和访问密钥,如图5所示。
图5.找到账户名称和访问密钥
通过该工具创建策略以及访问签名,如图6和图7所示。
图6.创建策略
图7.生成签名
签名生成成功后,可以通过下述代码在SQL Server中建立访问Azure存储容器的凭据:
CREATE CREDENTIAL [https://portalvhdss6xh8nlhcph8b.blob.core.windows.net/sqldata] WITH IDENTITY='SHARED ACCESS SIGNATURE', SECRET = 'sr=c&si=NewPolicy&sig=%2FhFH82XmxmYSPgvc404WqbK6gIUFfrXmEkKxcmIogWA%3D'
凭据建立完成后,在SQL Server 2014中就可以利用该凭据在Blob存储上创建数据库,在本示例中创建了3个数据文件和1个日志文件,总计31GB,创建用时36秒,,如图8所示。
图8.在Azure存储上创建数据库文件
现在通过SQL Server Management Studio连接到Azure的存储环境,就能够看到刚刚创建的数据库文件,如图9所示。
图9.在Azure Blob上创建的数据库文件
总结
SQL Server 2014与Microsoft Azure有了更深度的集成,并通过存储引擎引隐藏了不必要细节,用户可以用创建一个普通数据库方式创建一个将数据库文件存储在Azure存储上的数据库,从而带来性能、可用性、扩展性、灾备甚至数据虚拟化方面的好处。