一、先搞懂集群里的“关键裁判”

很多刚接触集群的人,对“见证”这个词会懵,但换个生活化的例子就好理解:假设你和朋友两人组队做项目,当你们意见完全相反时,需要第三方当裁判来决定听谁的,这个裁判就是集群里的“见证”。它的核心作用是帮集群凑出超过一半的票数,避免出现“谁也不服谁”的情况,也就是后面要讲的脑裂场景。 举个具体的例子:如果集群只有2个节点(相当于你和朋友两个人),没有见证的话,两个节点各算1票,一旦都认为自己是正常的主节点,票数就平了,没人能做决定,这就会引发数据混乱。但如果加一个见证,总票数就变成3,只要有2票(超过一半)就能确定主节点,完美解决平票问题。

1.1 仲裁见证到底是什么?

很多人会把“仲裁见证”和普通见证混淆,其实仲裁见证是见证的一大类,常见的有磁盘见证、云见证这两种。它更像“贴身裁判”,直接和集群节点的存储或云服务绑定,投票是实时的。比如磁盘见证,就是给集群单独划一块小磁盘,专门用来当投票的“票箱”,只有和这个磁盘能正常通信的节点,才能拿到这1票,凑成奇数总票数。

1.2 文件共享见证和仲裁见证的区别

文件共享见证是另一类独立的见证,更像“远程公证员”。它不需要专属的磁盘,而是依赖一个所有集群节点都能访问的网络共享目录,相当于在小区便利店放了一个登记本,所有节点都能去这里“签字投票”。 两者的核心差异可以用一个场景对比:你在客厅放一个投票箱(仲裁见证),只有在客厅的人能投票,且票不会被篡改;你在小区便利店放登记本(文件共享见证),所有人都能去签字,哪怕你不在家,只要能到便利店就能投,灵活性更高,但要是便利店关门了,就没人能签字了。

二、脑裂场景下,两种见证的自动恢复

2.1 先明白啥是脑裂

脑裂是集群的“致命bug”:原本一个完整的集群,因为网络或节点故障,分成了两个互不连通的“小集群”,各自都认为自己是正常的主集群,同时在处理业务。比如两个节点的集群,网线不小心断了,节点A和B都以为对方挂了,各自启动服务,这时候如果没有见证,两个节点会同时往同一个数据库写数据,最后导致数据混乱,甚至业务瘫痪。 简单说:脑裂就是“一个集群,两个老大,各干各的”。

2.2 两种见证的自动恢复对比

下面结合具体的配置示例,看两种见证在脑裂时的反应,技术栈统一用Windows Server 2022 故障转移集群(WSFC),PowerShell 5.1,代码都以管理员身份执行:

# 示例1:配置磁盘仲裁见证(属于仲裁见证的一种)
Import-Module FailoverClusters  # 导入集群管理模块,必须先执行
$clusterName = "MyTwoNodeCluster"  # 替换为你的集群名称
$diskResource = Get-ClusterResource -Cluster $clusterName | Where-Object {$_.ResourceType -eq "Physical Disk"}  # 找到集群里用于见证的物理磁盘
Set-ClusterQuorum -Cluster $clusterName -NodeAndDiskMajority $diskResource.Name  # 设置为节点+磁盘的多数模式,总票数=节点数+1
# 注释:两个节点+1票磁盘,总票数3,只要2票就能胜出,避免平票

# 示例2:配置文件共享见证
$fileSharePath = "\\FileServer\ClusterWitnessDir"  # 替换为你的共享目录路径,需所有集群节点能访问
Set-ClusterQuorum -Cluster $clusterName -NodeAndFileShareMajority $fileSharePath  # 设置为节点+文件共享的多数模式,总票数=节点数+1
# 注释:两个节点+1票文件共享,总票数同样是3,只要2票就能胜出

2.2.1 仲裁见证的脑裂恢复

假设节点A和B断网,各自都认为对方故障:

  • 磁盘见证属于仲裁见证,是和本地存储绑定的,一旦A还能访问见证磁盘,就会拿到磁盘的1票,加上节点A的1票,总共有2票;
  • B因为断网,拿不到磁盘的票,只有1票;
  • 集群会自动让票数少的B停止服务,只有A正常提供业务,避免冲突。 这种方式的优势是投票实时,没有网络延迟,只要磁盘不故障,就不会出问题。

2.2.2 文件共享见证的脑裂恢复

同样的断网场景:

  • 如果A能访问共享目录,B不能,那么A有1(节点)+1(共享)=2票,B只有1票,A胜出;
  • 如果共享目录的网络和A也断了,只有B能访问,那B会拿到共享的票,总票数2,B胜出;
  • 但如果所有节点都连不上共享目录,那见证的票就会消失,集群无法确定主节点,业务会直接中断,这是文件共享见证的最大风险。

三、两种见证的应用场景、优缺点和注意事项

3.1 应用场景

  • 选仲裁见证(磁盘/云):适合2-4个节点的小集群,或者集群和见证资源部署在同一机房,追求稳定性的场景,比如企业内部的核心业务集群;
  • 选文件共享见证:适合跨机房的集群(比如两个机房各2个节点),或者现有资源里已经有可用的文件服务器,不需要额外存储的场景,比如异地容灾的集群。

3.2 优缺点

  • 仲裁见证的优点:投票实时、延迟低,不需要额外的第三方服务器,配置简单;缺点:需要预留专属磁盘,磁盘故障会直接导致集群失去见证,引发脑裂。
  • 文件共享见证的优点:灵活,支持跨机房部署,不需要专属存储,节省资源;缺点:依赖共享目录的网络,网络不稳定会影响投票,文件服务器故障时集群会瘫痪。

3.3 注意事项

  1. 不管选哪种见证,都要确保所有集群节点能正常访问见证资源:比如文件共享要给集群的计算机账号加读取权限,磁盘要给集群服务账号分配权限;
  2. 不要把见证资源放在和核心节点同一个故障域:比如两个节点在A机房,见证就放在B机房,避免机房断电或断网时,见证和节点一起故障;
  3. 定期测试见证可用性:比如模拟见证故障,看集群会不会自动切换主节点,恢复业务,提前发现问题。

四、总结

仲裁见证和文件共享见证的核心逻辑都是“凑多数票避免脑裂”,但两者的依赖和适用场景完全不同:前者是贴身的“专属裁判”,稳定但需要专属资源;后者是灵活的“远程公证员”,适合跨环境的集群,但依赖外部资源。脑裂是集群的大忌,选择时要根据你的集群规模、部署位置、现有资源来定,小集群追求稳定就选仲裁见证,跨环境集群就选文件共享见证,这样才能保障业务的高可用性。