Umbraco Examine File Locking Azure Служба приложений - PullRequest
0 голосов
/ 28 февраля 2020

Мы работаем над веб-сайтом Umbraco 8.1.5 в серии служб приложений с балансировкой нагрузки Azure и в одном из них возникают проблемы с блокировкой файлов Examine / Lucene. Мы попытались обновить Examine до версии 1.0.2, но это все равно не помогло.

Из того, что я вижу, мы следовали всей документации по настройке Umbraco для работы в Azure среде службы приложений с балансировкой нагрузки .

Кто-нибудь получил балансировку нагрузки при работе с Umbraco 8 в Azure Службах приложений, которые масштабируются / автоматически масштабируются?

Службы приложений

Администратор - один экземпляр, нет автоматическое масштабирование Front-end - масштабируется до двух экземпляров

На одном из интерфейсных серверов работает наш контроллер поиска, который обращается к внешнему индексу, но в другом случае он сообщает об ошибке, говоря, что файлы индекса заблокированы. Ниже приводятся сообщения об ошибках.

Если масштабировать во внешнем интерфейсе до одного экземпляра, поиск будет работать постоянно.

Настройка

Роли сервера

Admin Web.config Настройка приложения

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

Front-end Настройка приложения web.config

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

Это поднято в следующих composer

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: Could не создавать поисковик индекса с помощью предоставленного каталога lucene ---> Lucene. Net .Index.CorruptIndexException: do c счетчики различаются для сегмента _x6: fieldsReader показывает 40, а сегментInfo показывает 41

Ошибка 3

Lucene. Net .Store.LockObtainFailedException: истекло время ожидания блокировки: SimpleFSLock@D: \ home \ site \ wwwroot \ App_Data \ TE MP \ ExamineIndexes \ External \ write.lock

Заранее спасибо

Andy

1 Ответ

0 голосов
/ 28 февраля 2020

Параметр WEBSITE_DISABLE_OVERLAPPED_RECYCLING необходимо установить на странице конфигурации на портале Azure. Наличие этого в web.config вам не поможет.

Я думаю, что есть много улучшений в отношении проблем с блокировкой в ​​8.4, поэтому попробуйте обновить как минимум до 8.4.x.

...