Metody i Systemy Obliczeń Wielkiej Skali


Wstęp do Auto Scaling

Podstawowe pojęcia

  • Autoskalowanie to mechanizm dostosowywania ilości zasobów do potrzeb użytkownika. Np. Jeśli uruchomiliśmy jedną instancję, a wykorzystanie CPU na tej maszynie jest duże, możemy chcieć, aby system automatycznie uruchomił więcej maszyn.
  • Loadbalancing to mechanizm równoważenia obciążenia, który jest używany do zapewnienia równego podziału pracy na maszyny i sprawdzania które maszyny są zdolne do wykonywania zadań (healthy).

Przygotowanie środowiska testowego

  • Na nowej maszynie wirtualnej (Ubuntu 16.04) należy zainstalować Tomcat8 i przykłady:
    apt-get install tomcat8
    
    apt-get install tomcat8-examples
  • Po uruchomieniu serwera można sprawdzić działanie (przykładowy URL):
    http://ec2-54-220-185-8.eu-west-1.compute.amazonaws.com:8080/examples/jsp/jsp2/simpletag/book.jsp
    
    Uwaga: port 8080 musi być otwarty przy konfiguracji security group
  • Przy pomocy konsoli webowej należy dodać klasyczny load balancer z przekierowaniem portu 8080. Instrukcja
  • Sprawdzić dostęp do serwera poprzez load balancer. Uwaga: Load balancer co jakiś czas sprawdza, czy maszyna jest zdrowa (odpowiada na zapytania). Przy starcie maszyny, nie odpowiada ona od razu na zapytania, więc należy zaczekać, aż maszyna będzie uznana przez load balancer jako zdrowa (ang healthy).
    Przykładowe zapytanie sprawdzajace:
    	http://agh-tutorial-load-balancer-1677380375.eu-west-1.elb.amazonaws.com:8080/examples/jsp/jsp2/jspx/basic.jspx
    
  • Maszynę po przetestowaniu należy zapisać jako nowy obraz (AMI), a potem wyłączyć.
  • Należy zainstalować ApacheBench - narzędzie do generowania obciążenia (instalujemy i uruchamiamy lokalnie, jest to klient łączący się z naszą VM i testujący Apacha)
    http://httpd.apache.org/docs/2.2/programs/ab.html
    	
    apt-get install apache2-utils
    	

    Ćwiczenie: autoskalowanie aplikacji Webowej

    • Konfiguracja autoskalowania poprzez konsolę.
      • Podajemy jaki obraz będzie automatycznie uruchamiany (wybieramy zapisany przez siebie obraz z Tomcatem)
      • Należy pamiętac o otwarciu portu 8080 w security group !
    • Ustawienie grupy skalowania poprzez konsolę
      • Należy podpiąć utorzony wcześniej load balancer (Advanced Details - Receive traffic from Elastic Load Balancer(s))
      • Należy skonfigurować alarmy, np. tak jak w przykładzie UWAGA: dla szybszego zaobserwowania efektu autoskalowania można obnizyć próg, po przekroczeniu którego uruchamia się kolejna instancja.
    • po zatwierdzeniu grupy system autoskalowania sam uruchomi minimalną liczbę instancji w grupie, które same zgłoszą się do load balancera, należy poczekać, az load balancer uzna je za zdrowe (healthy), może to potrwać około 5 minut.
    • Następnie należy wygenerować obciążenie (najlepiej z komputera podpiętego do sieci kablem, a nie wifi) przy pomocy Apache Bench np.
      ab -t 300 -c 100 -n 100000 http://agh-tutorial-load-balancer-1677380375.eu-west-1.elb.amazonaws.com:8080/examples/jsp/jsp2/jspx/basic.jspx
      	
    • Można zalogować się na maszynę, którą obciążamy i obserwować użycie procesora np. komendą top.
    • Monitorowanie obciążenia w konsoli (należy ustawić region, w którym uruchamiamy maszyny):
      https://console.aws.amazon.com/cloudwatch/	
    • Jeśli skonfigurowaliśmy adres mailowy do alarmów, powinniśmy otrzymać przykładowy mail informujący o przekroczeniu progu.
    • Uwaga: po zakończeniu ćwiczenia należy wyłączyć mechanizm autoskalowania, gdyż będzie on automatycznie utrzymywał w działaniu co najmniej 1 instancję!

    Dostęp poprzez CLI

    • Instalacja CLI do Autoscaling, Load Balancing, Monitoring http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/UsingTheCommandLineTools.html

      (w Ubuntu):

      	
      apt-get install ascli
      apt-get install elbcli
      apt-get install moncli
      	
    • Ustawienie zmiennych środowiskowych (uwaga: należy pobrać klucze X509).
      	
      export EC2_REGION=eu-west-1
      export EC2_ACCESS_KEY=<...>
      export EC2_SECRET_KEY=<...>
      export EC2_PRIVATE_KEY=<...>.pem
      export EC2_CERT=<...>.pem
      
      	
    • Konfiguracja autoskalowania
      1. Dokumentacja: http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/as-register-lbs-with-asg.html
      2. Utworzenie konfiguracji dla Auto Scaling:
        as-create-launch-config my-test-lc --image-id ami-ec78979b --instance-type t1.micro 
        	
      3. Utworzenie grupy:
        as-create-auto-scaling-group my-test-asg-lbs --launch-configuration my-test-lc --availability-zones     eu-west-1a,eu-west-1b  --load-balancers  agh-tutorial-load-balancer --max-size 8 --min-size 1 --desired-capacity 1  
        	
      4. Sprawdzenie, czy grupa działa:
        as-describe-auto-scaling-groups my-test-asg-lbs 
        	
      5. Ustawienie polityki skalowania: http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/policy_creating.html.
      6. Scale-out: zwiekszamy zasoby o 30%:
        as-put-scaling-policy my-scaleout-policy --auto-scaling-group my-test-asg-lbs --adjustment=30 --type PercentChangeInCapacity
        arn:aws:autoscaling:eu-west-1:524374011118:scalingPolicy:d2e996fc-d1c5-4375-a03d-5c5e3663dd5a:autoScalingGroupName/my-test-asg-lbs:policyName/my-scaleout-policy 
        	
      7. Scale-in: zmniejszamy zasoby o 1 instancję:
        as-put-scaling-policy my-scalein-policy --auto-scaling-group my-test-asg-lbs --adjustment=-1  --type ChangeInCapacity
        arn:aws:autoscaling:eu-west-1:524374011118:scalingPolicy:b1c4f9ba-da03-4bca-bed8-249470d00533:autoScalingGroupName/my-test-asg-lbs:policyName/my-scalein-policy
        	
      8. Dodanie alarmu aby stosował akcję scale-out przy obciążeniu procesora > 80%
        mon-put-metric-alarm --alarm-name AddCapacity  --metric-name CPUUtilization --namespace AWS/EC2  --statistic Average --period 120 --threshold 80 --comparison-operator GreaterThanOrEqualToThreshold --dimensions AutoScalingGroupName=my-test-asg-lbs --evaluation-periods 2 --alarm-actions arn:aws:autoscaling:eu-west-1:524374011118:scalingPolicy:d2e996fc-d1c5-4375-a03d-5c5e3663dd5a:autoScalingGroupName/my-test-asg-lbs:policyName/my-scaleout-policy
        	
      9. Dodanie alarmu aby stosował akcję scale-in przy obciążeniu procesora < 40%
        mon-put-metric-alarm --alarm-name RemoveCapacity --metric-name CPUUtilization --namespace AWS/EC2 --statistic Average  --period 120  --threshold 40  --comparison-operator LessThanOrEqualToThreshold  --dimensions AutoScalingGroupName=my-test-asg-lbs --evaluation-periods 2 --alarm-actions arn:aws:autoscaling:eu-west-1:524374011118:scalingPolicy:b1c4f9ba-da03-4bca-bed8-249470d00533:autoScalingGroupName/my-test-asg-lbs:policyName/my-scalein-policy
        	
      10. Sprawdzenie stanu reguł i alarmów:
        mon-describe-alarms
        as-describe-policies --auto-scaling-group my-test-asg-lbs
        	

    Zadanie

    • Zadanie: proszę zademonstrować działanie autoskalowania przy zmieniającym się obciążeniu (dowolnym sposobem).
    • Uwaga: po zakończeniu ćwiczenia należy wyłączyć mechanizm autoskalowania, gdyż będzie on automatycznie utrzymywał w działaniu co najmniej 1 instancję!


    Maciej Malawski, malawski at agh.edu.pl
    Bartosz Baliś, baliś at agh.edu.pl
    Katarzyna Rycerz, kzajac at agh.edu.pl