Create a Couchbase cluster in less than a minute with Ansible
Introduction
When I was looking for a more effective way to create my cluster I asked some sysadmins which tools I should use to do it. The answer I got during OSDC was not Puppet, nor Chef, but was Ansible.This article shows you how you can easily configure and create a Couchbase cluster deployed and many linux boxes...and the only thing you need on these boxes is an SSH Server!
Thanks to Jan-Piet Mens that was one of the person that convinced me to use Ansible and answered questions I had about Ansible.
You can watch the demonstration below, and/or look at all the details in the next paragraph.
Ansible
Ansible is an open-source software that allows administrator to configure and manage many computers over SSH.
Also for this first scripts I am using root on my server to do all the operations. So be sure you have register the root ssh keys to your administration server, from where you are running the Ansible scripts.
Create a Couchbase Cluster
So before going into the details of the Ansible script it is interesting to explain how you create a Couchbase Cluster. So here are the 5 steps to create and configure a cluster:- Install Couchbase on each nodes of the cluster, as documented here.
- Take one of the node and "initialize" the cluster, using cluster-init command.
- Add the other nodes to the cluster, using server-add command.
- Rebalance, using rebalance command.
- Create a Bucket, using bucket-create command.
Ansible Playbook for Couchbase
[couchbase-main] vm1.grallandco.com [couchbase-nodes] vm2.grallandco.com vm3.grallandco.com
The group [couchbase-main] group is just one of the node that will drive the installation and configuration, as you probably already know, Couchbase does not have any master... All nodes in the cluster are identical.
To ease the configuration of the cluster, I have create another file that contains all parameters that must be sent to all the various commands. This file is located in the group_vars/all see the section Splitting Out Host and Group Specific Data in the documentation.
# Adminisrator user and password admin_user: Administrator admin_password: password # ram quota for the cluster cluster_ram_quota: 1024 # bucket and replicas bucket_name: ansible bucket_ram_quota: 512 num_replicas: 2
Use this file to configure your cluster.
- name: Couchbase Installation
hosts: all
user: root
tasks:
- name: download Couchbase package
get_url: url=http://packages.couchbase.com/releases/2.0.1/couchbase-server-enterprise_x86_64_2.0.1.deb dest=~/.
- name: Install dependencies
apt: pkg=libssl0.9.8 state=present
- name: Install Couchbase .deb file on all machines
shell: dpkg -i ~/couchbase-server-enterprise_x86_64_2.0.1.deb
As expected, the installation has to be done on all servers as root then we need to execute 3 tasks:
- Download the product, the get_url command will only download the file if not already present
- Install the dependencies with the apt command, the state=present allows the system to only install this package if not already present
- Install Couchbase with a simple shell command. (here I am not checking if Couchbase is already installed)
- name: Initialize the cluster and add the nodes to the cluster
hosts: couchbase-main
user: root
tasks:
- name: Configure main node
shell: /opt/couchbase/bin/couchbase-cli cluster-init -c 127.0.0.1:8091 --cluster-init-username=${admin_user} --cluster-init-password=${admin_password} --cluster-init-port=8091 --cluster-init-ramsize=${cluster_ram_quota}
- name: Create shell script for configuring main node
action: template src=couchbase-add-node.j2 dest=/tmp/addnodes.sh mode=750
- name: Launch config script
action: shell /tmp/addnodes.sh
- name: Rebalance the cluster
shell: /opt/couchbase/bin/couchbase-cli rebalance -c 127.0.0.1:8091 -u ${admin_user} -p ${admin_password}
- name: create bucket ${bucket_name} with ${num_replicas} replicas
shell: /opt/couchbase/bin/couchbase-cli bucket-create -c 127.0.0.1:8091 --bucket=${bucket_name} --bucket-type=couchbase --bucket-port=11211 --bucket-ramsize=${bucket_ram_quota} --bucket-replica=${num_replicas} -u ${admin_user} -p ${admin_password}
- Initialization of the cluster using the Couchbase CLI, on line 06 and 07
This is done from the line 09 to 13.
{% for host in groups['couchbase-nodes'] %}
/opt/couchbase/bin/couchbase-cli server-add -c 127.0.0.1:8091 -u ${admin_user} -p ${admin_password} --server-add={{ hostvars[host]['ansible_eth0']['ipv4']['address'] }}:8091 --server-add-username=${admin_user} --server-add-password=${admin_password}
{% endfor %}
As you can see this script loop on each server in the [couchbase-nodes] group and use its IP address to add the node to the cluster.
You are now ready to execute the playbook using the following command :
./bin/ansible-playbook -i ./couchbase/hosts ./couchbase/couchbase.yml -vv
I am adding the -vv parameter to allow you to see more information about what's happening during the execution of the script.
This will execute all the commands described in the playbook, and after few seconds you will have a new cluster ready to be used! You can for example open a browser and go to the Couchase Administration Console and check that your cluster is configured as expected.



