管理SQL Server AlwaysOn(1)——基础维护

本文属于管理SQL Server AlwaysOn系列文章

前言:

前面系列已经介绍了SQL Server AlwaysOn的知识点、安装演示及注意事项等。但是这并不是终点,更多的反而是起点。就像不能生了孩子就不管,你还得养(管理)。作为DBA,更多的工作内容恰恰就是管理AlwaysOn。所以这里单独列出一个系列介绍SQL Server AlwaysOn的管理。本系列沿用从0开始部署基础的AlwaysOn 的环境。

在这个系列中,准备讲述以下内容:

  1. 管理SQL Server AlwaysOn(1)——基础维护
  2. 管理SQL Server AlwaysOn(2)——添加、移除次要副本
  3. 管理SQL Server AlwaysOn(3)——可用性组备份
  4. 管理SQL Server AlwaysOn(4)——常见异常
  5. 管理SQL Server AlwaysOn(5)——常规监控(1)——常规监控
  6. 管理SQL Server AlwaysOn(5)——常规监控(2)——扩展事件监控
  7. 管理SQL Server AlwaysOn(6)——警告
  8. 管理SQL Server AlwaysOn(7)——待补充

注:由于工作所需,可能不会按顺序更新。

基础维护:

针对基础维护,本文大概介绍以下内容:

  • 群集维护,包括补丁升级。
  • 管理可用性组,包括如何进行同步/异步节点的故障转移。
  • 添加多个侦听器
  • 其他管理内容

下面我门开始进行介绍和演示,如果读者未有实操环境,可以参考开篇中提到的文章,先自行搭建,如果已有环境,建议先进行虚拟机的备份,因为有些操作具有大杀伤性。

群集管理:

本系列的主题是SQL Server AlwaysOn,而仅仅因为AlwaysOn需要建立在Windows Server Failover Cluster(WSFC,简称Windows群集)上,所以我们有必要把底层环境稍微介绍一下,但是不会做深入介绍,毕竟每个知识点学深了,都不是小事。

首先我们必须清楚,群集安装完毕并不等于工作结束,从安装完毕开始,我们的管理和维护工作才真正开始。这一部分会介绍:

  • 节点之间移动实例
  • 滚动补丁升级

节点间移动实例:

在日常运维当中,除了防止意外断电之外,其中一个部署高可用技术的好处就是可以明显降低维护过程中导致的停机时间。特别是对操作系统或者SQL Server进行打补丁操作。如果你的环境是双节点群集(假设为A,B,A为主节点/活动节点。B为被动节点), 那么在打补丁等可能引发重启等操作时,就要进行节点移动。步骤如下:

  1. 对被动节点B进行补丁升级。(A主B被)
  2. 第一步成功后,把主节点A的实例故障转移(Failover)到被动节点B。此时原主动节点A和原被动节点B的角色就对调了。(A被B主)
  3. 对原主动节点A,现被动节点进行补丁升级。成功之后,操作已经算完成了。(A被B主)

然后根据具体需要再决定是否要把活动实例(现在的B)切换回去A节点。这个没有强制要求,但是需要考虑实际情况。比如实例的可用性是第一优先级并远大于其他一切要求,那么可能不适合再Failover回去,因为这个操作会引发短暂的服务不可用。又或者因为B节点是为了提供性能而配置的高水平服务器,那么通过这种打补丁或者Failover操作把服务移到更新,更强的节点之后,就没必要Failover回去原有节点,当然,WSFC建议使用等配的软硬件配置,所以在此之后,最后把A也提升到同等配置。

为了完成上面的步骤,可以用两种方法,一种是图形操作,另外一种是PowerShell命令。

图形操作:

首先登录到节点1,打开故障转移群集管理器,对Windows的Cluster角色名进行右键→【移动】→【选择节点】:

此时会显示【移动群集角色】对话框:

在上图中可以选择想移动的节点,由于目前是双节点,所以实际上是没有其他选择,点击确定之后,节点开始移动,移动完毕之后会看到:

PowerShell操作:

在权限足够的前提下,使用Move-ClusterGroup cmdlet可以实现角色的故障转移。比如下面命令可以把Node1的角色Failover到Node2:

Move-ClusterGroup -Name "WSFC群集角色名" -Node 目标节点名

