配置多子网 Always On 可用性组和故障转移群集实例

适用于: SQL Server - Linux

如果 Always On 可用性组 (AG) 或故障转移群集实例 (FCI) 跨越多个站点,则通常每个站点都有其自己的网络,这通常意味着每个站点都有自己的 IP 地址。

例如,站点 A 的地址以 1 192.168.1.<x> 开头,站点 B 的地址以 192.168.2.<x> 开头,其中 <x> 是服务器独有的 IP 地址部分。 如果网络层中不存在某种类型的路由,则这些服务器无法相互通信。

可以使用两种方法来处理这种情况:

  • 设置一个网络,以桥接两个不同的子网(称为 VLAN)
  • 配置子网之间的路由

基于 VLAN 的解决方案

先决条件:对于基于 VLAN 的解决方案,每个参与 AG 或 FCI 的服务器都需要两个网卡 (NIC) 才能实现良好的可用性(双重端口 NIC 是物理服务器上的单一故障点),以便可以在其本机子网和 VLAN 中分配 IP 地址。 此要求是对其他网络需求的补充,如 iSCSI 需要自己的网络。

在 VLAN 上为 AG 或 FCI 创建 IP 地址。 在以下示例中,VLAN 具有 192.168.3.<x> 的子网,因此为 AG 或 FCI 创建的 IP 地址为 192.168.3.104。 因为 AG 或 FCI 分配有一个 IP 地址,所以无需配置其他内容。

关系图显示如何为多个子网配置 VLAN。

具有 Pacemaker 的配置

在 Windows 中,Windows Server 故障转移群集 (WSFC) 本机支持多个子网,并通过 IP 地址上的 OR 依赖项来处理多个 IP 地址。 在 Linux 上,没有 OR 依赖项,但可以通过 Pacemaker 以本机方式实现适当的多子网,但不能使用正常的 Pacemaker 命令行。 相反,需要修改群集信息库 (CIB)。 CIB 是具有 Pacemaker 配置的 XML 文件。

关系图显示如何为多个子网配置 Pacemaker。

更新 CIB

  1. 导出 CIB。

    sudo pcs cluster cib <filename>
    

    其中 <filename> 是要调用 CIB 的名称。

  2. 编辑生成的文件。 查找 <resources> 部分。 你会看到为 AG 或 FCI 创建的各种资源。 查找与 IP 地址相关联的资源。 添加 <instance_attributes> 部分,其中包含第二个 IP 地址的信息,该 IP 地址位于现有 IP 地址的之前或之后,但在 <operations> 前。 与以下语法类似:

    <instance_attributes id="<NameForAttribute>">
        <nvpair id="<NameForIP>" name="ip" value="<IPAddress>"/>
    </instance_attributes>
    

    其中,<NameForAttribute> 是此属性的唯一名称,<NameForIP> 是与 IP 地址关联的名称,<IPAddress> 是第二个子网的 IP 地址。

    下面显示了一个示例。

    <instance_attributes id="virtualip-instance_attributes">
        <nvpair id="virtualip-instance_attributes-ip" name="ip" value="192.168.1.102"/>
    </instance_attributes>
    

    默认情况下,导出的 CIB XML 文件中只有一个 <instance_attributes />。 如果有两个子网,则需要两个 <instance_attributes /> 条目。

    下例展示了两个子网的条目:

    <instance_attributes id="virtualip-instance_attributes1">
        <rule id="Subnet1-IP" score="INFINITY" boolean-op="or">
            <expression id="Subnet1-Node1" attribute="#uname" operation="eq" value="Node1" />
            <expression id="Subnet1-Node2" attribute="#uname" operation="eq" value="Node2" />
        </rule>
        <nvpair id="IP-In-Subnet1" name="ip" value="192.168.1.102"/>
    </instance_attributes>
    <instance_attributes id="virtualip-instance_attributes2">
        <rule id="Subnet2-IP" score="INFINITY">
            <expression id="Subnet2-Node1" attribute="#uname" operation="eq" value="Node3" />
        </rule>
        <nvpair id="IP-In-Subnet2" name="ip" value="192.168.2.102"/>
    </instance_attributes>
    

    当子网有多个服务器时,可以使用 boolean-op="or"

  3. 导入修改后的 CIB,重新配置 Pacemaker。

    sudo pcs cluster cib-push <filename>
    

    其中 <filename> 是包含已修改的 IP 地址信息的 CIB 文件的名称。

检查并验证故障转移

  1. CIB 成功应用更新的配置后,请在 Pacemaker 中对与 IP 地址资源关联的 DNS 名称执行 Ping 命令。 结果应反映与当前承载 AG 或 FCI 的子网关联的 IP 地址。

  2. 阻止 AG 或 FCI 转移到另一个子网。

  3. AG 或 FCI 完全联机后,对与 IP 地址关联的 DNS 名称执行 Ping 命令。 结果应反映第二个子网中的 IP 地址。

  4. 如果需要,请阻止 AG 或 FCI 回到原始子网。