Windows Cluster 投票权问题

2023-11-14

在日常运维中,如果你的 Windows Cluster 需要升级、重启、意外宕机、网络中断等,你知道该怎么操作才能保证集群的可用性吗?按什么样的顺序怎样关闭或启动集群节点吗?怎么快速恢复你的集群呢?

接下来,我们就以实践操作来解决这几个疑问。首先要知道,Windows Server 2012 R2 提供了动态仲裁功能,以保证集群(投票权)为奇数节点。现在,假设一个Windows Server 故障转移集群 (WSFC) 有三个节点A、B、C(A为当前主节点),我们根据不同的见证(即仲裁)类型做以下测试。

多数节点

  1. 关闭节点A,节点上的所有资源都故障转移到节点B,由于动态仲裁作用投票为0。(数字为投票权)

  2. 关闭节点B,节点上的所有资源都故障转移到节点C。

  3. 关闭节点C,所有节点都已关闭,集群即关闭,无人可访问。

图片

此时,当我们启动节点A时,发现集群报错并未恢复。当我们继续启动节点B时,集群仍然报错并未恢复。两个节点都在尝试连接到节点 C,即使我们有两个节点(A 和 B)并且配置为 Node Majority,集群也没有恢复。最后我们启动节点 C,集群则恢复,集群 Paxos Tag 的Epoch则发生改变并记录下来(集群算法请看上一篇文章)。

为什么会发生这种情况呢?

当一个节点A关闭时,它在集群注册表中的投票变为 0。当一个节点去启动集群服务时,它会检查它的投票。如果为0,则只会加入一个Cluster。如果为1,则首先尝试加入一个Cluster,如果无法连接到该Cluster加入,则自己恢复Cluster。当然,如果节点C永远无法恢复,启动节点A或B集群服务时,使用 ForceQuorum (FQ)开关来强制恢复集群。恢复后,其他节点都可以不考虑顺序加入了。

net start clussvc /forcequorum

磁盘见证

与上面的测试一样,按顺序关闭节点A、B、C,由于动态仲裁的作用,集群会保留为奇数投票节点。结果如下图。

图片

此时首先恢复节点B或C,集群都能正常恢复,因为磁盘仲裁存储有集群配置信息。你可以通过命令查看节点投票权 (Get-Cluster).WitnessDynamicWeight,因为它有投票权,所以集群恢复。虽然磁盘存储集群数据,但是节点A无投票权,所以无法恢复集群。

文件共享见证

与上面的测试一样,按顺序关闭节点A、B、C,由于动态仲裁的作用,集群会保留为奇数投票节点。结果如下图。

图片

在之前的磁盘见证情况下,我们可以启动节点B、C并恢复集群,这是因为节点有投票权,并且磁盘存储着群集数据库副本。但文件共享见证不同,它不持有集群数据库的副本。当剩下C节点的时候,C节点的集群数据是最新的。即使B、C、文件共享见证都有投票权,但节点A和B都没有新集群数据,这是因为文件共享见证不存储集群数据。若启动了节点A和B,集群都是无法正常恢复的。正常恢复集群只能先启动节点C(或者直到启动到节点C)。当然,启动节点A或B时,也可以使用 ForceQuorum (FQ) 开关来强制恢复集群。若使用ForceQuorum启动集群,当节点C启动时,发现已有了集群,则加入到集群中。

当我们在集群中启动一个节点以恢复集群时,节点将比较它的 paxos 与见证磁盘上的 paxos。如果节点 paxos 早于在磁盘见证上的数据,则它将最新副本下载到节点并使用它。如果本地节点较晚,它会将集群数据上传到磁盘见证。所以,了解了这些启动问题,当集群出现意外的时候,你就可以知道如何处理以快速恢复了。这对于安装有 SQL Server 高可用的集群非常重要。

