예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
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)
예제 #4
0
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)
예제 #5
0
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)
예제 #6
0
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)
예제 #7
0
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)
예제 #8
0
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)
예제 #9
0
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)
예제 #10
0
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)
예제 #11
0
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)
예제 #12
0
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)
예제 #13
0
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)
예제 #14
0
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)
예제 #15
0
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)
예제 #16
0
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)
예제 #17
0
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)
예제 #18
0
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
예제 #19
0
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)
예제 #20
0
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)
예제 #21
0
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)
예제 #22
0
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)
예제 #23
0
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)
예제 #24
0
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
예제 #25
0
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)
예제 #26
0
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)
예제 #27
0
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']
        })
예제 #28
0
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)
예제 #29
0
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']})
예제 #30
0
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']
    })