WSFC仲裁模型优化方案选型

WSFC仲裁模型优化方案选型


生产环境某系统数据库高可用环境描述

生产环境某系统部署为主、备、灾备三节点SQL Server 2014 AlwaysOn AG,操作系统为Windows Server 2012 Standard,环境基于域(Domain)和Windows故障转移集群(WSFC)。无见证磁盘,采用多数节点仲裁。主、备都有投票权,灾备无投票权。默认启用了动态仲裁,默认动态仲裁随机挑选一个节点去掉投票权。生产环境当前投票在备节点。

第1部分:测试环境资源描述

Windows故障转移群集、AlwaysOn AG资源和角色描述:

原环境仲裁见证为无见证,新增共享磁盘仅附加到TEST-GS-ZHXT1和TEST-GS-ZHXT2,用于方案4的配置磁盘见证。

关注点:

1. 检查WSFC和AG是否能正常对外提供服务。

2. 当前投票的数量和移动情况。

3. 检查投票来不及交换情况(当前投票都为0),执行强制仲裁后WFSC和AG的状态,以及AG是否能成功执行Failover、副本是否能Resume。

第2部分:模拟生产环境账户系统当前配置测试

场景1:备节点宕机
目的:模拟备节点投票权来不及交换的情况下,强制冲裁。
宕机后,投票来不及交换,WSFC崩溃,AG为Resolving状态。

维护操作:

1)?????? 主节点执行强制仲裁
以管理员打开cmd,执行以下命令

?????? net stop clussvc

?????? net stop clussvc /FQ

?????? WSFC能对外提供服务。
在主节点上get-clusternode显示主节点为Up状态、投票为1,灾备节点为Up状态,投票为0,备节点状态为Down状态,投票为0。

2)?????? 检查AG是否能正常运行,或为Resolving状态

AG为Resolving状态

3)?????? 若为Resolving,是否能强制Failover

在主节点,打开实例执行 ALTER AVAILABILITY GROUP testag FORCE_FAILOVER_ALLOW_DATA_LOSS

可强制Failover,AG能对外提供服务

遗留问题:

在执行完以上操作后,当备节点也故障恢复起来

在备节点上get-clusternode显示备节点 为Up状态、投票为1,主、灾备节点为Down状态,投票为0。

备节点没有按预期重新加入到主节点的集群。

需要在备节点执行

net stop clussvc

net start clussvc

重启集群备节点

WSFC恢复,AG辅助副本可手工resume

第3部分:当前仲裁模型可优化方案测试

方案1修改群集参数值LowerQuorumPriorityNodeID为备节点ID

目的:让当前投票移动到主节点。

场景1:备节点宕机

备节点宕机后:

??? WSFC正常,AG主副本正常,灾备节点辅助副本正常。

备节点辅助副本Down,AG能正常对外提供服务。

备节点恢复后:

??? WSFC正常,AG主副本正常,灾备节点辅助副本正常。

如果备节点恢复时间短,备节点数据库自动恢复;

如果备节点恢复时间较长,备节点辅助副本状态为未同步,数据库无法访问,手工resume数据库后,数据库可以访问;

如果备节点恢复时间巨长,理论上主节点早前日志会被清理,日志不足,无法用于备节点同步,需要重建备节点AG副本。(还未遇到)。

场景2:灾备节点宕机

现象同场景1

场景3:主节点宕机

主节点宕机后:

投票来不及交换,WSFC崩溃,AG为Resolving状态。

备节点执行强制仲裁,WSFC恢复。

备节点AG强制Failover到备节点后,AG主副本正常,灾备节点需要手工resume数据库后,数据库可以访问。

主节点恢复后:

测试4次,有2种不同结果:

??????? a)主节点未加入备节点的集群,重启集群主节点clussvc服务后正常。

b)主节点自动加入了备节点的集群。

方案2 3个节点都有投票权,修改群集参数值LowerQuorumPriorityNodeID为灾备节点ID

目的:当任意1节点故障时,能有1个投票保持WSFC正常。

场景1:备节点宕机

备节点宕机后:

WSFC、AG均正常

备节点恢复后:

WSFC投票恢复正常,AG正常。

场景2:灾备节点宕机

