Skip to content

Instantly share code, notes, and snippets.

@r3b
Last active August 29, 2015 14:08
Show Gist options
  • Save r3b/58d04821d9052307ad5d to your computer and use it in GitHub Desktop.
Save r3b/58d04821d9052307ad5d to your computer and use it in GitHub Desktop.
Vagrant setup to run one cassandra and one elasticsearch server
# -*- mode: ruby -*-
# vi: set ft=ruby :
CFG_TZ = "US/Eastern"
# Provisioning script
node_script = <<SCRIPT
#!/bin/bash
dpkg -l oracle-java7-installer
[ $? -eq 0 ] && exit 0
# set timezone
echo "#{CFG_TZ}" > /etc/timezone
dpkg-reconfigure -f noninteractive tzdata
# install a few base packages
add-apt-repository ppa:webupd8team/java
apt-get update
echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections
apt-get install oracle-java7-installer oracle-java7-set-default expect expect-dev vim curl zip unzip git -y --force-yes
update-java-alternatives -s java-7-oracle
SCRIPT
cass_script = <<CASS_SCRIPT
http://archive.apache.org/dist/cassandra/1.2.19/apache-cassandra-1.2.19-bin.tar.gz
curl -L http://debian.datastax.com/debian/repo_key | apt-key add -
[ -f /etc/apt/sources.list.d/cassandra.sources.list ] || cat >> /etc/apt/sources.list.d/cassandra.sources.list << EOF
deb http://debian.datastax.com/community stable main
EOF
apt-get update
apt-get -y --force-yes install libcap2 cassandra=1.2.19
CASS_SCRIPT
cass_yaml = <<CASS_YAML
cat > /etc/cassandra/cassandra.yaml << EOF
cluster_name: 'usergrid'
initial_token:
hinted_handoff_enabled: true
max_hint_window_in_ms: 10800000 # 3 hours
hinted_handoff_throttle_in_kb: 1024
max_hints_delivery_threads: 2
authenticator: AllowAllAuthenticator
authorizer: AllowAllAuthorizer
permissions_validity_in_ms: 2000
partitioner: org.apache.cassandra.dht.Murmur3Partitioner
data_file_directories:
- /var/lib/cassandra/data
commitlog_directory: /var/lib/cassandra/commitlog
disk_failure_policy: stop
key_cache_size_in_mb:
key_cache_save_period: 14400
row_cache_size_in_mb: 0
row_cache_save_period: 0
row_cache_provider: SerializingCacheProvider
saved_caches_directory: /var/lib/cassandra/saved_caches
commitlog_sync: periodic
commitlog_sync_period_in_ms: 10000
commitlog_segment_size_in_mb: 32
seed_provider:
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
- seeds: "127.0.0.1"
flush_largest_memtables_at: 0.75
reduce_cache_sizes_at: 0.85
reduce_cache_capacity_to: 0.6
concurrent_reads: 32
concurrent_writes: 32
memtable_flush_queue_size: 4
trickle_fsync: false
trickle_fsync_interval_in_kb: 10240
storage_port: 7000
ssl_storage_port: 7001
listen_address: 127.0.0.1
start_native_transport: true
native_transport_port: 9042
start_rpc: true
rpc_address: 0.0.0.0
rpc_port: 9160
rpc_keepalive: true
rpc_server_type: sync
thrift_framed_transport_size_in_mb: 15
incremental_backups: false
snapshot_before_compaction: false
auto_snapshot: false
column_index_size_in_kb: 64
in_memory_compaction_limit_in_mb: 64
multithreaded_compaction: false
compaction_throughput_mb_per_sec: 16
compaction_preheat_key_cache: true
read_request_timeout_in_ms: 10000
range_request_timeout_in_ms: 10000
write_request_timeout_in_ms: 10000
truncate_request_timeout_in_ms: 60000
request_timeout_in_ms: 10000
cross_node_timeout: false
endpoint_snitch: SimpleSnitch
dynamic_snitch_update_interval_in_ms: 100
dynamic_snitch_reset_interval_in_ms: 600000
dynamic_snitch_badness_threshold: 0.1
request_scheduler: org.apache.cassandra.scheduler.NoScheduler
index_interval: 128
server_encryption_options:
internode_encryption: none
keystore: /var/lib/cassandra/conf/.keystore
keystore_password: cassandra
truststore: /var/lib/cassandra/conf/.truststore
truststore_password: cassandra
client_encryption_options:
enabled: false
keystore: /var/lib/cassandra/conf/.keystore
keystore_password: cassandra
internode_compression: none
inter_dc_tcp_nodelay: true
EOF
CASS_YAML
cass_config = <<CASS_CONFIG
sleep 30
echo -e "update system.local set cluster_name='usergrid' where key='local';" |cqlsh
nodetool flush
sed -i -e "s/cluster_name:.*/cluster_name: 'usergrid'/" \
-e "s/listen_address: .*/listen_address: 127.0.0.1/" \
-e "s/rpc_address: .*/rpc_address: 0.0.0.0/" \
/etc/cassandra/cassandra.yaml
service cassandra stop
service cassandra start
CASS_CONFIG
es_conf= <<ES_CONF
cat > /etc/elasticsearch/elasticsearch.yml <<EOF
cluster.name: usergrid
network.publish_host: 127.0.0.1
transport.tcp.port: 9300
discovery.zen.ping.multicast.enabled: false
node.http.enabled: false
index.store.type: default
index.number_of_shards: 1
index.number_of_replicas: 1
EOF
ES_CONF
es_script = <<ES_SCRIPT
[ -f /home/vagrant/data/elasticsearch-1.3.2.deb ] || wget -O /home/vagrant/data/elasticsearch-1.3.2.deb https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.3.2.deb
dpkg -i /home/vagrant/data/elasticsearch-1.3.2.deb
sed -i -e "s/cluster.name:.*/cluster.name: usergrid/" \
-e "s/network.publish_host:.*/network.publish_host: 0.0.0.0/" \
/etc/elasticsearch/elasticsearch.yml
service elasticsearch start
ES_SCRIPT
usergrid_props = <<USERGRID_PROPS
cat > /home/vagrant/usergrid-deployment.properties <<EOF
cassandra.url=192.168.13.2:9160
cassandra.cluster=usergrid
cassandra.keyspace.strategy=org.apache.cassandra.locator.NetworkTopologyStrategy
cassandra.keyspace.replication=1
cassandra.readcl=QUORUM
cassandra.writecl=QUORUM
cassandra.connections=26
elasticsearch.cluster_name=usergrid
elasticsearch.index_prefix=usergrid
elasticsearch.hosts=192.168.13.3
elasticsearch.port=9300
elasticsearch.number_shards=1
elasticsearch.number_replicas=1
usergrid.sysadmin.login.name=admin
usergrid.sysadmin.login.email=admin@apigee.com
usergrid.sysadmin.login.password=secret
usergrid.sysadmin.login.allowed=true
EOF
USERGRID_PROPS
tomcat_script = <<TOMCAT_SCRIPT
[ -d "/opt/tomcat" ] && exit 0
export CATALINA_HOME=/opt/tomcat
wget -q https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.55/bin/apache-tomcat-7.0.55.tar.gz && \
tar zxf apache-tomcat-*.tar.gz && \
rm apache-tomcat-*.tar.gz && \
mv apache-tomcat* ${CATALINA_HOME}
cp /home/vagrant/usergrid/stack/rest/target/ROOT.war ${CATALINA_HOME}/webapps/
cp /home/vagrant/usergrid-deployment.properties ${CATALINA_HOME}/lib/
rm -r ${CATALINA_HOME}/webapps/ROOT
echo -e "export CATALINA_HOME=${CATALINA_HOME}\n" >> /etc/profile.d/catalina.sh
${CATALINA_HOME}/bin/catalina.sh start
TOMCAT_SCRIPT
# Configure VM server
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "trusty64"
config.vm.box_url = "https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box"
config.vm.define :cassandra do |x|
x.vm.provider :virtualbox do |v|
v.name = "cassandra"
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
v.customize ["modifyvm", :id, "--memory", "4096"]
v.customize ["modifyvm", :id, "--cpus", 2]
end
x.vm.synced_folder ".", "/home/vagrant/data"
# x.vm.network "private_network", ip: "192.168.13.2"
[ 9160, 7000, 7001, 9042 ].each do |port|
x.vm.network :forwarded_port, guest: port, host: port, auto_correct: true
end
x.vm.hostname = "cassandra"
x.vm.provision :shell, :inline => node_script
x.vm.provision :shell, :inline => cass_script
x.vm.provision :shell, :inline => cass_config
end
config.vm.define :elasticsearch do |x|
x.vm.provider :virtualbox do |v|
v.name = "elasticsearch"
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
v.customize ["modifyvm", :id, "--memory", "2048"]
v.customize ["modifyvm", :id, "--cpus", 2]
end
x.vm.synced_folder ".", "/home/vagrant/data"
# x.vm.network "private_network", ip: "192.168.13.3"
[ 9300 ].each do |port|
x.vm.network :forwarded_port, guest: port, host: port, auto_correct: true
end
x.vm.hostname = "elasticsearch"
x.vm.provision :shell, :inline => node_script
x.vm.provision :shell, :inline => es_script
end
# config.vm.define :tomcat do |x|
# x.vm.synced_folder "~/projects/apigee/incubator-usergrid", "/home/vagrant/usergrid"
# x.vm.provider :virtualbox do |v|
# v.name = "tomcat"
# v.customize ["modifyvm", :id, "--memory", "1024"]
# end
# x.vm.network "private_network", ip: "192.168.13.4"
# [ 8080 ].each do |port|
# x.vm.network :forwarded_port, guest: port, host: port, auto_correct: true
# end
# x.vm.hostname = "tomcat"
# x.vm.provision :shell, :inline => node_script
# x.vm.provision :shell, :inline => usergrid_props
# x.vm.provision :shell, :inline => tomcat_script
# end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment