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

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

  1. PowerShell 操作 Azure SQL Active Geo-Replication

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

  2. PowerShell 操作 Azure Blob Storage

    本文假设已经存在了一个 Azure Storage Account,需要进行文件的上传,下载,复制,删除等操作.为了方便查看 PowerShell 代码执行的结果,本文使用了 MS 发布的一个 Azu ...

  3. 用SSMS连接Azure Sql Database 与连接本地库的一些操作区别

    背景 我们知道Azure Sql Database 可以降低运维成本.是一种Pass模式,有资源弹性设置,可以自由调整资源自动对应不同业务高峰(当然也可以降低费用成本),也方便项目后期的资源扩展,以及 ...

  4. 将 Azure SQL 内数据下载到本地,满足企业的「数据收集」

    嫌长不看版 本文介绍了通过复制和导出两个操作,将 Azure SQL 数据库中的内容转移至其他位置(例如本地环境)的具体做法.借此可以帮助用户在 Azure 中运行数据库的同时,在本地或指定的其他位置 ...

  5. 试用 Azure Sql 数据库

    我们的12月试用账号的免费服务里有一个Azure Sql服务,最近正好自己做一个小工具需要一个数据库,正好可以把它当测试库顺便体验一把Azure Sql. 概述 Azure SQL 数据库 Azure ...

  6. Azure SQL Database Active Geo-Replication简介

    笔者在<迁移SQL Server 数据库到 Azure SQL 实战>一文中,介绍了如何把一个本地版的 SQL Server 数据库迁移到 Azure SQL Database.迁移虽然顺 ...

  7. Azure SQL Database Active Geo-Replication 简介

    对于数据库的维护来说,备份工作可谓是重中之重.MS Azure 当然也提供了很完善的数据库备份功能.但是在动手创建备份计划前请思考一下备份工作的真实目的.当然首先要保证数据的安全,一般来说定时创建数据 ...

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

    最近有个维护的项目需要把 SQL Server 2012 的数据库迁移到 Azure SQL 上去,迁移过程可谓一波三折,故在此分享这次迁移中碰到的点点滴滴,希望对朋友们有所帮助. 文章来源:葡萄城产 ...

  9. 迁移 SQL Server 到 Azure SQL 实战

    最近有个维护的项目需要把 SQL Server 2012 的数据库迁移到 Azure SQL 上去.主要是因为租用的主机到期,而运营商停止了主机租赁业务,看来向云端的迁移是大势所趋啊!经过一番折腾最终 ...

随机推荐

  1. ASP.NET 5 RC1 升级 ASP.NET Core 1.0 RC2 记录

    升级文档: Migrating from DNX to .NET Core Migrating from ASP.NET 5 RC1 to ASP.NET Core 1.0 RC2 Migrating ...

  2. [原] Cgroup CPU, Blkio 测试

    关于Cgroup的简单测试 [toc] 简单介绍Cgroup (如果对cgroup熟悉可以忽略) 一般情况下,cgroup挂载到一个虚拟文件目录,然后可以通过文件系统的API对其操作. ># m ...

  3. 【JS基础】正则表达式

    正则表达式的() [] {}有不同的意思. () 是为了提取匹配的字符串.表达式中有几个()就有几个相应的匹配字符串. (\s*)表示连续空格的字符串. []是定义匹配的字符范围.比如 [a-zA-Z ...

  4. Three.JS 从世界坐标系转换到屏幕坐标系

    var projector = new THREE.Projector(); var world_vector = new THREE.Vector3(0,0,1); var vector = pro ...

  5. Web开发安全之文件上传安全

    很长一段时间像我这种菜鸡搞一个网站第一时间反应就是找上传,找上传.借此机会把文件上传的安全问题总结一下. 首先看一下DVWA给出的Impossible级别的完整代码: <?php if( iss ...

  6. SQL中字符串拼接

    1. 概述 在SQL语句中经常需要进行字符串拼接,以sqlserver,oracle,mysql三种数据库为例,因为这三种数据库具有代表性. sqlserver: select '123'+'456' ...

  7. 第12章 Linux系统管理

    1. 进程管理 1.1 进程查看 (1)进程简介 进程是正在执行的一个程序或命令(如ls命令也是一个进程),每个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源. (2)进程管理的作用 ...

  8. angularJS(5)

    angularJS(5) 一,数据循环:特别要注意作用域 使用ng-repeat指令. <div ng-app="myApp" ng-controller="myC ...

  9. 微软收购Xamarin,你怎么看?

    今天的最大新闻就是微软收购热门初创企业Xamarin,从网上的反馈大部分都是积极的,也有担心微软在把Xamarin移动开发技术整合进VS的同时,还很有可能废掉MONO的GUI客户端能力只保留.net ...

  10. 客服小妹是如何泡到手的——C#定时提醒·语音录制·语音播放·文件转录Demo源码——倾情奉献!

    一.需求提出 客服小妹跟我说,每天要统计新加好友数,得先记下昨天的数目,然后查看今天的数目,还要相减,打字,记录——好麻烦! 又说,客户多的时候,忙起这头忘了那头,文字记录备忘又太费劲! 我说,赐你一 ...