.net 连接SqlServer AlwaysOn只读库配置

在使用.net 编程时,如果遇到较大型项目,需要做读写分离,我们一般采用AlwaysOn去解决这一类型问题。

那.net 如何实现连接只读库?从两个维度去着手:

第一步:修改数据库连接

在Webconfig文件的数据库连接节点增加如下属性:

ApplicationIntent=ReadOnly;MultiSubnetFailover=True

示例:

 <connectionStrings>
    <add name="connStr" connectionString="Data Source=AG侦听器名称;Initial Catalog=数据库称;Integrated Security=SSPI;ApplicationIntent=ReadOnly;MultiSubnetFailover=True;" providerName="System.Data.SqlClient" />
  </connectionStrings>

第二步:主要是从Alwayson 配置方面修改

webconfig 已增加了ApplicationIntent=ReadOnly,那得配路由,否则连接的一直是主节点,那怎样配置路由?

TEST-SQL01(主),TEST-SQL02(辅),TEST-SQL03(辅)共三个实例,路由配置示例如下:

ALTER AVAILABILITY GROUP [Test-AlwaysOnSQL1] 
 MODIFY REPLICA ON 
N'TEST-SQL01' WITH  
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY)); 
ALTER AVAILABILITY GROUP [Test-AlwaysOnSQL1] 
 MODIFY REPLICA ON 
N'TEST-SQL01' WITH  
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://TEST-SQL01.****.cn:1433')); 
 
ALTER AVAILABILITY GROUP [Test-AlwaysOnSQL1] 
 MODIFY REPLICA ON 
N'TEST-SQL02' WITH  
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY)); 
ALTER AVAILABILITY GROUP [Test-AlwaysOnSQL1] 
 MODIFY REPLICA ON 
N'TEST-SQL02' WITH  
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://TEST-SQL02.****.cn:1433')); 
 

ALTER AVAILABILITY GROUP [Test-AlwaysOnSQL1] 
 MODIFY REPLICA ON 
N'TEST-SQL03' WITH  
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY)); 
ALTER AVAILABILITY GROUP [Test-AlwaysOnSQL1] 
 MODIFY REPLICA ON 
N'TEST-SQL03' WITH  
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://TEST-SQL03.****.cn:1433')); 

ALTER AVAILABILITY GROUP [Test-AlwaysOnSQL1]  
MODIFY REPLICA ON 
N'TEST-SQL01' WITH  
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('TEST-SQL02','TEST-SQL03','TEST-SQL01'))); 
 
ALTER AVAILABILITY GROUP [Test-AlwaysOnSQL1]  
MODIFY REPLICA ON 
N'TEST-SQL02' WITH  
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('TEST-SQL03','TEST-SQL01',,'TEST-SQL02'))); 
GO

ALTER AVAILABILITY GROUP [Test-AlwaysOnSQL1]  
MODIFY REPLICA ON 
N'TEST-SQL03' WITH  
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('TEST-SQL02','TEST-SQL01','TEST-SQL03''))); 
GO

配置完后,可查看路由表:

select * from sys.availability_read_only_routing_lists

select replica_server_name,* from sys.availability_replicas

查看:alwayson可用性组配置,如下图:

到现在,该修改配置的地方已完成(前提保证alwayson 是可用的),接下来,写个简单的demo,

 将select @@SERVERNAME 输出,可以看到只读库切换效果。

posted @ 2020-04-05 17:28  Marshal_liudingjun  阅读(1049)  评论(0)    收藏  举报