"Cloning" gameservers - is it possible?

I’m a dev for a team that runs multiple gameservers which are meant to be 100% perfect clones of each other, save for a few server-specific files (such as IP address info and game server names). All of our servers run on Ubuntu 16.04 x64. We also have a plugin dev who makes periodic changes and bugfixes to the plugins used on our servers. Is it possible to accomplish something similar to the following(?):

  • A “master” server which is mainly responsible for being the server the others mirror off of. Based on how Syncthing works, this will just be the server that changes are pushed to.
  • Ignoring only one or two specific files across all devices (which will all have the same filename). It seems this is a feature and I can just use .stignore for this
  • The ability for the plugin dev to ONLY sync, say, the plugins folder, instead of the ~8GB of other content - such that if he makes changes or edits to the plugin(s), they will be reflected across all servers.

Is this possible or feasible in any way? Trying to keep tabs on every modified file across every server to be sure that each server is identical in gameplay is starting to become a very stressful task and we are looking for something to automate this, even if it’s just a little bit.

Thank you all for your help, in advance!

Syncthing is bidirectional, so any changes on any node will be propagated to others.

Use the right tool for the right job. Take a look at ansible because this seems like a standard use-case for a configuration management tool.

Looking into what Ansible has to offer, I’m not sure if we’re looking for anything in that sort of price range or scale. I mean, we’ll have at MOST, six or so servers. We’re a small team and I work a job that’s able to keep these small servers afloat - None of us would in any way be able to afford something of the scale and scope that Ansible offers. Thank you for the suggestion, though.

That does solve/answer my first point, but what about the others? It’s been a long time since I’ve ever used syncthing and I wasn’t sure if it was possible to only sync an incredibly small portion of the files between, say, the main server and our plugin dev’s device?. I know that the .stignore file is meant for this, but I was unsure if it was client-side or “server”-side - such that the .stignore file must be the same for all devices or if you can specify what is synced and what is ignored for each device being synced.

There is no client or server in syncthing, as all peers are of equal power. Ignore files means that local files existing matching the patterns will be ignored, and remote files suggested for download will be ignored. If you set ignores on the receiving side only, and no ignores on the sending side, then receiving side will always look out of sync, as it’s not downloading the files the sending side has suggested. Yet from technical perspective it will most likely do what you want, as in download some set of files.

The best option is to have the patterns the same on all machines.

File ownership is not maintained. Even if everything else works for you I would suggest this would be a deal breaker.

Looking into what Ansible has to offer, I’m not sure if we’re looking for anything in that sort of price range or scale.

I think Bt90 wasn’t talking about the commercial infrastructure on ansible dot com

But the “ansible” tool, which is a tool to keep a server configuration in a yaml file and let it automatically apply it to one or more servers. I’m using it with some friends to configure one server. We keep the ansible config files in a git repository. (a random tutorial found googling “ansible tutorial” An Ansible2 Tutorial | Servers for Hackers )

There’s also Salt, Chef, Puppet, etc – a whole world of tools.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.