Cassandra Cluster Manager (CCM)
CCM is a script/library used to assist in setup and teardown of Apache Cassandra on a local machine. In an effort to reduce inconsistencies and create a repeatable testing environment Vagrant can be utilized to start and stop a Virtual Box VM for integration testing.
CCM Cluster by way of Vagrant and Virtual Box
CCM Cluster is a 64-bit Ubuntu 14.04 VM. This VM comes configured with ant, git, maven, python, CCM, JDK v1.8 Update (Latest), and Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files v8
NOTE: The JCE is required for Secure Sockets Layer (SSL) testing.
The VM contains the following specifications:
- 4GB of RAM
- 32MB of Video RAM
- 4 Cores
- Hostname: ccm-cluster
- Username: vagrant
- Password: vagrant
- 6 Network Interfaces Cards (NICs)
- Node 1: 192.168.33.11
- Node 2: 192.168.33.12
- Node 3: 192.168.33.13
- Node 4: 192.168.33.14
- Node 5: 192.168.33.15
- Node 6: 192.168.33.16
 
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
# Inline provision script
CCM_PROVISION_SCRIPT = <<EOF
#!/bin/bash
#Install package updates
printf "Installing System Packages ...\n"
#Add JDK repository and update packages
add-apt-repository ppa:webupd8team/java -y > /dev/null 2>&1
apt-get update -qq
#Auto accept the the Java license aggreement
echo debconf shared/accepted-oracle-license-v1-1 select true | sudo debconf-set-selections
echo debconf shared/accepted-oracle-license-v1-1 seen true | sudo debconf-set-selections
#Install the packages
apt-get install ant git maven oracle-java8-installer oracle-java8-unlimited-jce-policy python-dev python-pip -qq
#Install CCM and its dependencies
printf "Installing CCM and its dependencies ...\n"
pip install -q ccm psutil pyyaml six > /dev/null 2>&1
EOF
##
# Configure a 6 node Cassandra Cluster Manager (CCM) Virtual Machine (VM) with
# the following settings:
#
#   - 4GB of RAM
#   - 32MB of Video RAM
#   - 4 cores (CPUs)
#   - Hostname: ccm-cluster
#   - Username: vagrant
#   - Password: vagrant
#   - 6 Network Interfaces Cards (NICs)
#     - Node 1: 192.168.33.11
#     - Node 2: 192.168.33.12
#     - Node 3: 192.168.33.13
#     - Node 4: 192.168.33.14
#     - Node 5: 192.168.33.15
#     - Node 6: 192.168.33.16
##
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  # Create Ubuntu 14.04 LTS VM
  config.vm.box = "ubuntu/trusty64"
  # Define the hostname and IP addresses (6 node cluster)
  config.vm.define "ccm-cluster" do |ccm_cluster|
    ccm_cluster.vm.hostname = "ccm-cluster"
    ccm_cluster.vm.network "private_network", ip: "192.168.33.11"
    ccm_cluster.vm.network "private_network", ip: "192.168.33.12"
    ccm_cluster.vm.network "private_network", ip: "192.168.33.13"
    ccm_cluster.vm.network "private_network", ip: "192.168.33.14"
    ccm_cluster.vm.network "private_network", ip: "192.168.33.15"
    ccm_cluster.vm.network "private_network", ip: "192.168.33.16"
  end
  # Prepare/Provision the VM
  config.vm.provision :shell do |root_provision|
    root_provision.privileged = true
    root_provision.inline = CCM_PROVISION_SCRIPT
  end
  # VM parameters for the CCM cluster
  config.vm.provider :virtualbox do |provider|
    provider.name = "ccm-cluster"
    provider.customize ["modifyvm", :id, "--memory", "4096"]
    provider.customize ["modifyvm", :id, "--vram", "32"]
    provider.customize ["modifyvm", :id, "--cpus", "4"]
    provider.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
    provider.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
  end
end
Starting CCM Cluster VM
After installing Vagrant and Virtual Box, copy the above script into a
directory (e.g. ccm_cluster) and ensure it is named Vagrantfile. To start the
CCM cluster VM run the following command in the directory with the Vagrant
script file:
vagrant up
Stopping/Suspending CCM Cluster VM
To stop the CCM cluster VM run the following command in the directory with the Vagrant script file:
vagrant halt
To speed up launch times of the CCM cluster VM a suspend command can be issued after the instance is first created by running the following command in the directory with the Vagrant script file:
vagrant suspend
Resuming the Suspended CCM Cluster VM
If the CCM cluster VM was suspended run the following command in the directory with the Vagrant script file to resume:
vagrant resume