+<H2 ID="Clustering">Clustering</H2>
+
+An l2tpns cluster consists of of one* or more servers configured with
+the same configuration, notably the multicast <B>cluster_address</B>.<P>
+
+*A stand-alone server is simply a degraded cluster.<P>
+
+Initially servers come up as cluster slaves, and periodically (every
+<B>cluster_hb_interval</B>/10 seconds) send out ping packets
+containing the start time of the process to the multicast
+<B>cluster_address</B>.<P>
+
+A cluster master sends heartbeat rather than ping packets, which
+contain those session and tunnel changes since the last heartbeat.<P>
+
+When a slave has not seen a heartbeat within
+<B>cluster_hb_timeout</B>/10 seconds it "elects" a new master by
+examining the list of peers it has seen pings from and determines
+which of these and itself is the "best" candidate to be master.
+"Best" in this context means the server with the highest uptime (the
+highest IP address is used as a tie-breaker in the case of equal
+uptimes).<P>
+
+After discovering a master, and determining that it is up-to-date (has
+seen an update for all in-use sessions and tunnels from heartbeat
+packets) will raise a route (see <A HREF="#Routing">Routing</A>) for
+the <B>bind_address</B> and for all addresses/networks in
+<B>ip_pool</B>. Any packets recieved by the slave which would alter
+the session state, as well as packets for throttled or gardened
+sessions are forwarded to the master for handling. In addition, byte
+counters for session traffic are periodically forwarded.<P>
+
+A master, when determining that it has at least one up-to-date slave
+will drop all routes (raising them again if all slaves disappear) and
+subsequently handle only packets forwarded to it by the slaves.<P>
+
+<H2 ID="Routing">Routing</H2>
+If you are running a single instance, you may simply statically route
+the IP pools to the <B>bind_address</B> (l2tpns will send a gratuitous
+arp).<P>
+
+For a cluster, configure the members as BGP neighbours on your router
+and configure multi-path load-balancing. Cisco uses "maximum-paths
+ibgp" for IBGP. If this is not supported by your IOS revision, you
+can use "maximum-paths" (which works for EBGP) and set
+<B>as_number</B> to a private value such as 64512.<P>
+
+<H2 ID="Performance">Performance</H2>