Cloudcomputing Kochbuch Load Balancer as a Service (LBaaS): Unterschied zwischen den Versionen

IMT HilfeWiki - das Wiki
 
(4 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 5: Zeile 5:
 
|hasdisambig=Nein
 
|hasdisambig=Nein
 
}}
 
}}
{{mbox
+
Damit Dienste in der Cloud skalierbar und zuverlässig bereitgestellt werden können, bietet OpenStack auch einen ''Loadbalancer as a Service'' an.  
| type  = notice
 
| text = Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
 
}}
 
  
 
+
<bootstrap_alert color=info>Dieser Artikel erfordert grundlegende Erfahrung im Umgang mit Linux.
'''ACHTUNG!''' Um diese Anleitung nutzen zu können wird ein Kommandozeilen-Client benötigt.
+
</bootstrap_alert>
 
 
'''[[Cloudcomputing Kochbuch Kommandozeilen-Client erzeugen|Informationen zum Erzeugen des Kommandozeilen-Clients]]'''
 
  
 
== Rezepte ==
 
== Rezepte ==
 +
=== Schritt 1:  Dienste instanziieren ===
 +
Voraussetzung für diese Anleitung ist, das Sie bereits mehrere Instanzen eines Services erstellt haben, die Sie über einen Loadbalancer bereitstellen wollen.
 +
Darüberhinaus sollte ein internes Netzwerk erstellt worden sein, mit dem die Instanzen verbunden sind.
  
[[Datei:Cloudcomputing-LBAASv2-Kochbuch.png]]
+
Wir werden in diesem Beispiel drei Webserver über einen Loadbalancer bereitstellen.
 
 
=== Schritt 1:  Drei Webserver instanziieren ===
 
 
 
<syntaxhighlight lang="bash">
 
ubuntu@api-kochbuch-demo:~$ wget https://rgw.cloud.uni-paderborn.de:8443/swift/v1/hilfe-uni-paderborn-de-snippets/cloudcomputing/hilfewiki-apache2-lb.sh
 
2016-09-23 10:16:47 (5.22 MB/s) - ‘hilfewiki-apache2-lb.sh’ saved [283/283]
 
 
 
ubuntu@api-kochbuch-demo:~$ cat hilfewiki-apache2-lb.sh
 
#!/bin/bash
 
 
 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
 
 
 
sudo apt-get update -y
 
sudo apt-get install -y apache2
 
sudo sh -c 'hostname > /var/www/html/ip.txt'
 
sudo sh -c 'ip a | grep "scope global" >> /var/www/html/ip.txt'
 
</syntaxhighlight>
 
 
 
 
 
<syntaxhighlight lang="bash">
 
ubuntu@api-kochbuch-demo:~$ openstack server create \
 
    --image Ubuntu-16.04-Xenial-Xerus \
 
    --flavor m1.small \
 
    --security-group SSH-Zugriff \
 
    --security-group HTTP \
 
    --key-name mein-oeffentlicher-schluessel \
 
    --nic net-id=0a2cafd5-3a3f-4312-95fe-584240ab1a3b \
 
    --user-data hilfewiki-apache2-lb.sh \
 
    --min 3 --max 3 \
 
    --wait \
 
    Loadbalancer-Webserver
 
 
 
+--------------------------------------+------------------------------------------------------------------+
 
| Field                                | Value                                                            |
 
+--------------------------------------+------------------------------------------------------------------+
 
| OS-DCF:diskConfig                    | MANUAL                                                          |
 
| OS-EXT-AZ:availability_zone          | nova                                                            |
 
| OS-EXT-SRV-ATTR:host                | cpu3                                                            |
 
| OS-EXT-SRV-ATTR:hypervisor_hostname  | cpu3.cloud.uni-paderborn.de                                      |
 
| OS-EXT-SRV-ATTR:instance_name        | instance-0000018d                                                |
 
| OS-EXT-STS:power_state              | 1                                                                |
 
| OS-EXT-STS:task_state                | None                                                            |
 
| OS-EXT-STS:vm_state                  | active                                                          |
 
| OS-SRV-USG:launched_at              | 2016-09-23T10:25:11.000000                                      |
 
| OS-SRV-USG:terminated_at            | None                                                            |
 
| accessIPv4                          |                                                                  |
 
| accessIPv6                          |                                                                  |
 
| addresses                            | Privates-Kochbuch-Test-Netz=192.168.0.111                        |
 
| adminPass                            | 6sVWYrqAZWGR                                                    |
 
| config_drive                        |                                                                  |
 
| created                              | 2016-09-23T10:24:59Z                                            |
 
| flavor                              | m1.small (2)                                                    |
 
| hostId                              | a70656c29b3b898217f4e2db350807f468bd150e035a36787fa49e3d        |
 
| id                                  | 11b5d731-451c-4173-a422-4bca08c9bd2e                            |
 
| image                                | Ubuntu-16.04-Xenial-Xerus (0b3be2c2-ef73-4b90-898e-e676671e6849) |
 
| key_name                            | mein-oeffentlicher-schluessel                                    |
 
| name                                | Loadbalancer-Webserver-1                                        |
 
| os-extended-volumes:volumes_attached | []                                                              |
 
| progress                            | 0                                                                |
 
| project_id                          | 3ceb7c480ede4680bb42be90b365375d                                |
 