注意WSFC群集角色名是有双引号的。演示环境下的样子是下图所示,注意我的环境现在是Node1为所有者,我希望转到Node2,所以在PowerShell里面我需要写上“目标节点名”:

执行后,不用刷新都可以看到当前的群集所有者已经换成了Node2:

再次啰嗦一下,本文是以基础维护为目标,并关注在SQL Server AlwaysOn上,所以对WSFC的真正专业的维护不在讨论和演示范畴。

滚动补丁升级:

上面演示的是双节点群集,在大型生产环境中,超过2节点的群集很普遍,此时如果要对SQL Server进行升级,就需要考虑滚动补丁更新。我们假设现在SQL Server运行在不同的大版本或者小版本上,可能会导致数据损坏,所以需要通过打补丁进行修复。下面是操作步骤:

  1. 列出角色中的所有节点的可能拥有者。
  2. 选择其中50%个节点,然后移除掉这些可能拥有者。如图,因为这里只有两节点,所以就只能勾选掉其中一个,比如Node1(因为当前活动节点在Node2,所以不能勾选掉Node2)。同样可以用PowerShell命令实现:执行之后可以看到结果是一样的
    Get-ClusterResource "AlwaysOn角色名(本例中为SQLAG)" | Set-ClusterOwnerNode -Owners 保留的节点(本例中为Node2保留,即Node1去掉)

    PowerShell执行演示:

  3. 当50%的可能拥有者节点移除后,就可以对勾选掉的节点进行补丁升级。在校验这些节点已经成功之后,把他们再次加回去。
  4. 把角色的节点移到其中一个已经升级成功的节点上。重复上面的操作,从可能的拥有者中移除未升级的节点→升级这些节点→验证→加回角色的可能的拥有者列表中。

管理可用性组:

对于AlwaysOn可用性组,当完成配置之后,也要开始进行管理操作。包括可用性组的故障转移、监控和在特殊情况下添加额外的侦听器。下面将逐个讨论:

故障转移:

当次要副本被配置为同步提交模式(synchronous commit mode)并设置了自动故障转移之后,当主副本遇到满足故障转移条件时,可用性组就会自动移到冗余副本上。在某些情况下,需要手动故障转移。常见情况有:DR测试、计划性维护操作等。

同步故障转移:

如果需要故障转移一个同步提交模式下的副本,可以在SSMS中,按下图方式在主副本上执行:

注意下面这个图,如果你是在次要副本中打开的故障转移界面,是没有这一步的

然后点击下一步和完成。如无报错,则可用性组转移成功。但是这并不代表完事了,经常容易忘记的事情就是:检查新主副本上的作业、账号、程序是否正确配置并正常运行,这一点很重要,因为本人过去的环境中,未对次要副本配置日志备份,而前面章节介绍过,AlwaysOn必须使用完整恢复模式,在这种模式下,生产环境的数据库日志文件很可能会异常暴增导致磁盘空间不足从而停止服务。在以前一开始使用AlwaysOn的时候就遇到过这种情况,也有些情况是账号配置问题、配套依赖程序未同步等因素导致转移成功但系统无法正常运行。所以要有足够的检查!

同样我们可以使用T-SQL来执行,比如我们现在需要从Node2切到Node1

注意:在次要副本中执行下面命令:

ALTER AVAILABILITY GROUP 可用性组名 FAILOVER ;
GO 

执行完之后刷新一下就可以看到副本从“(辅助)”变成“(主要)”

异步故障转移:

当可用性组是异步提交模式时,从技术上来说,可以像同步提交模式一样进行Failover操作,但是你需要“强制”进行Failover,同时必须接受可能的数据丢失风险。可以使用下面命令进行Failover:

注意需要在次要副本上执行:

--Run in the secondary replica
ALTER AVAILABILITY GROUP SQLAG FORCE_FAILOVER_ALLOW_DATA_LOSS ; 

除了在次要副本上执行之外,为了运行成功,你的群集还必须有仲裁,否则,需要强制把群集先联机,才能强制AlwaysOn可用性组联机。为了尽可能避免数据丢失,可以 在可能的条件下进行计划性Failover,下面是具体的操作步骤:

  1. 禁用各种登录账号,但要确保进行操作的账号不被禁用。
  2. 修改副本模式为同步提交模式。
  3. Failover
  4. 把提交模式改回异步提交模式。
  5. 启用第一步中禁用的账号。