现象同场景1

场景3:主节点宕机

主节点宕机后:

WSFC正常,AG为Resolving状态,在备节点执行强制Failover,AG可对外提供服务,手工resume灾备节点数据库。

主节点恢复后:

WSFC投票恢复正常,数据库手工resume后,与新的主节点数据同步,可访问。

场景4:主节点和备节点同时宕机

主节点和备节点同时宕机后:

??? WSFC崩溃,在灾备节点执行强制仲裁,WSFC能提供服务。

??? AG为Resolving状态,执行强制Failover,AG能对外提供服务。

主节点和备节点恢复后:

WSFC投票恢复正常,数据库手工resume后,与新的主节点数据同步,可访问。

场景5:备节点和灾备节点同时宕机

备节点和灾备节点同时宕机后:

??? WSFC崩溃,在主节点执行强制仲裁,WSFC能提供服务。

??? AG为Resolving状态,执行强制Failover,AG能对外提供服务。

备节点和灾备节点恢复后:

WSFC投票恢复正常,数据库手工resume后,与新的主节点数据同步,可访问。

方案3增加1个仲裁节点,给予投票权

目的:让当前投票总数为3票,基于节点大多数仲裁。

场景1:备节点宕机

备节点宕机后:

WSFC、AG均正常。

备节点恢复后:

WSFC投票恢复正常,AG正常,备节点数据库手工resume后可访问。

场景2:备节点和灾备节点同时宕机

备节点和灾备节点同时宕机后:

WSFC、AG均正常。

备节点和灾备节点恢复后:

WSFC投票恢复正常,AG正常。

场景3:主节点宕机

主节点宕机后:

??? WSFC正常,AG为Resolving状态,无法提供服务。

备节点AG强制Failover后,可对外提供服务,灾备节点数据库手工resume后,与新的主节点数据同步。

主节点恢复后:

WSFC投票恢复正常,数据库手工resume后,与新的主节点数据同步,可访问。

场景4:主节点和备节点同时宕机

主节点和备节点同时宕机后:

??? WSFC崩溃,在灾备节点执行强制服务,WSFC能提供服务。

??? AG为Resolving状态,执行强制Failover,AG能对外提供服务。

主节点和备节点恢复后:

WSFC投票恢复正常,数据库手工resume后,与新的主节点数据同步,可访问。

方案4增加磁盘见证,附加到主、备节点

目的:基于动态仲裁,磁盘见证利用Windows Server 2012 R2动态见证行为。

说明:

共享磁盘仅附加到主节点和备节点也能配置仲裁见证为磁盘见证;

因为主、备节点各有1票,磁盘见证为保持群集奇数票,也投了1票。

场景1:备节点宕机

备节点宕机后:

WSFC、AG均正常。

备节点恢复后:

WSFC投票恢复正常,AG正常。

场景2:备节点和灾备节点同时宕机

备节点和灾备节点同时宕机后:

WSFC、AG均正常。

备节点和灾备节点恢复后:

WSFC投票恢复正常,AG正常。

场景3:主节点宕机

主节点宕机后:

WSFC正常,AG为Resolving状态,无法提供服务。

备节点AG强制Failover后,可对外提供服务,灾备节点数据库手工resume后,与新的主节点数据同步。

主节点恢复后:

WSFC投票恢复正常,数据库手工resume后,与新的主节点数据同步,可访问。

场景4:主节点和备节点同时宕机

主节点和备节点同时宕机后:

??? WSFC崩溃,在灾备节点执行强制服务,WSFC能提供服务。

??? AG为Resolving状态,执行强制Failover,AG能对外提供服务。

主节点和备节点恢复后:

重新加入了集群,两节点数据库手工resume后,与新的主节点数据同步,可访问。

第4部分:优化方案评估

下表为4种方案各场景的测试情况汇总:

说明:绿色场景不是本次测试重点,是从理论上得出的结论。

在WSFC崩溃的情况下,强制冲裁可提供服务。

在WSFC可提供服务后,AG为Resolving状态下,强制Failover可提供服务。

方案3和方案4能满足备节点、灾备节点中任意一个或同时宕机时WSFC正常、AG正常。

