第十三章 镜像架构和规划 - 防止自动故障转移
防止自动故障转移
如果希望防止镜像在任何情况下自动进行故障转移,最好的方法是为单个故障转移成员配置一个或多个 DR
异步(请参阅异步镜像成员)。 DR
异步永远不会自动接管,但可以轻松提升为故障转移成员,包括在需要时提升为主要成员。
要在维护活动期间暂时防止自动故障转移到备份,可以暂时将备份降级为 DR
异步或使用 nofailover
选项;两者都在计划中断程序中进行了描述,它提供了在不中断镜像操作的情况下对故障转移成员执行维护的程序。
如果需要应用程序在自动故障转移过程的各个点进行干预,请参阅使用 ^ZMIRROR
例程。
镜像通信
网络配置注意事项
在配置两个故障转移成员之间的网络时,应考虑以下通用网络配置项:
- 可靠性——为了获得最大的可靠性,应该为两个故障转移成员之间的镜像通信配置一个隔离的(私有)网络(如镜像体系结构和网络配置示例所示)。此外,该网络应该以冗余方式配置(具有故障转移绑定端口的多个
nic
、多个冗余交换机,等等)。 - 带宽——必须有足够的带宽来传输应用程序生成的大量日志数据。
- 延迟——故障转移成员之间的网络延迟是影响应用程序性能的一个重要因素。
镜像同步作为主故障转移成员上的日志写周期的一部分发生。重要的是允许日志写入周期,因此,镜像同步过程尽快完成。此过程中的任何延迟都可能导致性能下降。
网络时延的考虑
故障转移成员之间的网络延迟没有硬性上限。延迟增加的影响因应用程序而异。如果故障切换成员之间的往返时间与硬盘写服务时间相似,则没有影响。然而,当应用程序必须等待数据变得持久(有时称为日志同步)时,往返时间可能是一个问题。在非镜像环境中,等待数据变得持久包括同步磁盘写入日志数据;在具有活动备份的镜像环境中,它还包括故障转移成员之间的网络往返。许多应用程序从不等待数据变得持久,而其他应用程序则经常等待。
应用程序等待的机制包括:
- 事务以同步提交模式提交(非默认)。
- 将
%SYS.Journal.System
的Sync()
方法。 - 分布式缓存集群数据服务器在响应应用程序服务器上运行的应用程序的常见请求之前等待持久性(作为应用程序同步操作的一部分,例如锁定和
$increment
)。 - 业务服务
SyncCommit
功能(默认)
往返时间(即使相对较大)是否会对应用程序响应时间或吞吐量产生负面影响取决于上述情况在应用程序中发生的频率,以及应用程序是串行还是并行处理此类活动。
当镜像成员之间的网络延迟成为问题时,可以通过微调控制 SO_SNDBUF
和 SO_RCVBUF
最大值的操作系统 TCP
参数来减少它,允许主要和备份/异步建立发送和接收缓冲区,分别具有适当的大小,最多 16 MB
。所需的缓冲区大小可以通过将所需的峰值带宽(请参阅传入日志传输速率)乘以往返时间来计算,并将协议开销和未来增长的乘积大致加倍。例如,假设以下条件适用:
- 主镜像站点和
DR
站点之间的流量在峰值时为每秒60 MB
的日志数据, - 压缩用于将所需的带宽减少到日志速率的 33% 左右。
- 往返时间为
50
毫秒(典型距离为 1000 英里)。
在这种情况下,60 MB * 0.05 * .33 * 2 = 2 MB
最小缓冲区大小。几乎没有理由将缓冲区大小保持得尽可能小,因此在这种情况下可以毫无顾虑地尝试更大的最小值。