本文内容
适用于: 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 回到原始子网。
相关内容