def post_faban_client_run(): vm_get_scripts = dict() get_scripts = list() vm_run_scripts = dict() run_scripts = list() for faban_client in fab.env['web_serving_lb']['servers']['faban_client']: vm_id = faban_client['vm_id'] vm_get_scripts[vm_id] = list() vm_run_scripts[vm_id] = list() for client_id in faban_client['clients']: vm_get_scripts[vm_id].append({ 'src': "faban_client_%s.log" % (client_id, ), 'dst': "/tmp/" }) get_scripts.append({ 'src': "/tmp/faban_client_%s.log" % (client_id, ), 'dst': "results/" }) vm_run_scripts[vm_id].append("rm -f faban_client_%s.log" % (client_id, )) run_scripts.append("rm -f /tmp/faban_client_%s.log" % (client_id, )) pve.vm_parallel_get(vm_get_scripts) pve.parallel_get(get_scripts) pve.vm_parallel_run(vm_run_scripts) pve.parallel_run(run_scripts)
def clear_lb_servers(): scripts = dict() for lb_server in fab.env['httperf_haproxy_lb']['servers']['lb_server']: vm_id = lb_server['vm_id'] policy = lb_server['policy'] scripts[vm_id] = "skill python; " \ "sudo sed -i 's/\/var\/run\/haproxy.sock/\/etc\/haproxy\/haproxy.sock/g' " \ "~/haproxy-dynamic-weight/set-lb-weight.py; " \ "sudo rm -f /var/run/haproxy.sock; " scripts[vm_id] += \ "sudo sed --in-place '/stats socket \/var\/run\/haproxy.sock mode 666 level admin/d' " \ "/etc/haproxy/haproxy.cfg; " \ "sudo sed --in-place '/nbproc 15/d' /etc/haproxy/haproxy.cfg; " \ "sudo sed --in-place '/frontend web-serving/d' /etc/haproxy/haproxy.cfg; " \ "sudo sed --in-place '/bind %s%s:8080/d' /etc/haproxy/haproxy.cfg; " \ "sudo sed --in-place '/default_backend web-serving-backend/d' /etc/haproxy/haproxy.cfg; " \ "sudo sed --in-place '/bind-process all/d' /etc/haproxy/haproxy.cfg; " \ "sudo sed --in-place '/backend web-serving-backend/d' /etc/haproxy/haproxy.cfg;" \ "sudo sed --in-place '/balance %s/d' /etc/haproxy/haproxy.cfg; " \ % (fab.env['httperf_haproxy_lb']['vm']['prefix_1'], vm_id, policy) for web_server_id in lb_server['web_servers']: web_server_vm_id = fab.env['httperf_haproxy_lb']['servers']['web_server'][web_server_id]['vm_id'] scripts[vm_id] += \ "sudo sed --in-place '/server web_server_%s %s%s:8080/d' /etc/haproxy/haproxy.cfg; " \ % (web_server_vm_id, fab.env['httperf_haproxy_lb']['vm']['prefix_1'], web_server_vm_id) scripts[vm_id] += "sudo service haproxy stop; " scripts[vm_id] += "sudo ip addr del %s%s/24 dev eth1; " \ "sudo ip link set eth1 down; " \ % (fab.env['httperf_haproxy_lb']['vm']['prefix_1'], vm_id) pve.vm_parallel_run(scripts)
def configure_httperf_clients(): scripts = dict() httperf_client = fab.env['httperf_haproxy_lb']['servers']['httperf_client'] for httperf_client_vm in httperf_client['vms']: vm_id = httperf_client_vm['vm_id'] scripts[vm_id] = "sudo ip addr add %s%s/24 dev eth1; " \ "sudo ip link set eth1 up; " \ % (fab.env['httperf_haproxy_lb']['vm']['prefix_1'], vm_id) num_conns = httperf_client['config']['num-conns'] num_calls = httperf_client['config']['num-calls'] rate = httperf_client['config']['rate'] ramp = httperf_client['config']['ramp'] iters = httperf_client['config']['iters'] timeout = httperf_client['config']['timeout'] lb_server_vm_id = fab.env['httperf_haproxy_lb']['servers']['lb_server'][httperf_client_vm['lb_server']]['vm_id'] script = "cd ~/httperf-plot; " \ "python httperf-plot.py --server %s%s --port 8080 " \ "--hog --verbose --num-conns %s --num-calls %s --rate %s " \ "--ramp-up %s,%s --timeout %s " \ "--csv %s > %s; " \ "cd ~/; " \ % (fab.env['httperf_haproxy_lb']['vm']['prefix_1'], lb_server_vm_id, num_conns, num_calls, rate, ramp, iters, timeout, "httperf_client_%s.csv" % (vm_id,), "httperf_client_%s.log" % (vm_id,)) scripts[vm_id] += "echo '%s' > ~/httperf_script.sh; " % (script,) pve.vm_parallel_run(scripts)
def clear_lb_servers(): scripts = dict() lb_server = fab.env['httperf_ipvs_lb']['servers']['lb_server'] vip_prefix = fab.env['httperf_ipvs_lb']['vip']['prefix'] for lb_server_vm in lb_server['vms']: web_server_vm_ids = [] for web_server_id in lb_server_vm['web_servers']: web_server_vm_id = fab.env['httperf_ipvs_lb']['servers'][ 'web_server']['vms'][web_server_id]['vm_id'] web_server_vm_ids.append(str(web_server_vm_id)) vm_id = lb_server_vm['vm_id'] scripts[vm_id] = "sudo ipvsadm --set 0 120 0; " if fab.env['httperf_ipvs_lb']['feedback']['enable']: scripts[vm_id] += "skill python; " \ "sudo sed -i 's/server_ids = \[%s\]/server_ids = \[_SERVER_IDS_\]/g' " \ "~/ipvs-dynamic-weight/set-lb-weight.py; " \ "sudo sed -i 's/%s%s.%s/XXX/g' ~/ipvs-dynamic-weight/set-lb-weight.py; " \ "sudo sed -i 's/%s/YYY/g' ~/ipvs-dynamic-weight/set-lb-weight.py; " \ % (", ".join(web_server_vm_ids), vip_prefix, vm_id, vm_id, fab.env['httperf_ipvs_lb']['vm']['prefix_1']) scripts[vm_id] += "sudo ipvsadm -C; " \ "sudo ifconfig eth1:0 down; " \ "sudo service ipvsadm stop; " scripts[vm_id] += \ "sudo sed -i 's/true/false/g' /etc/default/ipvsadm; " \ "sudo sed -i 's/master/none/g' /etc/default/ipvsadm; " \ "sudo sed -i 's/eth1/eth0/g' /etc/default/ipvsadm; " scripts[vm_id] += "sudo ip addr del %s%s/24 dev eth1; " \ "sudo ip link set eth1 down; " \ % (fab.env['httperf_ipvs_lb']['vm']['prefix_1'], vm_id) pve.vm_parallel_run(scripts)
def configure_lb_servers(): scripts = dict() for lb_server in fab.env['httperf_haproxy_lb']['servers']['lb_server']: vm_id = lb_server['vm_id'] scripts[vm_id] = "sudo ip addr add %s%s/24 dev eth1; " \ "sudo ip link set eth1 up; " \ % (fab.env['httperf_haproxy_lb']['vm']['prefix_1'], vm_id) policy = lb_server['policy'] scripts[vm_id] += \ "sudo sed -i 's/ENABLED=0/ENABLED=1/g' /etc/default/haproxy; " \ "sudo sed -i '8istats socket /var/run/haproxy.sock mode 666 level admin' /etc/haproxy/haproxy.cfg; " \ "sudo sed -i '9inbproc 15' /etc/haproxy/haproxy.cfg; " \ "echo 'frontend web-serving' | sudo tee -a /etc/haproxy/haproxy.cfg; " \ "echo ' bind %s%s:8080' | sudo tee -a /etc/haproxy/haproxy.cfg; " \ "echo ' default_backend web-serving-backend' | sudo tee -a /etc/haproxy/haproxy.cfg; " \ "echo ' bind-process all' | sudo tee -a /etc/haproxy/haproxy.cfg; " \ "echo 'backend web-serving-backend' | sudo tee -a /etc/haproxy/haproxy.cfg; " \ "echo ' balance %s' | sudo tee -a /etc/haproxy/haproxy.cfg; " \ % (fab.env['httperf_haproxy_lb']['vm']['prefix_1'], vm_id, policy) for web_server_id in lb_server['web_servers']: web_server_vm_id = fab.env['httperf_haproxy_lb']['servers']['web_server'][web_server_id]['vm_id'] scripts[vm_id] += \ "echo ' server web_server_%s %s%s:8080' | sudo tee -a /etc/haproxy/haproxy.cfg; " \ % (web_server_vm_id, fab.env['httperf_haproxy_lb']['vm']['prefix_1'], web_server_vm_id) scripts[vm_id] += "sudo service haproxy start; " state_server_vm_id = fab.env['httperf_haproxy_lb']['servers']['state_server'][ lb_server['state_server']['id']]['vm_id'] state_server_timeout = lb_server['state_server']['timeout'] scripts[vm_id] += "sudo sed -i 's/\/etc\/haproxy\/haproxy.sock/\/var\/run\/haproxy.sock/g' " \ "~/haproxy-dynamic-weight/set-lb-weight.py; " \ "nohup python ~/haproxy-dynamic-weight/set-lb-weight.py %s%s:11211 %s " \ "> /dev/null 2> /dev/null < /dev/null & " \ % (fab.env['httperf_haproxy_lb']['vm']['prefix_1'], state_server_vm_id, state_server_timeout) pve.vm_parallel_run(scripts)
def configure_web_servers(): scripts = dict() for web_server in fab.env['web_serving_lb']['servers']['web_server']: vm_id = web_server['vm_id'] scripts[vm_id] = "sudo ip addr add %s%s/24 dev eth1; " \ "sudo ip link set eth1 up; " \ % (fab.env['web_serving_lb']['vm']['prefix_1'], vm_id) pm_max_childs = web_server['pm_max_childs'] mysql_server_vm_id = fab.env['web_serving_lb']['servers'][ 'mysql_server'][web_server['mysql_server']]['vm_id'] memcache_server_vm_id = \ fab.env['web_serving_lb']['servers']['memcache_server'][web_server['memcache_server']]['vm_id'] scripts[vm_id] += \ "sudo docker run -dt --net=host --name=web_server_%s cloudsuite/web-serving:web_server " \ "/etc/bootstrap.sh %s%s %s%s %s; " \ % (vm_id, fab.env['web_serving_lb']['vm']['prefix_1'], mysql_server_vm_id, fab.env['web_serving_lb']['vm']['prefix_1'], memcache_server_vm_id, pm_max_childs) scripts[vm_id] += "sudo sed -i 's/_HOSTNAME_/web_server_%s/g' ~/haproxy-dynamic-weight/request-lb-weight.py; " \ % (vm_id,) state_server_vm_id = fab.env['web_serving_lb']['servers'][ 'state_server'][web_server['state_server']['id']]['vm_id'] state_server_timeout = web_server['state_server']['timeout'] state_server_max_load = web_server['state_server']['max_load'] scripts[vm_id] += "nohup python ~/haproxy-dynamic-weight/request-lb-weight.py %s%s:11211 %s %s " \ "> /dev/null 2> /dev/null < /dev/null & " \ % (fab.env['web_serving_lb']['vm']['prefix_1'], state_server_vm_id, state_server_timeout, state_server_max_load) pve.vm_parallel_run(scripts)
def pve3_setup_backends(): pve.vm_generate_multi(fab.env['pu-pve3']['settings']['vm']['base_id'], 'backend', False, None, *_get_vm_id_list(fab.env['pu-pve3']['backends']['vms'])) _setup_options(fab.env['pu-pve3']['backends']['vms'], fab.env['pu-pve3']['backends']['options']) scripts = _setup_ifaces(None, fab.env['pu-pve3']['backends']['vms'], fab.env['pu-pve3']['settings']['vm'], False) # TODO: add scripts once we know what'd be running on these VMs. pve.vm_parallel_run(scripts)
def setup(): pve.vm_generate_multi(fab.env['httperf_haproxy_lb']['vm']['base_id'], "httperf-lb", False, setup_scripts(), *vm_id_list) scripts = dict() for vm_id in vm_id_list: scripts[vm_id] = "sudo service docker stop; " \ "sudo service haproxy stop; " \ "sudo service apache2 stop; " pve.vm_parallel_run(scripts)
def clear_httperf_clients(): scripts = dict() for httperf_client_vm in fab.env['httperf_haproxy_lb']['servers']['httperf_client']['vms']: vm_id = httperf_client_vm['vm_id'] scripts[vm_id] = "rm -f ~/httperf_script.sh; " scripts[vm_id] += \ "sudo ip addr del %s%s/24 dev eth1; " \ "sudo ip link set eth1 down; " \ % (fab.env['httperf_haproxy_lb']['vm']['prefix_1'], vm_id) pve.vm_parallel_run(scripts)
def clear_web_servers(): scripts = dict() web_server = fab.env['httperf_ipvs_lb']['servers']['web_server'] vip_prefix = fab.env['httperf_ipvs_lb']['vip']['prefix'] for web_server_vm in web_server['vms']: vm_id = web_server_vm['vm_id'] scripts[vm_id] = "" if web_server_vm['load']['enable']: scripts[vm_id] += "sudo skill sh; " \ "sudo rm -f inf-loop.sh; " time_variance = web_server_vm['load']['time_variance'] if time_variance != 0: scripts[vm_id] += \ "sudo git clone https://gist.github.com/ed99f8bdc71c44eb4bd8937c62401652.git; " \ "sudo sh ed99f8bdc71c44eb4bd8937c62401652/kill-inf-loop-rand.sh; " \ "sudo rm -rf ed99f8bdc71c44eb4bd8937c62401652; " if web_server_vm['load']['type'] == 'cpulimit': scripts[vm_id] += "sudo rm -f inf-loop-cpulimit.sh; " if time_variance != 0: scripts[vm_id] += "sudo rm -f inf-loop-cpulimit-rand.sh; " elif web_server_vm['load']['type'] == 'nice': scripts[vm_id] += "sudo rm -f inf-loop-nice.sh; " if time_variance != 0: scripts[vm_id] += "sudo rm -f inf-loop-nice-rand.sh; " if fab.env['httperf_ipvs_lb']['feedback']['enable']: scripts[vm_id] += "skill python; " \ "sudo sed -i 's/server_id = %s/server_id = _SERVER_ID_/g' " \ "~/ipvs-dynamic-weight/request-lb-weight.py; " \ % (vm_id,) if fab.env['httperf_ipvs_lb']['feedback']['is_dummy']: scripts[vm_id] += "sudo sed -i 's/else: weight = 1/\# else: weight = XXX/g' " \ "~/ipvs-dynamic-weight/request-lb-weight.py; " scripts[vm_id] += "sudo sed -i 's/Listen 8080/Listen 80/g' /etc/apache2/ports.conf; " \ "sudo sed -i 's/VirtualHost \*:8080/VirtualHost \*:80/g' " \ "/etc/apache2/sites-enabled/000-default.conf; " if web_server_vm['webpage']['cgi']['enable']: scripts[vm_id] += \ "sudo rm -f /usr/lib/cgi-bin/cpu.py; " \ "sudo sed -i 's/cgi-bin\/cpu.py/index.html index.cgi index.pl index.php index.xhtml index.htm/g' " \ "/etc/apache2/mods-enabled/dir.conf;" \ "sudo a2dismod cgid; " else: scripts[vm_id] += "sudo rm -f /var/www/html/index.html; " scripts[vm_id] += "sudo sync; " \ "sudo service apache2 stop; " lb_server_vm_id = fab.env['httperf_ipvs_lb']['servers']['lb_server'][ 'vms'][web_server_vm['lb_server']]['vm_id'] scripts[vm_id] += \ "sudo iptables -t nat -D PREROUTING -d %s%s.%s -j REDIRECT; " \ "sudo ip addr del %s%s/24 dev eth1; " \ "sudo ip link set eth1 down; " \ % (vip_prefix, lb_server_vm_id, lb_server_vm_id, fab.env['httperf_ipvs_lb']['vm']['prefix_1'], vm_id) pve.vm_parallel_run(scripts)
def configure_state_servers(): scripts = dict() for state_server in fab.env['web_serving_lb']['servers']['state_server']: vm_id = state_server['vm_id'] scripts[vm_id] = "sudo ip addr add %s%s/24 dev eth1; " \ "sudo ip link set eth1 up; " \ % (fab.env['web_serving_lb']['vm']['prefix_1'], vm_id) scripts[vm_id] += \ "sudo docker run --network=host --name state_server_%s -d memcached; " \ % (vm_id,) pve.vm_parallel_run(scripts)
def setup(): pve.vm_generate_multi(fab.env['httperf_ipvs_lb']['vm']['base_id'], "httperf-lb", False, setup_scripts(), *vm_id_list) setup_options(vm_id_list) scripts = dict() for vm_id in vm_id_list: scripts[vm_id] = "sudo service docker stop; " \ "sudo service apache2 stop; " \ "sudo mv /var/www/html/index.html /var/www/html/index.html.orig; " pve.vm_parallel_run(scripts)
def clear_state_servers(): scripts = dict() for state_server in fab.env['web_serving_lb']['servers']['state_server']: vm_id = state_server['vm_id'] scripts[vm_id] = "sudo docker stop state_server_%s; " \ "sudo docker rm state_server_%s; " % (vm_id, vm_id) scripts[vm_id] += \ "sudo ip addr del %s%s/24 dev eth1; " \ "sudo ip link set eth1 down; " \ % (fab.env['web_serving_lb']['vm']['prefix_1'], vm_id) pve.vm_parallel_run(scripts)
def configure_memcache_servers(): scripts = dict() for memcache_server in fab.env['web_serving_lb']['servers'][ 'memcache_server']: vm_id = memcache_server['vm_id'] scripts[vm_id] = "sudo ip addr add %s%s/24 dev eth1; " \ "sudo ip link set eth1 up; " \ % (fab.env['web_serving_lb']['vm']['prefix_1'], vm_id) scripts[vm_id] += \ "sudo docker run -dt --net=host --name=memcache_server_%s cloudsuite/web-serving:memcached_server; " \ % (vm_id,) pve.vm_parallel_run(scripts)
def configure_mysql_servers(): scripts = dict() for mysql_server in fab.env['web_serving_lb']['servers']['mysql_server']: vm_id = mysql_server['vm_id'] scripts[vm_id] = "sudo ip addr add %s%s/24 dev eth1; " \ "sudo ip link set eth1 up; " \ % (fab.env['web_serving_lb']['vm']['prefix_1'], vm_id) lb_server_vm_id = fab.env['web_serving_lb']['servers']['lb_server'][ mysql_server['lb_server']]['vm_id'] scripts[vm_id] += \ "sudo docker run -dt --net host --name mysql_server_%s cloudsuite/web-serving:db_server %s%s; " \ % (vm_id, fab.env['web_serving_lb']['vm']['prefix_1'], lb_server_vm_id) pve.vm_parallel_run(scripts)
def clear_faban_clients(): scripts = dict() for faban_client in fab.env['web_serving_lb']['servers']['faban_client']: vm_id = faban_client['vm_id'] scripts[vm_id] = "" for client_id in faban_client['clients']: scripts[vm_id] += "sudo docker stop faban_client_%s; " \ "sudo docker rm faban_client_%s; " \ % (client_id, client_id) scripts[vm_id] += "sudo ip link set eth1 down; " \ "sudo brctl delif docker1 eth1; " \ "sudo docker network rm docker1; " pve.vm_parallel_run(scripts)
def clear_state_servers(): if fab.env['httperf_ipvs_lb']['feedback']['enable']: scripts = dict() state_server = fab.env['httperf_ipvs_lb']['servers']['state_server'] for state_server_vm in state_server['vms']: vm_id = state_server_vm['vm_id'] scripts[vm_id] = "sudo docker stop state_server_%s; " \ "sudo docker rm state_server_%s; " \ "sudo service docker stop; " % (vm_id, vm_id) scripts[vm_id] += \ "sudo ip addr del %s%s/24 dev eth1; " \ "sudo ip link set eth1 down; " \ % (fab.env['httperf_ipvs_lb']['vm']['prefix_1'], vm_id) pve.vm_parallel_run(scripts)
def _setup_ifaces(scripts, vms, settings, execute=True): if not isinstance(scripts, dict): scripts = dict() prefix_1 = settings['prefix_1'] broadcast_1 = settings['broadcast_1'] for vm in vms: vm_id = vm['vm_id'] scripts[vm_id] = "sudo ip addr add %s%s/24 broadcast %s dev eth1; " \ "sudo ip link set eth1 up; " \ % (prefix_1, vm_id, broadcast_1) if is_execute(execute): pve.vm_parallel_run(scripts) else: return scripts
def configure_state_servers(): if fab.env['httperf_ipvs_lb']['feedback']['enable']: scripts = dict() state_server = fab.env['httperf_ipvs_lb']['servers']['state_server'] for state_server_vm in state_server['vms']: vm_id = state_server_vm['vm_id'] scripts[vm_id] = "sudo ip addr add %s%s/24 dev eth1; " \ "sudo ip link set eth1 up; " \ % (fab.env['httperf_ipvs_lb']['vm']['prefix_1'], vm_id) scripts[vm_id] += \ "sudo service docker start; " \ "sudo docker run --network=host --name state_server_%s -d memcached; " \ % (vm_id,) pve.vm_parallel_run(scripts)
def clear_web_servers(): scripts = dict() for web_server in fab.env['web_serving_lb']['servers']['web_server']: vm_id = web_server['vm_id'] scripts[vm_id] = "skill python; " \ "sudo sed -i 's/web_server_%s/_HOSTNAME_/g' ~/haproxy-dynamic-weight/request-lb-weight.py; " \ % (vm_id,) scripts[vm_id] += "sudo docker stop web_server_%s;" \ "sudo docker rm web_server_%s; " % (vm_id, vm_id) scripts[vm_id] += \ "sudo ip addr del %s%s/24 dev eth1; " \ "sudo ip link set eth1 down; " \ % (fab.env['web_serving_lb']['vm']['prefix_1'], vm_id) pve.vm_parallel_run(scripts)
def clear_httperf_clients(): scripts = dict() httperf_client = fab.env['httperf_ipvs_lb']['servers']['httperf_client'] vip_prefix = fab.env['httperf_ipvs_lb']['vip']['prefix'] for httperf_client_vm in httperf_client['vms']: vm_id = httperf_client_vm['vm_id'] lb_server_vm_id = fab.env['httperf_ipvs_lb']['servers']['lb_server'][ 'vms'][httperf_client_vm['lb_server']]['vm_id'] scripts[vm_id] = "rm -f ~/httperf_script.sh; " scripts[vm_id] += \ "sudo ip route del %s%s.0/24 dev eth1; " \ "sudo ip addr del %s%s/24 dev eth1; " \ "sudo ip link set eth1 down; " \ % (vip_prefix, lb_server_vm_id, fab.env['httperf_ipvs_lb']['vm']['prefix_1'], vm_id) pve.vm_parallel_run(scripts)
def clear_web_servers(): scripts = dict() for web_server in fab.env['httperf_haproxy_lb']['servers']['web_server']: vm_id = web_server['vm_id'] scripts[vm_id] = "sudo sed -i 's/Listen 8080/Listen 80/g' /etc/apache2/ports.conf; " \ "sudo sed -i 's/VirtualHost \*:8080/VirtualHost \*:80/g' " \ "/etc/apache2/sites-enabled/000-default.conf; " \ "sudo service apache2 stop; " scripts[vm_id] += "skill python; " \ "sudo sed -i 's/web_server_%s/_HOSTNAME_/g' ~/haproxy-dynamic-weight/request-lb-weight.py; " \ % (vm_id,) scripts[vm_id] += \ "sudo ip addr del %s%s/24 dev eth1; " \ "sudo ip link set eth1 down; " \ % (fab.env['httperf_haproxy_lb']['vm']['prefix_1'], vm_id) pve.vm_parallel_run(scripts)
def configure_lb_servers(): scripts = dict() lb_server = fab.env['httperf_ipvs_lb']['servers']['lb_server'] vip_prefix = fab.env['httperf_ipvs_lb']['vip']['prefix'] for lb_server_vm in lb_server['vms']: vm_id = lb_server_vm['vm_id'] scripts[vm_id] = "sudo ip addr add %s%s/24 dev eth1; " \ "sudo ip link set eth1 up; " \ % (fab.env['httperf_ipvs_lb']['vm']['prefix_1'], vm_id) scripts[vm_id] += \ "sudo sed -i 's/false/true/g' /etc/default/ipvsadm; " \ "sudo sed -i 's/none/master/g' /etc/default/ipvsadm; " \ "sudo sed -i 's/eth0/eth1/g' /etc/default/ipvsadm; " scripts[vm_id] += "sudo service ipvsadm start; " \ "sudo ifconfig eth1:0 %s%s.%s netmask 255.255.255.0 broadcast %s%s.255; " \ % (vip_prefix, vm_id, vm_id, vip_prefix, vm_id) policy = lb_server_vm['lb']['policy'] scripts[vm_id] += "sudo ipvsadm -A -t %s%s.%s:8080 -s %s; " \ % (vip_prefix, vm_id, vm_id, policy) web_server_vm_ids = [] for web_server_id in lb_server_vm['web_servers']: web_server_vm_id = fab.env['httperf_ipvs_lb']['servers'][ 'web_server']['vms'][web_server_id]['vm_id'] scripts[vm_id] += \ "sudo ipvsadm -a -t %s%s.%s:8080 -r %s%s:8080 -g; " \ % (vip_prefix, vm_id, vm_id, fab.env['httperf_ipvs_lb']['vm']['prefix_1'], web_server_vm_id) web_server_vm_ids.append(str(web_server_vm_id)) fin_timeout = lb_server_vm['lb']['fin_timeout'] scripts[vm_id] += "sudo ipvsadm --set 0 %s 0; " % (fin_timeout, ) if fab.env['httperf_ipvs_lb']['feedback']['enable']: state_server_vm_id = fab.env['httperf_ipvs_lb']['servers'][ 'state_server']['vms'][lb_server_vm['state_server'] ['id']]['vm_id'] state_server_timeout = lb_server_vm['state_server']['timeout'] scripts[vm_id] += "sudo sed -i 's/server_ids = \[_SERVER_IDS_\]/server_ids = \[%s\]/g' " \ "~/ipvs-dynamic-weight/set-lb-weight.py; " \ "sudo sed -i 's/XXX/%s%s.%s/g' ~/ipvs-dynamic-weight/set-lb-weight.py; " \ "sudo sed -i 's/YYY/%s/g' ~/ipvs-dynamic-weight/set-lb-weight.py; " \ "nohup python ~/ipvs-dynamic-weight/set-lb-weight.py %s%s:11211 %s " \ "> /dev/null 2> /dev/null < /dev/null & " \ % (", ".join(web_server_vm_ids), vip_prefix, vm_id, vm_id, fab.env['httperf_ipvs_lb']['vm']['prefix_1'], fab.env['httperf_ipvs_lb']['vm']['prefix_1'], state_server_vm_id, state_server_timeout) pve.vm_parallel_run(scripts)
def faban_client_run(): scripts = dict() client_ids = list() for faban_client in fab.env['web_serving_lb']['servers']['faban_client']: vm_id = faban_client['vm_id'] load_scale = faban_client['load_scale'] lb_server_vm_id = fab.env['web_serving_lb']['servers']['lb_server'][ faban_client['lb_server']]['vm_id'] scripts[vm_id] = list() for client_id in faban_client['clients']: scripts[vm_id].append( "sudo docker exec faban_client_%s /etc/bootstrap.sh %s%s %s > %s" % (client_id, fab.env['web_serving_lb']['vm']['prefix_1'], lb_server_vm_id, load_scale, "faban_client_%s.log" % (client_id, ))) client_ids.append(client_id) pve.vm_parallel_run(scripts) return client_ids
def configure_faban_clients(): scripts = dict() for faban_client in fab.env['web_serving_lb']['servers']['faban_client']: vm_id = faban_client['vm_id'] scripts[vm_id] = "sudo docker network create --driver bridge --subnet=%s0/24 --gateway=%s%s " \ "--opt 'com.docker.network.bridge.name'='docker1' docker1; " \ "sudo brctl addif docker1 eth1; " \ "sudo ip link set eth1 up; " \ % (fab.env['web_serving_lb']['vm']['prefix_1'], fab.env['web_serving_lb']['vm']['prefix_1'], vm_id) steady_state = faban_client['steady_state'] for client_id in faban_client['clients']: scripts[vm_id] += \ "sudo docker run -dt --net docker1 --ip %s%s --name faban_client_%s --entrypoint bash " \ "cloudsuite/web-serving:faban_client; " \ % (fab.env['web_serving_lb']['vm']['prefix_1'], client_id, client_id) scripts[vm_id] += \ "sudo docker exec faban_client_%s sudo sed -i 's/<fa:steadyState>30/<fa:steadyState>%s/g' " \ "/etc/bootstrap.sh; " % (client_id, steady_state) pve.vm_parallel_run(scripts)
def configure_web_servers(): scripts = dict() for web_server in fab.env['httperf_haproxy_lb']['servers']['web_server']: vm_id = web_server['vm_id'] scripts[vm_id] = "sudo ip addr add %s%s/24 dev eth1; " \ "sudo ip link set eth1 up; " \ % (fab.env['httperf_haproxy_lb']['vm']['prefix_1'], vm_id) scripts[vm_id] += "sudo sed -i 's/_HOSTNAME_/web_server_%s/g' ~/haproxy-dynamic-weight/request-lb-weight.py; " \ % (vm_id,) state_server_vm_id = fab.env['httperf_haproxy_lb']['servers']['state_server'][ web_server['state_server']['id']]['vm_id'] state_server_timeout = web_server['state_server']['timeout'] state_server_max_load = web_server['state_server']['max_load'] scripts[vm_id] += "nohup python ~/haproxy-dynamic-weight/request-lb-weight.py %s%s:11211 %s %s " \ "> /dev/null 2> /dev/null < /dev/null & " \ % (fab.env['httperf_haproxy_lb']['vm']['prefix_1'], state_server_vm_id, state_server_timeout, state_server_max_load) scripts[vm_id] += "sudo sed -i 's/Listen 80/Listen 8080/g' /etc/apache2/ports.conf; " \ "sudo sed -i 's/VirtualHost \*:80/VirtualHost \*:8080/g' " \ "/etc/apache2/sites-enabled/000-default.conf; " \ "sudo service apache2 start; " pve.vm_parallel_run(scripts)
def httperf_client_run(): if fab.env['httperf_ipvs_lb']['stats']['enable']: pve.vm_parallel_run({ lb_server['vm_id']: "sudo nohup python ~/ipvs-utils/dump-ipvsadm-L-n.py %s lb_server_%s.csv " "> /dev/null 2> /dev/null < /dev/null & " "sudo nohup python ~/ipvs-utils/dump-ipvsadm-L-n--stats.py %s lb_server_stats_%s.csv " "> /dev/null 2> /dev/null < /dev/null & " % (lb_server['stats']['timeout'], lb_server['vm_id'], lb_server['stats']['timeout'], lb_server['vm_id']) for lb_server in fab.env['httperf_ipvs_lb']['servers']['lb_server'] ['vms'] }) pve.vm_parallel_run({ httperf_client['vm_id']: "sh ~/httperf_script.sh; " for httperf_client in fab.env['httperf_ipvs_lb']['servers'] ['httperf_client']['vms'] }) if fab.env['httperf_ipvs_lb']['stats']['enable']: pve.vm_parallel_run({ lb_server['vm_id']: "sudo pkill -u root python; " for lb_server in fab.env['httperf_ipvs_lb']['servers']['lb_server'] ['vms'] })
def configure_web_servers(): scripts = dict() web_server = fab.env['httperf_ipvs_lb']['servers']['web_server'] vip_prefix = fab.env['httperf_ipvs_lb']['vip']['prefix'] for web_server_vm in web_server['vms']: vm_id = web_server_vm['vm_id'] lb_server_vm_id = fab.env['httperf_ipvs_lb']['servers']['lb_server'][ 'vms'][web_server_vm['lb_server']]['vm_id'] scripts[vm_id] = "sudo ip addr add %s%s/24 dev eth1; " \ "sudo ip link set eth1 up; " \ "sudo iptables -t nat -A PREROUTING -d %s%s.%s -j REDIRECT; " \ % (fab.env['httperf_ipvs_lb']['vm']['prefix_1'], vm_id, vip_prefix, lb_server_vm_id, lb_server_vm_id) scripts[vm_id] += "sudo sed -i 's/Listen 80/Listen 8080/g' /etc/apache2/ports.conf; " \ "sudo sed -i 's/VirtualHost \*:80/VirtualHost \*:8080/g' " \ "/etc/apache2/sites-enabled/000-default.conf; " if web_server_vm['webpage']['cgi']['enable']: loop_count = web_server_vm['webpage']['cgi']['loop_count'] scripts[vm_id] += \ "sudo git clone https://gist.github.com/3b149ddc8521a265f89bdce11af84cfa.git; " \ "sudo mv 3b149ddc8521a265f89bdce11af84cfa/cpu.py /usr/lib/cgi-bin/; " \ "sudo rm -rf 3b149ddc8521a265f89bdce11af84cfa; " \ "sudo sed -i 's/XXX/%s/g' /usr/lib/cgi-bin/cpu.py; " \ "sudo sed -i 's/YYY/%s/g' /usr/lib/cgi-bin/cpu.py; " \ "sudo chmod a+x /usr/lib/cgi-bin/cpu.py; " \ "sudo sed -i 's/index.html index.cgi index.pl index.php index.xhtml index.htm/cgi-bin\/cpu.py/g' " \ "/etc/apache2/mods-enabled/dir.conf;" \ "sudo a2enmod cgid; " \ % (vm_id, loop_count) else: scripts[vm_id] += "sudo echo '<!doctype html><html><body><h1>(Backend:%s)</h1></body></html>' " \ "| sudo tee -a /var/www/html/index.html; " \ % (vm_id) scripts[vm_id] += "sudo sync; " \ "sudo service apache2 start; " if fab.env['httperf_ipvs_lb']['feedback']['enable']: scripts[vm_id] += "sudo sed -i 's/server_id = _SERVER_ID_/server_id = %s/g' " \ "~/ipvs-dynamic-weight/request-lb-weight.py; " \ % (vm_id,) if fab.env['httperf_ipvs_lb']['feedback']['is_dummy']: scripts[vm_id] += "sudo sed -i 's/\# else: weight = XXX/else: weight = 1/g' " \ "~/ipvs-dynamic-weight/request-lb-weight.py; " state_server_vm_id = fab.env['httperf_ipvs_lb']['servers'][ 'state_server']['vms'][web_server_vm['state_server'] ['id']]['vm_id'] state_server_timeout = web_server_vm['state_server']['timeout'] state_server_metric = web_server_vm['state_server']['metric'] if state_server_metric == 'cpu': state_server_alpha_value = web_server_vm['state_server'][ 'metrics'][state_server_metric]['alpha_value'] scripts[vm_id] += "nohup python ~/ipvs-dynamic-weight/request-lb-weight.py %s%s:11211 %s %s %s %s " \ "> /dev/null 2> /dev/null < /dev/null & " \ % (fab.env['httperf_ipvs_lb']['vm']['prefix_1'], state_server_vm_id, state_server_timeout, "False", state_server_metric, state_server_alpha_value) elif state_server_metric == 'loadavg': state_server_max_load = web_server_vm['state_server'][ 'metrics'][state_server_metric]['max_load'] scripts[vm_id] += "nohup python ~/ipvs-dynamic-weight/request-lb-weight.py %s%s:11211 %s %s %s %s " \ "> /dev/null 2> /dev/null < /dev/null & " \ % (fab.env['httperf_ipvs_lb']['vm']['prefix_1'], state_server_vm_id, state_server_timeout, "False", state_server_metric, state_server_max_load) if web_server_vm['load']['enable']: scripts[vm_id] += \ "sudo git clone https://gist.github.com/453a427eaf2115fd7e0cf56f74a3d25c.git; " \ "sudo mv 453a427eaf2115fd7e0cf56f74a3d25c/inf-loop.sh ./; " \ "sudo rm -rf 453a427eaf2115fd7e0cf56f74a3d25c; " process_count = web_server_vm['load']['process_count'] seed_value = web_server_vm['load']['seed_value'] time_variance = web_server_vm['load']['time_variance'] if web_server_vm['load']['type'] == 'cpulimit': percentage = web_server_vm['load']['types']['cpulimit'][ 'percentage'] scripts[vm_id] += \ "sudo git clone https://gist.github.com/e821e3239c274c102bf23080ef69090d.git; " \ "sudo mv e821e3239c274c102bf23080ef69090d/inf-loop-cpulimit.sh ./; " \ "sudo rm -rf e821e3239c274c102bf23080ef69090d; " if time_variance == 0: scripts[vm_id] += \ "sudo nohup sh inf-loop-cpulimit.sh %s %s > /dev/null 2> /dev/null < /dev/null; " \ % (process_count, percentage) else: scripts[vm_id] += \ "sudo git clone https://gist.github.com/b6a94c0303107806e21a4878241f995b.git; " \ "sudo mv b6a94c0303107806e21a4878241f995b/inf-loop-cpulimit-rand.sh ./; " \ "sudo rm -rf b6a94c0303107806e21a4878241f995b; " \ "sudo nohup bash inf-loop-cpulimit-rand.sh %s %s %s %s " \ "> /dev/null 2> /dev/null < /dev/null & " \ % (seed_value, process_count, percentage, time_variance) elif web_server_vm['load']['type'] == 'nice': value = web_server_vm['load']['types']['nice']['value'] scripts[vm_id] += \ "sudo git clone https://gist.github.com/72aa25cb9babfccba85f4b0004c3ad26.git; " \ "sudo mv 72aa25cb9babfccba85f4b0004c3ad26/inf-loop-nice.sh ./; " \ "sudo rm -rf 72aa25cb9babfccba85f4b0004c3ad26; " if time_variance == 0: scripts[vm_id] += \ "sudo nohup sh inf-loop-nice.sh %s %s > /dev/null 2> /dev/null < /dev/null; " \ % (process_count, value) else: scripts[vm_id] += \ "sudo git clone https://gist.github.com/35d3a537095b8b9a8eb873a1bb72abbb.git; " \ "sudo mv 35d3a537095b8b9a8eb873a1bb72abbb/inf-loop-nice-rand.sh ./; " \ "sudo rm -rf 35d3a537095b8b9a8eb873a1bb72abbb; " \ "sudo nohup bash inf-loop-nice-rand.sh %s %s %s %s " \ "> /dev/null 2> /dev/null < /dev/null & " \ % (seed_value, process_count, value, time_variance) pve.vm_parallel_run(scripts)
def httperf_client_run(): pve.vm_parallel_run({httperf_client['vm_id']: "sh ~/httperf_script.sh" for httperf_client in fab.env['httperf_haproxy_lb']['servers']['httperf_client']['vms']})
def httperf_client_stop(): pve.vm_parallel_run({ httperf_client['vm_id']: "sudo skill httperf; " for httperf_client in fab.env['httperf_ipvs_lb']['servers'] ['httperf_client']['vms'] })