2

我们在一系列负载平衡的 Azure 应用服务中运行 Umbraco 8.1.5 网站,并且在其中一个实例中存在检查/Lucene 文件锁定问题。我们已经尝试将检查升级到 1.0.2,但这仍然没有帮助。

据我所知,我们已经按照所有文档来设置 Umbraco 以在 Azure 应用服务负载平衡环境中运行。

有没有人在缩放/自动缩放的 Azure 应用服务中使用 Umbraco 8 进行负载平衡?

应用服务

管理员 - 一个实例,没有自动缩放前端 - 扩展到两个实例

在其中一个前端服务器上,我们访问外部索引的搜索控制器正在工作,但在另一个实例上,它错误地指出索引文件已被锁定。下面提供了错误消息。

如果我们将前端扩展到单个实例,搜索始终有效。

设置

服务器角色

管理员 web.config 应用设置

<add key="UmbracoServerRegistrar" value="master" />

前端 web.config 应用设置

<add key="UmbracoServerRegistrar" value="slave" />

这是在以下作曲家中拾取的

public class ServerRegistrarComposer : IUserComposer
{
    public void Compose(Composition composition)
    {
        var config = System.Configuration.ConfigurationManager.AppSettings["UmbracoServerRegistrar"];
        if (config != null && config.Equals("slave", StringComparison.InvariantCultureIgnoreCase))
        {
            composition.SetServerRegistrar(new FrontEndReadOnlyServerRegistrar());
        }
        else
        {
            composition.SetServerRegistrar(new MasterServerRegistrar());
        }
    }
}

注册商

public class FrontEndReadOnlyServerRegistrar : IServerRegistrar
{
    public IEnumerable<IServerAddress> Registrations
    {
        get { return Enumerable.Empty<IServerAddress>(); }
    }
    public ServerRole GetCurrentServerRole()
    {
        return ServerRole.Replica;
    }
    public string GetCurrentServerUmbracoApplicationUrl()
    {
        return null;
    }
}
public class MasterServerRegistrar : IServerRegistrar
{
    public IEnumerable<IServerAddress> Registrations
    {
        get { return Enumerable.Empty<IServerAddress>(); }
    }
    public ServerRole GetCurrentServerRole()
    {
        return ServerRole.Master;
    }
    public string GetCurrentServerUmbracoApplicationUrl()
    {
        return null;
    }
}

Lucene 应用程序设置

<add key="WEBSITE_DISABLE_OVERLAPPED_RECYCLING" value="1" />
<add key="umbracoLocalTempStorage" value="EnvironmentTemp" />
<add key="Umbraco.Core.LocalTempStorage" value="EnvironmentTemp" />
<add key="Umbraco.Examine.LuceneDirectoryFactory" value="Examine.LuceneEngine.Directories.SyncTempEnvDirectoryFactory, Examine" />

错误信息

错误 1

无法索引队列项目,索引当前被锁定

错误 2

System.ApplicationException:无法使用提供的 lucene 目录创建索引搜索器---> Lucene.Net.Index.CorruptIndexException:段 _x6 的文档计数不同:fieldsReader 显示 40 但 segmentInfo 显示 41

错误 3

Lucene.Net.Store.LockObtainFailedException:锁获取超时:SimpleFSLock@D:\home\site\wwwroot\App_Data\TEMP\ExamineIndexes\External\write.lock

提前致谢

安迪

4

1 回答 1

4

WEBSITE_DISABLE_OVERLAPPED_RECYCLING 设置需要在 Azure 门户的配置页面中进行设置。将它放在 web.config 中不会对您有所帮助。

我认为 8.4 在锁定问题方面有很多改进,因此请尝试至少升级到 8.4.x。

于 2020-02-28T12:16:07.427 回答