Creating a Forms IIS Server Cluster

You can install Laserfiche Forms on several machines and configure the machines to act as a Forms IIS Server cluster. Using a server cluster can improve performance and increase the number of concurrent users that Laserfiche Forms will support. To configure a Forms Routing Service cluster, see this page.

To create a Forms IIS Server cluster, you must first install and configure Laserfiche Forms on each machine in the cluster. Once each machine has Forms installed, you must create a Network Load Balancing Cluster.

Installing Laserfiche Forms on each machine

  1. Install Laserfiche Forms on each machine that will be in the cluster. Learn more about installing Laserfiche Forms.

    Note: Each machine's operating system must be the same, for instance Microsoft Windows Server 2019.

  2. Open the Laserfiche Forms Configuration page for each Forms installation.
  3. In the Database tab under Server name, specify the database that Forms will use. You must specify the same database for each Forms installation in the cluster.
  4. In the Forms Server tab under Primary Forms Server URL, enter the cluster IP address or cluster name that is shared by every host in the cluster.
  5. On one machine, finish configuring Laserfiche Forms on the Laserfiche Forms Configuration page. Learn more about configuring the Laserfiche Forms Server.

    Note: Only one Forms Server needs to be fully configured through the Laserfiche Forms Configuration page. This specific server in the cluster is running the Laserfiche Forms Routing Service. The service should not be running on other nodes in the cluster. In addition, the Configuration page for each other server in the cluster should only have the database information specified. With Forms 11 or above, you can configure a Forms Routing Service cluster with multiple Routing Services running. Learn more about Configuring a Forms Routing Service Cluster.

    [Optional] Configure Forms auditing with Laserfiche Audit Trail. If adding auditing to an existing cluster, recycle the FormsAppPool and restart the routing service to update the configuration on all servers.

  6. On the machines that do not have the Routing Service running, perform following configuration:

    Change the web.config to connect to the Routing Service on the fully configured Forms server by changing the endpoints such as following:

    <client>
    	<endpoint address="net.tcp://{routing-server-name}:8176/lfinstance" 
    		binding="netTcpBinding" bindingConfiguration="timeoutBinding" 
    		contract="Laserfiche.Forms.Routing.IInstanceProcessing" name="">
    		<identity>
    			<userPrincipalName value="{someone@example.com}" />
    		</identity>
    	</endpoint>
    	<endpoint address="net.tcp://{routing-server-name}:8168/lfrouting" 
    		binding="netTcpBinding" bindingConfiguration="timeoutBinding" 
    		contract="Laserfiche.Forms.Routing.IRoutingEngineService" name="">
    		<identity>
    			<userPrincipalName value="{someone@example.com}" />
    		</identity>
    	</endpoint>
    	<endpoint address="net.tcp://{routing-server-name}:8268/lfpushnotification" 
    		binding="netTcpBinding" bindingConfiguration="timeoutBinding" 
    		contract="Laserfiche.PushNotificationService.SharedContracts.IPushNotificationService" 
    		name="">
    		<identity>
    			<userPrincipalName value="{someone@example.com}" />
    		</identity>
    	</endpoint>
    	<endpoint address="net.tcp://{routing-server-name}:8732/lfautotrigger" 
    		binding="netTcpBinding" bindingConfiguration="timeoutBinding" 
    		contract="FormsModel.SharedContracts.IAutoTrigger" name="">
    		<identity>
    			<userPrincipalName value="{someone@example.com}" />
    		</identity>
    	</endpoint>
    	<endpoint address="net.tcp://{routing-server-name}:8736/lfformexport" 
    		binding="netTcpBinding" bindingConfiguration="timeoutBinding" 
    		contract="FormsModel.SharedContracts.IFormExportService" name="">
    		<identity>
    			<userPrincipalName value="{someone@example.com}" />
    		</identity>
    	</endpoint>
    	<endpoint address="http://localhost:5048/LicenseManager/service" 
    		binding="ws2007HttpBinding" bindingConfiguration="WS2007HttpBinding_ILicenseManager" 
    		contract="LicenseManagerService.ILicenseManager" name="LicenseManagerService">
    		<identity />
    	</endpoint>
    	<endpoint address="http://localhost:5048/LicenseManager/service" 
    		binding="ws2007HttpBinding" bindingConfiguration="WS2007HttpBinding_ILicenseManager" 
    		contract="LicenseManagerService.ILicenseManager2" name="LicenseManagerService2">
    		<identity />
    	</endpoint>
    	<endpoint address="http://localhost:5048/LicenseManager/sts" 
    		binding="ws2007HttpBinding" 
    		bindingConfiguration="WS2007HttpBinding_ILFSecurityTokenService" 
    		contract="LicenseManagerSTS.ILFSecurityTokenService" name="LicenseManagerSTS">
    		<identity />
    	</endpoint>
    	<endpoint address="net.tcp://{routing-server-name}:8738/lflicensing" 
    		binding="netTcpBinding" bindingConfiguration="timeoutBinding" 
    		contract="FormsModel.SharedContracts.ILicensingService" name="" >
    		<identity>
    			<userPrincipalName value="someone@example.com" />
    		</identity>
    	</endpoint>
    	<endpoint address="net.tcp://{routing-server-name}:8170/attachmentTransfer" 
    		binding="netTcpBinding" bindingConfiguration="timeoutBindingStreamed" 
    		contract="FormsModel.SharedContracts.IAttachmentTransferService" name="">
    		<identity>
    			<userPrincipalName value="{someone@example.com}" />
    		</identity>
    	</endpoint>
    	<endpoint address="net.tcp://{routing-server-name}:8174/lookup" 
    		binding="netTcpBinding" bindingConfiguration="timeoutBinding" 
    		contract="FormsModel.SharedContracts.IRoutingLookupService" name="">
    		<identity>
    			<userPrincipalName value="{someone@example.com}" />
    		</identity>
    	</endpoint>
    </client>

    Note: The lflicensing endpoint is only required for Laserfiche Forms prior to version 11 Update 3.

    Note: The lookup service endpoint address only needs to be updated to {routing-server-name} if the Forms server is configured to use the routing service as a proxy to execute lookup rules; otherwise use localhost.

    • {routing-server-name} is the machine name of the host that has the Routing Service installed and running.
    • In the <identity> nodes, someone@example.com is the user that the Laserfiche Forms Routing Service is running under, required only when the service is using a domain account.

Installing and configuring a new network load balancing (NLB) cluster

Once you've installed Forms on each machine that will be in the cluster, you'll need to install Network Load Balancing, create a new Network Load Balancing Cluster, and add each machine to the cluster.

Configuring Forms Notification Service for real-time updates on the Tasks page in an NLB cluster

  1. Add a port rule in the NLB cluster to route traffic from port 8181 to the Laserfiche Notification Service on the primary Forms server.
  2. Configure the primary Forms server that will run the Laserfiche Forms Routing Service, Laserfiche Notification Master Service, and Laserfiche Notification Hub Service.
    • In the Notification Service tab, specify the machine name in the Laserfiche Notification URL to be the cluster IP address or cluster full internet name.
  3. Configure other Forms servers in the NLB cluster to use the Laserfiche Notification Master Service and Laserfiche Notification Hub Service on the primary Forms server.
    • Stop the Laserfiche Notification Hub Service and Laserfiche Notification Master Service, and change the startup type for each service to disabled.