PowerShell 操作 Azure SQL Active Geo-Replication 实战

简介: 《Azure SQL Database Active Geo-Replication简介》一文中,我们比较全面的介绍了 Azure SQL Database 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

 

相关文章
|
2月前
|
SQL 数据库 数据安全/隐私保护
【操作宝典】SQL巨擘:掌握SQL Server Management的终极秘籍!
【操作宝典】SQL巨擘:掌握SQL Server Management的终极秘籍!
61 0
|
5月前
|
SQL BI 数据库
达梦(DM) SQL日期操作及分析函数
讲述DM 数据库中如何实现各种日期相关的运算以及如何利用分析函数 lead() over() 进行范围问题的处理
|
4月前
|
SQL 分布式计算 数据库
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
85 0
|
3月前
|
SQL Oracle 关系型数据库
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
87 0
|
30天前
|
SQL 安全 数据库
第三章用sql语句操作数据
第三章用sql语句操作数据
10 0
|
1月前
|
XML 运维 监控
PowerShell实战:Get-Content命令使用详解
【2月更文挑战第12篇】 Get-Content 主要作用是获取路径指定位置的项(文本类文件)的内容,例如文件中的文本或函数的内容。 对于文件,内容一次读取一行,并返回对象的集合,每个对象表示一行内容。
|
1月前
|
运维 数据库
Powershell实战:测试网络请求两个命令介绍
【2月更文挑战第11篇】 Test-Connection 命令将 Internet 控制消息协议 (ICMP) 回显请求数据包或 ping 发送给一台或多台远程计算机并返回回显响应回复。 我们可以使用该命令确定是否可通过 IP 网络ping通特定的计算机。
PowerShell实战:Get-Item命令使用详解
【2月更文挑战第10篇】Get-Item 命令使用频率非常高,主要是获取位于指定位置的项。 一般搭配使用通配符 (*) 来获取项目的包含的项目。如果不使用*的话只是获取当前项的内容。
PowerShell实战:文件操作相关命令笔记
【2月更文挑战第9篇】cmdlet New-Item 将创建新项并设置其值。 可创建的项类型取决于项的位置。 例如,在文件系统 New-Item 中创建文件和文件夹。 在注册表中, New-Item 创建注册表项和条目。