Process level redundancy
This page describes how Dante can be configured for process level-redundancy. For a general overview of fault tolerance and load balancing in Dante, see the main page on redundancy.
Process level redundancy
The Dante server supports process level redundancy via the -N option, which can be used at server startup to specify how many Dante main mother processes should be forked. Any of these Dante processes can accept new clients at the IP-address and port number the server binds to to receive client requests.
Should any of these mother processes terminate, the other mother processes will continue to accept new client requests. Of the clients that were previously accepted by the terminated mother process, any active clients that have fully completed SOCKS protocol processing will continue to work uninterrupted, but client requests that have not yet finished SOCKS protocol processing will be lost.
One of the mother processes has special status and will create new server processes to replace any of the other mother processes if they terminate. If this special mother process terminates it will not be replaced, but the other mother processes will continue to accept requests. The following type of errors will also be written to the log if the main mother process terminates for some reason, so this should be a detectable event:alert: run_io(): mother unexpectedly closed the IPC control channel: mother unexpectedly exited
This type of redundancy primarily protects against potential resource leaks or bugs in Dante or the operating system, that could theoretically lead to a server failure, or user mistakes, such as server processes being accidentally killed by an administrator.
The cost of this type of redundancy is slightly decreased resource utilisation, since each mother process maintain their own pool of child processes, which will likely lead to active clients being spread over a larger number of processes than would be the case if only one server process had been used (the default configuration).
Process level redundancy only handles software failures, and does not address the machine as a whole. It does also not provide any significant load balancing effect since all operations are still performed on the same machine.
Example Dante configuration
To enable process level redundancy, start Dante with the -N option. For example, to fork four mother processes rather than the single default one:
sockd ... -N 4