Rocket.Chat HA architecture

I have a question about the preferred Rocket.Chat architecture.
We have 2 geographically separated head offices (network delay between them is about 60ms). For example, let’s call City A and City B.
I would like to deploy Rocket.Chat in high availability and fault tolerance mode.
In the ideal case, we would like all local conversations of users of one city not to go beyond its boundary whenever possible.
That is, User1 from city A writes to User2 from city A and this happens without the participation of the Rocket.Chat server of City B.
Conversely, if User3 from city B writes to User4 from city B, then this happens without the participation of the Rocket.Chat server of City A.
But it seems to me that in this form this will not work at all with a single address space such as rocketchat.company.com and will only be possible by federation of two different Rocket.Chat installations.
In this case, I want to understand how to maximize the localization of communication between users of one city.
In general, we plan to deploy 2 Rocket.Chat instances in one city, and Rocket.Chat third instance in the second city.
This is due to the high availability of MongoDB, where it is recommended to use an odd number of servers starting from 3.

We also plan to use AmazonS3 as a storage for files, namely the implementation of Minio.
What options we have in terms of minimizing traffic between cities?
That is, that the files of users of City A are located in the data center of City A, and the files of users of City B are in the data center of City B.

If there are any guides for deploying Rocket.Chat servers in high availability and fault tolerance mode, please share a link to them.

Thanks!

1 Like