iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >通过测试SQL Server数据库数据和日志驱动器增强AlwaysOn故障转移策略
  • 738
分享到

通过测试SQL Server数据库数据和日志驱动器增强AlwaysOn故障转移策略

2024-04-02 19:04:59 738人浏览 薄情痞子
摘要

通过测试SQL Server数据库数据和日志驱动器增强AlwaysOn故障转移策略译者注:该脚本适合在SQL Server 2012\2014中配置为自动故障转移的副本中部署。前言在sql Server 2

通过测试SQL Server数据库数据和日志驱动器增强AlwaysOn故障转移策略


译者注:

该脚本适合在SQL Server 2012\2014中配置为自动故障转移的副本中部署。


前言

sql Server 2012和2014,在自动故障转移模式的AlwaysOn可用性组不会在数据库级别错误触发故障转移。例如:如果用户数据库的数据或日志文件失败,或者用户数据库损坏并导致状态从在线变为其他状态(如置疑),数据库群集不会自动故障转移可用性组。

在SQL Server 2016,我们在创建和修改可用性组命令的部分添加了一个额外的配置设置叫做DB_FaiLOVER,如果在主副本的一个数据处于非在线状态将触发故障转移。意思是,如果AG配置为自动故障转移,并且处于同步状态的数据库遇到失败,数据库级别的错误将会触发自动故障转移。

添加这个脚本的方法,使你你可以再遇到磁盘故障时让群集执行自动故障转移。该VB脚本在脚本中指定的路径执行文件写入。如果写入失败,意味着磁盘失败并且脚本失败。失败的脚本导致群集中的脚本资源失败。如果在脚本资源上的依赖恰当配置,这将导致由于磁盘/VB脚本失败的群集触发故障转移。

因为这个脚本不需要连接或以任何方式利用SQL Server,你可以针对SQL Server 2012\2014\2016部署。但在2016中的收益不如配置启用参数DB_FAILOVER,因为一个数据库级别的失败导致自动故障转移。


翻译自:

https://blogs.msdn.microsoft.com/alwaysonpro/2016/01/14/enhance-alwayson-failover-policy-to-test-sql-server-database-data-and-log-drives/


在SQL Server 2012和2014,AlwaysOn健康诊断以多种方式检测SQL Server进程的健康。然而,没有在AlwaysOn可用性组上的数据库的可访问性或存活性的健康检测。如果承载可用性组数据库或日志文件的磁盘丢失,AlwaysOn健康诊断不会检测该事件,并且应用程序运行时错误访问数据库失败。丢失驱动器或访问承载可用性数据库数据和日志文件的驱动器错误,会影响访问你的生产数据的访问。

正如可用性组的自动故障转移的弹性故障转移策略所描述:

“损坏的数据库和置疑的数据库不会在任何失败条件级别上检测。因此,一个数据库损坏或置疑(是否由于硬件失败、数据故障或其他问题)绝不会触发自动故障转移。”

注意:SQL Server 2016增强数据库健康检测的AlwaysOn健康诊断。如果你的AlwaysOn可用性组开启数据库健康检测,并且数据库状态转化为非ONLINE状态(sys.databases.state_desc),整个可用性组将自动故障转移。可参考MSDN关于“CREATE AVAILABILITY GROUP”的“DB_FAILOVER”部分。

你可以通过检测磁盘健康来增强数据库的可用性。添加一个普通的脚本资源到你的可用性组资源组,做基本的针对承载可用性组数据库数据和日志文件的驱动器的读或写测试。以下描述如何添加一个普通脚本资源作为一个可用性组资源的依赖,通过甲苯的磁盘健康检查来增强AlwaysOn健康检测。


使用一个普通脚本资源来做基本的SQL Server数据和日志驱动器健康检查

这是一个高级别的描述关于部署普通的脚本资源来检测可用性组数据库驱动器健康。

添加一个普通的脚本集群资源到可用性组资源组。让可用性组资源依赖于普通资源脚本。这样,如果脚本资源报告IsAlive失败,windows群集会尝试重启或者故障转移可用性组资源。