同步非包含对象:

不管使用哪种Failover模式,在实例级别都有一些对象是不包含在可用性组中,所以需要进行同步。最直接的方式是使用SSIS包周期性同步实例间的对象。下面是一些需要同步的内容:

  • Logins
  • Credentials(证书)
  • SQL Server Agent Jobs
  • 自定义错误信息
  • Linked Servers
  • 服务器级别的事件警告
  • Master库中的存储过程
  • 服务器级别的触发器
  • 密钥相关内容

添加多个侦听器:

常规情况下,每个可用性组只有一个单独的可用性组侦听器(Listener),但是在某些极端情况下可能会对相同的可用性组创建多个侦听器。比如一些历史遗留问题。此时可能需要创建一个额外的侦听器用于硬编码。

但是,通过图形化界面(SSMS)、T-SQL甚至PowerShell都不能创建第二个侦听器,必须使用Failover Cluster Manager来实现。我们在我们的“SQLAG”角色内创建一个客户端接入点(Client Access Point)资源。按下面步骤:

添加一个新的客户端访问点名,并输入新的IP地址:

可以看到加了之后SQLAG角色的状态是“部分运行中”,并且看到下面的新加客户端访问点是“脱机”状态:

此时我们右键新的客户端访问点并选择属性:

在【依赖关系】中,选择【OR】,并添加原有的侦听器名(本例是192.168.1.123):

然后右键“AGListener2”,选择联机即可。一旦配置完成之后,客户端可以使用任意一个侦听器名进行访问:

其他管理事项:

除了前面提到的之外,还有一些其他事项会把数据库变成不可用,其中最明显的就是不能把数据库变成single-user或者read-only模式。因为这个会导致应用程序的安全状态改变。这也是为什么在Failover一节中,需要禁用登录账号的原因。而且如果你必须变更数据库的单用户模式,那么首先需要移除可用性组。

可以使用下面命令从可用性组中移除:

--次要副本上执行
ALTER DATABASE TestAG SET HADR OFF ; 

执行完毕后,次要副本从“已同步”变成了“正在还原”

这个时候又有可能需要把数据库恢复回去,这时候可以执行下面语句:

--注意SET后面,HADR意味着HA和DR,从名字可以折射出AlwaysOn是包含了HA和DR
ALTER DATABASE TESTAG SET HADR RESUME;
GO

另外一个重要的注意事项是数据库及其日志文件的部署。这些文件必须存在每个副本中相同的路径下。

总结:

关于SQL Server AlwaysOn的基础基础维护就先到这里,如有后续补充会尽可能显式添加进来或者必要时候另起一文。下一节介绍:管理SQL Server AlwaysOn(2)——添加、移除次要副本

时间: 2024-08-02 02:38:39

管理SQL Server AlwaysOn(1)——基础维护的相关文章

管理SQL Server AlwaysOn(5)——常规监控(1)——常规监控

本文属于管理SQL Server AlwaysOn 系列文章 前言: 前面几节提到了如何对AlwaysOn做常规管理,这一节和接下来的一节专门对"监控"进行解释和演示.管理和监控这两个词在很多时候是混淆的,但是我们大概也可以区分出来,比如我做备份,算管理,对错误.异常进行响应这也是管理,但是对错误.异常的捕获和通知DBA这就是监控了,而且监控有时候是不需要进行干预的,比如我监控磁盘空间,当空间充足的时候,我可以不管. 在日常的DBA工作中,我本人对监控的重视程度远大于所谓的管理,因为有

SQL Server AlwaysON从入门到进阶(1)——何为AlwaysON?

本文属于SQL Server AlwaysON从入门到进阶系列文章 本文原文出自Stairway to AlwaysOn系列文章.根据工作需要在学习过程中顺带翻译以供参考.系列文章包含: SQL Server AlwaysON从入门到进阶(1)--何为AlwaysON? SQL Server AlwaysON从入门到进阶(2)--存储 SQL Server AlwaysON从入门到进阶(3)--基础架构 SQL Server AlwaysON从入门到进阶(4)--分析和部署Windows Ser

翻译:到AlwaysOn级别1的楼梯:什么是“SQL Server AlwaysOn”?

