多实例部署环境下Orion-LD租户偶发无法识别问题咨询
OrionLD多实例偶发租户不存在问题诱因分析
- OrionLD 0.8.0版本租户本地缓存未同步:该版本的OrionLD会将租户信息缓存到实例本地内存中,没有内置多实例缓存同步机制。当你携带
NGSILD-Tenant头的实体创建请求被负载均衡转发到其中一台实例时,仅该实例会在本地缓存新增租户信息,另一台实例本地缓存无对应租户记录,收到请求时就会返回NonExistingTenant错误。 - 低版本租户元数据持久化逻辑缺陷:OrionLD 0.8.0版本不会在租户首次出现时主动将租户元数据持久化到共享MongoDB实例,租户信息仅存在于接收首次请求的实例本地内存,其他实例无法通过共享存储获取租户信息,只有当该租户下有数据写入MongoDB后,其他实例才可能被动识别租户,该逻辑问题在后续稳定版本已修复。
- 负载均衡会话保持配置缺失:如果LoadBalancer未配置基于
NGSILD-Tenant请求头的会话转发规则,同一个租户的读写请求会被随机分发到不同OrionLD实例,当查询请求落到未缓存租户信息的实例上时就会触发报错。 - 单实例MongoDB访问异常:排查无法识别租户的那台OrionLD实例是否存在MongoDB连接异常、权限不足问题,导致实例无法读取MongoDB中该租户关联的实体数据,无法触发本地租户缓存的自动创建。
临时修复方案参考
- 为LoadBalancer配置基于
NGSILD-Tenant请求头的会话保持策略,确保同一个租户的所有请求都转发到同一台OrionLD实例 - 升级OrionLD到最新稳定版本,规避低版本租户缓存和持久化的已知缺陷
- 对新租户首次创建请求时,同时向所有OrionLD实例发送一次携带对应
NGSILD-Tenant头的请求,主动触发所有实例的本地租户缓存创建
内容的提问来源于stack exchange,提问作者yuskr
相关产品推荐
相关产品推荐

