《Azure SQL Database Active Geo-Replication简介》一文中,咱们比较全面的介绍了 Azure SQL Database Active Geo-Replication 的主要特色和优点。接下来咱们将从自动化的角度,介绍如何经过 PowerShell 在项目中实现 Active Geo-Replication 操做。html
文章来源:葡萄城产品技术社区sql
MS 专门为管理 Azure 写了一套 PowerShell 组件称为 Azure PowerShell,咱们就是要使用这套组件中提供的接口,来操做 Active Geo-Replication。遗憾的是,这套组件不会被 Windows 默认安装,因此请参考 MSDN 上的说明先安装 Azure PowerShell。不喜欢读 MSDN 的同窗能够参考笔者博文《使用 PowerShell 自动化 CloudServices 发布》中,关于 “安装 powershell 的 azure module”小节,会简洁一些。shell
操做 Azure 中的任何资源都须要进行身份认证,因此第一步须要在 PowerShell 中登陆 Azure,而且选择正确的 Azure subscription。数据库
登陆 Azure 的命令:服务器
Login-AzureRmAccount
请按照提示输入您的帐号和密码。spa
而后选择当前的 subscription:.net
Select-AzureRmSubscription -SubscriptionId xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Select-AzureRmSubscription 命令的使用场景是:当您有多个 subscription 时,须要经过设置当前 subscription 的方式,告诉 PowerShell 命令到底操做的是哪些资源。固然,若是您只有一个 subscription 的话,就不须要执行这个命令。cdn
下面进入正题!假设咱们有一个叫 blogdb 的数据库,它运行在数据库服务器 blogtestsvr 上, 这个数据库服务器被部署在 East Asia (东亚),咱们打算为 blogdb 建立一个从数据库,从数据库所运行的数据库服务器 blogtestsvr2 部署在 Central US (美国中部)。blogtestsvr 和 blogtestsvr2 都属于同一个资源组 sqltest。若是您还不是太了解主从数据库或是 Active Geo-Replication 的概念,请先移步这里。server
1. New-AzureRmSqlDatabaseSecondary命令htm
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. 注意事项
在成功的为主数据库建立了从数据库后,让咱们一块儿来看看一些须要注意的事项。
知道了怎么建立从数据库,固然也要可以把它移除,下面咱们使用 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 命令的执行也分为两个阶段:
本文使用 Azure PowerShell 提供的接口实现了建立、移除及恢复 Azure SQL Database Active Geo-Replication 的操做。虽然看上去 PowerShell 脚本还挺多的 (主要是参数多),但涉及到的核心接口只有三个:New-AzureRmSqlDatabaseSecondary,Remove-AzureRmSqlDatabaseSecondary 和 Set-AzureRmSqlDatabaseSecondary。实际操做中的不少细节都未涉及,但愿本文能起到抛砖引玉的做用。