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

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

IMT HilfeWiki - das Wiki
Wechseln zu:Navigation, Suche
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.
 +
</bootstrap_alert>
  
'''Wichtiger Hinweis:''' Um diese Anleitung nutzen zu können wird ein Kommandozeilen-Client benötigt. Die Bespiele in diesem Kochbuch sind mit den <code>OpenStack Command-line Clients 2.3.0</code> aus <code>Ubuntu 16.04.1 LTS</code> erzeugt. Neuere Clients können eine etwas andere Aufruf-Syntax haben.  
+
== 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.
  
: '''[[Cloudcomputing Kochbuch Kommandozeilen-Client erzeugen|Informationen zum Erzeugen der Kommandozeilen-Clients]]'''
+
Wir werden in diesem Beispiel drei Webserver über einen Loadbalancer bereitstellen.
 
 
Bis auf Ausnahmen lassen sich alle Einstellungen auch im Dashboard vornehmen. Beachten Sie bitte den Artikel [[Cloudcomputing Aktuelle Informationen]].
 
 
 
== Rezepte ==
 
  
 
[[Datei:Cloudcomputing-LBAASv2-Kochbuch.png]]
 
[[Datei:Cloudcomputing-LBAASv2-Kochbuch.png]]
  
=== Schritt 1:  Drei Webserver instanziieren ===
+
Wie Sie eine neue Instanz erstellen, finden Sie im Bereich [https://hilfe.uni-paderborn.de/Cloudcomputing_Quick-Start Cloudcomputing Quick-Start], eine Anleitung zum erstellen eines Netzwerkes finden Sie im [https://hilfe.uni-paderborn.de/Cloudcomputing_Kochbuch_Netzwerk Kochbuch Netzwerk].
 
 
<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>
 
 
 
 
 
 
 
 
 
 
 
<syntaxhighlight lang="bash">
 
ubuntu@api-kochbuch-demo:~$  neutron lbaas-member-create \
 
  --subnet Privates-Kochbuch-Test-Subnetz \
 
  --address 192.168.0.110 \
 
  --protocol-port 80 \
 
  Kochbuch-Loadbalancer-HTTP-Pool
 
 
 
Created a new member:
 
+----------------+--------------------------------------+
 
| 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 \
 
  --subnet Privates-Kochbuch-Test-Subnetz \
 
  --address 192.168.0.111 \
 
  --protocol-port 80 \
 
  Kochbuch-Loadbalancer-HTTP-Pool
 
 
 
Created a new member:
 
+----------------+--------------------------------------+
 
| Field          | Value                                |
 
+----------------+--------------------------------------+
 
| address        | 192.168.0.111                        |
 
| admin_state_up | True                                |
 
| 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 \
 
  --subnet Privates-Kochbuch-Test-Subnetz \
 
  --address 192.168.0.112 \
 
  --protocol-port 80 \
 
  Kochbuch-Loadbalancer-HTTP-Pool
 
 
 
Created a new member:
 
+----------------+--------------------------------------+
 
| 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">
+
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>
ubuntu@api-kochbuch-demo:~$ neutron lbaas-loadbalancer-list
 
+--------------------------------------+-----------------------+---------------+---------------------+----------+
 
| 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
+
<code>sudo apt update && sudo apt upgrade -y && sudo apt install apache2 -y</code>
+--------------------------------------+--------------------------------------+----------------------------+----------+---------------+----------------+
 
| 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
+
Dies aktualisiert das System und installiert den Apache2 Webserver.
+--------------------------------------+---------------------------------+----------+----------------+
+
| id                                  | name                            | protocol | admin_state_up |
+
=== Schritt 2: Loadbalancer erzeugen, Listener erstellen, Pools und Mitglieder konfigurieren ===
+--------------------------------------+---------------------------------+----------+----------------+
+
Sie erstellen einen Loadbalancer, indem Sie unter ''Netzwerk -> Loadbalancer'' auf ''Loadbalancer erstellen'' klicken.
| de737c6c-ccad-432d-b365-89fa23148ca2 | Kochbuch-Loadbalancer-HTTP-Pool | HTTP    | True          |
+
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.
  
ubuntu@api-kochbuch-demo:~$ neutron lbaas-member-list Kochbuch-Loadbalancer-HTTP-Pool
+
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''
| id                                  | name | address      | protocol_port | weight | subnet_id                            | admin_state_up |
+
den Punkt ''HTTP''. Um einen anderen Dienst als HHTP oder HTTPS bereitzustellen, wählen Sie aus mit welchem Protokoll (TCP oder UDP) und auf welchem Port dieser bereitgestellt wird.
+--------------------------------------+------+---------------+---------------+--------+--------------------------------------+----------------+
 
| 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 ===
+
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.
  
<syntaxhighlight lang="bash">
+
*'''ROUND_ROBIN'''
ubuntu@api-kochbuch-demo:~$ curl http://192.168.0.113/ip.txt
+
: Lastverteilung auf Basis eines Rundlaufverfahrens. Der Loadbalancer wählt immer die nächste Instanz.
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
+
*'''SOURCE_IP'''
loadbalancer-webserver-2
+
: 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.
    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
+
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.
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
+
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.
loadbalancer-webserver-1
+
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.  
    inet 192.168.0.111/24 brd 192.168.0.255 scope global ens3
 
</syntaxhighlight>
 
  
=== Schritt 4: Funktionsmonitore ===
+
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.
  
<syntaxhighlight lang="bash">
+
Es stehen verschiedene Arten des Monitorings zur Verfügung:
ubuntu@api-kochbuch-demo:~$ neutron lbaas-healthmonitor-create \
+
*'''HTTP / HTTPS'''
  --delay 5 \
+
: 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.
  --max-retries 2 \
+
*'''PING'''
  --timeout 10 \
+
: 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!''')
  --type HTTP \
+
*'''TCP'''
  --pool Kochbuch-Loadbalancer-HTTP-Pool
+
: 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.
  
Created a new healthmonitor:
+
Welche Art des Monitorings Sie auswählen, hängt also von ihrem Dienst ab.
+----------------+------------------------------------------------+
 
| 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]

Version vom 8. Juni 2021, 14:28 Uhr

Anleitung
Allgemeine Informationen
Informationen
Betriebssystem Alle
Service Cloudcomputing
Interessant für Angestellte, 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

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.

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

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 HHTP oder HTTPS bereitzustellen, wählen Sie aus mit welchem Protokoll (TCP oder UDP) und auf welchem Port dieser bereitgestellt wird.

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.

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.

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.

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 4: Funktionstest

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

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.

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

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

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


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

Der Servicepoint ist aktuell im Notebook-Café zu finden

Das IMT:Notebook-Café (Raum I0.401) bietet derzeit eingeschränkten Support und hat Montags bis Donnerstags von 08:30 - 16:00 Uhr und Freitags 08:30 - 15:00 Uhr geöffnet. Bitte beachten Sie die derzeit geltenden Hygienebestimmungen.

Das IMT:Servicecenter Medien auf H1 hat aktuell Montags bis Donnerstags von 8:00 - 16:00 Uhr und Freitags von 8:00 - 14:00 Uhr geöffnet.