| set :source_machine, "{{active_master}}" |
| set :install_dir, "/opt/hypertable" |
| set :hypertable_version, "0.9.5.0.pre3" |
| set :default_pkg, "/tmp/hypertable-0.9.5.0.pre3-linux-x86_64.deb" |
| set :default_dfs, "hadoop" |
| set :default_config, "/root/mesos-ec2/hypertable/hypertable.cfg" |
| set :default_additional_args, "" |
| set :hbase_home, "/opt/hbase/current" |
| set :default_client_multiplier, 1 |
| set :default_test_driver, "hypertable" |
| set :default_test_args, "" |
| |
| role :source, "{{active_master}}" |
| role :master, "{{active_master}}" |
| role :hyperspace, "{{active_master}}" |
| open("/root/mesos-ec2/slaves").each do |slave| |
| role :slave, slave |
| end |
| role :localhost, "{{active_master}}" |
| role :thriftbroker |
| role :spare |
| role :test_client |
| role :test_dispatcher |
| |
| ######################### END OF USER CONFIGURATION ############################ |
| |
| def supported_pkgs |
| {"rpm"=>1, "deb"=>1} |
| end |
| |
| def pkg_regex |
| '.*\.(deb|rpm)$' |
| end |
| |
| set(:pkg) do |
| "#{default_pkg}" |
| end unless exists?(:pkg) |
| |
| set(:dfs) do |
| "#{default_dfs}" |
| end unless exists?(:dfs) |
| |
| set(:config) do |
| "#{default_config}" |
| end unless exists?(:config) |
| |
| set(:additional_args) do |
| "#{default_additional_args}" |
| end unless exists?(:additional_args) |
| |
| set(:test_driver) do |
| "#{default_test_driver}" |
| end unless exists?(:test_driver) |
| |
| set(:test_args) do |
| "#{default_test_args}" |
| end unless exists?(:test_args) |
| |
| set(:client_multiplier) do |
| "#{default_client_multiplier}".to_i |
| end unless exists?(:client_multiplier) |
| |
| set :config_file, "#{config}".split('/')[-1] |
| set :config_option, \ |
| "--config=#{install_dir}/#{hypertable_version}/conf/#{config_file}" |
| |
| desc <<-DESC |
| |
| desc <<-DESC |
| Copies config file to installation on localhost. |
| This task runs on localhost and copies the config file specified \ |
| by the variable 'config' (default=#{config}) \ |
| to the installation directory specified by the variable 'install_dir' \ |
| (default-#{install_dir}) |
| DESC |
| task :copy_config_local, :roles => :localhost do |
| run("rsync -e \"ssh -o StrictHostKeyChecking=no\" #{config} #{install_dir}/#{hypertable_version}/conf") |
| end |
| |
| desc <<-DESC |
| Copies config file to installation on all servers in cluster. |
| This task copies the dir\ |
| #{source_machine}:#{install_dir}/{#hypertable_version}/conf |
| to all machines in the cluster |
| DESC |
| task :push_config_all do |
| run <<-CMD |
| rsync -av -e "ssh -o StrictHostKeyChecking=no" --exclude=log --exclude=run --exclude=demo --exclude=fs --exclude=hyperspace #{source_machine}:#{install_dir}/#{hypertable_version}/conf/ #{install_dir}/#{hypertable_version}/conf |
| CMD |
| end |
| |
| desc <<-DESC |
| Copies config file to installation dir on localhost.\ |
| Then copies entire conf fir to all servers in cluster. |
| DESC |
| task :push_config do |
| copy_config_local |
| push_config_all |
| end |
| |
| desc <<-DESC |
| rsyncs installation directory to cluster. For each machine in the \ |
| cluster, his commannd rsyncs the installation from the source \ |
| installation machine specified by the variable 'source_machine' \ |
| (default=#{source_machine}) |
| DESC |
| task :rsync do |
| run <<-CMD |
| rsync -av -e "ssh -o StrictHostKeyChecking=no" --exclude=log --exclude=run --exclude=demo --exclude=fs --exclude=conf --exclude=hyperspace #{source_machine}:#{install_dir}/#{hypertable_version} #{install_dir} && |
| rsync -av -e "ssh -o StrictHostKeyChecking=no" --exclude=log --exclude=run --exclude=demo --exclude=fs --exclude=hyperspace #{source_machine}:#{install_dir}/#{hypertable_version}/conf/ #{install_dir}/#{hypertable_version}/conf |
| CMD |
| end |
| |
| desc <<-DESC |
| sets up the symbolic link 'current' in the installation area \ |
| to point to the directory of the current version |
| (default=#{hypertable_version}) |
| DESC |
| task :set_current, :roles => [:master, :hyperspace, :slave, :thriftbroker, :spare] do |
| run <<-CMD |
| cd #{install_dir} && |
| rm -f current && |
| ln -s #{hypertable_version} current |
| CMD |
| end |
| |
| desc <<-DESC |
| Distributes installation. This task rsyncs everything under\ |
| #{source_machine}:#{install_dir}/#{hypertable_version} to #{install_dir}\ |
| on all machines in the cluster |
| DESC |
| task :dist do |
| transaction do |
| rsync |
| end |
| end |
| |
| desc <<-DESC |
| Alias for install_package command |
| DESC |
| task :install_pkg do |
| install_package |
| end |
| |
| desc <<-DESC |
| rsyncs binary packages and installs on each machine in the cluster |
| DESC |
| task :install_package, :roles => [:master, :hyperspace, :slave, :thriftbroker, :spare] do |
| pkg_basename = File.basename(pkg) |
| pkg_basename =~ /#{pkg_regex}/ |
| pkg_type = $1 |
| |
| if (!supported_pkgs.has_key?(pkg_type)) |
| raise "Package file #{pkg} is of unsupported type. Expected one of #{supported_pkgs.keys.inspect}" |
| end |
| if (/-#{hypertable_version}-/ =~ pkg_basename).nil? |
| raise "Package #{pkg} doesn't match version #{hypertable_version}" |
| end |
| run("rsync -e \"ssh -o StrictHostKeyChecking=no\" #{source_machine}:#{pkg} #{install_dir}/") |
| |
| if (pkg_type == "deb") |
| run("dpkg -i #{install_dir}/#{pkg_basename} && rm #{install_dir}/#{pkg_basename}") |
| else |
| run("rpm -ivh --replacepkgs --nomd5 #{install_dir}/#{pkg_basename} && rm #{install_dir}/#{pkg_basename}") |
| end |
| end |
| |
| desc <<-DESC |
| fhsize's the installations |
| DESC |
| task :fhsize do |
| transaction do |
| run <<-CMD |
| #{install_dir}/#{hypertable_version}/bin/fhsize.sh |
| CMD |
| end |
| end |
| |
| desc <<-DESC |
| Upgrades installation. Checks upgrade, fhsizes if needed |
| then copies hyperspace and the rangeserver |
| state in the run/ directory to new installation |
| DESC |
| task :upgrade do |
| transaction do |
| qualify_upgrade |
| upgrade_all |
| set_current |
| end |
| end |
| |
| desc <<-DESC |
| Verify that upgrade is OK. |
| DESC |
| task :qualify_upgrade, :roles => :source do |
| run <<-CMD |
| #{install_dir}/#{hypertable_version}/bin/upgrade-ok.sh \ |
| #{install_dir}/current #{hypertable_version} |
| CMD |
| end |
| |
| desc <<-DESC |
| Upgrades (copies or uses previous symlink) for "hyperspace", "conf", "run", "log" |
| and "fs" dirs from the current installation to |
| installation specified by the hypertable_version |
| (#{hypertable_version}) |
| DESC |
| task :upgrade_all, :roles => [:master, :hyperspace, :slave, :thriftbroker, :spare] do |
| run <<-CMD |
| #{install_dir}/#{hypertable_version}/bin/upgrade.sh \ |
| #{install_dir}/current #{hypertable_version} |
| CMD |
| end |
| |
| desc "Starts all processes." |
| task :start do |
| transaction do |
| start_hyperspace |
| start_master |
| start_slaves |
| start_master_thriftbroker |
| end |
| end |
| |
| desc "Starts hyperspace processes." |
| task :start_hyperspace, :roles => :hyperspace do |
| run <<-CMD |
| #{install_dir}/current/bin/start-hyperspace.sh \ |
| #{config_option} |
| CMD |
| end |
| |
| desc "Starts master processes." |
| task :start_master, :roles => :master do |
| run <<-CMD |
| #{install_dir}/current/bin/start-dfsbroker.sh #{dfs} \ |
| #{config_option} && |
| #{install_dir}/current/bin/start-master.sh #{config_option} && |
| #{install_dir}/current/bin/start-monitoring.sh |
| CMD |
| end |
| |
| desc "Starts ThriftBroker on master." |
| task :start_master_thriftbroker, :roles => :master do |
| run <<-CMD |
| #{install_dir}/current/bin/start-thriftbroker.sh \ |
| #{config_option} |
| CMD |
| end |
| |
| desc "Starts slave processes." |
| task :start_slaves, :roles => :slave do |
| run <<-CMD |
| #{install_dir}/current/bin/random-wait.sh 5 && |
| #{install_dir}/current/bin/start-dfsbroker.sh #{dfs} \ |
| #{config_option} && |
| #{install_dir}/current/bin/start-rangeserver.sh \ |
| #{config_option} && |
| #{install_dir}/current/bin/start-thriftbroker.sh \ |
| #{config_option} |
| CMD |
| end |
| |
| desc "Starts ThriftBroker processes." |
| task :start_thriftbrokers, :roles => :thriftbroker do |
| run <<-CMD |
| #{install_dir}/current/bin/random-wait.sh 5 && |
| #{install_dir}/current/bin/start-dfsbroker.sh #{dfs} \ |
| #{config_option} && |
| #{install_dir}/current/bin/start-thriftbroker.sh \ |
| #{config_option} |
| CMD |
| end |
| |
| |
| desc "Starts DFS brokers." |
| task :start_dfsbrokers, :roles => [:master, :slave] do |
| run "#{install_dir}/current/bin/start-dfsbroker.sh #{dfs} \ |
| #{config_option}" |
| end |
| |
| desc "Stops all servers." |
| task :stop do |
| transaction do |
| stop_master |
| stop_slaves |
| stop_hyperspace |
| stop_dfsbrokers |
| end |
| end |
| |
| desc "Stops DFS brokers." |
| task :stop_dfsbrokers, :roles => [:master, :slave] do |
| run <<-CMD |
| #{install_dir}/current/bin/stop-servers.sh #{additional_args} |
| CMD |
| end |
| |
| desc "Stops slave processes." |
| task :stop_slaves, :roles => :slave do |
| run <<-CMD |
| #{install_dir}/current/bin/stop-servers.sh --no-hyperspace --no-master --no-dfsbroker #{additional_args} |
| CMD |
| end |
| |
| desc "Stops master processes." |
| task :stop_master, :roles => :master do |
| run <<-CMD |
| #{install_dir}/current/bin/stop-servers.sh --no-hyperspace --no-rangeserver --no-dfsbroker #{additional_args} && |
| #{install_dir}/current/bin/stop-monitoring.sh |
| CMD |
| end |
| |
| desc "Stops hyperspace processes." |
| task :stop_hyperspace, :roles => :hyperspace do |
| run <<-CMD |
| #{install_dir}/current/bin/stop-hyperspace.sh |
| CMD |
| end |
| |
| desc "Stops ThriftBroker processes." |
| task :stop_thriftbrokers, :roles => :thriftbroker do |
| run <<-CMD |
| #{install_dir}/current/bin/stop-servers.sh --no-hyperspace --no-master --no-rangeserver |
| CMD |
| end |
| |
| desc "Cleans hyperspace & rangeservers, removing all tables." |
| task :cleandb do |
| transaction do |
| clean_master |
| clean_hyperspace |
| clean_slaves |
| end |
| end |
| |
| desc "Cleans master state but not hyperspace." |
| task :clean_master, :roles => :master do |
| run <<-CMD |
| #{install_dir}/current/bin/start-dfsbroker.sh #{dfs} \ |
| #{config_option} && \ |
| #{install_dir}/current/bin/clean-database.sh #{config_option} ; |
| CMD |
| end |
| |
| desc "Cleans hyperspace." |
| task :clean_hyperspace, :roles => :hyperspace do |
| run <<-CMD |
| #{install_dir}/current/bin/clean-hyperspace.sh |
| CMD |
| end |
| |
| desc "Cleans rangeservers and master state but not hyperspace." |
| task :clean_slaves, :roles => :slave do |
| run <<-CMD |
| #{install_dir}/current/bin/stop-servers.sh --no-hyperspace --no-master && |
| rm -rf #{install_dir}/current/run/* |
| CMD |
| end |
| |
| desc "Reports status for all processes." |
| task :status do |
| transaction do |
| dfs_status |
| master_status |
| hyperspace_status |
| rangeserver_status |
| end |
| end |
| |
| desc "Get status for dfs processes." |
| task :dfs_status, :roles => [:master, :slave] do |
| run <<-CMD |
| #{install_dir}/current/bin/ht serverup dfsbroker |
| CMD |
| end |
| |
| desc "Get status for Hypertable.Master process." |
| task :master_status, :roles => [:master] do |
| run <<-CMD |
| #{install_dir}/current/bin/ht serverup master |
| CMD |
| end |
| |
| desc "Get status for Hyperspace.Master process." |
| task :hyperspace_status, :roles => [:hyperspace] do |
| run <<-CMD |
| #{install_dir}/current/bin/ht serverup hyperspace |
| CMD |
| end |
| |
| desc "Get status for rangeserver processes." |
| task :rangeserver_status, :roles => [:slave] do |
| run <<-CMD |
| #{install_dir}/current/bin/ht serverup rangeserver |
| CMD |
| end |
| |
| set :default_dumpfile, "/tmp/rsdump.txt" |
| |
| set(:dumpfile) do |
| "#{default_dumpfile}" |
| end unless exists?(:dumpfile) |
| |
| desc "Run dump command on each rangeserver" |
| task :rangeserver_dump, :roles => [:slave] do |
| run <<-CMD |
| echo "dump NOKEYS '#{dumpfile}';" | #{install_dir}/current/bin/ht ht_rsclient --batch #{config_option} |
| CMD |
| end |
| |
| |
| if "#{test_driver}" == "hypertable" |
| set :thrift_broker_command, "#{install_dir}/current/bin/start-thriftbroker.sh #{config_option}" |
| set :start_test_client_command, "#{install_dir}/current/bin/start-test-client.sh --count #{client_multiplier} #{roles[:test_dispatcher].servers[0]}" |
| set :run_test_dispatcher_command, "#{install_dir}/current/bin/jrun --pidfile #{install_dir}/#{hypertable_version}/run/Hypertable.TestDispatcher.pid org.hypertable.examples.PerformanceTest.Dispatcher --driver=#{test_driver} --clients=#{roles[:test_client].servers.length*client_multiplier} #{test_args}" |
| set :stop_test_args, "" |
| elsif "#{test_driver}" == "hbase" |
| set :thrift_broker_command, "echo -n" |
| set :start_test_client_command, "#{install_dir}/current/bin/start-test-client.sh --jrun-opts \"--add-to-classpath #{hbase_home}/conf\" --count #{client_multiplier} #{roles[:test_dispatcher].servers[0]}" |
| set :run_test_dispatcher_command, "#{install_dir}/current/bin/jrun --pidfile #{install_dir}/#{hypertable_version}/run/Hypertable.TestDispatcher.pid --add-to-classpath #{hbase_home}/conf org.hypertable.examples.PerformanceTest.Dispatcher --driver=#{test_driver} --clients=#{roles[:test_client].servers.length*client_multiplier} #{test_args}" |
| set :stop_test_args, "--no-thriftbroker --no-dfsbroker" |
| else |
| set :thrift_broker_command, "echo Invalid test driver - #{test_driver}" |
| set :start_test_client_command, "echo Invalid test driver - #{test_driver}" |
| set :run_test_dispatcher_command, "echo Invalid test driver - #{test_driver}" |
| set :stop_test_args, "--no-thriftbroker --no-dfsbroker" |
| end |
| |
| desc "Starts test clients." |
| task :start_test_clients, :roles => :test_client do |
| run <<-CMD |
| #{install_dir}/current/bin/random-wait.sh 5 && |
| #{thrift_broker_command} && |
| #{start_test_client_command} |
| CMD |
| end |
| |
| desc "Run test dispatcher." |
| task :run_test_dispatcher, :roles => :test_dispatcher do |
| run <<-CMD |
| #{thrift_broker_command} && |
| #{run_test_dispatcher_command} |
| CMD |
| end |
| |
| desc "Stops test." |
| task :stop_test, :roles => [:test_client, :test_dispatcher] do |
| run <<-CMD |
| #{install_dir}/current/bin/stop-servers.sh --no-hyperspace --no-master --no-rangeserver #{stop_test_args} |
| CMD |
| end |
| |
| desc "Run test" |
| task :run_test do |
| transaction do |
| stop_test |
| start_test_clients |
| run_test_dispatcher |
| end |
| end |
| |
| |