DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Please enter at least three characters to search
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

Because the DevOps movement has redefined engineering responsibilities, SREs now have to become stewards of observability strategy.

Apache Cassandra combines the benefits of major NoSQL databases to support data management needs not covered by traditional RDBMS vendors.

The software you build is only as secure as the code that powers it. Learn how malicious code creeps into your software supply chain.

Generative AI has transformed nearly every industry. How can you leverage GenAI to improve your productivity and efficiency?

Related

  • Ansible by Example
  • How To Use HashiCorp Tools To Create a Secured Edge Infrastructure
  • Can You Run a MariaDB Cluster on a $150 Kubernetes Lab? I Gave It a Shot
  • How Kubernetes Cluster Sizing Affects Performance and Cost Efficiency in Cloud Deployments

Trending

  • Navigating and Modernizing Legacy Codebases: A Developer's Guide to AI-Assisted Code Understanding
  • Tired of Spring Overhead? Try Dropwizard for Your Next Java Microservice
  • A Guide to Auto-Tagging and Lineage Tracking With OpenMetadata
  • Analyzing Techniques to Provision Access via IDAM Models During Emergency and Disaster Response
  1. DZone
  2. Testing, Deployment, and Maintenance
  3. Deployment
  4. Create a Couchbase Cluster with Ansible

Create a Couchbase Cluster with Ansible

By 
Don Pinto user avatar
Don Pinto
·
Jun. 03, 13 · Interview
Likes (1)
Comment
Save
Tweet
Share
4.8K Views

Join the DZone community and get the full member experience.

Join For Free

[This blog was syndicated from http://blog.grallandco.com]

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 wasAnsible.
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.
I won't go in all the details about the installation, just follow the steps documented in the Getting Started Guide. As you can see from this guide, you just need Python and few other libraries and clone Ansible project from Github. So I am expecting that you have Ansible working with your various servers on which you want to deploy Couchbase.
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:
  1. Install Couchbase on each nodes of the cluster, as documented here.
  2. Take one of the node and "initialize" the cluster,  using cluster-init command.
  3. Add the other nodes to the cluster, using server-add command.
  4. Rebalance, using rebalance command. 
  5. Create a Bucket, using bucket-create command.  
So the goal now is to create an Ansible Playbook that executes these steps for you.
Ansible Playbook for Couchbase
The first think you need is to have the list of hosts you want to target, so I have create a hosts file that contains all my server organized in 2 groups:
[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.
Let's describe the playbook file :
- 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: 
  1. Download the product, the get_url command will only download the file if not already present
  2. Install the dependencies with the apt command, the state=present allows the system to only install this package if not already present
  3. Install Couchbase with a simple shell command. (here I am not checking if Couchbase is already installed)
So we have now installed Couchbase on all the nodes. Let's now configure the first node and add the others: 
- 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}
Now we need to execute specific taks on the "main" server:
  • Initialization of the cluster using the Couchbase CLI, on line 06 and 07
Then the system needs to ask all other server to join the cluster. For this the system needs to get the various IP and for each IP address execute the add-server command with the IP address. As far as I know it is not possible to get the IP address from the main playbook YAML file, so I ask the system to generate a shell script to add each node and execute the script. 
This is done from the line 09 to 13.
To generate the shell script, I use Ansible Template, the template is available in the couchbase-add-node.j2 file. 
{% 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. 
Finally the script rebalance the cluster (line 16) and add a new bucket (line 19).
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.
Couchbase Cluster
As you can see it is really easy and fast to create a new cluster using Ansible.
I have also create a script to uninstall properly the cluster.. just launch
./bin/ansible-playbook -i ./couchbase/hosts ./couchbase/couchbase-uninstall.yml


cluster Ansible (software)

Published at DZone with permission of Don Pinto, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

Related

  • Ansible by Example
  • How To Use HashiCorp Tools To Create a Secured Edge Infrastructure
  • Can You Run a MariaDB Cluster on a $150 Kubernetes Lab? I Gave It a Shot
  • How Kubernetes Cluster Sizing Affects Performance and Cost Efficiency in Cloud Deployments

Partner Resources

×

Comments
Oops! Something Went Wrong

The likes didn't load as expected. Please refresh the page and try again.

ABOUT US

  • About DZone
  • Support and feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends:

Likes
There are no likes...yet! 👀
Be the first to like this post!
It looks like you're not logged in.
Sign in to see who liked this post!