Service orchestration and management tool.
Serf is a decentralized solution for service discovery and orchestration that is lightweight, highly available, and fault tolerant.
Serf runs on Linux, Mac OS X, and Windows. An efficient and lightweight gossip protocol is used to communicate with other nodes. Serf can detect node failures and notify the rest of the cluster. An event system is built on top of Serf, letting you use Serf's gossip protocol to propagate events such as deploys, configuration changes, etc. Serf is completely masterless with no single point of failure.
Here are some example use cases of Serf, though there are many others:
go get -u github.com/hashicorp/serf/cmd/serf.
Next, let's start a couple Serf agents. Agents run until they're told to quit and handle the communication of maintenance tasks of Serf. In a real Serf setup, each node in your system will run one or more Serf agents (it can run multiple agents if you're running multiple cluster types. e.g. web servers vs. memcached servers).
Start each Serf agent in a separate terminal session so that we can see the output of each. Start the first agent:
$ serf agent -node=foo -bind=127.0.0.1:5000 -rpc-addr=127.0.0.1:7373 ...
Start the second agent in another terminal session (while the first is still running):
$ serf agent -node=bar -bind=127.0.0.1:5001 -rpc-addr=127.0.0.1:7374 ...
At this point two Serf agents are running independently but are still unaware of each other. Let's now tell the first agent to join an existing cluster (the second agent). When starting a Serf agent, you must join an existing cluster by specifying at least one existing member. After this, Serf gossips and the remainder of the cluster becomes aware of the join. Run the following commands in a third terminal session.
$ serf join 127.0.0.1:5001 ...
If you're watching your terminals, you should see both Serf agents become aware of the join. You can prove it by running
serf membersto see the members of the Serf cluster:
$ serf members foo 127.0.0.1:5000 alive bar 127.0.0.1:5001 alive ...
At this point, you can ctrl-C or force kill either Serf agent, and they'll update their membership lists appropriately. If you ctrl-C a Serf agent, it will gracefully leave by notifying the cluster of its intent to leave. If you force kill an agent, it will eventually (usually within seconds) be detected by another member of the cluster which will notify the cluster of the node failure.
Full, comprehensive documentation is viewable on the Serf website:
Next, clone this repository into
$GOPATH/src/github.com/hashicorp/serfand then just type
make. In a few moments, you'll have a working
$ make ... $ bin/serf ...
makewill also place a copy of the executable under
Serf is first and foremost a library with a command-line interface,
serf. The Serf library is independent of the command line agent,
serfbinary is located under
cmd/serfand can be installed stand alone by issuing the command
go get -u github.com/hashicorp/serf/cmd/serf. Applications using the Serf library should only need to include
Tests can be run by typing
If you make any changes to the code, run
make formatin order to automatically format the code according to Go standards.