如何在Microsoft Sql Server中实现可扩展性

352次阅读
没有评论

问题描述

正在设计一个架构,需要一个可扩展的Microsoft Sql Server数据库,其中包含一个可写的主数据库和多个只读的从数据库。理想情况下,用户希望能够通过负载均衡器访问数据库,如果是写操作,则发送到主数据库,如果是读操作,则通过从数据库进行负载均衡。通过某种方式,从数据库会随着时间的推移更新以与主数据库的数据保持一致。

用户对AWS和MySQL的可扩展性有一定了解,但对Microsoft Sql Server方面的知识有限。用户的一位同事坚称这是不可能的,但没有提供任何支持这一说法的证据。用户目前在Azure上托管微服务,但数据库应该在本地数据中心。这是一个旗舰项目,所以可以说如果有一个可以用于扩展的好东西,我们可能能够说服我们的DBA和运维团队在这个项目中使用它。

请注意,目前我们不能将数据库放在云上。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

使用Microsoft Sql Server的可扩展性解决方案

Microsoft Sql Server提供了一种名为”read-only routing”的功能,可以实现可扩展的数据库架构。通过使用”read-only routing”,客户端可以在连接字符串中指定其意图是只读的,这是基于会话而不是基于语句的。这意味着用户可以根据需要将连接路由到只读从数据库。

以下是在Microsoft Sql Server中实现可扩展性的步骤:

  1. 配置可用性组(Availability Group):可用性组是一组数据库实例的集合,其中包含一个主数据库和多个从数据库。可用性组提供了故障转移和自动故障恢复的功能。

  2. 配置只读路由:只读路由允许客户端将只读连接路由到从数据库。客户端可以在连接字符串中指定只读路由的意图。

下面是一个简单的示例,演示如何在Microsoft Sql Server中配置可扩展性:

-- 创建可用性组
CREATE AVAILABILITY GROUP MyAvailabilityGroup
FOR
    DATABASE MyDatabase
REPLICA ON
    'PrimaryServer' WITH (ROLE = PRIMARY),
    'SecondaryServer1' WITH (ROLE = SECONDARY),
    'SecondaryServer2' WITH (ROLE = SECONDARY),
    -- 添加更多的从数据库
    'SecondaryServer3' WITH (ROLE = SECONDARY)

-- 配置只读路由
ALTER AVAILABILITY GROUP MyAvailabilityGroup
MODIFY REPLICA ON
    'SecondaryServer1' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = READ_ONLY)),
    'SecondaryServer2' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = READ_ONLY)),
    -- 配置更多的从数据库
    'SecondaryServer3' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = READ_ONLY))

在上面的示例中,我们首先创建了一个可用性组MyAvailabilityGroup,其中包含一个主数据库和多个从数据库。然后,我们使用ALTER AVAILABILITY GROUP语句配置了只读路由,允许从数据库接受只读连接。

请注意,可用性组最多可以包含9个从数据库。根据现代硬件和存储的性能,这足以支持数万个并发连接。

其他解决方案

如果用户希望根据需求动态添加只读从数据库,可以使用Microsoft Sql Server Management Studio提供的向导来简化此过程。该向导可以帮助用户添加新的从数据库到可用性组中。

请注意,以上解决方案是基于Microsoft Sql Server的功能和特性。如果用户的需求超出了这些功能的范围,可能需要考虑其他解决方案或第三方工具。

评论1: 例如,是否可以从1个写入副本和1个只读副本开始,然后随着需求增加,将新的只读副本在线上线,最多达到9个?
回答: 是的,甚至有一个向导可以帮助您完成这个过程。

以上是在Microsoft Sql Server中实现可扩展性的解决方案。根据用户的需求和环境,可以选择适合的方法来实现可扩展的数据库架构。

正文完