我正在设置一个 SQL Server 可用性组,其中包含集群内的三个同步副本(一个主副本和两个辅助副本)以及来自另一个数据中心的另一个集群的附加异步副本。我需要使用远程集群中异步副本的公共 IP 来公开主副本。
我的目标是使用专门用于远程异步副本的公共 IP 公开主副本。相反,集群中的其他同步副本使用集群中主副本的 DNS 名称与主副本进行通信。
创建可用性组时,我需要指定每个副本的端点 URL。是否可以为 SQL Server 可用性组中的不同副本显式使用主副本的不同端点 URL?我想确保只有远程异步副本使用公共 IP 与主副本进行通信。相反,集群中的其他副本继续使用集群中主副本的 DNS 名称。
示例:创建了三个节点的可用性组,mssql-primary-0 和 mssql-primary-1 是 Kubernetes 集群中的两个 pod,它们使用无头服务(pod 的 DNS 名称)进行通信。mssql-remote-0 pod 来自使用负载均衡器服务的外部 IP 公开的另一个集群。
CREATE AVAILABILITY GROUP [AG1]
WITH (CLUSTER_TYPE = NONE)
FOR REPLICA ON
N'mssql-primary-0'
WITH (
ENDPOINT_URL = N'tcp://mssql-primary-0.headless-service:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
SEEDING_MODE = AUTOMATIC,
FAILOVER_MODE = MANUAL,
SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)
),
N'mssql-primary-1'
WITH (
ENDPOINT_URL = N'tcp://mssql-primary-1.headless-service:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
SEEDING_MODE = AUTOMATIC,
FAILOVER_MODE = MANUAL,
SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)
),
N'mssql-remote-0'
WITH (
ENDPOINT_URL = N'tcp://172.232.87.37:5022',
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
SEEDING_MODE = AUTOMATIC,
FAILOVER_MODE = MANUAL,
SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)
);
GO
当我想从远程节点 (mssql-remote-0) 加入时,我使用此命令。
ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = NONE);
mssql-remote-0节点自动获取主节点的端点URL,
ENDPOINT_URL = N'tcp://mssql-primary-0.headless-service:5022'
是否有任何选项可以提供主副本 (mssql-primary-0) 的不同端点 URL,仅适用于 mssql-remote-0 节点?
任何有关实现此设置的见解或建议将不胜感激。
不它不是。每个实例只能有一个数据库镜像端点(AG 使用的端点)。
将端点 URL 设置为 DNS 名称,并在异步副本上为该名称创建一条主机记录(无论您使用的是哪个 IP)。