方案3配置简单,用1台虚拟机作为群集节点,给予投票权,参与仲裁。

方案3中,仲裁节点宕机时,即与线上配置一致,此时备节点宕机,也就出现这次2018-3-13日的情况。

进一步优化方案,结合方案1和方案3的优点,在方案3的基础上修改群集参数值LowerQuorumPriorityNodeID为备节点ID。

于是,孕育出了方案5:增加1个仲裁节点,给予投票权,并修改群集参数值LowerQuorumPriorityNodeID为备节点ID

进一步测试,结果如下:

测试表明,前5种场景下,与方案3表现相同。

先仲裁节点宕机,接着备节点宕机的场景下,表现稳定,优于方案3。

结论:建议选择方案5优化线上配置。

启示:

创建WSFC时选择节点的顺序很重要。

WSFC在有投票权的节点中投票发生交换时,会选择节点ID值较大的那一个。

我们应该尽量保持在各种场景下主节点上有投票。那么就要保持主节点的ID值最大。

在创建WSFC的过程中,节点ID是递增的。

根据重要性依次递增,应该将没有投票权的节点先建立集群,再加入有投票权的仲裁节点,再加入有投票权的备节点,最后加入主节点。

(如果创建WSFC时,批量添加节点,那么节点的ID是不可控的。)

优化节点在投票发生交换时的选择优先级。

由于LowerQuorumPriorityNodeID是集群的全局参数,只能设置为某一个节点ID,并不能为多节点设置权重或者说优先级。

应在①的基础上,再去根据需要调整该参数。

针对方案1和方案5,模拟投票节点宕机的不同场景,测试结果如下:

从结果来看,方案5在场景②④⑤下,WSFC正常,AG需要强制Failover,带来的收益是从分钟级别恢复提升到秒级恢复。

经讨论后,选择方案1。

在使用动态仲裁的时候需要考虑到以下两点可能会遇见但容易被忽略的问题

1. 纯粹使用多数节点,动态仲裁调整节点数,当剩下2节点时,有百分之66左右的几率群集可以正常存活至最后一个节点,当被选中投票节点忽然断电宕机,则群集关闭,需要手动强制启动群集。

2. 使用见证加节点投票数,动态仲裁+动态见证,当3剩2场景下,见证忽然失联,见证并不会去掉自身的一票,动态仲裁也并不会自动调整至1票,如果再宕机一个节点,群集将关闭,这时需要手动强制启动一个节点,当其它两个节点恢复时,可以手动切换至多数节点仲裁模型,这样当再次出现3剩2场景下,会自动调整至1票,自动坚持至百分之66左右几率存活到最后一个节点场景,然后由于我们是强制启动的群集,因此即便当见证以后再恢复,强制启动的群集数据库也会盖过见证磁盘的数据库。

原文地址:http://blog.51cto.com/ultrasql/2090199

时间: 2024-11-03 21:57:18

WSFC仲裁模型优化方案选型的相关文章

调度、模型、同步与任务——阿里云大数据数仓建设性能优化方案

摘要:对于阿里云大数据数仓建设性能优化而言,主要可以从调度优化.模型优化.同步优化以及任务优化这四个方面着手.其实,对于性能优化而言,最终还是会归结到"资源"之上,所以资源是否足够,分配是否合理也是我们在进行性能优化时必须考虑的关键所在. 本文将主要围绕以下四个方面进行介绍:调度优化.模型优化.同步优化以及任务优化.对于调度优化而言,将分享任务调度如何进行优化,以及如何看到调度的瓶颈点,以及在初步进行建设和使用数据仓库的任务之后,对于任务如何进行调整来满足业务的时间要求.对于模型优化而

基础入门_Python-模块和包.深入Celery之常用架构/方案选型/必知必会?

简单介绍: 说明: 此模块是一个专注于分布式消息传递的异步任务队列,所谓任务就是消息,消息中的有效载荷中包含要执行的任务需要的全部数据 几大特性: 1. Celery易于使用和维护,且不需要配置文件,默认配置启动时自动写入消息代理. 2. Celery高可用,连接丢失或失败时客户端或消费者会自动重试,并且可通过消息代理的双主/主从模式来提高高可用性 3. Celery快速,单个进程每分钟可处理百万任务,且优化后可保持往返延迟在亚毫秒级别 4. Celery灵活,几乎所有部分都支持扩展或单独使用,

