You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Umbraco 13分布式缓存未更新致内容丢失问题排查求助

排查Umbraco 13.3.2 Azure负载均衡下内容丢失及锁相关错误

问题背景

在Azure环境部署Umbraco 13.3.2负载均衡集群,配置严格遵循官方负载均衡指南:

管理实例配置

  • MainDomLock = FileSystemMainDomLock
  • LocalTempStorageLocation = EnvironmentTemp
  • LuceneDirectoryFactory = SyncedTempFileSystemDirectoryFactory

公共实例配置

  • MainDomLock = FileSystemMainDomLock
  • LocalTempStorageLocation = EnvironmentTemp
  • LuceneDirectoryFactory = TempFileSystemDirectoryFactory

出现核心问题:内容突然消失、标签缺失、字段值清空,重启Azure App Service可临时恢复,但问题反复出现。日志关联错误包括:

Microsoft.Data.SqlClient.SqlException (0x80131904): Lock request time out period exceeded.
Umbraco.Cms.Core.DistributedLocking.Exceptions.DistributedWriteLockTimeoutException: Failed to acquire write lock for id: -331.
DISTRIBUTED CACHE IS NOT UPDATED
Microsoft.Data.SqlClient.SqlException (0x80131904): Transaction (Process ID 83) was deadlocked on lock resources with another process and has been chosen as the deadlock victim.
System.InvalidOperationException: This SqlTransaction has completed; it is no longer usable.

排查方向及解决方案

1. 分布式锁与数据库死锁排查

  • 调整数据库锁超时参数:Umbraco默认锁超时可能不匹配Azure SQL性能,在appsettings.json中修改配置:
    "Umbraco": {
      "CMS": {
        "DistributedLocking": {
          "SqlServer": {
            "LockTimeout": 30000, // 调整为30秒,可根据实际情况增减
            "RetryCount": 5
          }
        }
      }
    }
    
  • 捕获并分析死锁日志:在Azure Portal开启数据库诊断设置,启用SQL死锁事件捕获,定位死锁关联的资源和进程:
    • 检查是否有自定义代码频繁读写Umbraco核心表(如umbracoNode、cmsPropertyData)
    • 避免在内容发布时段执行批量数据操作

2. 分布式缓存一致性验证

  • 确认共享存储配置:FileSystemMainDomLock必须指向所有实例可读写的同一Azure Blob容器,检查配置准确性:
    "Umbraco": {
      "CMS": {
        "Global": {
          "MainDomLock": "FileSystemMainDomLock",
          "FileSystemMainDomLock": {
            "ContainerName": "umbraco-maindom",
            "ConnectionString": "your-azure-blob-connection-string"
          }
        }
      }
    }
    
  • 启用缓存自动同步:在管理实例配置中开启定时缓存同步,避免公共实例缓存过期不一致:
    "Umbraco": {
      "CMS": {
        "Runtime": {
          "Caching": {
            "DistributedCache": {
              "Enabled": true,
              "SyncInterval": 60 // 每60秒同步一次缓存
            }
          }
        }
      }
    }
    

3. 实例角色分离检查

  • 强制公共实例只读:公共实例必须设置为只读模式,禁止执行内容编辑、发布操作,检查appsettings.json:
    "Umbraco": {
      "CMS": {
        "Hosting": {
          "Slots": {
            "ReadOnly": true // 公共实例必须开启此配置
          }
        }
      }
    }
    
  • 验证Lucene索引同步:管理实例的SyncedTempFileSystemDirectoryFactory需确保索引文件同步至所有公共实例,检查Azure Blob中lucene-indexes容器的访问权限及文件同步状态。

4. 版本补丁升级

  • 升级至13.x最新LTS补丁:Umbraco 13.3.2可能存在分布式锁或缓存同步的已知Bug,升级至同系列最新补丁版本(如13.4.x),官方可能已修复类似问题。

5. Azure资源优化

  • 升级应用服务计划层级:若使用共享/基础层计划,资源瓶颈可能导致锁超时,升级至标准层及以上,确保实例有足够CPU、内存资源。
  • 调整自动缩放策略:避免快速扩容导致多实例同时竞争锁资源,设置至少5分钟的缩放冷却时间。

临时应急方案

问题紧急时可快速恢复:

  1. 暂停公共实例的流量路由
  2. 重启管理实例,等待缓存同步完成
  3. 逐步恢复公共实例流量

内容的提问来源于stack exchange,提问作者Ben D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:14:54