| properties                          |                                                                  |
 
| security_groups                      | [{u'name': u'SSH-Zugriff'}, {u'name': u'HTTP'}]                  |
 
| status                              | ACTIVE                                                          |
 
| updated                              | 2016-09-23T10:25:12Z                                            |
 
| user_id                              | 648800718411377698900aa0a353b3e3dc69d98bc569b455312fdabfa36bb9e8 |
 
+--------------------------------------+------------------------------------------------------------------+
 
 
 
ubuntu@api-kochbuch-demo:~$ openstack server list
 
+--------------------------------------+--------------------------+--------+-------------------------------------------+
 
| ID                                  | Name                    | Status | Networks                                  |
 
+--------------------------------------+--------------------------+--------+-------------------------------------------+
 
| 635397a6-cb75-45eb-8ce0-63e7db4b5882 | Loadbalancer-Webserver-3 | ACTIVE | Privates-Kochbuch-Test-Netz=192.168.0.112 |
 
| 5307dd9b-29df-4779-8b2a-0a06798ec077 | Loadbalancer-Webserver-2 | ACTIVE | Privates-Kochbuch-Test-Netz=192.168.0.110 |
 
| 11b5d731-451c-4173-a422-4bca08c9bd2e | Loadbalancer-Webserver-1 | ACTIVE | Privates-Kochbuch-Test-Netz=192.168.0.111 |
 
+--------------------------------------+--------------------------+--------+-------------------------------------------+
 
</syntaxhighlight>
 
 
 
=== Schritt 2:  Loadbalancer erzeugen, VIP, Pools und Mitglieder konfigurieren ===
 
 
 
<syntaxhighlight lang="bash">
 
ubuntu@api-kochbuch-demo:~$ neutron lbaas-loadbalancer-create --name Kochbuch-Loadbalancer Privates-Kochbuch-Test-Subnetz
 
Created a new loadbalancer:
 
+---------------------+--------------------------------------+
 
| Field              | Value                                |
 
+---------------------+--------------------------------------+
 
| admin_state_up      | True                                |
 
| description        |                                      |
 
| id                  | d1ff1dbd-d7ae-4665-ad24-6a9967d066f6 |
 
| listeners          |                                      |
 
| name                | Kochbuch-Loadbalancer                |
 
| operating_status    | OFFLINE                              |
 
| pools              |                                      |
 
| provider            | haproxy                              |
 
| provisioning_status | ACTIVE                              |
 
| tenant_id          | 3ceb7c480ede4680bb42be90b365375d    |
 
| vip_address        | 192.168.0.113                        |
 
| vip_port_id        | 88021fc7-c30e-40a6-b0bc-c65f0b17e357 |
 
| vip_subnet_id      | 71851d4c-9578-4e13-935c-d2ea6eddf5fd |
 
+---------------------+--------------------------------------+
 
</syntaxhighlight>
 
 
 
 
 
 
 
<syntaxhighlight lang="bash">
 
ubuntu@api-kochbuch-demo:~$  neutron port-update \
 
  --security-group HTTP \
 
  88021fc7-c30e-40a6-b0bc-c65f0b17e357
 
</syntaxhighlight>
 
 
 
 
 
 
 
 
 
<syntaxhighlight lang="bash">
 
ubuntu@api-kochbuch-demo:~$  neutron lbaas-listener-create \
 
  --name Kochbuch-Loadbalancer-HTTP \
 
  --loadbalancer Kochbuch-Loadbalancer \
 
  --protocol HTTP \
 
  --protocol-port 80
 
 
 
Created a new listener:
 
+---------------------------+------------------------------------------------+
 
| Field                    | Value                                          |
 
+---------------------------+------------------------------------------------+
 
| admin_state_up            | True                                          |
 
| connection_limit          | -1                                            |
 
| default_pool_id          |                                                |
 
| default_tls_container_ref |                                                |
 
| description              |                                                |
 
| id                        | a5d52b12-6318-44ca-9c52-69a561f143fe          |
 
| loadbalancers            | {"id": "d1ff1dbd-d7ae-4665-ad24-6a9967d066f6"} |
 
| name                      | Kochbuch-Loadbalancer-HTTP                    |
 
| protocol                  | HTTP                                          |
 
| protocol_port            | 80                                            |
 
| sni_container_refs        |                                                |
 
| tenant_id                | 3ceb7c480ede4680bb42be90b365375d              |
 
+---------------------------+------------------------------------------------+
 
</syntaxhighlight>
 
 
 
 
 
 
 
<syntaxhighlight lang="bash">
 
ubuntu@api-kochbuch-demo:~$ neutron lbaas-pool-create \
 
  --name Kochbuch-Loadbalancer-HTTP-Pool \
 
  --lb-algorithm ROUND_ROBIN \
 
  --listener Kochbuch-Loadbalancer-HTTP \
 
  --protocol HTTP
 
 
 
Created a new pool:
 
+---------------------+------------------------------------------------+
 
| Field              | Value                                          |
 
+---------------------+------------------------------------------------+
 
| admin_state_up      | True                                          |
 
| description        |                                                |
 
| healthmonitor_id    |                                                |
 
| id                  | de737c6c-ccad-432d-b365-89fa23148ca2          |
 
| lb_algorithm        | ROUND_ROBIN                                    |
 