附加说明:Windows Server 2016 故障转移群集遵循相同的设计,同时也引入了云见证。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows Cluster 投票权问题 的相关文章

  • PDO SQLSRV 和 PDO MySQL 在获取 int 或 float 时返回字符串

    当您获取时 PDO MS SQL Server 和 PDO MySQL 都会返回一个字符串数组 即使列的 SQL 类型本应是数字类型 例如 int 或 float 我设法解决了这个问题 但我想了解为什么它们一开始就这样设计 是不是因为PDO
  • 如何让 LinqToSql 将“索引提示”传递给 sql server?

    由于我们不能相信我们的客户会更新 sql server 中的索引统计信息等 因此我们过去不得不使用索引提示 http www sql server performance com tips hints general p1 aspx 由于我
  • Kerberos 双跳

    我们遇到了臭名昭著的 Kerberos 双跳问题 这是一个全新的域 是从以前使用模拟和委派的另一个提供商迁移而来的 我们已将操作系统升级到最新的 SQL 服务器 2017 WPF 应用程序 使用域凭据 gt Web 服务 IIS 10 上的
  • sql server 按组排名

    问题看似简单 但我却无法理解 这是针对 sql 服务器的 what I have in a table What I need as a output cksum id cksum id 2162514679 204 2162514679
  • 有没有办法以编程方式轻松更改多个 SSIS 包上的服务器名称?

    作为发布周期的一部分 我们正在创建多个 SSIS 包来迁移大型数据库 我们最终可能会得到大约 5 10 个 SSIS 包 由于我们有 4 个环境 开发 QA 登台 生产等 是否有一种有效的方法可以在每个 SSIS 包经历不同的服务器环境时更
  • 探查器模板可以迁移到较新版本的 SQL Profiler 吗?

    是否可以将 Profiler 模板迁移到较新版本的 SQL Server 就我而言 我想将 SQL 2008 模板带到 2012 年 我尝试过 1 直接文件复制和 2 导出 导入 在这两种情况下 旧模板都会运行 但无法修改 修改后会出现以下
  • 在 C#.NET 应用程序中使用 SQL Server 时间数据类型?

    如何使用 SQLtimeSQL Server 2008 中 C NET 中引入的数据类型 我一直在努力让它发挥作用 但没有成功 这是一个MSDN 文章 http msdn microsoft com en us library bb6751
  • 临时表是线程安全的吗?

    我正在使用 SQL Server 2000 它的许多存储过程广泛使用临时表 数据库的流量很大 我担心创建和删除临时表的线程安全性 假设我有一个存储过程 它创建了一些临时表 它甚至可以将临时表连接到其他临时表等 并且还可以说两个用户同时执行存
  • SQL Server 2014 安装中缺少 SQL Server Integration Services

    我正在尝试使用 Integration Services 安装 SQL Server 2014 Here https www microsoft com en US download details aspx id 42299是我以前用工具
  • 如何在NiFi中映射流文件中的列数据?

    我有 csv 文件 其结构如下 Alfreds Centro Ernst Island Bacchus Germany Mexico Austria UK Canada 01 02 03 04 05 现在我必须将这些数据移入数据库 如下所示
  • 可以获取SQL Server中当前执行的存储过程的行号吗?

    几年前 我在 Sybase Delphi 环境中工作 使用 BDE 连接到数据库服务器 我们有一个 Delphi 小应用程序 给定当前正在执行的存储过程的名称 它可以告诉您当前正在执行该存储过程的哪一行 这对于调试似乎挂起的存储过程非常有用
  • 如何获得顶部带有千位分隔符的数字?

    SELECT count FROM table A 假设结果是8689 我怎样才能将它转换为8 689在 SQL Server 上 尝试这样 select replace convert varchar convert Money coun
  • 在 SQL Server 中,如果主键是 GUID,如何按插入顺序对表行进行排序?

    我开始在主键中使用 GUID 而不是自动增量整数 然而 在开发过程中 我习惯于查询 从 SQL Management Studio 或 Visual Studio 数据库 以查看我的应用程序刚刚插入的记录 并且我对无法按主键 desc 顺序
  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤
  • 普通表还是全局临时表?

    我和另一位开发人员正在讨论哪种类型的表更适合我们的任务 它基本上是一个我们将在一天结束时截断的缓存 就我个人而言 我认为没有任何理由为此使用除普通表之外的任何内容 但他想使用全局临时表 其中之一有什么优点吗 使用普通表tempdb如果这只是
  • 如何连接sql中具有相同值但在同一个表的不同列中的行?

    我正在尝试合并来自不同列的具有相同值的数据 并且仅停止显示没有连接值的记录 例如我有 ID TaxDecNo PrevTaxDec 1 5374 11135 2 9864 7394 3 11135 21784 4 7394 6872 5 2
  • SQL:如何在按部分分组的查询中使用子查询?

    如何在按部分分组的查询中使用子查询 我使用 SQL Server 2008 R2 和 Delphi 2010 我收到此错误 Cannot perform an aggregate function on an expression cont
  • SQL 中基于下一条记录和上一条记录的复杂排序

    这是一个后续问题根据 SQL 中的下一条记录和上一条记录进行排序 https stackoverflow com questions 30477803 sorting based on next and previous records i
  • Sequelize.js 中的自定义或覆盖连接

    我需要使用创建自定义连接条件Sequelize js http sequelizejs com使用 MSSQL 具体来说 我需要加入TableB基于一个COALESCE中的列的值TableA and TableB并最终得到这样的连接条件 L
  • 在VB6中等待进程退出后恢复窗口

    我在win7 64位操作系统中使用VB6 此应用程序是从 xp 迁移的 Me WindowState vbMinimized WaitForProcess Shell launchapp vbNormalFocus Me WindowSta

