BizTalk Server 2020集群环境SSO连接失败故障求助
BizTalk 2020 接入集群化EntSSO报RPC不可用故障排查方案
现有部署架构
- 服务器A、服务器B:部署Microsoft BizTalk 2020服务
- 服务器C、服务器D:部署Microsoft SQL Server 2019 AlwaysOn可用性组
已完成前置配置
- 完成集群MSDTC角色配置
- 在服务器C、D安装Enterprise SSO服务并完成集群配置:在服务器C创建SSO系统,将服务关联的服务器名称修改为MSDTC集群访问点,在服务器D加入该SSO系统后完成主密钥还原,前期本地配置校验无异常
故障现象
在服务器A配置BizTalk、尝试加入现有SSO系统,指向SQL AG Listener并输入预先配置的EntSSO服务AD域账号时,连续触发三层报错:
- 顶层报错:SQL Server
clus-sql-ls上的SSO数据库SSODB指定的SSO主密钥服务器clus-msdtc无法找到,缺少主密钥服务器时SSO服务无法正常运行 - 二级报错:
(0xC0002A0F)无法联系SSO服务器“%1”,请检查SSO配置状态及目标服务器上SSO服务是否正常运行 - 底层子报错:无法联系SSO服务器
clus-msdtc,请检查SSO配置状态及该服务器上SSO服务运行状态(RPC:0x800706BA: RPC服务器不可用)
已完成的校验项: - DTCPing测试服务器A与C、服务器A与D之间的MSDTC连通性结果正常
- 节点本地Enterprise SSO服务处于运行状态
- AG主副本所在服务器C的SSO管理控制台显示配置状态正常
排查方向与修复步骤
1. 校验集群EntSSO资源的依赖配置(最高优先级)
该故障90%以上的诱因是EntSSO未被正确配置为集群通用服务资源,仅在节点本地启动:
- 本地启动的EntSSO只会监听节点物理IP的RPC端口,不会响应集群虚拟名称
clus-msdtc的RPC请求,DTCPing测试的是节点物理IP的MSDTC连通性,无法覆盖该场景 - 修复操作:
- 打开故障转移集群管理器,定位到承载MSDTC/EntSSO的角色
- 确认角色下包含四类资源:
clus-msdtc虚拟IP资源、clus-msdtc网络名称资源、MSDTC资源、EntSSO通用服务资源 - 配置EntSSO服务资源的依赖项为「
clus-msdtc网络名称 + MSDTC资源」,禁止依赖本地节点名称 - 将C、D节点本地服务列表中EntSSO的启动类型改为
手动,完全由集群控制服务启停,避免节点本地自动启动的服务抢占注册 - 重启整个EntSSO集群角色,待资源全部上线后再做后续校验
2. 校验RPC端口连通性与防火墙规则
DTCPing仅验证MSDTC协议所需端口,EntSSO的RPC通信依赖独立端口规则:
- 第一步在服务器A执行
telnet clus-msdtc 135,验证RPC终结点映射器端口连通性,不通则在集群角色当前所在节点、网络边界防火墙上放通针对clus-msdtc虚拟IP的135端口入站规则 - 第二步若135端口连通,在服务器A执行
rpcdump /s clus-msdtc,检查输出列表中是否存在ENTSSO服务对应的RPC终结点;若不存在,说明EntSSO未向集群网络名称注册RPC接口,重启集群EntSSO角色后重试 - 若环境限制动态RPC端口范围,可在C、D节点通过注册表给EntSSO配置固定RPC端口:定位到注册表路径
HKLM\SOFTWARE\Microsoft\Enterprise Single Sign-On,新建DWORD值RpcTcpPort,设置为选定的空闲单端口(如5050),重启EntSSO集群角色后,在防火墙放通该固定端口即可
3. 校验SSO数据库配置与Kerberos SPN
- 数据库配置校验:在AG主副本执行以下SQL,确认SSODB存储的主密钥服务器名称正确:
若返回值不是USE SSODB SELECT PropertyName, PropertyValue FROM SSO_Properties WHERE PropertyName IN ('SSOAdminServer','SSOSecretServer')clus-msdtc,通过SSO配置管理工具重新修改主密钥服务器名称,确保AG副本同步该配置后再做故障转移测试 - SPN配置校验:RPC Kerberos认证失败会直接抛出0x800706BA错误,在域控执行以下命令检查EntSSO服务账号的SPN记录:
若缺失以下记录,手动执行命令添加(替换域后缀为实际环境值):setspn -L <EntSSO服务使用的AD域账号>setspn -S ENTSSO/clus-msdtc <EntSSO服务域账号> setspn -S ENTSSO/clus-msdtc.yourdomain.com <EntSSO服务域账号>
4. 校验服务器A本地客户端配置
- 定位到服务器A的注册表路径
HKLM\SOFTWARE\Microsoft\ENTSSO,检查字符串值SSOServer是否为clus-msdtc,若为本地节点名或其他值,手动修改后重启服务器A的EntSSO服务 - 确认服务器A上的EntSSO服务登录账号与C、D节点使用的是同一个AD域账号,且该账号属于本地
Administrators组、域SSO Administrators组,同时拥有SQL实例的securityadmin、dbcreator角色,以及SSODB的db_owner权限
内容的提问来源于stack exchange,提问作者JaggenSWE
相关产品推荐
相关产品推荐

