我可以对 SQL Server 可用性组中的主副本使用不同的端点 URL 吗?

Nea*_*had 3 sql-server high-availability availability-groups

我正在设置一个 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
Run Code Online (Sandbox Code Playgroud)

当我想从远程节点 (mssql-remote-0) 加入时,我使用此命令。

ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = NONE);
Run Code Online (Sandbox Code Playgroud)

mssql-remote-0节点自动获取主节点的端点URL,

ENDPOINT_URL = N'tcp://mssql-primary-0.headless-service:5022'
Run Code Online (Sandbox Code Playgroud)

是否有任何选项可以提供主副本 (mssql-primary-0) 的不同端点 URL,仅适用于 mssql-remote-0 节点?

任何有关实现此设置的见解或建议将不胜感激。

Sea*_*ser 5

是否可以为 SQL Server 可用性组中的不同副本显式使用主副本的不同端点 URL?

不它不是。每个实例只能有一个数据库镜像端点(AG 使用的端点)。

我想确保只有远程异步副本使用公共 IP 与主副本进行通信,而集群中的其他副本继续使用集群中主副本的 DNS 名称。

将端点 URL 设置为 DNS 名称,并在异步副本上为该名称创建一条主机记录(无论您使用的是哪个 IP)。