随机推荐

  • 输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非法字符。

    消息 6522 级别 16 状态 2 第 2 行 在执行用户定义例程或聚合 AESDecrypt 期间出现 NET Framework 错误 System FormatException 输入的不是有效的 Base 64 字符串 因为它包含
  • 多方安全计算-隐私信息检索(PIR)

    隐私信息检索 Private Information Retrieval PIR 技术是由Chor B等提出解决保护用户查询隐私的方案 主要目的是 保证查询用户在向服务器上的数据库提交查询请求 在用户查询隐私信息不被泄漏的条件下完成查询 即
  • Java之缓冲流、转换流、节点流、包装流

    文章目录 一 BufferedRead 带有缓冲的字符输入流 1 节点流和包装流 2 readline 读一行字符 二 转换流 InputStreamReader与OutputStreamWriter 三 BufferedWrite 带有缓
  • 编译原理实验二:Bison

    编译原理实验二 Bison 实验要求 1 了解Bision基础知识 如何将文法产生式转换为Bison语句 2 阅读 src common SyntaxTree c 对应头文件 include SyntaxTree h 理解分析树生成的过程
  • 你对C++头文件了解多少?——盘点C++的常用头文件

    相信大家在编写C C 程序时 最必不可少的部分之一就是头文件了 然而 由于不同的函数所对应的头文件各不相同 就导致一部分人 尤其是我 写代码的时候常常遇到忘记所需头文件的窘境 为了解决这个问题 今天我特意搜集了C 中常用的头文件及其包含的库
  • FICO F.27 Customer statement 打印

    需求 定制化打印 替换标准的F 27打印 类似于采购订单的打印 但是略有不同 查阅资料之后步骤如下 T code F 27 is SAP standard program to produce customer vendor corresp
  • 数据结构简述,时间、空间复杂度,学习网站推荐

    目录 IT 学习路线 相关坚韧大厚书 相关有趣 耐看书或视频 数据结构与算法学习网站推荐 刷题 时间 空间复杂度 数据结构简述 基本概念 数据结构与算法简述和CS综述整理 本文非基础的教程 本文会列出大量学习和参考网站 老惯例 一个文章是一
  • 2022 PostgreSQL 数据库生态大会:拓数派资深工程师 王淏舟将发表主题演讲

    由中国开源软件推进联盟PostgreSQL分会 中科院软件所 CSDN联合举办的 中国PostgreSQL数据库生态大会 将于2月17 19日召开 本届大会以 协同共进 为主题 邀请专家学者 厂商和用户代表 就PostgreSQL在行业和区
  • Vue3开发教程(一、学习Vue前需要了解的内容)

    前言 本文是笔者学习vue前端技术过程的总结 其中包括vue开发需要了解的相关技术如 node ES6 TypeScript vite ElementUI 以vue作为主线来介绍相关技术 最后通过一个典型的前端应用来体会vue的开发 希望笔
  • 最长子序列 JAVA 2019国赛试题F

    试题 F 最长子序列 时间限制 1 0s 内存限制 512 0MB 本题总分 15 分 问题描述 我们称一个字符串 S 包含字符串 T 是指 T 是 S 的一个子序列 即可以从 字符串 S 中抽出若干个字符 它们按原来的顺序组合成一个新的字
  • [SQL]yyyymmdd类型与yyyy-mm-dd日期类型的相互转换

    法1 from unixtime unix timestamp 20171205转成2017 12 05 select from unixtime unix timestamp 20171205 yyyymmdd yyyy mm dd fr
  • 树结构,二叉树,hash树

    目录 1 树的概念 2 二叉树基本操作 3 hash树 1 树的概念 1 树的特性 1 一棵树中的任意两个结点有且仅有唯一的一条路径连通 2 一棵树如果有n个结点 则它一定有n 1条边 3 在一棵树中加一条边将会构成一个回路 2 二叉树 1
  • hibernate注解反向生成表结构

    直接上源码 package com gxy pojo model import java util Date import javax persistence Column import javax persistence Entity i
  • EVE部署

    EVE NG 镜像导入 IOL 镜像位置 opt unetlab addons iol bin qemu 镜像位置 opt unetlab addons qemu 设备图标位置 opt unetlab html images icons E
  • Mac :谷歌浏览器 NET::ERR_CERT_INVALID 此证书已被撤消。网络错误和攻击行为通常是暂时的,因此,此网页稍后可能会恢复正常

    1 美图 2 背景 今天突然访问一个https 1x 5x x xx 网站 然后无法访问 谷歌浏览器访问地址报错如下 XXX 通常会使用加密技术来保护您的信息 Google Chrome 此次尝试连接到 XXX 时 此网站发回了异常的错误凭
  • 安卓使用SQLite数据库

    目录 理论 SQLite构成 SQLite的整体结构图 SQLite数据类型 创建安卓应用 基于Empty Activity模板创建安卓应用CreateDeleteDB 将背景图片拷贝到drawable目录 打开字符串资源文件 string
  • 利用DSP实现ADC采集数据以及DAC输出

    1 解决方案 必要的公式 文字等 在课外实验中 我们选择利用ADC对输入的信号进行采集 然后利用串口控制DAC的输出 实现通过串口控制DAC输出采集到的波形的功能 在本实验中 是通过判断串口发送的数据来实现对相应DAC的控制的 为了方便 我
  • 有些运行符不能重载为友元函数,它们是:=,(),[]和->。

    原因 有人说是因为 C 规定赋值运算符 只能重载为类的非静态成员函数 而不可以重载为类的友元函数 不能重载为类的静态成员应该比较容易理解 因为静态成员函数是属于整个类的 不是属于某个对象的 它只能去操作类静态数据成员 而赋值运算符 是基于对
  • Calendar类获取月份时月份加一而星期数减一

    Java中Calendar MONTH返回的数值其实是当前月距离第一个月有多少个月份的数值 JANUARY在Java中返回 0 所以我们需要 1 Java 中Calendar DAY OF WEEK中返回的是一周中的第几天 所以他会受到 第
  • Windows Cluster 投票权问题

    在日常运维中 如果你的 Windows Cluster 需要升级 重启 意外宕机 网络中断等 你知道该怎么操作才能保证集群的可用性吗 按什么样的顺序怎样关闭或启动集群节点吗 怎么快速恢复你的集群呢 接下来 我们就以实践操作来解决这几个疑问