适用于: SQL Server - Linux
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 地址,所以无需配置其他内容。
              
               
              
              
            
具有 Pacemaker 的配置
在 Windows 中,Windows Server 故障转移群集 (WSFC) 本机支持多个子网,并通过 IP 地址上的 OR 依赖项来处理多个 IP 地址。 在 Linux 上,没有 OR 依赖项,但可以通过 Pacemaker 以本机方式实现适当的多子网,但不能使用正常的 Pacemaker 命令行。 相反,需要修改群集信息库 (CIB)。 CIB 是具有 Pacemaker 配置的 XML 文件。
              
               
              
              
            
更新 CIB
- 导出 CIB。 - sudo pcs cluster cib <filename>
 - 其中 - <filename>是要调用 CIB 的名称。
 
- 编辑生成的文件。 查找 - <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"。
 
- 导入修改后的 CIB,重新配置 Pacemaker。 - sudo pcs cluster cib-push <filename>
 - 其中 - <filename>是包含已修改的 IP 地址信息的 CIB 文件的名称。
 
- 导出 CIB。 - sudo cibadmin -Q > <filename>
 - 其中 - <filename>是要调用 CIB 的名称。
 
- 编辑生成的文件。 查找 - <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"。
 
- 导入修改后的 CIB,重新配置 Pacemaker。 - sudo cibadmin -R -x <filename>
 - 其中 - <filename>是包含已修改的 IP 地址信息的 CIB 文件的名称。
 
- 导出 CIB。 - sudo pcs cluster cib <filename>
 - 其中 - <filename>是要调用 CIB 的名称。
 
- 编辑生成的文件。 查找 - <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"。
 
- 导入修改后的 CIB,重新配置 Pacemaker。 - sudo pcs cluster cib-push <filename>
 - 其中 - <filename>是包含已修改的 IP 地址信息的 CIB 文件的名称。
 
 
检查并验证故障转移
- CIB 成功应用更新的配置后,请在 Pacemaker 中对与 IP 地址资源关联的 DNS 名称执行 Ping 命令。 结果应反映与当前承载 AG 或 FCI 的子网关联的 IP 地址。 
- 阻止 AG 或 FCI 转移到另一个子网。 
- AG 或 FCI 完全联机后,对与 IP 地址关联的 DNS 名称执行 Ping 命令。 结果应反映第二个子网中的 IP 地址。 
- 如果需要,请阻止 AG 或 FCI 回到原始子网。 
相关内容