9.6 Load Balancing

The Content Editor Appliance is configured by using HAProxy for load balancing. Load balancing refers to efficiently distributing incoming network traffic across a group of backend servers, also known as a server farm or server pool.For collaborative editing to function correctly, you need to ensure that all the users editing the same document are served by the same Content Editor Appliance. Using the WOPI protocol, the https URL includes a unique identifier (WOPISrc) for use with this document. Thus load balancing can be done by using WOPISrc – ensuring that all URLs that contain the same WOPISrc are sent to the same Content Editor Appliance.

The browser reaches the proxy with the HTTPS protocol. The proxy terminates the HTTPS connection and passes traffic to backends via HTTP.

NOTE:For load balancing to work, all the nodes must run the same version of Content Editor Appliance. You cannot upgrade the Content Editor with one node and continue with the older version on another node.

For versions earlier than CE 23.2, in the Content Editor’s config file, in /var/opt/novell/contenteditor/loolwsd/loolwsd.xml, or in the command line which startsloolwsd daemon, disable SSL and enable SSL termination.

For versions CE 23.2 and later, in the Content Editor’s config file, in/etc/coolwsd/coolwsd.xml, or in the command line which starts coolwsd daemon, disable SSL and enable SSL termination.

The SSL termination option in the config file enables integration of Content Editor with SSL termination proxies, which handle incoming SSL connections, decrypt the SSL and pass on the unencrypted request to the server. In this setup only the proxy server has to have proper SSL settings, the Content Editor server is hidden behind it, and Content Editor communicates unencrypted with the proxy.

Load Balancing for versions earlier than CE 23.2

frontend loolwsd
       bind *:443 ssl crt /path/to/your/certificate_and_key.pem
       mode http
       default_backend loolwsd

backend loolwsd
      timeout tunnel 3600s
      mode http
      balance url_param WOPISrc check_post
      hash-type consistent
      server loolwsd01 127.0.0.1:9993
      server loolwsd02 127.0.0.1:9994

Sample configuration for Load Balancing with HAProxy

Add the following blocks to haproxy.cfg:

Frontend loolwsd
bind *:443 ssl crt /Path to your certificate_and_key.pem
http-request set-header X-HAProxy-loolwsd %[url_param(WOPISrc)]
mode http 
default_backend loolwsd

backend loolwsd 
timeout tunnel 3600s 
mode http
balance hdr(X-HAProxy-loolwsd)
server lool1 <CE Server 1 IP>:9980
server lool2 <CE Server 2 IP>:9980           
server lool3 <CE Server 3 IP>:9980 
server loolN <CE Server N IP>:9980

Here CE server 1, 2 and 3 are different CE nodes.

Load Balancing for CE 23.2 and above versions

frontend coolwsd
bind *:443 ssl crt /path/to/your/certificate_and_key.pem
mode http
default_backend coolwsd

backend coolwsd
timeout tunnel 3600s
mode http
balance url_param WOPISrc check_post
hash-type consistent
server coolwsd01 127.0.0.1:9993
server coolwsd02 127.0.0.1:9994

Start Docker containers as described above, with -p 127.0.0.1:9993:9980 and -p 127.0.0.1:9994:9980.

Sample configuration for Load Balancing with HAProxy

Add the following blocks to haproxy.cfg:

Frontend loolwsd
bind *:443 ssl crt /Path to your certificate_and_key.pem
balance balance url_param WOPISrc check_post
mode http 
default_backend coolwsd 
backend coolwsd 
timeout tunnel 3600s 
mode http
balance hdr(X-HAProxy-loolwsd)
server cool1 <CE Server 1 IP>:9980
server cool2 <CE Server 2 IP>:9980 
server cool3 <CE Server 3 IP>:9980 
server coolN <CE Server N IP>:9980

Here CE server 1, 2 and 3 are different CE nodes.

NOTE:If users are not able to perform an Online Edit when Filr is configured with AAF and CE is configured with Ha-Proxy Load Balancer, then add enable.content.editor.check=false to/opt/novell/filr/apache-tomcat/webapps/ssf/WEB-INF/classes/config/ssf-ext.properties and restart the Filr service.