Individual Couchbase Server nodes are clustered together. Within a cluster data is automatically replicated between nodes of a cluster. Cluster nodes can be added and removed without interrupting access to data within the cluster.
All clusters start with a single node, typically one installed from a package. Either through the Web UI or from the REST interface, Couchbase Server allows one or more nodes to be added to the cluster. When a node is added to the cluster, it does not immediately start performing data operations. This is to allow the user to perform one or more changes to the cluster before initiating a rebalance. During a rebalance the data and replicas of that data, contained in sub-partitions of the cluster called vBuckets, are redistributed throughout the cluster. By design, a given vBucket is only active in one place within the cluster at a given point in time. By doing so, Couchbase Server is always consistent for any given item.
Data is moved between nodes, both when rebalancing and replicating, using a set of managed eBucketmigrator processes in the cluster. This process uses a new protocol called TAP. TAP is generic in nature though, and it has very clear use cases outside replication or migration of data. Incidentally, TAP doesn't actually stand for anything. The name came about when thinking about how to "tap into" a Couchbase Server node. This could be thought of along the lines of a 'wiretap' or tapping into a keg.
Cluster replication defaults to asynchronous, but is designed to be synchronous. The benefit of replication being asynchronous is that Couchbase Server has speeds similar to memcached in the default case, taking a data safety risk for a short interval.
Cluster coordination and communication is handled by the ns_server erlang process. Generally, users of Couchbase Server need not be aware of the details about how ns_server performs its tasks, as interfacing with the cluster is done with the aforementioned Chapter 8, REST API for Administration. As part of keeping the system simple, all nodes of the cluster expose the state of the cluster.