到AlwaysOn级别1的楼梯:什么是"SQL Server AlwaysOn"?佩里·惠特尔,2016/02/24(首次出版:2014 /09/24)该系列这篇文章是楼梯系列的一部分:通往AlwaysOn的楼梯AlwaysOn是一套复杂的技术,经常被误解.在这个阶梯中,您将了解AlwaysOn技术,它们如何适应高可用性堆栈,以及如何充分利用它们.欢迎来到"SQL Server AlwaysOn"系列的第一个级别.在这一级别的文章中,我们将发现技术"Alw

在权限受限制的AD域环境中部署SQL Server AlwaysOn高可用性

最近在给一个客户部署基于微软TFS的软件生命周期管理平台时,客户要求数据库层实现高可用性,减少因数据库服务器故障影响软件开发进展. 客户现有域是一台搭建在Windows Server 2008上的级别为Windows 2008的企业域.为了符合客户企业域的安全规定,需要在部署数据库高可用性期间使用最低权限,即只赋予操作账户(tfsadmin)在AD目录中用于ALM的组织单元的完全权限.在综合考虑和调用的基础上,我们提出了以下方案,并附上了操作说明. 方案: 1. 在AD域中为ALM创建用于保存计

SQL Server AlwaysOn日志收缩

当前好多项目都在逐渐的采用SQL Server AlwaysOn架构来作为数据库的高可用集群技术. 并且当前微软的大多数产品.Citrix XenDesktop.XenApp.PVS.XenMobile也都支持该技术,AlwaysOn兼具了Mirror和Cluster的双重优势,既能实现唯一的主机名.IP地址访问,由不需要像集群那样必须使用共享存储,而是可以像Mirror一样,将数据保存为多个副本,同时AlwaysOn还具有多读多写的架构,可以非常有效地提高数据库性能,单个AlwaysOn组最大

翻译(十五)-----通往1级楼梯:什么是“SQL Server AlwaysOn”

通往1级楼梯:什么是“SQL Server AlwaysOn” Perry Whittle,2016 / 02 / 24(首次公布:2014 / 09 / 24) 该系列 本文是系列的一部分:楼梯楼梯AlwaysOn AlwaysOn是一套复杂的技术,常被误解.在这楼梯你将学到的AlwaysOn技术,他们如何适应高可用的堆栈,如何利用好他们. 欢迎来到第一级阶梯”系列中的SQL Server AlwaysOn”.在这1级的文章,我们会发现技术“在”.“虚拟服务器”(FCI)和“Windows服务

SQL Server AlwaysON 同步模式的疑似陷阱

SQL Server 2012 推出的最重要的功能之一Alwayson,是一个集之前Cluster和Mirror于一体的新功能,即解决了Cluster依赖共享存储的问题,又解决了镜像不能实时读以及转移后连接串需要添加转移IP的问题,看起来的确很实用. 而且Alwayson多副本的功能为实现读写分离提供了可能,试想一下,当主副本压力比较大的时候,是否可以将读操作引向辅助副本呢?答案一般来讲是肯定的,请注意,是一般! Alwayson有两个同步模式,同步和异步,即然是同步,理所当然的我认为他是实时的

从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)

从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 网上的 AlwaysOn可以说是非常的多,也可以说是非常的千篇一律,而且很多都是搭建非常顺利的,没有坑的,难道搭建 AlwaysOn真的可以这麽顺利吗?????? 由于公司使用的是最新的Windows Server 2012 R2,网上用的都是Windows Server 2008 R2 ,2012 R2和2008 R2在故障转移集群界面菜单和AD 服务管理工具 已经有较大变化,有一些步骤跟Windows Server 20

SQL Server AlwaysON从入门到进阶(2)——存储

本文属于SQL Server AlwaysON从入门到进阶系列文章 前言: 本节讲解关于SQL Server 存储方面的内容,相对于其他小节而言这节比较短.本节会提供一些关于使用群集或者非群集系统过程中对存储的利用建议.当然,重点还是集中在对于一个标准的AlwaysOn可用组配置过程中,对存储的选择和配置上面. AlwaysOn的部署首先建立在一个Windows Server Failover Cluster(WSFC)上.并且每个服务器通常有一个独立的SQL Server实例.另外,每个服务器