Umbraco 检查文件锁定 Azure 应用服务
Umbraco Examine File Locking Azure App Service
我们运行在一系列负载平衡的 Azure 应用服务中使用 Umbraco 8.1.5 网站,并且在其中一个实例中存在 Examine/Lucene 文件锁定问题。我们已尝试将 Examine 升级到 1.0.2,但这仍然没有帮助。
据我所知,我们已经遵循了在 Azure 应用服务负载平衡环境中 运行 设置 Umbraco 的所有文档。
有没有人在 scaled/auto-scaling 的 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
Cannot index queue items, the index is currently locked
错误 2
System.ApplicationException: Could not create an index searcher with the supplied lucene directory ---> Lucene.Net.Index.CorruptIndexException: doc counts differ for segment _x6: fieldsReader shows 40 but segmentInfo shows 41
错误 3
Lucene.Net.Store.LockObtainFailedException: Lock obtain timed out: SimpleFSLock@D:\home\site\wwwroot\App_Data\TEMP\ExamineIndexes\External\write.lock
提前致谢
安迪
需要在 Azure 门户的配置页面中设置 WEBSITE_DISABLE_OVERLAPPED_RECYCLING 设置。把它放在 web.config 中对你没有帮助。
我认为 8.4 在锁定问题方面有很多改进,因此请尝试至少升级到 8。4.x。
我们运行在一系列负载平衡的 Azure 应用服务中使用 Umbraco 8.1.5 网站,并且在其中一个实例中存在 Examine/Lucene 文件锁定问题。我们已尝试将 Examine 升级到 1.0.2,但这仍然没有帮助。
据我所知,我们已经遵循了在 Azure 应用服务负载平衡环境中 运行 设置 Umbraco 的所有文档。
有没有人在 scaled/auto-scaling 的 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
Cannot index queue items, the index is currently locked
错误 2
System.ApplicationException: Could not create an index searcher with the supplied lucene directory ---> Lucene.Net.Index.CorruptIndexException: doc counts differ for segment _x6: fieldsReader shows 40 but segmentInfo shows 41
错误 3
Lucene.Net.Store.LockObtainFailedException: Lock obtain timed out: SimpleFSLock@D:\home\site\wwwroot\App_Data\TEMP\ExamineIndexes\External\write.lock
提前致谢
安迪
需要在 Azure 门户的配置页面中设置 WEBSITE_DISABLE_OVERLAPPED_RECYCLING 设置。把它放在 web.config 中对你没有帮助。
我认为 8.4 在锁定问题方面有很多改进,因此请尝试至少升级到 8。4.x。