Issues with Multiple IIS Worker processes running Umbraco.
We have a pretty large umbraco 7.15.3 site.
Its currently load-balanced, but we wanted to get a little more use out of each machine by giving it multi worker processes. This would essentially let IIS run multiple instances of the site on each server.
We've hit a couple issues trying to use multi processes, so I wanted to see if anyone was successful with this setup.
One of the core issues is that umbraco identifies itself by machine name, instead of process id.
This leads into the first issue was that content cache was not getting updated between processes. Lets say there were 3 processes on the box. If admin pushed a change, then only 1 of those processes was pulling in the update.
I believe I fixed this issue by setting: <XmlContentCheckForDiskChanges>True</XmlContentCheckForDiskChanges>
My theory was that the since update instructions are based on machine name, then the first process to receive the update would clear that content change from the queue. Thus leaving the other processes to not get notified of a change. Luckily the other processes can watch the cache file for other processes to change it. This fix is not in production yet, but staging testing seemed to be fine.
The second issue, that I havent been able to solve is with lucene. I think there is a conflict with multiple processes using the indexes. I tried adding {appdomainappid} to our index paths to try and separate indexes for each process, but that didnt help.
The error im randomly receiving with lucene is the following error:
Exception Details: Lucene.Net.Store.AlreadyClosedException: this IndexReader is closed
I am thinking that one of the processes is keeping the others from opening the index, but I havent been able to narrow it down.
Here is the useful bit from the stack track:
[AlreadyClosedException: this IndexReader is closed]
Lucene.Net.Index.IndexReader.EnsureOpen() +74
Lucene.Net.Index.DirectoryReader.GetFieldNames(FieldOption fieldNames) +20
Examine.LuceneEngine.Providers.LuceneSearcher.GetSearchFields() +98
UmbracoExamine.UmbracoExamineSearcher.GetSearchFields() +12
Examine.LuceneEngine.Providers.BaseLuceneSearcher.CreateSearchCriteria(String type, BooleanOperation defaultOperation) +38
UmbracoExamine.UmbracoExamineSearcher.CreateSearchCriteria(String type, BooleanOperation defaultOperation) +10
Issues with Multiple IIS Worker processes running Umbraco.
We have a pretty large umbraco 7.15.3 site. Its currently load-balanced, but we wanted to get a little more use out of each machine by giving it multi worker processes. This would essentially let IIS run multiple instances of the site on each server.
We've hit a couple issues trying to use multi processes, so I wanted to see if anyone was successful with this setup.
One of the core issues is that umbraco identifies itself by machine name, instead of process id.
This leads into the first issue was that content cache was not getting updated between processes. Lets say there were 3 processes on the box. If admin pushed a change, then only 1 of those processes was pulling in the update.
I believe I fixed this issue by setting:
<XmlContentCheckForDiskChanges>True</XmlContentCheckForDiskChanges>
My theory was that the since update instructions are based on machine name, then the first process to receive the update would clear that content change from the queue. Thus leaving the other processes to not get notified of a change. Luckily the other processes can watch the cache file for other processes to change it. This fix is not in production yet, but staging testing seemed to be fine.The second issue, that I havent been able to solve is with lucene. I think there is a conflict with multiple processes using the indexes. I tried adding
{appdomainappid}
to our index paths to try and separate indexes for each process, but that didnt help.The error im randomly receiving with lucene is the following error:
Exception Details: Lucene.Net.Store.AlreadyClosedException: this IndexReader is closed
I am thinking that one of the processes is keeping the others from opening the index, but I havent been able to narrow it down.
Here is the useful bit from the stack track:
[AlreadyClosedException: this IndexReader is closed] Lucene.Net.Index.IndexReader.EnsureOpen() +74 Lucene.Net.Index.DirectoryReader.GetFieldNames(FieldOption fieldNames) +20 Examine.LuceneEngine.Providers.LuceneSearcher.GetSearchFields() +98 UmbracoExamine.UmbracoExamineSearcher.GetSearchFields() +12 Examine.LuceneEngine.Providers.BaseLuceneSearcher.CreateSearchCriteria(String type, BooleanOperation defaultOperation) +38 UmbracoExamine.UmbracoExamineSearcher.CreateSearchCriteria(String type, BooleanOperation defaultOperation) +10
is working on a reply...