Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Provisioning a Couchbase Server Instance With the Command Line

DZone's Guide to

Provisioning a Couchbase Server Instance With the Command Line

Setting up a new instance is easy. In fact, you can create and join Couchbase clusters all from the comfort of your command line.

· Database Zone
Free Resource

Learn how to move from MongoDB to Couchbase Server for consistent high performance in distributed environments at any scale.

When you're a database or system administrator, you don't always have time to go through the setup wizards when deploying a new piece of software. Probably because you are managing massive amounts of systems in a large organization.

So what are you going to do when it comes to your distributed database cluster?

Couchbase Server comes with a RESTful API that is perfect for provisioning instances, whether that be creating new clusters or joining to existing clusters. We're going to see how to use some of those API endpoints.

Installing Couchbase Server for Mac, Linux, or Windows

Regardless if you wish to configure Couchbase Server over HTTP or not, you're still going to need to install the software first. There is a binary available for Mac, Linux, and Windows, all found in the download section of the Couchbase website.

If you'd prefer, you can also find various cloud images available for services like Amazon, Azure, and Docker.

Creating a New Cluster With the Command Line

Once Couchbase Server is installed and running, we can take advantage of the RESTful API endpoints to complete the configuration of the instance.

The first thing we want to do is define how much memory to allocate to our instance:

curl -v -X POST http://localhost:8091/pools/default \
     -d memoryQuota=512 \
     -d indexMemoryQuota=512


The above command will allocate the instance with 512MB of memory and 512MB of index memory. Of course both should be adjusted based on your needs.

We also need to define which services will be available on our instance:

curl -v http://localhost:8091/node/controller/setupServices \
     -d services=kv%2cn1ql%2Cindex


In the above, we have a comma delimited list of services where the comma is URL-encoded to be %2C. The services in this example will be the key-value service (KV), the N1QL service, and the index service. Depending on your needs you may or may not want to enable all these services.

The Couchbase instance is very open and insecure as of right now because there is no administrative account created yet. It is a good idea to create that administrative account now:

curl -v http://localhost:8091/settings/web \
     -d port=8091 \
     -d username=Administrator \
     -d password=password


In the above example, we are defining the administrative username to be Administrator and the password to be password. Probably not a good choice in a production environment.

Out of the box we have no buckets in our Couchbase instance, so we should probably go ahead and create one. From the command line, execute:

curl -v -u Administrator:password \
     -X POST http://localhost:8091/pools/default/buckets \
     -d name=example \
     -d bucketType=couchbase \
     -d ramQuotaMB=256 \
     -d authType=sasl


The above bucket creation command is doing quite a bit. We're providing the administrative information to the instance in our request. The bucket we're creating will be named example and it will be a couchbase bucket type. There are a few bucket types you can choose from, so don't think we only have one option. The memory allocation of this bucket will be 256MB of the 512MB that we gave to this server.

Finally, since we are using N1QL, it might make sense to create a primary index on the bucket. Go ahead and execute the following:

curl -v http://localhost:8093/query/service \
     -d 'statement=create primary index on example'


At this point, the new instance should be fully functional. You should note that the RESTful API offers so much more in terms of configuration than what we explored and it is a good idea to check out what it has to offer.

Joining a Cluster With the Command Line

So what if we are spinning up nodes to be added to an already existing cluster? We can use the RESTful API to help us out.

From the command line, execute the following:

curl -u Administrator:password -d clusterMemberHostIp=10.0.1.99 \
     -d clusterMemberPort=8091 \
     -d user=Administrator -d password=password \
     -d services=kv%2cn1ql%2cindex \
     http://localhost:8091/node/controller/doJoinCluster


The above command will take our node on localhost, or wherever our new node is located and join it to a cluster based on the clusterMemberHostIp. This new node will have all the same services, even though it is not a requirement that all nodes match.

Any time you add or remove nodes from a cluster, you're going to want to rebalance that cluster. This can be accomplished with the following:

curl -v -X POST \
     -u [admin]:[password] \
     http://localhost:8091/controller/rebalance


The rebalance process can take time depending on how much data you have.

Conclusion

You just saw how to configure a Couchbase Server cluster with the command line and the RESTful API endpoints. This is useful if you manage many servers and want to accomplish all this via a script. There are plenty of other scenarios where this would be useful as well. Maybe you have created a continuous deployment pipeline and need the database to be included in it.

There are many more API endpoints available and I strongly encourage you to check out the documentation regarding them.

Want to deliver a whole new level of customer experience? Learn how to make your move from MongoDB to Couchbase Server.

Topics:
command line ,database ,couchbase server ,couchbase cluster

Published at DZone with permission of Nic Raboy, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

THE DZONE NEWSLETTER

Dev Resources & Solutions Straight to Your Inbox

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

X

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}