普通脚本集群资源IsAlive测试在特定的数据驱动器位置创建一个文本文件、在特定的日志驱动器位置创建一个文本文件。如果文件存在,脚本将会覆盖它。

该脚本打包为GenericScript_SQLIsAlive.zip,包括:

Sqlisalive.vbs

这个普通的脚本用Visual Basic脚本编写,并部署Windows群集IsAlive。

Add_SQLIsAliveScript.ps1

这个Powershell脚本添加普通脚本资源到你的可用性组资源组,并设置可用组依赖于你的普通脚本资源。

Readme.txt

部署普通脚本资源的按步骤的指南,和如何测试脚本的额外指南。


部署普通脚本资源

I. 配置普通脚本sqlisalive.vbs。

数据和日志驱动器路径:

当前,普通脚本配置为测试一下驱动器和路径:c:\temp\data和c:\temp\log。对于测试目的,在每个副本的本地驱动器上创建这些路径(主副本和自动故障转移伙伴辅助副本)。之后,你可以修改它们为适当的你的数据库数据和日志文件位于的驱动器和路径。

DataDriveFile=”c:\temp\data\ScriptFileData.txt”
LogDriveFile=”c:\temp\log\ScriptFileLog.txt”


II. 配置和执行PowerShell脚本来部署普通脚本到你的可用性组。

注意:这个普通脚本只部署每60秒运行的IsAlive。

1. 确保你的可用性组有两个副本配置为自动故障转移。

2. 拷贝普通脚本文件到相同的本地存储路径,像配置为自动故障转移的副本的所有服务器的“C:\temp\sqlisalive.vbs”。

3. 创建用于健康检查的路径,C:\temp\data和C:\temp\log。

4. Add_SQLIsAliveScript.ps1脚本添加普通脚本资源到你的可用性组,并在普通脚本资源上添加一个依赖到你的可用性组资源。在Add_SQLIsAliveScript.ps1,修改如下变量:

设置$ag为你的可用性组名称。

设置$listener为你的可用性组监听器名称。如果你的可用性组没有监听器,设置$listener为””。

设置$scriptfilepath为你的sqlisalive.vbs脚本的路径和文件名。

5. 在承载主副本的服务器上,运行PowerShell脚本Add_SQLIsAliveScript.ps1去添加普通脚本资源到你的可用性组资源组。

通过测试SQL Server数据库数据和日志驱动器增强AlwaysOn故障转移策略

6. 打开故障转移群集管理器,并检查可用性组资源组来确认添加了普通脚本资源到可用性组资源组。普通脚本应该出现在资源页面,并在可用性组资源组为在线状态。

通过测试SQL Server数据库数据和日志驱动器增强AlwaysOn故障转移策略

7. 确认可用性组资源中在普通脚本资源上创建了依赖。

通过测试SQL Server数据库数据和日志驱动器增强AlwaysOn故障转移策略

注意:

额外的readme.txt包含如何测试脚本资源来确认它可以故障转移到你的可用性组资源的指南。


通过普通脚本资源诊断失败检测

对承载主副本的节点生成群集日志,并搜索“Data Drive Create File”或“Log Drive Create File”,以定位普通脚本资源IsAlive成功或失败的报告:

00001b04.00002924::2015/12/07-17:16:41.798 INFO  [RES] Generic Script <sqlisalive>: Entering IsAlive
00001b04.00002924::2015/12/07-17:16:41.801 INFO  [RES] Generic Script <sqlisalive>: Data Drive Create File Succeeded
00001b04.00002924::2015/12/07-17:16:41.801 INFO  [RES] Generic Script <sqlisalive>: Log Drive Create File Succeeded

或者例如,你设置\Data目录为只读:

