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
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
- Dokumentacja: http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/as-register-lbs-with-asg.html
- Utworzenie konfiguracji dla Auto Scaling:
as-create-launch-config my-test-lc --image-id ami-ec78979b --instance-type t1.micro
- 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
- Sprawdzenie, czy grupa działa:
as-describe-auto-scaling-groups my-test-asg-lbs
- Ustawienie polityki skalowania:
http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/policy_creating.html.
- 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
- 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
- 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
- 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
- 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
|