CRM部署Always on 后 CRM报无法更新数据库,数据库只读,读写分离不正常
- 问题描述
- 背景信息
- 问题原因
- 解决方案
问题描述
CRM部署Always on 后 CRM报无法更新数据库,数据库只读
读写分离不正常,出现错乱链接。
背景信息
1.2个节点配置SQL server AG(DB01,DB02)
2.错误信息:
Unable to update database ‘CRMAPIDB’ because the database is read-only
Unable to update database ‘CRM_MSCRM’ because the database is read-only
3.连接字符串:connecttion string :Data Source=SQLHA;Initial Catalog=CRM_MSCRM;Integrated Security=SSPI
问题原因
应用和SQL的4台服务器都为Azure VM,检查AG侦听器的负载均衡设置,发现负载均衡器的运行状况探测设置端口为1433,与SQL server的端口重复。并且负载均衡规则的浮动IP 并未勾选。
解决方案
1.负载均衡器的运行状况探测重新设置为59999,并运在SQL任意节点中运行以下Powershell。
$ClusterNetworkName = “” # The cluster network name. Use Get-ClusterNetwork on Windows Server 2012 or later to find the name.
$IPResourceName = “” # The IP address resource name.
KaTeX parse error: Expected 'EOF', got '#' at position 29: … = "<n.n.n.n>" #̲ The IP address…ListenerProbePort =
Import-Module FailoverClusters
Get-ClusterResource KaTeX parse error: Expected '}', got 'EOF' at end of input: …e @{"Address"="ListenerILBIP";“ProbePort”= L i s t e n e r P r o b e P o r t ; " S u b n e t M a s k " = " 255.255.255.255 " ; " N e t w o r k " = " ListenerProbePort;"SubnetMask"="255.255.255.255";"Network"=" ListenerProbePort;"SubnetMask"="255.255.255.255";"Network"="ClusterNetworkName";“EnableDhcp”=0}
2.应用指定ReadOnly的时候,连接就连到SQL高可用组的次要副本,指定ReadWrite的时候连接就连到SQL高可用组的主要副本。
通过以下T-SQL修改只读路由列表,然后测试连接
ALTER AVAILABILITY GROUP [CRMHA]
MODIFY REPLICA ON
N’DB01’ WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=((‘DB02’),‘DB01’)));
ALTER AVAILABILITY GROUP [CRMHA]
MODIFY REPLICA ON
N’DB02’ WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=((‘DB01’),‘DB02’)));
3.在Azure Portal中将DB01和DB02的负载均衡器规则的浮动IP开启。
更多信息
教程:配置 SQL Server Always On 可用性组 - SQL Server on Azure VMs | Microsoft Learn