通过Linked Server访问云下自建SQL Server

RDS SQL Server提供的Linked Server能力可以在RDS实例之间建立Linked Server,并且在网络连通的前提下,也支持与云下自建的SQL Server建立Linked Server,可用于跨区域数据访问、数据合并与分析以及数据迁移与同步等场景。本文介绍如何通过VPNRDS SQL Server上建立Linked Server,以连接到云下自建的SQL Server。

前提条件

  • RDS SQL Server实例需满足如下条件:

    • 实例系列:集群系列、高可用系列(不支持基础系列

    • 实例规格:通用型、独享型(不支持共享型

    • 计费方式:包年包月、按量付费(不支持Serverless实例

  • 在部署VPN网关前,您需要进行网络规划:

    • 确保本地移动设备和云上专有网络VPC内需要访问的私网IP地址段不能相同,否则无法通信。

    • 确保客户端能够访问网络。

费用说明

部署VPN网关将产生费用

1. 通过VPN打通RDS SQL Server所在VPC和云下机器的网络连接通道

1.1. 创建VPN网关实例

创建 VPN 网关

新购 VPN 网关仅支持创建双隧道模式的 IPsec-VPN 连接。针对已创建的支持单隧道模式的 VPN 网关,建议升级IPsec-VPN连接为双隧道模式

控制台

前往VPN 网关 - 购买页,配置以下参数:

  • 地域和可用区:选择 VPC 所在的地域。

  • 网关类型:选择普通型,建立 IPsec 连接后将使用国际标准商用密码算法(普通算法)。

  • 网络类型:选择公网,将分配公网 IP 以建立 IPsec 连接。如需建立私网 IPsec 连接,建议使用私网 IPsec 连接绑定转发路由器

  • 隧道:选择双隧道

    • 需选择关联的 VPC 和部署于不同可用区的 2 个交换机,确保跨可用区的高可用。开启 IPsec-VPN 后,系统会在 2 个交换机下各创建 1 个弹性网卡ENI,作为使用 IPsec 连接与 VPC 流量互通的接口。每个 ENI 会占用交换机下的 1 个 IP地址。

    • 对于仅支持单可用区的地域 ,无法实现可用区级别的容灾。建议在该可用区下指定 2 个不同的交换机以实现 IPsec 连接的高可用。

      仅支持单可用区的地域

      华东5(南京-本地地域)、华东6(福州-本地地域)、华中1(武汉-本地地域)、泰国(曼谷)、韩国(首尔)、菲律宾(马尼拉)、阿联酋(迪拜)、墨西哥。

    • 创建 VPN 网关后,不支持修改关联的交换机。

  • 带宽规格:不同地域下,VPN 网关支持的最大带宽规格不同。选择 5Mbps 或 10 Mbps 的带宽规格,将限制从本地数据中心去往 VPN 网关方向的带宽峰值为 10 Mbps。

  • 开启IPsec-VPN,关闭SSL-VPN

    如果创建的 VPN 网关未开启 IPsec-VPN,可在目标 VPN 网关的功能配置列单击IPsec连接后的去开启

API

调用CreateVpnGateway创建 VPN 网关。

1.2. 创建SSL服务端

  1. 登录VPN网关管理控制台

  2. 在左侧导航栏,选择网间互联 > VPN > SSL服务端

  3. 在顶部菜单栏,选择SSL服务端的地域。

    SSL服务端的地域需和VPN网关实例所属地域相同。

  4. SSL服务端页面,单击创建SSL服务端

  5. 创建SSL服务端面板,根据以下信息配置SSL服务端,然后单击确定

    配置

    说明

    名称

    输入SSL服务端的名称。

    资源组

    选择VPN网关所属的资源组。

    SSL服务端所属的资源组与VPN网关所属的资源组保持一致。

    VPN网关

    选择要关联的VPN网关。

    确保该VPN网关已经开启了SSL-VPN功能。

    本端网段

    本端网段是客户端通过SSL-VPN连接要访问的地址段。

    本端网段可以是专有网络VPC(Virtual Private Cloud)的网段、交换机的网段、通过物理专线和VPC互连的本地数据中心的网段、云服务(例如对象存储、云数据库)等的网段。

    单击+添加本端网段可添加多个本端网段,最多支持添加5个本端网段。 以下网段不支持指定为本端网段:

    • 127.0.0.0~127.255.255.255

    • 169.254.0.0~169.254.255.255

    • 224.0.0.0~239.255.255.255

    • 255.0.0.0~255.255.255.255

    说明

    本端网段的子网掩码位数在832位之间。

    客户端网段

    客户端网段是给客户端虚拟网卡分配访问地址的网段,不是指客户端已有的内网网段。当客户端通过SSL-VPN连接访问本端时,VPN网关会从指定的客户端网段中分配一个IP地址给客户端使用,客户端将使用分配的IP地址访问云上资源。

    在您指定客户端网段时需保证客户端网段所包含的IP地址个数是当前VPN网关SSL连接数的4倍及以上。

    • 单击查看原因。

      例如您指定的客户端网段为192.168.0.0/24,系统在为客户端分配IP地址时,会先从192.168.0.0/24网段中划分出一个子网掩码为30的子网段,例如192.168.0.4/30,然后从192.168.0.4/30中分配一个IP地址供客户端使用,剩余三个IP地址会被系统占用以保证网络通信,此时一个客户端会耗费4IP地址。因此,为保证您的客户端均能分配到IP地址,请确保您指定的客户端网段所包含的IP地址个数是VPN网关SSL连接数的4倍及以上。

    • 单击查看不支持配置的网段。

      • 100.64.0.0~100.127.255.255

      • 127.0.0.0~127.255.255.255

      • 169.254.0.0~169.254.255.255

      • 224.0.0.0~239.255.255.255

      • 255.0.0.0~255.255.255.255

    • 单击查看每个SSL连接数建议的客户端网段。

      • SSL连接数为5,则客户端网段的子网掩码位数建议小于或等于27。例如:10.0.0.0/27、10.0.0.0/26。

      • SSL连接数为10,则客户端网段的子网掩码位数建议小于或等于26。例如:10.0.0.0/26、10.0.0.0/25。

      • SSL连接数为20,则客户端网段的子网掩码位数建议小于或等于25。例如:10.0.0.0/25、10.0.0.0/24。

      • SSL连接数为50,则客户端网段的子网掩码位数建议小于或等于24。例如:10.0.0.0/24、10.0.0.0/23。

      • SSL连接数为100,则客户端网段的子网掩码位数建议小于或等于23。例如:10.0.0.0/23、10.0.0.0/22。

      • SSL连接数为200,则客户端网段的子网掩码位数建议小于或等于22。例如:10.0.0.0/22、10.0.0.0/21。

      • SSL连接数为500,则客户端网段的子网掩码位数建议小于或等于21。例如:10.0.0.0/21、10.0.0.0/20。

      • SSL连接数为1000,则客户端网段的子网掩码位数建议小于或等于20。例如:10.0.0.0/20、10.0.0.0/19。

    重要
    • 客户端网段的子网掩码位数在1629位之间。

    • 请确保客户端网段与本端网段、VPC网段以及与客户端终端关联的任何路由网段均没有重叠。

    • 在指定客户端网段时,建议您使用10.0.0.0/8、172.16.0.0/12192.168.0.0/16网段及其子网网段。如果您的客户端网段需要指定为公网网段,您需要将公网网段设置为VPC的用户网段,以确保VPC可以访问到该公网网段。关于用户网段的更多信息,请参见专有网络FAQ专有网络FAQ

    • 创建SSL服务端后,系统后台会自动将客户端网段的路由添加在VPC实例的路由表中,请勿再手动将客户端网段的路由添加到VPC实例的路由表,否则会导致SSL-VPN连接流量传输异常。

    高级配置

    协议

    SSL-VPN连接使用的协议。取值:

    • UDP

    • TCP(默认值)

    端口

    SSL服务端使用的端口。端口取值范围:1~65535。默认端口:1194

    说明

    不支持使用以下端口:22、2222、22222、9000、9001、9002、7505、80、443、53、68、123、4510、4560、500、4500

    加密算法

    SSL-VPN连接使用的加密算法。

    • 如果客户端使用Tunnelblick软件或2.4.0及以上版本的OpenVPN软件,则SSL服务端和客户端之间动态协商加密算法,会优先使用双方均支持的最高安全级别的加密算法。您为SSL服务端指定的加密算法不生效。

    • 如果客户端使用2.4.0之前版本的OpenVPN软件,则SSL服务端和客户端将使用您为SSL服务端指定的加密算法。SSL服务端支持指定以下加密算法:

      • AES-128-CBC(默认值)

      • AES-192-CBC

      • AES-256-CBC

      • none

        本参数表示不使用加密算法。

    是否压缩

    是否对传输数据进行压缩处理。取值:

    • (默认值)

    双因子认证

    选择是否开启双因子认证功能。系统默认关闭双因子认证功能。

    双因子认证是指在建立SSL-VPN连接前对客户端进行两种不同类型的身份认证,即默认的SSL客户端证书认证和IDaaS EIAM用户名密码认证,两次认证均通过后才允许客户端建立SSL-VPN连接。双因子认证的双重认证机制可以防止用户身份盗用、未经授权的SSL-VPN连接等,有效提高了SSL-VPN连接的安全性,保护VPC内的敏感数据免受外部威胁。相关教程,请参见SSL-VPN双因子认证

    开启双因子认证功能后,您需要选择用于身份认证的应用身份服务IDaaS EIAM实例和IDaaS应用ID。

    单击了解双因子认证流程

    image
    1. 您在客户端侧发起SSL-VPN连接请求。

    2. VPN网关接收到请求后,对客户端进行SSL客户端证书认证;SSL客户端证书认证通过后,要求客户端侧输入用户名和密码。

    3. 您在客户端侧输入用户名和密码后,VPN软件将用户名和密码发送至VPN网关。

    4. VPN网关接收到用户名和密码后,将用户名和密码发送至IDaaS进行认证。

    5. IDaaS对接收到的用户名和密码进行认证,并向VPN网关返回认证结果。

    6. VPN网关根据IDaaS返回的结果,允许或拒绝客户端建立SSL-VPN连接。

    说明
    • 如果您是首次使用双因子认证功能,请先完成授权后再开启双因子认证功能。

    • 在阿联酋(迪拜)地域创建SSL服务端时,推荐您绑定新加坡地域的IDaaS EIAM 2.0实例,以减少跨地域时延。

    • IDaaS EIAM 1.0实例不再支持新购。如果您的阿里云账号下存在IDaaS EIAM 1.0实例,开启双因子认证功能后,依旧支持绑定IDaaS EIAM 1.0实例。

      如果您的阿里云账号下不存在IDaaS EIAM 1.0实例,开启双因子认证功能后,仅支持绑定IDaaS EIAM 2.0实例。

    • 在您绑定IDaaS EIAM 2.0实例时,可能需要对VPN网关实例进行升级。更多信息,请参见【变更公告】SSL-VPN双因子认证支持IDaaS EIAM 2.0

1.3. 创建SSL客户端证书

  1. 登录VPN网关管理控制台

  2. 在左侧导航栏,选择网间互联 > VPN > SSL客户端

  3. 在顶部菜单栏,选择SSL客户端的地域。
  4. SSL客户端页面,单击创建SSL客户端

  5. 创建SSL客户端面板,根据以下信息配置SSL客户端证书,然后单击确定

    配置

    说明

    名称

    输入SSL客户端证书的名称。

    资源组

    选择SSL服务端所属的资源组。

    SSL客户端证书与SSL服务端所属的资源组保持一致。

    SSL服务端

    选择要关联的SSL服务端。

1.4. 下载SSL客户端证书

  1. 登录VPN网关管理控制台

  2. 在左侧导航栏,选择网间互联 > VPN > SSL客户端

  3. 在顶部菜单栏,选择SSL客户端的地域。
  4. SSL客户端页面,找到目标SSL客户端证书,在操作列单击下载证书

1.5. 配置客户端

  1. 下载并安装OpenVPN客户端。

  2. 解压下载的证书,并复制到OpenVPN安装目录的config文件夹中。

    解压证书

  3. 单击Connect发起连接。

    发起连接

1.6. 测试连接

  1. 在同一个VPC创建一台ECS实例

  2. OpenVPN客户端中通过ping命令测试该ECS实例的连通性。

    说明
    • 请确保该ECS实例的安全组规则允许客户端远程连接,授权对象为SSL服务端配置中指定的客户端网段,并指定要访问本地的数据库服务端口号。更多信息,请参见安全组配置案例

    • 若无法连接,可能是由于本地主机设置了防火墙,需要将防火墙设置为允许远端连接。

    添加安全组规则

2. 在RDS SQL Server上创建Linked Server

方式一:通过SSMS连接RDS后创建Linked Server

  1. 通过SQL Server Management Studio(SSMS)连接RDS SQL Server实例

  2. SSMS中执行如下SQL命令,创建Linked Server:

    DECLARE
        @linked_server_name sysname = N'yangzhao_slb', -- Linked Server的名称。用于标识远程服务器。
        @data_source sysname = N'****.sqlserver.rds.aliyuncs.com,3888 ', -- 自建SQL Server数据库的IP和端口号,格式为:<IP>,<端口>。例如:10.1.10.1,1433。
        @user_name sysname = N'ay15', -- 自建SQL Server数据库的用户名,用于连接远程数据库。
        @password nvarchar(128) = N'******', -- 自建SQL Server数据库用户名对应的密码。
        -- 连接服务器的其他可选项,以XML格式提供。
        @link_server_options xml = N'
            <rds_linked_server>
                <config option="data access">true</config>
                <config option="rpc">true</config>
                <config option="rpc out">true</config>
            </rds_linked_server>'
    ;
    
    -- 调用存储过程sp_rds_add_linked_server创建链接服务器。
    EXEC sp_rds_add_linked_server
        @linked_server_name,
        @data_source,
        @user_name,
        @password,
        @link_server_options;
  3. 执行如下SQL命令,查看已配置的Linked Server列表:

    SELECT * FROM [myTestLinkedServer].master.sys.servers;

    测试Linked Server

方式二:通过DMS连接RDS后创建Linked Server

  1. 通过DMS连接RDS SQL Server实例

  2. DMS中执行如下SQL命令,创建Linked Server:

    -- 调用存储过程sp_rds_add_linked_server创建链接服务器。
    EXEC sp_rds_add_linked_server
        @linked_server_name = N'yangzhao_slb', -- Linked Server的名称。用于标识远程服务器。
        @data_source = N'rm-***.sqlserver.rds.aliyuncs.com,1433',   -- 自建SQL Server数据库的IP和端口号,格式为:<IP>,<端口>。例如:10.1.10.1,1433。
        @user_name = N'ay15', -- 自建SQL Server数据库的用户名,用于连接远程数据库。
        @password = N'******', -- 自建SQL Server数据库用户名对应的密码。
        -- 连接服务器的其他可选项,以XML格式提供。
        @link_server_options = N'
            <rds_linked_server>
                <config option="data access">true</config>
                <config option="rpc">true</config>
                <config option="rpc out">true</config>
            </rds_linked_server>'
    ;
  3. 执行如下SQL命令,查看已配置的Linked Server列表:

    SELECT * FROM [myTestLinkedServer].master.sys.servers;

常见问题

开启Linked Server后,通过多种方式测试查询效率时,为什么不同场景下的查询性能有差异?

  • 场景描述:两个RDS SQL Server实例(处于同一地域和VPC,但可用区不同)间开启Linked Server后,执行相同查询语句时,查询时间变长。通过多种方式,例如同可用区的ECS查询、DMS查询、RDS实例通过Linked Server查询另一RDS实例(不同可用区)测试,发现查询效率存在差异。其中不同查询方式的性能示例如下:

    • SSMS连接RDS查询:无跨实例网络传输,延迟最低,速度最快。

    • DMS查询RDS:仅返回少量数据(返回上限为3000),传输量小,因此较快。

    • ECS查询RDS(同可用区):同可用区网络延迟较低,性能优于跨可用区查询。

    • RDSRDS间跨可用区查询:涉及跨可用区网络传输,网络延迟高且数据量过大,因此性能较弱。

  • 分析原因:查询性能受网络延迟和数据量影响,表现为自查速度 > 同可用区速度 > 跨可用区速度。其中:

    • 网络延迟:跨可用区查询的网络延迟高于同可用区。

    • 数据量大小:传输数据量越大,网络延迟对性能的影响越明显。

  • 性能优化建议

    • 尽量避免跨可用区查询,优先将实例部署在同一可用区。如需调整RDS SQL Server的可用区,请参见迁移可用区

    • 减少传输数据量,优化查询逻辑(如增加过滤条件、分页查询)等。

相关操作