多网卡SQL Server高可用组跨子网副本流量配置问询
完全没问题,你可以让本地同步副本的流量走192.168.99.x直连子网,异地异步副本的流量走10.0.0.x VPN子网,核心在于利用SQL Server高可用组(HAG)的端点绑定配置和副本连接地址指定,再配合服务器本地路由策略来实现流量隔离。
下面是具体的实现思路和步骤:
1. 配置SQL Server数据库镜像端点(HAG依赖的端点)
每个SQL Server实例只能有一个用于HAG的数据库镜像端点,但你可以让这个端点绑定到服务器的多个IP(也就是两块网卡的IP),这样实例就能同时监听两个子网的流量。创建或修改端点的T-SQL命令示例:
CREATE ENDPOINT [HAG_Endpoint] STATE=STARTED AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL) -- 绑定所有IP,也可指定具体的两个IP FOR DATA_MIRRORING (ROLE = ALL, AUTHENTICATION = WINDOWS NEGOTIATE, ENCRYPTION = REQUIRED ALGORITHM AES)
如果只想绑定特定IP,可以把LISTENER_IP = ALL改成LISTENER_IP = (('192.168.99.10'),('10.0.0.10'))(替换成对应服务器的实际IP)。
2. 为HAG副本指定不同的连接地址
在添加或配置HAG副本时,你可以明确指定每个副本的连接地址:
- 对于本地的SQL-ATL01和SQL-ATL02,在互相配置副本时,使用对方的192.168.99.x子网IP作为连接地址,这样它们之间的同步流量就会走直连的10G网卡。
- 对于异地的SQL-NYC01,在本地两个节点上配置副本连接时,使用SQL-NYC01的10.0.0.x子网IP;同时在SQL-NYC01上配置连接本地节点时,也使用它们的10.0.0.x子网IP,这样异步同步流量就会走VPN的1G网卡。
配置异地副本的T-SQL示例:
ALTER AVAILABILITY GROUP [YourHAGName] ADD REPLICA ON N'SQL-NYC01' WITH ( ENDPOINT_URL = N'TCP://SQL-NYC01-10IP:5022', -- 替换成SQL-NYC01的10.0.0.x IP和端点端口 AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, FAILOVER_MODE = MANUAL, SEEDING_MODE = AUTOMATIC );
3. 配置服务器本地路由策略(可选但推荐)
为了确保本地节点之间的流量优先走192.168.99.x的直连网卡,可以在SQL-ATL01和SQL-ATL02上添加静态路由:
- 在SQL-ATL01上添加路由:目标地址为SQL-ATL02的192.168.99.x IP,网关设为直连网卡的本地网关(或者因为是直连,网关留空,指定接口为10G网卡)。
- 同理在SQL-ATL02上添加指向SQL-ATL01 192.168.99.x IP的静态路由。
这样可以避免操作系统误选网卡,确保本地同步流量稳定走10G直连链路。
关于故障转移集群的注意事项
你的故障转移集群节点(SQL-ATL01、SQL-ATL02)之间的心跳通信可以单独配置,默认集群会使用所有可用的网络,但你可以在集群管理器中设置网络优先级,让集群心跳优先走192.168.99.x子网,同时把10.0.0.x子网设为“允许客户端连接”(用于监听器和异地副本通信)。
总结:所有副本流量不需要强制使用同一IP/子网,通过端点绑定、副本连接地址指定和路由策略,完全可以实现你想要的流量隔离方案。
内容的提问来源于stack exchange,提问作者Josef

