Configure file system & Render Client in multihomed environments
Hints
File systems
The assets and assets-temp directories (on OS level) must not be on different physical volumes
Due to the fact that the temporary file system must be named 'temp' it's necessary to rename the default assets-temp filesystem from 'temp' to 'assets-temp' in each installation! The default is correct from 4.7.0.
Each server needs a temporary file system, which must be configured in Master Data/File Systems. It must be of type "Other". All servers must use this censhare filesystem. They need their own local directory. An own asset-filesystem and assets-temp filesystem for the new server is only necessary if favored and if the remote server must have local access to an asset filesystem.
File system configuration
censhareAdmin/Configuration/Services/Filesystem
On servers with their own filesystem: make sure that a separate directory for each asset-temp - type Temp and temp - type Other is configured and exists in the filesystem.
Create a new configuration for the new server with assets and temp filesystem.
Add at least a new temporary filesystem for each server configuration (usage=temp and url=file:work/temp/ ).
Render Client configuration in multiple server environment
censhareAdmin/Configuration/Services/Renderer
Our general recommendation is to have at least one renderer instance for each server. If this is the case the configuration must not be changed.
In certain cases, it may be possible to have only one renderer. But this has to be checked case by case depending on what tasks are running on which server, load, local servers (e.g. cluster) or remote servers, etc. For a test environment one renderer logged in to the master server should be OK. All other servers are rendering over the master server. If this is the case the configuration must be changed (indirect).
Important Information (indirect configuration) - approval: An indirect configuration over the master server in a productive environment should only be configured
after approval of the censhare development team
if the censhare application servers are local node/cluster servers
advantages in contrast to remote servers at different locations
here are no indirect database / RMI connections configured
possible network latency and bandwidth problems are not that critical as within remote server environments
if there is more than 1 renderer on the master server connected, for example, a multi-instance InDesign server
if the rendering jobs (layout/content editor, content updates, ...) are not that much
Important information (indirect configuration) - configuration: * Create a new activated configuration for the master server (Invocations are set to 0)
Create a new deactivated configuration for all servers and set the Invocations to 2
Due to setting the Invocations to 2, the real limit will be omitted (it would be automatically set by the count of the connected renderer instances).
Due to that fact, theoretically, if you have 1 master server and 2 node servers (x2 indirect instances) means that 5 renderer instances should be connected to the master server.
After that a restart of all censhare servers and a re-login of the renderer client on the master server is necessary
Note for update/refresh configuration:
If you change something in any service, you have to restart both censhare servers to confirm this. Special cases are the image service and the renderer service. For further information about the refresh configuration process read this.
FAQ File Systems
Question
Server 1 ------------------- Server 2
Assets1 Assets2
Temp1 Temp2
If I have two servers each with their own file system, does server 1 need assets2 and temp2 mounted as NFS. And server 2 assets 1 and temp1 as nfs.
Answer
You don't have to mount Assets2/Temp2 at Server1 and backward. The server gets the file if requested, from the other server.
Troubleshooting File Systems
1. Symptom
2012.03.01-15:08:53.368 WARNING: T037: ImageService: server.open: Cannot determine path to temp filesystem 'temp[]' - fallback to system temp
java.lang.NullPointerException
at com.censhare.manager.imagemanager.ImageServiceImpl.setTmpPath(ImageServiceImpl.java:201)
at com.censhare.manager.imagemanager.ImageServiceImpl.innerStart(ImageServiceImpl.java:61)
at com.censhare.server.support.service.AbstractStaticService.start(AbstractStaticService.java:108)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.censhare.support.service.ServiceCall$Sync.innerExecute(ServiceCall.java:387)
at com.censhare.support.service.ServiceCall$Sync.innerRun(ServiceCall.java:514)
at com.censhare.support.service.ServiceCall.run(ServiceCall.java:207)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
at com.censhare.support.util.ManagedInterruptThread.run(ManagedInterruptThread.java:81)
1. Cause
If the Default Workfilesystem in Configuration | General is named 'temp', but not configured in Configuration | Services | Filesystem
2. Symptom
Caused by: com.censhare.server.rmi.RMIServerException[am.exCreatingStorageUrl]: Es kann keine Storage URL erstellt werden: ( assetID=15162, key=pdf, elementIndex=1, mimetype=application/pdf, filesystem=null, relPath=null, localFile=null)
-----cause-----
java.io.IOException: Can' find URL creator 'null'
2. Cause
If the temporary filesystem within Configuration | Services | Filesystem has not Usage 'Temp', but for example 'Other'
3. Symptom
2012.03.01-15:57:56.628 <pe> [URLStreamingServlet] WARNING: Error in servlet request:
javax.servlet.ServletException: Error streaming file for: /temp
at com.censhare.webclient.webserver.servlet.URLStreamingServlet.serveRequest(URLStreamingServlet.java:119)
at com.censhare.webclient.webserver.servlet.WebAppSessionServlet.doServe(WebAppSessionServlet.java:49)
at com.censhare.webclient.webserver.servlet.WebAppSessionServlet.doGet(WebAppSessionServlet.java:32)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:527)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1216)
at com.censhare.webclient.webserver.servlet.CacheFilter.doFilter(CacheFilter.java:45)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1187)
at org.eclipse.jetty.servlets.UserAgentFilter.doFilter(UserAgentFilter.java:77)
at org.eclipse.jetty.servlets.GzipFilter.doFilter(GzipFilter.java:133)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1187)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:421)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:493)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:225)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:930)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:358)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:866)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:245)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113)
at org.eclipse.jetty.server.Server.handle(Server.java:351)
at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:594)
at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:1042)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:549)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:211)
at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:424)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:506)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:436)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.IllegalArgumentException: Only the 'temp' filesystem is possible here.
3. Cause
The default work filesystem in server.xml is not named 'temp' but for example 'tmp'.