{"id":2780,"date":"2023-09-10T16:11:36","date_gmt":"2023-09-10T14:11:36","guid":{"rendered":"https:\/\/linux-bibel.at\/?p=2780"},"modified":"2023-09-10T16:11:37","modified_gmt":"2023-09-10T14:11:37","slug":"haproxy-hochverfuegbarkeit-mit-linux","status":"publish","type":"post","link":"https:\/\/linux-bibel.at\/index.php\/2023\/09\/10\/haproxy-hochverfuegbarkeit-mit-linux\/","title":{"rendered":"HAProxy &#8211; Hochverf\u00fcgbarkeit mit Linux"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Was bedeutet eigentlich Hochverf\u00fcgbarkeit und wie erreicht man diese?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nehmen wir einmal eine zu Hause gehostete Webseite &#8211; meist hat man hier nicht die Ressourcen eines richtigen Rechenzentrums. Man nimmt einen Raspberry Pi, installiert darauf einen Webserver und schiebt seine Webseite auf diesen. Die Seite wird richtig gut und viele Menschen besuchen diese Webseite. Irgendwann erreicht auch ein Raspberry Pi seine Grenzen. Was kann man tun, damit die Webseite auch weiterhin schnell l\u00e4uft? F\u00e4llt der Raspberry Pi aus, ist nat\u00fcrlich auch die Webseite nicht erreichbar &#8211; was kann man tun?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nun, man k\u00f6nnte einen zweiten, oder auch dritten Pi nehmen und dieselbe Webseite darauf aufsetzen. Doch wie bringt man Besucher dazu, die Seite auf einem anderen Raspberry Pi zu besuchen &#8211; sie darum bitten? Nein, man nutzt einen Proxy &#8211; dieser verteilt erst einmal die Last auf die bestehenden Webseiten, f\u00e4llt ein System aus verteilt der Proxy die Last auf die verbleibenden Systeme.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sehen wir uns dies einmal in ein paar Grafiken an. In der ersten Grafik l\u00e4uft nur ein System mit der Webseite:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"712\" height=\"464\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/server.png\" alt=\"\" class=\"wp-image-2781\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/server.png 712w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/server-300x196.png 300w\" sizes=\"auto, (max-width: 712px) 100vw, 712px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Jetzt landen alle Besucher auf diesem einen Server &#8211; sind dies viele Besucher, wird die Seite nat\u00fcrlich dementsprechend langsamer. F\u00e4llt der Server aus, etwa wegen eines technischen Defekts, oder eines Updates &#8211; f\u00e4llt nat\u00fcrlich auch die Webseite aus.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"712\" height=\"672\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/server-1.png\" alt=\"\" class=\"wp-image-2782\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/server-1.png 712w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/server-1-300x283.png 300w\" sizes=\"auto, (max-width: 712px) 100vw, 712px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Jetzt haben Sie mehrere Server mit derselben Webseite &#8211; dies ist nichts anderes als ein Backup. F\u00e4llt der Server aus, den Ihre Leser besuchen &#8211; ist auch die Webseite weg. Sie m\u00fcssten also am Router umkonfigurieren, dass die Besucher auf einen anderen Rechner weitergeleitet werden. Dies ist umst\u00e4ndlich und die Webseite f\u00e4llt trotzdem einige Zeit aus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn Sie nun einen Proxy dazwischen schalten &#8211; verteilt dieser nicht nur die Last auf die einzelnen Server, sondern f\u00e4llt einer aus &#8211; laufen immer noch die anderen Systeme:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"742\" height=\"672\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/server-2.png\" alt=\"\" class=\"wp-image-2783\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/server-2.png 742w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/server-2-300x272.png 300w\" sizes=\"auto, (max-width: 742px) 100vw, 742px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00e4llt der Proxy-Server aus, hat sich nat\u00fcrlich auch diese Geschichte erledigt. Man k\u00f6nnte nat\u00fcrlich auch mehrere Proxy-Server nutzen. Wichtig ist einmal &#8211; ein Proxy-Server ben\u00f6tigt so gut wie keine Ressourcen, auch dies k\u00f6nnte also wieder ein Raspberry Pi erledigen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Man k\u00f6nnte jetzt nat\u00fcrlich eine beliebige Proxy-Software nutzen, diese ist dann meist etwas umst\u00e4ndlich zu konfigurieren. F\u00fcr solche Zwecke nutzt man am einfachsten eine Proxy-Software, die speziell f\u00fcr solche Aufgaben geschaffen wurde. In diesem Fall die Software&nbsp;<strong>HAProxy<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ein weiterer Vorteil von HAProxy &#8211; er kann nicht nur die Last auf verschiedene Systeme aufteilen, er kann auch ein einziges SSL-Zertifikat (<em>https<\/em>) auf beliebig viele Webseiten verteilen.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">HAProxy installieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Unter auf Debian basierenden Linux-Distributionen f\u00e4llt die Installation wie \u00fcblich sehr einfach aus, Sie installieren die Software ganz einfach \u00fcber die\u00a0Paket-Verwaltung\u00a0durch das Paket &#8222;<strong>haproxy<\/strong>&#8222;.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">HAProxy konfigurieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Im idealen Fall haben Sie neben dem HAProxy auch einen DHCP-Server, \u00fcber einen solchen werden wir in einem sp\u00e4teren Beitrag sprechen &#8211; aber zumindest statische IP-Adressen in Ihrem Netzwerk.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Konfigurationsdatei der Software findet sich im Systemverzeichnis unter &#8222;<em>\/etc\/haproxy\/haproxy.cfg<\/em>&#8222;. Diese bearbeiten Sie nat\u00fcrlich als\u00a0root\u00a0auf dem\u00a0Terminal\u00a0&#8211; etwa mit Nano oder Vi(<em>m<\/em>):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/etc\/haproxy\/haproxy.cfg\nvim \/etc\/haproxy\/haproxy.cfg<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Die Konfiguration f\u00fcr einen Server besteht unter HAProxy in drei Teilen. Der erste Teil &#8211; wir erstellen eine ACL &#8211; eine Access Control List. Nehmen wir einmal an, wir haben drei Rechner mit folgenden Hostnamen &#8222;<strong>rechner_1 rechner_2 rechner_3<\/strong>&#8220; mit den jeweiligen Webseiten, und alle bieten die Webseite &#8222;<strong>linux.org<\/strong>&#8222;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wir erstellen f\u00fcr die Webseite eine ACL &#8211; also eine Zeile:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>     acl acl_host_linux     hdr(host) -i linux.org<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wir geben als Erstes den Hostnamen der Webseite selbst an &#8211; also\u00a0<code>linux<\/code>, es folgt die komplette Domain\u00a0<code>linux.org<\/code>. Als N\u00e4chstes m\u00fcssen wir die Einleitung f\u00fcr ein Backend erstellen. Dieses k\u00f6nnen wir benennen, wie wir wollen &#8211; sollte der \u00dcbersichtlichkeit halber nat\u00fcrlich etwas mit der Webseite zu tun haben &#8211; dahinter geben wir unsere erstellte ACL an:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>     use_backend be_linux     if acl_host_linux<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jetzt wollen wir die Geschichte nat\u00fcrlich verstehen &#8211; wir haben eine ACL und wir haben die Einleitung eines Backends. Das Backend\u00a0<code>be_linux<\/code>\u00a0soll genutzt werden, wenn die Webseite\u00a0<code>linux.org<\/code>\u00a0aufgerufen wird. Jetzt erstellen wir das eigentliche Backend &#8211; in diesem werden alle unsere Rechner zusammengefasst:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>backend be_linux\n     option httpchk\n     server rechner_1 linux.org:80 ssl verify none check\n     server rechner_2 linux.org:80 ssl verify none check\n     server rechner_3 linux.org:80 ssl verify none check\n     http-request set-header X-Forwarded-Port %&#91;dst_port]\n     http-request add-header X-Forwarded-Proto https if { ssl_fc }<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Was wir jetzt noch ben\u00f6tigen, um die Webseiten abzusichern &#8211; nat\u00fcrlich ein SSL-Zertifikat. Dieses geben wir unter dem Bereich\u00a0<code>frontend proxy-in<\/code>an &#8211; etwa:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>frontend proxy-in\n     bind ip-adresse:443 ssl crt \/etc\/ssl\/private\/ssl.pem<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sowie unter:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>listen fe-git-http-in\n     bind ip-adresse:443 ssl crt \/etc\/ssl\/private\/ssl.pem<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wichtig, nach dem Speichern der Datei &#8211; der Test der Konfiguration:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>haproxy -c -f \/etc\/haproxy\/haproxy.cfg<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dies ist nat\u00fcrlich nur eine Beispiel-Konfiguration und kann keinesfalls f\u00fcr alle M\u00f6glichkeiten genutzt werden. Die komplette Dokumentation zur Software finden Sie unter&nbsp;<a href=\"https:\/\/www.haproxy.com\/documentation\/hapee\/latest\/onepage\/\" target=\"_blank\" rel=\"noreferrer noopener\">HAProxy &#8211; Dokumentation<\/a>.<\/p>\n<div class=\"pld-like-dislike-wrap pld-custom\">\r\n    <div class=\"pld-like-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-like-trigger pld-like-dislike-trigger  \" title=\"Gef\u00e4llt mir\" data-post-id=\"2780\" data-trigger-type=\"like\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                            <img src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/12\/Daumen-Hoch.png\" alt=\"Gef\u00e4llt mir\" \/>\r\n            <\/a>\r\n    <span class=\"pld-like-count-wrap pld-count-wrap\">    <\/span>\r\n<\/div><div class=\"pld-dislike-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-dislike-trigger pld-like-dislike-trigger  \" title=\"Gef\u00e4llt mir nicht\" data-post-id=\"2780\" data-trigger-type=\"dislike\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                            <img src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/12\/Daumen-Runter.png\" alt=\"Gef\u00e4llt mir nicht\" \/>\r\n            <\/a>\r\n    <span class=\"pld-dislike-count-wrap pld-count-wrap\"><\/span>\r\n<\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Was bedeutet eigentlich Hochverf\u00fcgbarkeit und wie erreicht man diese? Nehmen wir einmal eine zu Hause gehostete Webseite &#8211; meist hat man hier nicht die Ressourcen eines richtigen Rechenzentrums. Man nimmt einen Raspberry Pi, installiert darauf einen Webserver und schiebt seine Webseite auf diesen. Die Seite wird richtig gut und viele Menschen besuchen diese Webseite. Irgendwann [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2783,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[38,308],"tags":[39,310],"class_list":["post-2780","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-netzwerk","category-server","tag-netzwerk","tag-server"],"_links":{"self":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/2780","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/comments?post=2780"}],"version-history":[{"count":1,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/2780\/revisions"}],"predecessor-version":[{"id":2784,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/2780\/revisions\/2784"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media\/2783"}],"wp:attachment":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media?parent=2780"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/categories?post=2780"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/tags?post=2780"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}