Denis Mikhaylov
Denis Mikhaylov

Reputation: 2045

CouchbaseClient configuration for more than one cluster

Let's assume I have two couchbase clusters with XDCR setup and having following nodes:

n1.cluster1.com
n2.cluster1.com
n3.cluster1.com

and

n1.cluster2.com
n2.cluster2.com
n3.cluster2.com

What is preferable node configuration for CouchbaseClient?

As from http://docs.couchbase.com/couchbase-sdk-java-1.4/#hello-couchbase

The CouchbaseClient class accepts a list of URIs that point to nodes in the cluster. If your cluster has more than one node, Couchbase strongly recommends that you add at least two or three URIs to the list. The list does not have to contain all nodes in the cluster, but you do need to provide a few nodes so that during the initial connection phase your client can connect to the cluster even if one or more nodes fail.
After the initial connection, the client automatically fetches cluster configuration and keeps it up-to-date, even when the cluster topology changes. This means that you do not need to change your application configuration at all when you add nodes to your cluster or when nodes fail. Also make sure you use a URI in this format: http://[YOUR-NODE]:8091/pools. If you provide only the IP address, your client will fail to connect. We call this initial URI the bootstrap URI.

Does it mean I should add at least two or three nodes from each cluster? Or two or three node from the whole system?

Upvotes: 3

Views: 420

Answers (2)

user1697575
user1697575

Reputation: 2848

I recommend adding all nodes of the cluster to your client connect configuration. The reason is that if one or more of the nodes are down (i.e. planned shutdown, server crash, etc) the client would still be able to connect to the cluster(s) when it restarted.

Note that client need this list of connect nodes at the time of start up, once communicated with the cluster it will maintain its own track of active/inactive cluster nodes.

I have in production one cluster of 3 nodes and all my clients have all nodes in the connect configuration, e.g.

http://my-node1:8091/pools,http://my-node2:8091/pools,http://my-node3:8091/pools

Regarding multiple clusters I'm not sure it will work with the same client instance unless a Couchbase client instance is smart enough to distinguish multiple clusters and keep track of its nodes health. Read on Couchbase installation guide

I found in documentation if you are using Couchbase Moxi it does support multiple clusters:

Moxi also supports proxying to multiple clusters from a single moxi instance, where this was originally designed and implemented for software-as-a-service purposes. Use a semicolon (';') to specify and delimit more than one cluster:

-z “LISTEN_PORT=[CLUSTER_CONFIG][;LISTEN_PORT2=[CLUSTER_CONFIG2][]]”

Upvotes: 2

DaveR
DaveR

Reputation: 9640

Each CouchbaseClient object will only connect to one cluster. The list of node URIs should all belong to the same cluster - you'll likely get strange behaviour if you list nodes from different clusters.

If your application wants to connect to two different cluster (irrespective of if they have a replication stream between them or not), then you want to create two CouchbaseClient objects, one connected to each cluster.

Upvotes: 3

Related Questions