def push_tools(): """ Push customed tools to cassandra_bin. """ sudo("chown -R ubuntu:ubuntu %(root)s" % env) run("mkdir -p %(tmp_dir)s" % env) assert exists(env.cassandra_bin), "Cannot find cassandra bin folder!" deployments._rsync(env.bstore_scripts, env.tmp_dir) sudo("chmod 755 %(tmp_dir)s/scripts/*" % env) run("mv %(tmp_dir)s/scripts/* %(cassandra_bin)s" % env)
def _push_cassandra_config(token, seed): """ Initialize and push cassandra config for node """ with settings(warn_only=True): run("pkill -9 -f CassandraDaemon") deployments._rsync("conf/cassandra-env.sh", "/mnt/cassandra_latest/conf/cassandra-env.sh") f = _generate_cassandra_yaml(token, seed) print "yaml file:", f put(f, "/mnt/cassandra_latest/conf/cassandra.yaml") deployments._rsync("conf/log4j-server.properties", "/mnt/cassandra_latest/conf/log4j-server.properties")
def push_topology_file(src_topology=env.src_topology): """ Push topology file to nodes. $ fab -H ip1,ip2,ip3,ip4,ip5 push_topology_file It can be combined with print_hosts command, for example $ fab -P print_hosts:datacenter=bstore_staging push_topology_file """ sudo("chown -R ubuntu:ubuntu %(root)s" % env) run("mkdir -p %(tmp_dir)s" % env) run("cp %(conf_dir)s/cassandra-topology.properties %(tmp_dir)s" % env) deployments._rsync(src_topology, "%(conf_dir)s/cassandra-topology.properties" % env)
def _deploy_cassandra_build(bin, cassandra_local_tar, cassandra_version, datacenter, realm='*', region="us-east-1", seeds='', verbose=False, project = "bloomstore", roleval = "backend"): """ Deploy the customed built cassandra binary to a temp folder. """ sudo("chown -R ubuntu:ubuntu %(root)s" % env) tmp_folder = env.tmp_dir run("mkdir -p %(tmp_folder)s" % locals()) print green("Downloading the build %(bin)s..." % locals()) run("s3cmd get --force %(bin)s %(tmp_folder)s/%(cassandra_local_tar)s" % locals(), quiet=True) run("tar xvzf %(tmp_folder)s/%(cassandra_local_tar)s -C %(tmp_folder)s; rm %(tmp_folder)s/%(cassandra_local_tar)s" % locals(), quiet=True) deployments._rsync("conf/cassandra-env.sh", "%(tmp_folder)s/%(cassandra_version)s/conf/cassandra-env.sh" % locals()) # if the client does not specify the seeds, it will try to figure it out from datacenter and realm if not seeds: seeds = ','.join(deployments._get_relevant_hosts(datacenter=datacenter, realm=realm, region=region, private_ip=True)) print green("Seeds: " + seeds) installed_dir = "%(tmp_folder)s/%(cassandra_version)s" % locals() _setup_cassandra(datacenter, seeds, project, roleval, installed_dir) return installed_dir
def _push_cassandra_config(seed, project, roleval, installed_dir=env.cassandra_installed_dir): """ Initialize and push cassandra config for node """ deployments._rsync("conf/cassandra-env.sh", "%s/conf/cassandra-env.sh" % installed_dir) f = _generate_cassandra_yaml(seed, project, roleval) print "yaml file:", f put(f, "%s/conf/cassandra.yaml" % installed_dir) deployments._rsync("conf/log4j-server.properties", "%s/conf/log4j-server.properties" % installed_dir) deployments._rsync(env.src_topology, "%s/conf/cassandra-topology.properties" % installed_dir)
def _deploy_monitor(): """ Deploy monitoring """ deployments._deploy_munin() deployments._rsync("../../scripts/ops-tools/monitoring/nrpe-ub.cfg", "/tmp") deployments._rsync("../../scripts/ops-tools/monitoring/server-configs/nagios-plugins/lib/", "/tmp/nagios_plugins") deployments._rsync("../../scripts/ops-tools/monitoring/server-configs/nagios-plugins/config/", "/tmp/nagios_config") deployments._install_nagios()
def setup_ganglia(datacenter, installed_dir=env.cassandra_installed_dir): """ Install ganglia monitoring for Cassandra staging backend: port 8662 staging frontend: port 8663 prod backend: port 8664 prod frontend: port 8665 """ try: ganglia_port = datacenter_ganglia_ports[datacenter] except KeyError as err: print red("Cannot find matching ganglia port: {}".format(err)) return print yellow("Installing ganglia monitoring using port " + ganglia_port + "...") lib_dir = os.path.join(installed_dir, "lib") conf_dir = os.path.join(installed_dir, "conf") sudo("apt-get update") with settings(warn_only=True): sudo("apt-get install -y --force-yes ganglia-monitor") deployments._rsync("$BR_TOP/tools/3rd_party_libs/cassandra/jmxetric-1.0.4.jar", "%s/" % lib_dir) deployments._rsync("$BR_TOP/tools/3rd_party_libs/cassandra/gmetric4j-1.0.3.jar", "%s/" % lib_dir) deployments._rsync("$BR_TOP/tools/3rd_party_libs/cassandra/oncrpc-1.0.7.jar", "%s/" % lib_dir) deployments._rsync("conf/cassandra-env.sh", "%s/cassandra-env.sh" % env.tmp_dir) deployments._rsync("conf/jmxetric.xml", "%s/jmxetric.xml" % env.tmp_dir) deployments._rsync("conf/ganglia/gmond.conf", "%s/gmond.conf" % env.tmp_dir) deployments._rsync("conf/ganglia/conf.d/modpython.conf", "%s/modpython.conf" % env.tmp_dir) deployments._rsync("conf/ganglia/conf.d/simple_diskstats.conf", "%s/simple_diskstats.conf" % env.tmp_dir) deployments._rsync("conf/ganglia/python_modules/simple_diskstats.py", "%s/simple_diskstats.py" % env.tmp_dir) sudo("mv %s/cassandra-env.sh %s/cassandra-env.sh" % (env.tmp_dir, conf_dir)) sudo("mv %s/jmxetric.xml %s/jmxetric.xml" % (env.tmp_dir, conf_dir)) sudo("mv %s/gmond.conf /etc/ganglia/gmond.conf" % env.tmp_dir) sudo("mkdir -p /etc/ganglia/conf.d 1>/dev/null") sudo("mv %s/modpython.conf /etc/ganglia/conf.d/modpython.conf" % env.tmp_dir) sudo("mv %s/simple_diskstats.conf /etc/ganglia/conf.d/simple_diskstats.conf" % env.tmp_dir) sudo("mkdir -p /usr/lib/ganglia/python_modules 1>/dev/null") sudo("mv %s/simple_diskstats.py /usr/lib/ganglia/python_modules/simple_diskstats.py" % env.tmp_dir) sudo("sed -i -e s/'<SEND_PORT>'/" + ganglia_port + "/g %s/cassandra-env.sh" % conf_dir) sudo("sed -i -e s/'<SEND_PORT>'/" + ganglia_port + "/g %s/jmxetric.xml" % conf_dir) sudo("sed -i -e s/'<SEND_PORT>'/" + ganglia_port + "/g /etc/ganglia/gmond.conf") sudo("sed -i -e s/'<HOST_LOCATION>'/" + env.host + "/g /etc/ganglia/gmond.conf") sudo("sudo /etc/init.d/ganglia-monitor restart")
def _push_restart_script(): """ Push the restart script to the cassandra node at /mnt location """ deployments._rsync("./restart.sh", "/mnt/cassandra_latest/bin/") deployments._rsync("./stop.sh", "/mnt/cassandra_latest/bin/")