PowerShell 操作 Azure SQL Active Geo-Replication 实战

Azure SQL Database Active Geo-Replication简介》一文中,我们比较全面的介绍了 Azure SQL Database Active Geo-Replication 的主要特点和优势。接下来我们将从自动化的角度,介绍如何通过 PowerShell 在项目中实现 Active Geo-Replication 操作。

文章来源:葡萄城产品技术社区

一、从Azure PowerShell开始

MS 专门为管理 Azure 写了一套 PowerShell 组件称为 Azure PowerShell,我们就是要使用这套组件中提供的接口,来操作 Active Geo-Replication。遗憾的是,这套组件不会被 Windows 默认安装,所以请参考 MSDN 上的说明先安装 Azure PowerShell。不喜欢读 MSDN 的同学可以参考笔者博文《使用 PowerShell 自动化 CloudServices 发布》中,关于 “安装 powershell 的 azure module”小节,会简洁一些。

二、在PowerShell中登录Azure

操作 Azure 中的任何资源都需要进行身份认证,所以第一步需要在 PowerShell 中登录 Azure,并且选择正确的 Azure subscription。

登录 Azure 的命令:

Login-AzureRmAccount

请按照提示输入您的账号和密码。

然后选择当前的 subscription:

Select-AzureRmSubscription -SubscriptionId xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Select-AzureRmSubscription 命令的使用场景是:当您有多个 subscription 时,需要通过设置当前 subscription 的方式,告诉 PowerShell 命令到底操作的是哪些资源。当然,如果您只有一个 subscription 的话,就不需要执行这个命令。

三、添加一个从数据库

下面进入正题!假设我们有一个叫 blogdb 的数据库,它运行在数据库服务器 blogtestsvr 上, 这个数据库服务器被部署在 East Asia (东亚),我们打算为 blogdb 创建一个从数据库,从数据库所运行的数据库服务器 blogtestsvr2 部署在 Central US (美国中部)。blogtestsvr 和 blogtestsvr2 都属于同一个资源组 sqltest。如果您还不是太了解主从数据库或是 Active Geo-Replication 的概念,请先移步这里

1. New-AzureRmSqlDatabaseSecondary命令

New-AzureRmSqlDatabaseSecondary 是专门为一个已经存在的数据库创建从数据库的命令,并且在从数据库创建完成后,会开始数据的复制。还有一个叫Start-AzureSqlDatabaseCopy 的命令可以做同样的事情,但 Start-AzureSqlDatabaseCopy 命令的功能过于繁杂,所以需要创建从数据库时最好还是使用 New-AzureRmSqlDatabaseSecondary。

下面的命令为 blogdb 创建第一个从数据库:

$db = Get-AzureRmSqlDatabase –DatabaseName "blogdb" -ResourceGroupName "sqltest" -ServerName "blogtestsvr"
$secondaryLink = $db | New-AzureRmSqlDatabaseSecondary –PartnerResourceGroupName "sqltest" –PartnerServerName "blogtestsvr2" -AllowConnections "All"

先去 portal 上检查一下结果:

 

蓝色的六边形表示主数据库,绿色的六边形表示我们刚创建的从数据库,注意从数据库显示的状态为“Readable”。同时数据库被标识在地图上的位置就是真实的数据中心的地理位置。上图说明 PowerShell 命令已经成功的为 blogdb 创建了从数据库。

简单说明上面的命令:

Get-AzureRmSqlDatabase 命令用来获得主数据库的信息,然后传递给 New-AzureRmSqlDatabaseSecondary 命令,不然的话 New-AzureRmSqlDatabaseSecondary 的参数列表会很长且含义不清晰。

New-AzureRmSqlDatabaseSecondary 命令的参数主要用来指出从数据库所在的 resource group 和 server name。还有 AllowConnections 参数,请把它配置为 "All"。

2. 注意事项

在成功的为主数据库创建了从数据库后,让我们一起来看看一些需要注意的事项。

  • 细心的朋友们可能已经注意到了,新创建的从数据库和主数据库的名字是一样的。并且还有一个点不太直观:Service level,其实就是从数据库和主数据库收的钱是一样的!当然您可以单独设置从数据库的 Service level 从而节省预算。
  • 从数据库的创建是被分成两个过程:创建数据库和复制数据。数据库的创建可能很快,但复制数据就不确定了,主要需要看库的大小。由于这两步都完成后 New-AzureRmSqlDatabaseSecondary 命令才会返回,所以当您的数据库比较大时,这条命令执行的时间会比较长。
  • 当同名的数据库已经存在时,New-AzureRmSqlDatabaseSecondary 命令会返回错误:

四、移除从数据库

知道了怎么创建从数据库,当然也要能够把它移除,下面我们使用 Remove-AzureRmSqlDatabaseSecondary 命令把刚才创建的从数据库移除掉。

$db = Get-AzureRmSqlDatabase –DatabaseName "blogdb" -ResourceGroupName "sqltest" -ServerName "blogtestsvr"

$secondaryLink = $db | Get-AzureRmSqlDatabaseReplicationLink –PartnerResourceGroup "sqltest" –PartnerServerName "blogtestsvr2"

$secondaryLink | Remove-AzureRmSqlDatabaseSecondary

命令本身比较简单,执行完成后去 portal 上看看,从数据库已经不见了。噢,等等…好像从数据库并没有被删除掉啊!是的,Remove-AzureRmSqlDatabaseSecondary 命令只是移除了主从数据库之间的关系,而不会删除从数据库。相反,此时的从数据库已经变成了一个可读写的独立数据库。

五、灾难恢复

下面让我们把焦点定位到 Active Geo-Replication 的主要用例:灾难恢复。当故障发生在主数据库时。我们需要通过 Set-AzureRmSqlDatabaseSecondary 命令尽快的把一个从数据库转换为主数据库。

$db = Get-AzureRmSqlDatabase –DatabaseName "blogdb" –ResourceGroupName "sqltest" –ServerName "blogtestsvr2”

$db | Set-AzureRmSqlDatabaseSecondary -PartnerResourceGroupName "sqltest" -Failover

看看 portal 上现在的情况:

 

搞定!原来只读的从数据库已经变成了可读写的主数据库。注意上图中主从数据库各自的位置,是不是它们已经转换了角色呢!

接下来让我们简单了解下 Set-AzureRmSqlDatabaseSecondary 命令以及使用中需要注意的事项。

Set-AzureRmSqlDatabaseSecondary 命令的执行也分为两个阶段:

  • 首先,是切换数据复制操作的同步模式,完成所有到从数据库的数据复制 (切换角色前要保证主从库中的内容是一样的)。
  • 然后,是切换主从数据库的角色。角色切换完成后就开始从新的主数据库,向新的从数据库同步数据。当然切换的过程是有代价的,MSDN 上说大概有0到25秒的时间数据库将不可用,但这个时间不会超过1分钟。

总结

本文使用 Azure PowerShell 提供的接口实现了创建、移除及恢复 Azure SQL Database Active Geo-Replication 的操作。虽然看上去 PowerShell 脚本还挺多的 (主要是参数多),但涉及到的核心接口只有三个:New-AzureRmSqlDatabaseSecondary,Remove-AzureRmSqlDatabaseSecondary 和 Set-AzureRmSqlDatabaseSecondary。实际操作中的很多细节都未涉及,希望本文能起到抛砖引玉的作用。

 

相关阅读:

最全的Windows Azure学习教程汇总

Azure Blob Storage 基本用法 -- Azure Storage 之 Blob

Azure Queue Storage 基本用法 -- Azure Storage 之 Queue

Azure File Storage 基本用法 -- Azure Storage 之 File

Azure Table storage 基本用法 -- Azure Storage 之 Table

 

时间: 2024-10-25 14:54:55

PowerShell 操作 Azure SQL Active Geo-Replication 实战的相关文章

迁移 SQL Server 数据库到 Azure SQL 实战

最近有个维护的项目需要把 SQL Server 2012 的数据库迁移到 Azure SQL 上去,迁移过程可谓一波三折,故在此分享这次迁移中碰到的点点滴滴,希望对朋友们有所帮助. Azure SQL 的版本 Azure SQL Database 是微软提供的 SQL 服务(PaaS).最新的版本叫 Azure SQL Database V12,其实微软还是通过 SQL Server 2014 来提供数据库服务:   上图中第一个数据库服务器是本地安装的 SQL Server 2014,第二个和

Windows Azure SQL数据库的那些优势

Windows Azure是微软公司的云基础架构平台,如今,云计算已经普遍运用到各个方面,因此它也成为了微软公司整体战略的一个主要部分,并且作为Windows Azure SQL 数据库(前身叫做SQL Azure),Windows Azure的发展出了不少力. 微软公司对Azure是起于厚望的,尤其是对Windows Azure SQL数据库(为简单起见,下文将简称SQL Azure),它出现的意义不只是在云服务中提供数据库支持,更是为了创建支持PB级"大数据"乃至一切规模数据量的基

Windows Azure SQL Reporting开发的最佳做法

编者注:这篇博客文章来自Windows Azure SQL Reporting 项目经理David Magar. 尽管人们倾向于采用一个现有的Reporting Services项目,并且把它放置到云上,你确实不应该这样做.在本地服务器运行良好的报表部署到SQL Reporting报告服务器也许没有本地服务器上同样的性能. 很幸运,3个简单的修改就可以产生更快的运行报告.这篇博客文章将详细讲述每一个修改. 最佳做法#1: 重新配置 ReportViewer 控件 如果你在ASP.Net页或者Wi

SQL SERVER Transactional Replication中添加新表如何不初始化整个快照

原文:SQL SERVER Transactional Replication中添加新表如何不初始化整个快照 在SQL SERVER的复制(Replication)中,有可能出现由于业务需求变更,需要新增一张表或一些表到已有的复制(发布订阅)当中,这种需求应该是很正常,也很常见的.但是在已有的复制(发布订阅)当中增加新表/文章,往往需要将整个快照重新初始化,这样做虽然简单,但是往往在实际应用中会出现一些问题,例如,发布订阅的表比较多,数据量比较大,那么重新初始化快照往往需要很长一段时间,影响系统

C# 对数据库的备份和恢复操作,Sql语句实现

  ///   /// 对数据库的备份和恢复操作,Sql语句实现 ///   /// 实现备份或恢复的Sql语句 /// 该操作是否为备份操作,是为true否,为false private void BakReductSql(string cmdText,bool isBak,string dbname) { string conString=DataBase.dbConnection.sqlNoDBNameConnect(); SqlConnection conn3 = new SqlConn

在azure的active directory中注册一个程序

问题描述 在azure的active directory中注册一个程序 你好,我在active directory中添加了一个程序,在CONFIGURE的最后"Permissions to other applications"是不能选择office365的应用,上面没列出来提供选择. 1.我这个账号是有office365功能的,上面也有试用的licence的. 2.开始是有office365的应用提供选择的,后来我测试删除了,就再也不会出来了. 3.点击"Add Appli

通过Windows Azure SQL数据库防火墙规则控制数据库访问

今天的文章来自于我们用户体验团队的技术作家Kumar Vivek.这篇文章对Windows http://www.aliyun.com/zixun/aggregation/13357.html">Azure SQL数据库中新推出的数据库级防火墙规则进行了简要概括. Windows Azure SQL数据库防火墙能够阻止他人对你SQL数据库的访问,以助你保护数据.你能够指定防火墙规则,如限定允许访问的IP地址范围,来控制对数据库的访问.然而,这些规则定义在服务器层级,允许被授权的终端访问你的

azure-本地SQL想迁移到Azure SQL

问题描述 本地SQL想迁移到Azure SQL 有个问题想咨询下,我这有个本地SQL想迁移到Azure SQL,又不想服务有中断,用什么方式呢! 解决方案 你好, 数据从SQL Server迁移到Azure SQL有很多不同的方式,比较方便的方式可以通过使用SQL Server Management Studio(SSMS) 2012 及以上版本中的功能来进行迁移. 参见下图(右键想要迁移的数据库,选择task),这些方法都不会中断服务. 关于本地SQL的迁移到Azure SQL, 楼主可以参阅

如何解决Microsoft Azure SQL选型

近日,微软发布了一个指南,该指南可以很好的指导用户在Windows Azure虚拟机环境中,选择出Windows Azure SQL Database和SQLServer两者之一.这篇文章深入细致描述了把需要考虑的场景和决策点在Azure虚拟机上选择使用SQL Server服务器托管还是使用Azure的原生SQL数据库.各种图表.曲线图以及列表所提供做战略性选择时所需考虑的多维视角,让读者更直观的感受. 这篇文章不仅从"基础设施"和云托管两个层面对SQL Server进行了明确的介绍,