| listeners          | {"id": "a5d52b12-6318-44ca-9c52-69a561f143fe"} |
 
| loadbalancers      | {"id": "d1ff1dbd-d7ae-4665-ad24-6a9967d066f6"} |
 
| members            |                                                |
 
| name                | Kochbuch-Loadbalancer-HTTP-Pool                |
 
| protocol            | HTTP                                          |
 
| session_persistence |                                                |
 
| tenant_id          | 3ceb7c480ede4680bb42be90b365375d              |
 
+---------------------+------------------------------------------------+
 
</syntaxhighlight>
 
 
 
 
 
 
 
  
 +
[[Datei:Cloudcomputing-LBAASv2-Kochbuch.png|mini|none]]
  
<syntaxhighlight lang="bash">
+
Wie Sie eine neue Instanz erstellen, finden Sie im Bereich [https://hilfe.uni-paderborn.de/Cloudcomputing_Quick-Start Cloudcomputing Quick-Start].<br>
ubuntu@api-kochbuch-demo:~$  neutron lbaas-member-create \
+
Eine Anleitung zum erstellen eines Netzwerkes finden Sie im [https://hilfe.uni-paderborn.de/Cloudcomputing_Kochbuch_Netzwerk Kochbuch Netzwerk].
  --subnet Privates-Kochbuch-Test-Subnetz \
 
  --address 192.168.0.110 \
 
  --protocol-port 80 \
 
  Kochbuch-Loadbalancer-HTTP-Pool
 
  
Created a new member:
+
Um z.B. in einer Ubuntu Instanz den Apache Webserver zu installieren, verbinden Sie sich per SSH mit der Instanz und geben folgenden Befehl in das Terminal ein:<br>
+----------------+--------------------------------------+
 
| Field          | Value                                |
 
+----------------+--------------------------------------+
 
| address        | 192.168.0.110                        |
 
| admin_state_up | True                                |
 
| id            | e35b7005-ad08-40b5-b360-c8117a07f760 |
 
| name          |                                      |
 
| protocol_port  | 80                                  |
 
| subnet_id      | 71851d4c-9578-4e13-935c-d2ea6eddf5fd |
 
| tenant_id      | 3ceb7c480ede4680bb42be90b365375d    |
 
| weight        | 1                                    |
 
+----------------+--------------------------------------+
 
  
ubuntu@api-kochbuch-demo:~$ neutron lbaas-member-create \
+
<code>sudo apt update && sudo apt upgrade -y && sudo apt install apache2 -y</code>
  --subnet Privates-Kochbuch-Test-Subnetz \
 
  --address 192.168.0.111 \
 
  --protocol-port 80 \
 
  Kochbuch-Loadbalancer-HTTP-Pool
 
  
Created a new member:
+
Dies aktualisiert das System und installiert den Apache2-Webserver.
+----------------+--------------------------------------+
+
| Field          | Value                                |
+
=== Schritt 2: Loadbalancer erzeugen, Listener erstellen, Pools und Mitglieder konfigurieren ===
+----------------+--------------------------------------+
+
Sie erstellen einen Loadbalancer, indem Sie unter ''Netzwerk -> Loadbalancer'' auf ''Loadbalancer erstellen'' klicken.
| address        | 192.168.0.111                        |
+
Im Dialogfenster vergeben Sie zunächst einen Namen für den Loadbalancer und fügen eine kurze Beschreibung hinzu.
| admin_state_up | True                                |
+
Unter dem Punkt ''Teilnetz'' geben Sie an, mit welchem Netzwerk der Loadbalancer verbunden sein soll. Wählen Sie hier das Netzwerk, in welchem sich ihre Instanzen befinden, die Sie über den Loadbalancer bereitstellen wollen. Klicken Sie auf ''Weiter'', um zum nächsten Reiter zu gelangen.
| id            | 1165034f-01ae-4b6f-bd57-d7c4cffbed50 |
 
| name          |                                      |
 
| protocol_port | 80                                  |
 
| subnet_id      | 71851d4c-9578-4e13-935c-d2ea6eddf5fd |
 
| tenant_id      | 3ceb7c480ede4680bb42be90b365375d    |
 
| weight        | 1                                    |
 
+----------------+--------------------------------------+
 
  
ubuntu@api-kochbuch-demo:~$ neutron lbaas-member-create \
+
Im Reiter ''Listener Details'' wird der erste Listener des Loadbalancer konfiguriert. Sie können später weitere hinzufügen. Vergeben Sie zunächst einen Namen für den Listener, um diese später besser unterscheiden zu können. Da wir in dieser Anleitung einen Webserver bereitstellen wollen, wählen wir unter dem Punkt ''Protokoll'' den Punkt ''HTTP''. Um einen anderen Dienst als HTTP oder HTTPS bereitzustellen, wählen Sie aus mit welchem Protokoll (TCP oder UDP) und auf welchem Port dieser bereitgestellt wird.
  --subnet Privates-Kochbuch-Test-Subnetz \
 
  --address 192.168.0.112 \
 
  --protocol-port 80 \
 
  Kochbuch-Loadbalancer-HTTP-Pool
 
  
Created a new member:
+
[[Datei:Screenshot_OpenStack_LoadBalancer_Listener.png|mini|none]]
+----------------+--------------------------------------+
 
| Field          | Value                                |
 
+----------------+--------------------------------------+
 
| address        | 192.168.0.112                        |
 
| admin_state_up | True                                |
 
| id            | 3a34eedc-ef18-4f10-8261-071fb82f70ac |
 
| name          |                                      |
 
| protocol_port  | 80                                  |
 
| subnet_id      | 71851d4c-9578-4e13-935c-d2ea6eddf5fd |
 
| tenant_id      | 3ceb7c480ede4680bb42be90b365375d    |
 
| weight        | 1                                    |
 
+----------------+--------------------------------------+
 
</syntaxhighlight>
 
  
  
<syntaxhighlight lang="bash">
+
Im Reiter ''Pool-Details'' vergeben Sie einen Namen für ihren Pool und legen fest, welche Art von Loadbalancer angelegt werden soll. <br>
ubuntu@api-kochbuch-demo:~$ neutron lbaas-loadbalancer-list
+
Es stehen drei Möglichkeiten zur Auswahl:
+--------------------------------------+-----------------------+---------------+---------------------+----------+
 
| id                                  | name                  | vip_address  | provisioning_status | provider |
 
+--------------------------------------+-----------------------+---------------+---------------------+----------+
 
| d1ff1dbd-d7ae-4665-ad24-6a9967d066f6 | Kochbuch-Loadbalancer | 192.168.0.113 | ACTIVE              | haproxy  |
 
+--------------------------------------+-----------------------+---------------+---------------------+----------+
 
  
ubuntu@api-kochbuch-demo:~$ neutron lbaas-listener-list
+
*'''LEAST_CONNECTIONS'''
+--------------------------------------+--------------------------------------+----------------------------+----------+---------------+----------------+
+
: Der Loadbalancer wählt die Instanz mit den wenigsten Zugriffen.
| id                                  | default_pool_id                      | name                      | protocol | protocol_port | admin_state_up |
 
+--------------------------------------+--------------------------------------+----------------------------+----------+---------------+----------------+
 
| a5d52b12-6318-44ca-9c52-69a561f143fe | de737c6c-ccad-432d-b365-89fa23148ca2 | Kochbuch-Loadbalancer-HTTP | HTTP    |            80 | True          |
 
+--------------------------------------+--------------------------------------+----------------------------+----------+---------------+----------------+
 
  
ubuntu@api-kochbuch-demo:~$ neutron lbaas-pool-list
+
*'''ROUND_ROBIN'''
+--------------------------------------+---------------------------------+----------+----------------+
+
: Lastverteilung auf Basis eines Rundlaufverfahrens. Der Loadbalancer wählt immer die nächste Instanz.
| id                                  | name                            | protocol | admin_state_up |
 
+--------------------------------------+---------------------------------+----------+----------------+
 
| de737c6c-ccad-432d-b365-89fa23148ca2 | Kochbuch-Loadbalancer-HTTP-Pool | HTTP    | True          |
 
+--------------------------------------+---------------------------------+----------+----------------+
 
  
ubuntu@api-kochbuch-demo:~$ neutron lbaas-member-list Kochbuch-Loadbalancer-HTTP-Pool
+
*'''SOURCE_IP'''
+--------------------------------------+------+---------------+---------------+--------+--------------------------------------+----------------+
+
: Der Loadbalancer erstellt Hash-Werte auf Basis der Client IP-Adresse und der Server IP-Adresse und stellt somit sicher, dass ein Client wieder mit dem selben Server verbunden wird, auch wenn die Verbindung unterbrochen wird.
| id                                  | name | address      | protocol_port | weight | subnet_id                            | admin_state_up |
 
+--------------------------------------+------+---------------+---------------+--------+--------------------------------------+----------------+
 
| 1165034f-01ae-4b6f-bd57-d7c4cffbed50 |      | 192.168.0.111 |            80 |      1 | 71851d4c-9578-4e13-935c-d2ea6eddf5fd | True          |
 
| 3a34eedc-ef18-4f10-8261-071fb82f70ac |      | 192.168.0.112 |            80 |      1 | 71851d4c-9578-4e13-935c-d2ea6eddf5fd | True          |
 
| e35b7005-ad08-40b5-b360-c8117a07f760 |      | 192.168.0.110 |            80 |      1 | 71851d4c-9578-4e13-935c-d2ea6eddf5fd | True          |
 
+--------------------------------------+------+---------------+---------------+--------+--------------------------------------+----------------+
 
</syntaxhighlight>
 
  
=== Schritt 3:  Funktionstest ===
 
  
 +
[[Datei:Screenshot_OpenStack_LoadBalancer_Pool.png|mini|none]]
  
<syntaxhighlight lang="bash">
+
In den meisten Fällen ist das '''ROUND_ROBIN'''-Verfahren zu empfehlen, da es keine weitere Konfiguration benötigt und eine gleichmäßige Lastverteilung sicherstellt. Klicken Sie auf ''Weiter'' um zum Reiter ''Pool-Mitglieder'' zu gelangen.
ubuntu@api-kochbuch-demo:~$ curl http://192.168.0.113/ip.txt
 
loadbalancer-webserver-1
 
    inet 192.168.0.111/24 brd 192.168.0.255 scope global ens3
 
  
ubuntu@api-kochbuch-demo:~$ curl http://192.168.0.113/ip.txt
+
Hier werden Ihnen die verfügbaren Instanzen aus dem zuvor ausgewählten Netzwerk angezeigt. Fügen Sie die gewünschten Instanzen über den ''Hinzufügen''-Button zum Pool hinzu. Achten Sie darauf, die richtige IP-Adresse der Instanz auszuwählen und geben Sie den Port an, auf dem der Service der Instanz bereitgestellt wird.  
loadbalancer-webserver-2
 
    inet 192.168.0.110/24 brd 192.168.0.255 scope global ens3
 
  
ubuntu@api-kochbuch-demo:~$ curl http://192.168.0.113/ip.txt
+
[[Datei:Screenshot_OpenStack_LoadBalancer_Member.png|mini|none]]
loadbalancer-webserver-3
 
    inet 192.168.0.112/24 brd 192.168.0.255 scope global ens3
 
  
ubuntu@api-kochbuch-demo:~$ curl http://192.168.0.113/ip.txt
+
Im letzten Reiter ''Monitordetails'' können Sie einen Gesundheitsmonitor für die Instanzen des Pools konfigurieren. Da der Loadbalancer vor die Instanzen geschaltet wird, muss dieser überprüfen, ob eine Instanz oder der  Dienst der Instanz erreichbar ist. Sollte eine Instanz ausfallen, kann der Loadbalancer darauf reagieren und Clients werden nicht mehr an diese Instanz weitergeleitet.
loadbalancer-webserver-1
 
    inet 192.168.0.111/24 brd 192.168.0.255 scope global ens3
 
</syntaxhighlight>
 
  
=== Schritt 4Funktionsmonitore ===
+
Es stehen verschiedene Arten des Monitorings zur Verfügung:
 +
*'''HTTP / HTTPS'''
 +
: Sie können eine HTTP-Methode und URL-Pfad auswählen, die an den Server gesendet werden soll und welcher HTTP-Statuscode als Antwort erwartet wird.
 +
*'''PING'''
 +
: Der Loadbalancer sende einen Ping an die Instanz, um zu überprüfen, ob diese erreichbar ist. ('''Es wird nur die Verfügbarkeit des Hosts überprüft, nicht ob der Dienst erreichbar ist!''')
 +
*'''TCP'''
 +
: Der Loadbalancer öffnet eine TCP-Verbindung zum zuvor Konfigurierten Port des Server. Hier ist es sinnvoll eine Methode in Ihrer Anwendung zu implementieren, die nur ein ''OK'' als Antwort an den Loadbalancer sendet, eine Verbindung aufbaut und diese wieder schließt.  
 +
*'''TLS-HELLO'''
 +
: Der Loadbalancer initiiert einen TLS-Handshake, um zu überprüfen, ob die Instanz erreichbar ist.
 +
* '''UDP-Connect'''
 +
: Der Loadbalancer baut eine UDP-Verbindung zum Server-Port auf.
  
<syntaxhighlight lang="bash">
+
Welche Art des Monitorings Sie auswählen, hängt also von ihrem Dienst ab.
ubuntu@api-kochbuch-demo:~$ neutron lbaas-healthmonitor-create \
 
  --delay 5 \
 
  --max-retries 2 \
 
  --timeout 10 \
 
  --type HTTP \
 
  --pool Kochbuch-Loadbalancer-HTTP-Pool
 
  
Created a new healthmonitor:
+
[[Datei:Screenshot_OpenStack_LoadBalancer_Monitoring.png|mini|none]]
+----------------+------------------------------------------------+
 
| Field          | Value                                          |
 
+----------------+------------------------------------------------+
 
| admin_state_up | True                                          |
 
| delay          | 5                                              |
 
| expected_codes | 200                                            |
 
| http_method    | GET                                            |
 
| id            | 2e4e1849-e794-4cda-9d05-773cfc50fc3d          |
 
| max_retries    | 2                                              |
 
| name          |                                                |
 
| pools          | {"id": "de737c6c-ccad-432d-b365-89fa23148ca2"} |
 
| tenant_id      | 3ceb7c480ede4680bb42be90b365375d              |
 
| timeout        | 10                                            |
 
| type          | HTTP                                          |
 
| url_path      | /                                              |
 
+----------------+------------------------------------------------+
 
</syntaxhighlight>
 
  
 +
Für unser Webserver-Beispiel verwenden wir die HTTP-Methode auf Port 80. Anschließend klicken Sie auf ''Loadbalancer erstellen'' - die Provisionierung des Loadbalancers dauert wenige Minuten.
  
 +
=== Schritt 3:  Floating IP zuweisen ===
 +
Damit der über den Loadbalancer bereitgestellte Dienst auch von ausserhalb erreichbar ist, können Sie dem Loadbalancer noch eine Floating-IP zuweisen.
 +
Gehen Sie dazu auf der Übersichtsseite unter ''Netzwerk -> Loadbalancer'' und klicken im Kontextmenü des jeweiligen Loadbalancers auf ''Floating-IP zuweisen''.
 +
Wählen Sie eine der verfügbaren Floating-IPs aus (beachten Sie hier die Verfügbarkeitszonen der Floating-IPs) und klicken Sie auf ''Zuweisen''.
  
=== Schritt 5Statistiken ===  
+
=== Schritt 4Funktionstest ===  
 +
Zum überprüfen der Konfiguration rufen Sie den Dienst über die Floating IP des Loadbalancers auf. In diesem Beispiel ist dies ein Webserver - <code>http://[Floating-IP]/</code>.
 +
Sie sollten nun die Apache2-Startseite sehen.
  
<syntaxhighlight lang="bash">
+
Um zu überprüfen, ob verschiedene Instanzen durch den Loadbalancer angesprochen werden, könnten Sie z.B. jede Instanz ihren Namen oder IP-Adresse über den Webserver ausgeben lassen. Dies ist natürlich abhängig vom bereitgestellten Dienst.
ubuntu@api-kochbuch-demo:~$ neutron lbaas-loadbalancer-stats Kochbuch-Loadbalancer
 
+--------------------+-------+
 
| Field              | Value |
 
+--------------------+-------+
 
| active_connections | 0    |
 
| bytes_in          | 1577  |
 
| bytes_out          | 6422  |
 
| total_connections  | 19    |
 
+--------------------+-------+
 
</syntaxhighlight>
 
  
 +
<code>sudo sh -c 'hostname > /var/www/html/index.html'</code>
  
=== Schritt 6:  Floating IP zuweisen ===  
+
=== Weitere Konfiguration ===
 +
==== Weitere Listener erstellen ====
 +
Sie können weitere Listener zu ihrem Loadbalancer hinzufügen, um z.B. neben HTTP auch HTTPS bereitzustellen. Dazu gehen Sie in der Übersicht unter ''Netzwerk -> Loadbalancer'' auf den Namen ihres Loadbalancers und anschließend im oberen Bereich auf den Reiter ''Listener''.
  
<syntaxhighlight lang="bash">
+
Klicken Sie auf ''Listener erstellen'', es öffnet sich wieder das Dialogfenster wie in Schritt 2. Geben Sie die Art des Listeners, den Pool sowie den Monitor an. Ist die Einrichtung abgeschlossen, wird der Listener in der Übersicht mit aufgeführt.
ubuntu@api-kochbuch-demo:~$ neutron floatingip-list
 
+--------------------------------------+------------------+---------------------+--------------------------------------+
 
| id                                  | fixed_ip_address | floating_ip_address | port_id                              |
 
+--------------------------------------+------------------+---------------------+--------------------------------------+
 
| f3a6d4cd-53ef-4f55-a9d2-f644cf3ce25c |                  | 192.26.184.42      |                                      |
 
+--------------------------------------+------------------+---------------------+--------------------------------------+
 
</syntaxhighlight>
 
  
 +
==== Weitere Pools hinzufügen ====
 +
Sie können weitere Mitglieder zu einem Pool ihres Loadbalancer hinzufügen, indem Sie unter ''Netzwerk -> Loadbalancer'' auf den Namen ihres
 +
Loadbalancers und anschließend im oberen Bereich auf den Reiter ''Pool'' klicken.
  
 +
Über ''Pool erstellen'' öffnet sich wieder das Dialogfenster aus Schritt 2. Geben Sie die Art des Loadbalancers, die Mitglieder
 +
des Pools sowie einen Gesundheitsmonitor an. Ist die Einrichtung abgeschlossen, wird der Pool in der Übersicht mit aufgeführt.
  
<syntaxhighlight lang="bash">
+
==== Mitglieder zu einem Pool hinzufügen / löschen ====
$ neutron floatingip-associate FLOATINGIP_ID LOAD_BALANCER_PORT_ID
+
Um eine Instanz als Mitglied zu einem bestehenden Pool hinzuzufügen oder eine Instanz aus einem Pool zu löschen, klicken Sie auf den Namen des Pools und wählen im oberen Bereich den Reiter ''Mitglieder''.
  
<syntaxhighlight lang="bash">
+
Über den ''Hinzufügen/Löschen Mitglieder''-Button öffnet sich eine Übersicht der Mitglieder des Pools und der verfügbaren Instanzen.
ubuntu@api-kochbuch-demo:~$ neutron floatingip-associate f3a6d4cd-53ef-4f55-a9d2-f644cf3ce25c  88021fc7-c30e-40a6-b0bc-c65f0b17e357
+
Klicken Sie auf den ''Entfernen''-Button einer Instanz um diese aus dem Pool zu löschen oder auf den ''Hinzufügen''-Button um eine Instanz zum Pool hinzuzufügen.
Associated floating IP f3a6d4cd-53ef-4f55-a9d2-f644cf3ce25c
 
</syntaxhighlight>
 
  
 
== Siehe auch ==
 
== Siehe auch ==
* [http://docs.openstack.org/draft/networking-guide/config-lbaas.html Openstack Userguide: Load Balancer as a Service (LBaaS2)]
+
* [https://docs.openstack.org/mitaka/networking-guide/config-lbaas.html Openstack Userguide: Load Balancer as a Service (LBaaS2)]
 +
* [https://docs.openstack.org/octavia/wallaby/user/ OpenStack User Wiki Loadbalancer]

Aktuelle Version vom 10. Juni 2021, 08:34 Uhr

Allgemeine Informationen
Anleitung
Informationen
BetriebssystemAlle
ServiceCloudcomputing
Interessant fürAngestellte, Studierende und Gäste
HilfeWiki des IMT der Uni Paderborn

no displaytitle found: Cloudcomputing Kochbuch Load Balancer as a Service (LBaaS)

Damit Dienste in der Cloud skalierbar und zuverlässig bereitgestellt werden können, bietet OpenStack auch einen Loadbalancer as a Service an.

Rezepte[Bearbeiten | Quelltext bearbeiten]

Schritt 1: Dienste instanziieren[Bearbeiten | Quelltext bearbeiten]

Voraussetzung für diese Anleitung ist, das Sie bereits mehrere Instanzen eines Services erstellt haben, die Sie über einen Loadbalancer bereitstellen wollen. Darüberhinaus sollte ein internes Netzwerk erstellt worden sein, mit dem die Instanzen verbunden sind.

Wir werden in diesem Beispiel drei Webserver über einen Loadbalancer bereitstellen.

Cloudcomputing-LBAASv2-Kochbuch.png

Wie Sie eine neue Instanz erstellen, finden Sie im Bereich Cloudcomputing Quick-Start.
Eine Anleitung zum erstellen eines Netzwerkes finden Sie im Kochbuch Netzwerk.

Um z.B. in einer Ubuntu Instanz den Apache Webserver zu installieren, verbinden Sie sich per SSH mit der Instanz und geben folgenden Befehl in das Terminal ein:

sudo apt update && sudo apt upgrade -y && sudo apt install apache2 -y

Dies aktualisiert das System und installiert den Apache2-Webserver.

Schritt 2: Loadbalancer erzeugen, Listener erstellen, Pools und Mitglieder konfigurieren[Bearbeiten | Quelltext bearbeiten]

Sie erstellen einen Loadbalancer, indem Sie unter Netzwerk -> Loadbalancer auf Loadbalancer erstellen klicken. Im Dialogfenster vergeben Sie zunächst einen Namen für den Loadbalancer und fügen eine kurze Beschreibung hinzu. Unter dem Punkt Teilnetz geben Sie an, mit welchem Netzwerk der Loadbalancer verbunden sein soll. Wählen Sie hier das Netzwerk, in welchem sich ihre Instanzen befinden, die Sie über den Loadbalancer bereitstellen wollen. Klicken Sie auf Weiter, um zum nächsten Reiter zu gelangen.

Im Reiter Listener Details wird der erste Listener des Loadbalancer konfiguriert. Sie können später weitere hinzufügen. Vergeben Sie zunächst einen Namen für den Listener, um diese später besser unterscheiden zu können. Da wir in dieser Anleitung einen Webserver bereitstellen wollen, wählen wir unter dem Punkt Protokoll den Punkt HTTP. Um einen anderen Dienst als HTTP oder HTTPS bereitzustellen, wählen Sie aus mit welchem Protokoll (TCP oder UDP) und auf welchem Port dieser bereitgestellt wird.

Screenshot OpenStack LoadBalancer Listener.png


Im Reiter Pool-Details vergeben Sie einen Namen für ihren Pool und legen fest, welche Art von Loadbalancer angelegt werden soll.
Es stehen drei Möglichkeiten zur Auswahl:

  • LEAST_CONNECTIONS
Der Loadbalancer wählt die Instanz mit den wenigsten Zugriffen.
  • ROUND_ROBIN
Lastverteilung auf Basis eines Rundlaufverfahrens. Der Loadbalancer wählt immer die nächste Instanz.
  • SOURCE_IP
Der Loadbalancer erstellt Hash-Werte auf Basis der Client IP-Adresse und der Server IP-Adresse und stellt somit sicher, dass ein Client wieder mit dem selben Server verbunden wird, auch wenn die Verbindung unterbrochen wird.


Screenshot OpenStack LoadBalancer Pool.png

In den meisten Fällen ist das ROUND_ROBIN-Verfahren zu empfehlen, da es keine weitere Konfiguration benötigt und eine gleichmäßige Lastverteilung sicherstellt. Klicken Sie auf Weiter um zum Reiter Pool-Mitglieder zu gelangen.

Hier werden Ihnen die verfügbaren Instanzen aus dem zuvor ausgewählten Netzwerk angezeigt. Fügen Sie die gewünschten Instanzen über den Hinzufügen-Button zum Pool hinzu. Achten Sie darauf, die richtige IP-Adresse der Instanz auszuwählen und geben Sie den Port an, auf dem der Service der Instanz bereitgestellt wird.

Screenshot OpenStack LoadBalancer Member.png

Im letzten Reiter Monitordetails können Sie einen Gesundheitsmonitor für die Instanzen des Pools konfigurieren. Da der Loadbalancer vor die Instanzen geschaltet wird, muss dieser überprüfen, ob eine Instanz oder der Dienst der Instanz erreichbar ist. Sollte eine Instanz ausfallen, kann der Loadbalancer darauf reagieren und Clients werden nicht mehr an diese Instanz weitergeleitet.

Es stehen verschiedene Arten des Monitorings zur Verfügung:

  • HTTP / HTTPS
Sie können eine HTTP-Methode und URL-Pfad auswählen, die an den Server gesendet werden soll und welcher HTTP-Statuscode als Antwort erwartet wird.
  • PING
Der Loadbalancer sende einen Ping an die Instanz, um zu überprüfen, ob diese erreichbar ist. (Es wird nur die Verfügbarkeit des Hosts überprüft, nicht ob der Dienst erreichbar ist!)
  • TCP
Der Loadbalancer öffnet eine TCP-Verbindung zum zuvor Konfigurierten Port des Server. Hier ist es sinnvoll eine Methode in Ihrer Anwendung zu implementieren, die nur ein OK als Antwort an den Loadbalancer sendet, eine Verbindung aufbaut und diese wieder schließt.
  • TLS-HELLO
Der Loadbalancer initiiert einen TLS-Handshake, um zu überprüfen, ob die Instanz erreichbar ist.
  • UDP-Connect
Der Loadbalancer baut eine UDP-Verbindung zum Server-Port auf.

Welche Art des Monitorings Sie auswählen, hängt also von ihrem Dienst ab.

Screenshot OpenStack LoadBalancer Monitoring.png

Für unser Webserver-Beispiel verwenden wir die HTTP-Methode auf Port 80. Anschließend klicken Sie auf Loadbalancer erstellen - die Provisionierung des Loadbalancers dauert wenige Minuten.

Schritt 3: Floating IP zuweisen[Bearbeiten | Quelltext bearbeiten]

Damit der über den Loadbalancer bereitgestellte Dienst auch von ausserhalb erreichbar ist, können Sie dem Loadbalancer noch eine Floating-IP zuweisen. Gehen Sie dazu auf der Übersichtsseite unter Netzwerk -> Loadbalancer und klicken im Kontextmenü des jeweiligen Loadbalancers auf Floating-IP zuweisen. Wählen Sie eine der verfügbaren Floating-IPs aus (beachten Sie hier die Verfügbarkeitszonen der Floating-IPs) und klicken Sie auf Zuweisen.

Schritt 4: Funktionstest[Bearbeiten | Quelltext bearbeiten]

Zum überprüfen der Konfiguration rufen Sie den Dienst über die Floating IP des Loadbalancers auf. In diesem Beispiel ist dies ein Webserver - http://[Floating-IP]/. Sie sollten nun die Apache2-Startseite sehen.

Um zu überprüfen, ob verschiedene Instanzen durch den Loadbalancer angesprochen werden, könnten Sie z.B. jede Instanz ihren Namen oder IP-Adresse über den Webserver ausgeben lassen. Dies ist natürlich abhängig vom bereitgestellten Dienst.

sudo sh -c 'hostname > /var/www/html/index.html'

Weitere Konfiguration[Bearbeiten | Quelltext bearbeiten]

Weitere Listener erstellen[Bearbeiten | Quelltext bearbeiten]

Sie können weitere Listener zu ihrem Loadbalancer hinzufügen, um z.B. neben HTTP auch HTTPS bereitzustellen. Dazu gehen Sie in der Übersicht unter Netzwerk -> Loadbalancer auf den Namen ihres Loadbalancers und anschließend im oberen Bereich auf den Reiter Listener.

Klicken Sie auf Listener erstellen, es öffnet sich wieder das Dialogfenster wie in Schritt 2. Geben Sie die Art des Listeners, den Pool sowie den Monitor an. Ist die Einrichtung abgeschlossen, wird der Listener in der Übersicht mit aufgeführt.

Weitere Pools hinzufügen[Bearbeiten | Quelltext bearbeiten]

Sie können weitere Mitglieder zu einem Pool ihres Loadbalancer hinzufügen, indem Sie unter Netzwerk -> Loadbalancer auf den Namen ihres Loadbalancers und anschließend im oberen Bereich auf den Reiter Pool klicken.

Über Pool erstellen öffnet sich wieder das Dialogfenster aus Schritt 2. Geben Sie die Art des Loadbalancers, die Mitglieder des Pools sowie einen Gesundheitsmonitor an. Ist die Einrichtung abgeschlossen, wird der Pool in der Übersicht mit aufgeführt.

Mitglieder zu einem Pool hinzufügen / löschen[Bearbeiten | Quelltext bearbeiten]

Um eine Instanz als Mitglied zu einem bestehenden Pool hinzuzufügen oder eine Instanz aus einem Pool zu löschen, klicken Sie auf den Namen des Pools und wählen im oberen Bereich den Reiter Mitglieder.

Über den Hinzufügen/Löschen Mitglieder-Button öffnet sich eine Übersicht der Mitglieder des Pools und der verfügbaren Instanzen. Klicken Sie auf den Entfernen-Button einer Instanz um diese aus dem Pool zu löschen oder auf den Hinzufügen-Button um eine Instanz zum Pool hinzuzufügen.

Siehe auch[Bearbeiten | Quelltext bearbeiten]


Bei Fragen oder Problemen wenden Sie sich bitte telefonisch oder per E-Mail an uns:

Tel. IT: +49 (5251) 60-5544 Tel. Medien: +49 (5251) 60-2821 E-Mail: imt@uni-paderborn.de

Das Notebook-Café ist die Benutzerberatung des IMT

Das IMT:Notebook-Café (Raum I0.401) bietet in der vorlesungsfreien Zeit nur eingeschränkten Support

Mo Di-Do Fr
Vor-Ort-Support - 09-13 Uhr -
Telefonsupport 08:30-13 Uhr & 13:30-15 Uhr 08:30-13 Uhr

Das IMT:Servicecenter Medien auf H1 hat aktuell von Montag bis Freitag von 08:00-13:00 Uhr geöffnet.


Cookies helfen uns bei der Bereitstellung des IMT HilfeWikis. Bei der Nutzung vom IMT HilfeWiki werden die in der Datenschutzerklärung beschriebenen Cookies gespeichert.