consul/website/build/intro/getting-started/join.html

25 lines
7.3 KiB
HTML

<!DOCTYPE html> <html lang=en> <head> <meta charset=utf-8> <meta name=viewport content="width=device-width, initial-scale=1.0"> <meta name=description content=""> <meta name=author content=""> <title>Join a Cluster - Serf</title> <link href="/stylesheets/bootstrap.min-82fe1490.css" media=screen rel=stylesheet /><link href="/stylesheets/main-e5014f86.css" media=screen rel=stylesheet /> <!--[if lt IE 9]><script src="/javascripts/html5shiv-310dd184.js"></script> <script src="/javascripts/respond.min-88c91176.js"></script><![endif]--> <script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-45101516-1', 'serfdom.io');
ga('send', 'pageview');
</script> </head> <body class="page-Join a Cluster"> <div id=header> <div class=container> <a class="navbar-brand logo" href="/"> <span></span> </a> <a class="navbar-brand text rls-l" href="/">SERF</a> <ul class="buttons nav navbar-nav navbar-right rls-sb"> <li class=first><a href="/downloads.html">Download</a></li> <li><a href="https://github.com/hashicorp/serf">Github</a></li> </ul> <ul class="main-links nav navbar-nav navbar-right rls-sb"> <li><a href="/intro/index.html">Intro</a></li> <li><a href="/docs/index.html">Docs</a></li> <li><a href="/community.html">Community</a></li> </ul> </div> </div> <div class=container> <div class=col-md-4> <div class="docs-sidebar hidden-print affix-top" role=complementary> <ul class="nav docs-sidenav"> <li> <a href="/intro/index.html">What is Serf?</a> </li> <li> <a href="/intro/use-cases.html">Use Cases</a> </li> <li> <a href="/intro/vs-other-sw.html">Serf vs. Other Software</a> <ul class=nav> <li> <a href="/intro/vs-zookeeper.html">ZooKeeper, doozerd, etcd</a> </li> <li> <a href="/intro/vs-chef-puppet.html">Chef, Puppet, etc.</a> </li> <li> <a href="/intro/vs-fabric.html">Fabric</a> </li> <li> <a href="/intro/vs-custom.html">Custom Solutions</a> </li> </ul> </li> <li class=active> <a href="/intro/getting-started/install.html">Getting Started</a> <ul class=nav> <li> <a href="/intro/getting-started/install.html">Install Serf</a> </li> <li> <a href="/intro/getting-started/agent.html">Run the Agent</a> </li> <li class=active> <a href="/intro/getting-started/join.html">Join a Cluster</a> </li> <li> <a href="/intro/getting-started/event-handlers.html">Event Handlers</a> </li> <li> <a href="/intro/getting-started/user-events.html">Custom User Events</a> </li> <li> <a href="/intro/getting-started/next-steps.html">Next Steps</a> </li> </ul> </li> </ul> </div> </div> <div class=col-md-8 role=main> <div class=bs-docs-section> <h1 id=toc_0>Join a Cluster</h1> <p>In the previous page, we started our first agent. While it showed how easy it is to run Serf, it wasn&#39;t very exciting since we simply made a cluster of one member. In this page, we&#39;ll create a real cluster with multiple members.</p> <p>When starting a Serf agent, it begins without knowledge of any other node, and is an isolated cluster of one. To learn about other cluster members, the agent must <em>join</em> an existing cluster. To join an existing cluster, Serf only needs to know about a <em>single</em> existing member. After it joins, the agent will gossip with this member and quickly discover the other members in the cluster.</p> <h2 id=toc_1>Starting the Agents</h2> <p>First, let&#39;s start two agents. Serf agents must all listen on a unique IP and port pair, so we must bind each agent to a different ports.</p> <p>The first agent we&#39;ll start will listen on <code>127.0.0.1:7946</code>. We also will specify a node name. The node name must be unique and is how a machine is uniquely identified. By default it is the hostname of the machine, but since we&#39;ll be running multiple agents on a single machine, we&#39;ll manually override it.</p> <pre><code>$ serf agent -node=agent-one -bind=127.0.0.1:7946
...
</code></pre> <p>Then, in another terminal, start a second agent. We&#39;ll bind this agent to <code>127.0.0.1:7947</code>. In addition to overriding the node name, we&#39;re also going to override the RPC address. The RPC address is the address that Serf binds to for RPC operations. The other <code>serf</code> commands communicate with a running Serf agent over RPC. We left the first agent with the default RPC address so lets select another for this agent.</p> <pre><code>$ serf agent -node=agent-two -bind=127.0.0.1:7947 -rpc-addr=127.0.0.1:7374
...
</code></pre> <p>At this point, you have two Serf agents running. The two Serf agents still don&#39;t know anything about each other, and are each part of their own clusters (of one member). You can verify this by running <code>serf members</code> against each agent and noting that only one member is a part of each.</p> <h2 id=toc_2>Joining a Cluster</h2> <p>Now, let&#39;s tell the first agent to join the second agent by running the following command in a new terminal:</p> <pre><code>$ serf join 127.0.0.1:7947
Successfully joined cluster by contacting 1 nodes.
</code></pre> <p>You should see some log output in each of the agent logs. If you read carefully, you&#39;ll see that they received join information. If you run <code>serf members</code> against each agent, you&#39;ll see that both agents now know about each other:</p> <pre><code>$ serf members
agent-one 127.0.0.1:7946 alive
agent-two 127.0.0.1:7947 alive
$ serf members -rpc-addr=127.0.0.1:7374
agent-two 127.0.0.1:7947 alive
agent-one 127.0.0.1:4946 alive
</code></pre> <div class="alert alert-block alert-info"> <p><strong>Remember:</strong> To join a cluster, a Serf agent needs to only learn about <em>one existing member</em>. After joining the cluster, the agents gossip with each other to propagate full membership information. </p> </div> <p>In addition to using <code>serf join</code> you can use the <code>-join</code> flag on <code>serf agent</code> to join a cluster as part of starting up the agent.</p> <h2 id=toc_3>Leaving a Cluster</h2> <p>To leave the cluster, you can either gracefully quit an agent (using <code>Ctrl-C</code>) or force kill one of the agents. Gracefully leaving allows the node to transition into the <em>left</em> state, otherwise other nodes will detect it as having <em>failed</em>. The difference is covered in more detail <a href="/intro/getting-started/agent.html#toc_3">here</a>.</p> </div> </div> </div> <div id=footer> <div class=container> <div class=footer-links> <ul class="main-links nav navbar-nav rls-sb"> <li><a href="/intro/index.html">Intro</a></li> <li class=active><a href="/docs/index.html">Docs</a></li> <li><a href="/community.html">Community</a></li> </ul> <ul class="buttons nav navbar-nav rls-sb"> <li class=first><a href="/downloads.html">Download</a></li> <li><a href="https://github.com/hashicorp/serf">Github</a></li> </ul> </div> <div class=footer-logo> <span></span> </div> <div class="footer-hashi os"> <span>© 2013. A <a href="//www.hashicorp.com">HashiCorp</a> Project.</span> <a href="//www.hashicorp.com"><img src="/images/hashi-logo-s-3644fe63.png"></a> </div> </div> </div> <script src="javascripts/lib/d3.v3.min.js"></script> <script src="javascripts/app/deploy/site.js"></script> <script>
Serf.initialize();
</script> </body> </html>