00001b04.00002924::2015/12/07-17:17:41.801 INFO  [RES] Generic Script <sqlisalive>: Entering IsAlive
00001b04.00002924::2015/12/07-17:17:41.804 INFO  [RES] Generic Script <sqlisalive>: Data Drive Create File Succeeded
00001b04.00002924::2015/12/07-17:17:41.804 INFO  [RES] Generic Script <sqlisalive>: Data Drive Create File Failed
00001b04.00002924::2015/12/07-17:17:41.804 INFO  [RES] Generic Script <sqlisalive>: Permission denied
00001b04.00002924::2015/12/07-17:17:41.804 ERR   [RES] Generic Script <sqlisalive>: 'IsAlive' script entry point returned FALSE.'
00001b04.00002924::2015/12/07-17:17:41.804 INFO  [RES] Generic Script <sqlisalive>: Return value of 'IsAlive' script entry point caused HRESULT to be set to 0x00000001.
00001b04.00002298::2015/12/07-17:17:41.804 WARN  [RHS] Resource sqlisalive IsAlive has indicated failure.

您可能感兴趣的文档:

--结束END--

本文标题: 通过测试SQL Server数据库数据和日志驱动器增强AlwaysOn故障转移策略

本文链接: https://www.lsjlt.com/news/38605.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • redis怎么用于高并发
    redis通过以下优化适用于高并发场景:1. 内存存储,消除磁盘i/o延迟;2. 针对高并发优化的数据结构;3. 主从复制提供冗余和可伸缩性;4. rdb和aof持久化机制确保数据安全;...
    99+
    2024-05-21
    redis 并发访问
  • redis版本号怎么查询
    查询 redis 版本号的方法有:直接使用 info 命令,返回服务器信息,其中包括版本号。在 linux 系统中,使用 redis-cli -v 命令查看版本号。查看配置文件 /etc...
    99+
    2024-05-21
    linux redis
  • redis怎么用分布锁
    如何使用 redis 实现分布式锁?获取锁:使用 setnx 设置唯一键为当前进程 id,若不存在则成功获取锁。设置过期时间:使用 expire 设置锁的过期时间,以防进程意外崩溃。执行...
    99+
    2024-05-21
    python redis 网络问题
  • redis incr后怎么获取值
    redis 中 incr 命令后如何获取值 开门见山:incr 命令执行后,可以通过 GET 命令获取自增后的值。 详细解答: incr 命令用于为指定键的值自增。执行 incr 命令后...
    99+
    2024-05-21
    redis
  • redis雪崩怎么解决
    redis雪崩解决方案 什么是Redis雪崩? Redis雪崩是指在高并发场景下,大量Redis键同时失效,导致瞬间访问量激增,压垮Redis服务器。 解决方案: 1. 互斥锁/分布式锁...
    99+
    2024-05-21
    redis 并发访问 键值对
  • redis怎么用单线程模型
    redis 单线程模型 Redis 是一个开源的内存数据库,它以其高性能和灵活性而闻名。一个独特的特性是它采用单线程模型。 单线程模型的优势 单线程模型的主要优势在于: 高吞吐量:由...
    99+
    2024-05-21
    redis
  • redis怎么启动和关闭
    redis启动和关闭指南 Redis是一个内存数据库,广泛用于缓存、消息传递和持久性存储等应用场景。本文将详细介绍如何启动和关闭Redis。 启动Redis 1. 确保安装Redis 在...
    99+
    2024-05-21
    redis 数据丢失
  • redis哨兵怎么重启
    以下是重启 redis 哨兵的步骤:停止哨兵进程:redis-sentinel stop删除哨兵 pid 文件:rm /var/run/redis-sentinel.pid启动哨兵进程:...
    99+
    2024-05-21
    redis
  • redis怎么和mysql同步
    redis 与 mysql 同步 如何将 Redis 与 MySQL 同步? 实现 Redis 与 MySQL 之间的同步,有以下几种方法: 1. 使用代理工具 Redis Senti...
    99+
    2024-05-21
    mysql redis
  • redis缓存失效怎么办
    redis 缓存失效解决方案 什么是 Redis 缓存失效? Redis 缓存失效是指缓存中存储的数据不再有效或过期。这会导致应用程序访问陈旧的数据,影响数据的一致性和可靠性。 Redi...
    99+
    2024-05-21
    redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作