热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PowerShell操作AzureSQLActiveGeoReplication实战

PowerShell操作AzureSQLActiveGeo-Replication实战:》一文中,我们比较全面的介绍了AzureSQLDatabaseActiveGeo-Repli
》一文中,我们比较全面的介绍了 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。实际操作中的很多细节都未涉及,希望本文能起到抛砖引玉的作用。

PowerShell 操作 Azure SQL Active Geo-Replication 实战


推荐阅读
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 本文介绍了在使用Laravel和sqlsrv连接到SQL Server 2016时,如何在插入查询中使用输出子句,并返回所需的值。同时讨论了使用CreatedOn字段返回最近创建的行的解决方法以及使用Eloquent模型创建后,值正确插入数据库但没有返回uniqueidentifier字段的问题。最后给出了一个示例代码。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
author-avatar
手机用户2502878113
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有