.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 输出,可以看到只读库切换效果。
浙公网安备 33010602011771号