Ipswitching in an Nginx can be done by Wackamole. Wackamole is an application that helps with making a cluster highly available. It manages a bunch of virtual IPs, that should be available to the outside world at all times. Wackamole ensures that a single machine within a cluster is listening on each virtual IP address that Wackamole manages. If it discovers that particular machines within the cluster are not alive, it will almost immediately ensure that other machines acquire these public IPs. At no time will more than one machine listen on any virtual IP. Wackamole also works toward achieving a balanced distribution of number IPs on the machine within the cluster it manages.

Wackamole operates on a cluster of tightly connected machines (all on the same LAN). It works by managing a pool of IP addresses that you expect to be available at all times. These IP addresses are virtual (meaning no machine has any of those IPs as its default IP address). Wackamole will work to ensure that all of the IP addresses in the pool are assigned as virtual IPs to the machines in the cluster. No IP address is held by more than one machine and every IP address is available.

Configure Spread

Now we need to tell Spread which machines are available inside the cluster. For this example, let’s use a simple two machine cluster (www1 and www2) available under the IP addresses and

$ sudo vi /etc/default/spread

# Change to enable spread


# Options, see spread.1 for list

OPTIONS=”-n www1″ # www1 or www2 depending on the machine

$ sudo vi /etc/spread/spread.conf

Spread_Segment {




DebugFlags = { PRINT EXIT }

EventLogFile = /var/log/spread.log


DangerousMonitor = false

DaemonUser = spread

DaemonGroup = spread

Once we’ve changed the configuration on one machine, we need to copy it over to the other machines and restart spread:

$ sudo /etc/init.d/spread restart

Configure Wackamole

The next step is to configure Wackamole on all machines. Like we did with Spread, we start by editing /etc/default/wackamole to make sure that Wackamole is enabled and that will run when the machine starts:

$ sudo vi /etc/default/wackamole

# Change to enable wackamole


# Options


The next configuration file (/etc/wackamole.conf) is, luckily, very straight forward and a few changes to the default configurations are enough to get us on the right track.

Spread – Port where Spread is listening

SpreadRetryInterval – Amount of time between attempts to connect to Spread

Group – Spread group to join

Control – Location of Wackamole control socket

VirtualInterfaces – List of Virtual IP addresses that we want to make available

Arp-Cache – Collect and broadcast the IPs in our ARP table every N seconds

Notify – Define which machines to send ARP-spoofs when an IP is acquired

balance – Describes how to balance the IP addresses across the available machines

mature – Amount of time for an instance to join a group and be ready to assume virtual IPs

$ sudo vi /etc/wackamole.conf

Spread = 4803

SpreadRetryInterval = 5s

Group = www

Control = /var/run/wackamole/wackamole.it

VirtualInterfaces {

{ eth4: }


Arp-Cache = 90s

Notify {




balance {

AcquisitionsPerRound = all

interval = 4s


mature = 5s

Contact Us On WhatsApp