Cassandra Cloud
CassandraCloud is a tool that helps you configure Cassandra for clustered environments. It works well in
Docker, EC2, and VirtualBox environments (and similar environments). It allows you to configure Cassandra easily.
For example, it could be kicked off as a USER_DATA
script in Amazon EC2 (AWS EC2). CassandraCloud usually runs
once when an instance is first launched and then never again.
Config Overrides and Templates
CassandraCloud allows you to override values via OS ENVIRONMENT variables. There is an HCL config file, and there are command line arguments.
The HCL config file can be overridden with ENVIRONMENT which can be overridden with command line arguments.
CassandraCloud will generate ${CASSANDRA_HOME}/conf/cassandra.yaml
file.
You can specify a custom template (usually found in ${CASSANDRA_HOME}/conf/cassandra-yaml.template
).
Example ${CASSANDRA_HOME}/conf/cassandra-yaml.template
cluster_name: ""
num_tokens:
storage_port:
ssl_storage_port:
native_transport_port:
endpoint_snitch:
# Listen address for client communication
rpc_address:
# Listen network interface for client communication
rpc_interface:
# Listen address for storage cluster communication
listen_address:
# Listen network interface for storage cluster communication
listen_interface:
max_hints_delivery_threads: 16max_hints_delivery_threads: 2
data_file_directories:
-
commitlog_directory:
To learn the complete syntax of the template this template syntax guide.
The above could generate a cassandra.yaml file as follows:
cassandra.yaml
cluster_name: "My Cluster"
num_tokens: 32
storage_port: 7000
ssl_storage_port: 7001
native_transport_port: 9042
endpoint_snitch: SimpleSnitch
# Listen network interface for client communication
rpc_interface: localhost
# Listen network interface for storage cluster communication
listen_interface: localhost
max_hints_delivery_threads: 2
data_file_directories:
- /opt/cassandra/data
commitlog_directory: /opt/cassandra/commitlog
seed_provider:
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
- seeds: "127.0.0.1"
There are also templates for jvm.options
, cassandra-env.sh
, and logback.xml
.
Usage
./cassandra-cloud -h
Usage of ./cassandra-cloud:
-client-address string
Client address for client driver communication. Example: 192.43.32.10, localhost, etc.
-client-interface string
Client address for client driver communication. Example: eth0, eth1, etc. (default "localhost")
-cluster-address string
Cluster address for inter-node communication. Example: 192.43.32.10, localhost, etc.
-cluster-interface string
Cluster interface for inter-node communication. Example: eth0, eth1, etc. (default "localhost")
-cluster-name string
Name of the cluster (default "My Cluster")
-cluster-seeds string
Comma delimited list of initial clustrer contact points for bootstrapping (default "127.0.0.1")
-conf-yaml-template string
Location of cassandra configuration template (default "/opt/cassandra/conf/cassandra-yaml.template")
-config string
Location of config file
-data-dirs string
Location of Cassandra Data directories
-debug
Turn on debugging
-help-info
Prints out help information
-snitch string
Snitch type. Example: GossipingPropertyFileSnitch, PropertyFileSnitch, Ec2Snitch, etc. (default "SimpleSnitch")
-v Turns on verbose mode
Command line flag syntax:
-flag
-flag=x
-flag x // non-boolean flags only
Configuration
Cloud conf usually found in ${CASSANDRA_HOME}/conf/cloud.conf
# Defaults to false. Used for verbose mode.
# verbose = false
# Comma delimited list of seed hosts. Defaults to 127.0.0.1. This is used for bootstrap only.
# Production clusters should have at least two seed servers.
# cluster_seeds = 127.0.0.1
# Cassandra home directory. Defaults to /opt/cassandra.
# home_dir = /opt/cassandra
# Are we supporting multiple DCs? Defaults to false.
# multi_dc = false
# Only one of these two can be set (defaults to address set to localhost Linux)
# cluster_address = localhost
# cluster_interface=eth1
# Only one of these two can be set (defaults to address set to localhost for OSX and interface set to eth0 for Linux)
# client_address=localhost
# client_interface=eth0
# Sets the snitch type for Cassandra. Defaults to simple snitch (for now).
# snitch=SimpleSnitch
# Sets up VNODE weight for servder. Defaults to 32 tokens per node
# num_tokens=32
# Location of template file. Defaults to /conf/cassandra-yaml.template
# conf_yaml_template = /opt/cassandra/conf/cassandra-yaml.template
# Location of cassandra config yaml file that we want to replace.
# Defaults to /conf/cassandra.yaml
# conf_yaml_file = /opt/cassandra/conf/cassandra.yaml
# Cluster port. Defaults to 7000.
# cluster_port = 7000
# Cluster SSL port. Defaults to 7001.
# cluster_ssl_port = 7001
# Client port. Defaults to 9042.
# client_port = 9042
# Data directories for Cassandra SSTables. Defaults to ["/opt/cassandra/data"]
# data_dirs = ["/opt/cassandra/data"]
Template variable (types, and how to override them)
The table below lists the variable names.
A setting in the config file (Config Name
) overrides the default value(Default Value
).
Environment Variable
s override config file settings (Config Name
).
Lastly values passed on the command line (Command line Args
) override the config.
The Template Var Name
s are used by the templates.
For example the CommitLogDir
template var can be used in a template by referring to it as ``.
Template Var Name | Type | Config Name | Command line Args | Environment Variable | Default Value |
---|---|---|---|---|---|
Verbose | bool | verbose | -verbose | CASSANDRA_VERBOSE | false |
ClusterSeeds | string | cluster_seeds | -cluster-seeds | CASSANDRA_CLUSTER_SEEDS | 127.0.0.1 |
CassandraHome | string | home_dir | -home-dir | CASSANDRA_HOME_DIR | /opt/cassandra |
MultiDataCenter | bool | multi_dc | -multi-dc | CASSANDRA_MULTI_DC | false |
DataDirs | []string | data_dirs | -data-dirs | CASSANDRA_DATA_DIRS | [/opt/cassandra/data ] |
CommitLogDir | string | commit_log_dir | -commit-log-dir | CASSANDRA_COMMIT_LOG_DIR | /opt/cassandra/commitlog |
ClusterListenAddress | string | cluster_address | -cluster-address | CASSANDRA_CLUSTER_ADDRESS | localhost |
ClusterListenInterface | string | cluster_interface | -cluster-interface | CASSANDRA_CLUSTER_INTERFACE | |
ClientListenAddress | string | client_address | -client-address | CASSANDRA_CLIENT_ADDRESS | localhost |
ClientListenInterface | string | client_interface | -client-interface | CASSANDRA_CLIENT_INTERFACE | |
Snitch | string | snitch | -snitch | CASSANDRA_SNITCH | SimpleSnitch |
ClusterName | string | cluster_name | -cluster-name | CASSANDRA_CLUSTER_NAME | My Cluster |
NumTokens | int | num_tokens | -num-tokens | CASSANDRA_NUM_TOKENS | 32 |
CassandraConfigTemplate | string | conf_yaml_template | -conf-yaml-template | CASSANDRA_CONF_YAML_TEMPLATE | /opt/cassandra/conf/cassandra-yaml.template |
CassandraConfigFileName | string | conf_yaml_file | -conf-yaml-file | CASSANDRA_CONF_YAML_FILE | /opt/cassandra/conf/cassandra.yaml |
ClusterPort | int | cluster_port | -cluster-port | CASSANDRA_CLUSTER_PORT | 7000 |
ClusterSslPort | int | cluster_ssl_port | -cluster-ssl-port | CASSANDRA_CLUSTER_SSL_PORT | 7001 |
ClientPort | int | client_port | -client-port | CASSANDRA_CLIENT_PORT | 9042 |
About us
Cloudurable provides AMIs, cloudformation templates and monitoring tools to support Cassandra in production running in EC2. We also teach advanced Cassandra courses which teaches how one could develop, support and deploy Cassandra to production in AWS EC2.