Question

Sync between application server when setting up load balancer

I tried setting up a load balancer and 2 app servers as Academy guided. The load balancer works well, but once I customize something, only one app server is being built. Therefore, the changes are not replicated in the other servers. How to make it replicated to other servers automatically?

Like 0

Like

8 comments

Dear Van,

 

Do you mean that changes made in the configuration are not reflecting on other nodes? 

 

Best regards,
Angela

Yes, I mean the javascript files are not changed on the other nodes. I tried compiling all and checked the log file. It seems that the build ran only on one node. I haven't checked the case of installing package yet.

Van Ly,

Currently, there is no functionality that synchronises those files. You can either change them manually on all nodes or use third-application tools to synchronise files. 

 

Best regards,
Angela

Hello,

 

I created a business process. But if a user is connecting to another server than the original server which the business process was created, that user cannot run that process until we manually restart that server (or call UnloadAppDomain).

 

In addition, the UnloadAppDomain service is affecting only a server reached by the user at that time. Other servers are not affected.

One more thing. I added some dialog. If 2 users are connecting to the same server, the task panel shows immediately the task assigned . However, if the user who triggers the process is connecting to a different server than the other, the task is not shown immediately. We have to refresh the page, or close/open the task panel to see it.

 

I see that this is the problem of Websocket/SignalR, which only announce to the users connecting to the same server. Is there any switch to make it push to other servers, through Redis for example?

 

I tried some ways to sync files among servers, but it seems to hurt performance a little bit, and it generates conflicts sometime. Is there any better mechanism?

Dear Van Ly,

 

Creatio webapp is stateful. The static content, js schemas and dll are stored in file system. Lets say there are 3 nodes. I changed some schema or updated the process on one of them. During the saving process, schema will appear in the file system. After publishing the process, the correspondent file will be also generated in the file system. It means that it is necessary to move these files to other nodes to reflect your changes. 

The only workaround -

1. the first node is being disabled in balancer. 

2. one performs necessary changes on it.

3. the first node is enabled in balancer

4. the second node is disabled to be deployed out of the 1st one.

5. the second node is enabled in balancer

6. the third node is disabled from balancer to be deployed out of the 1st or the 2nd one.

 

There are no other options since on the first stages of Creatio development, we did not expect that there might be demand in balancers. This idea only appeared in some time. That is why there are some complications.

 

Regards,

Dean

Finally I come up with a solution: put load balancer under active / passive mode.

backend creatio
    stick-table type integer size 1 nopurge
    stick on int(1)
 
    server node_1 x.x.x.x check check on-marked-down shutdown-sessions
    server node_2 x.x.x.x check backup on-marked-down shutdown-sessions

In this mode, the websocket messages will always work. The configuration changes will be sync via syncthing. 1 way sync will not introduce conflicts.

Show all comments