kvm性能优化方案

kvm性能优化方案 kvm性能优化,主要集中在cpu.内存.磁盘.网络,4个方面,当然对于这里面的优化,也是要分场景的,不同的场景其优化方向也是不同的,下面具体聊聊这4个方面的优化细节. cpu 在介绍cpu之前,必须要讲清楚numa的概念,建议先参考如下两篇文章 CPU Topology 玩转cpu-topology 查看cpu信息脚本: #!/bin/bash # Simple print cpu topology # Author: kodango function get_nr_proc

web前端优化方案(Yahoo)

目录(分7类,共35条): [内容]尽量减少HTTP请求数    [服务器]使用CDN(Content Delivery Network)    [服务器]添上Expires或者Cache-Control HTTP头    [服务器]Gzip组件    [css]把样式表放在顶部    [js]把脚本放在底部    [css]避免使用CSS表达式    [js, css]把JavaScript和CSS放到外面    [内容]减少DNS查找    [js, css]压缩JavaScript和CSS

MongoDB报表实例方案选型

MongoDB报表实例方案选型 背景介绍 在我们的生产环境使用的是复制集,为了将数据库服务器的业务压力分摊,我们将数据库拆分到了不同的复制集上运行. 我们在MongoDB复制集上运行应用程序,有时候有报表需求,常规用途是获得用户行为的分析,还有其他商业定制指标数据:有搜索引擎的查询需求,使用Solr从oplog.rs获取增量数据更新产品信息的索引. 这些报表查询和搜索引擎的查询需求,尽量不能影响到线上的业务正常运行,因此不能直接在生产数据库上运行报表.经过开发和运维讨论之后,在项目成立之初,计划

提升网站转化率的四步优化方案

优化一个网站最关键和棘手的是,如何提高整体的转化率,这是任何营销策略里最重要的方面之一,而提升网站转化率是网站综合运营实力的结果.今天,我就分享一个简单有效的四步优化方案模型,可以用于建立一个成功的转化优化方案. 何为转化率?转化率是指访问某一网站访客中,转化的访客占全部访客的比例.这里所说的“转化”,可以是从单纯的访问您网站转变成为您网站会员(即注册会员)的行为,可以是您网站的会员从零购买经历转变成为有购买经历的会员的行为,可以是从单纯的网站访客转变成为参加您网站活动的访客的行为,可以是您的潜

10款常见MySQL高可用方案选型解读

原文地址 作者介绍 王松磊,现任职于UCloud,从事MySQL数据库内核研发工作.主要负责UCloud云数据库udb的内核故障排查工作以及数据库新特性的研发工作. 一.概述 我们在考虑MySQL数据库的高可用架构时,主要考虑如下几方面: 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断. 用作备份.只读副本等功能的非主节点的数据应该和主节点的数据实时或者最终保持一致. 当业务发生数据库切换时,切换前后的数据库内容应当一致

Unity学习-优化_卡顿原因定位以及优化方案

除了Unity的一些组件优化技巧之外,更多的细节处于代码层面上 最近学习优化,看到一篇文章,写的很详细,从底层原理到我们 的实际处理,都有一些非常好的建议,可以推荐给小伙伴们看看 https://www.jianshu.com/p/289de89a6609 ===========如何定位程序的哪一个环节产生了过大的开销============ 使用Uinty的Profiler工具,可以比较精准快速的定位程序的哪一个位置产生了大开销 首先在build setting里面勾选Autoconnect

大型php网站性能和并发访问优化方案

网站性能优化对于大型网站来说非常重要,一个网站的访问打开速度影响着用户体验度,网站访问速度慢会造成高跳出率,小网站很好解决,那对于大型网站由于栏目多,图片和图像都比较庞大,那该怎么进行整体性能优化呢?本文为你提供一份大型php网站性能和并发访问优化方案. 一.大型网站性能提高策略: 大型网站,比如门户网站,在面对大量用户访问.高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器.高性能的数据库.高效率的编程语言.还有高性能的Web容器.这几个解决思路在一定程度上意味着更大的投入.