{"id":53611,"date":"2019-12-06T00:00:00","date_gmt":"2019-12-05T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1"},"modified":"2020-02-18T14:01:32","modified_gmt":"2020-02-18T11:01:32","slug":"legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1","title":{"rendered":"Easily and effortlessly deploying applications on Tarantool Cartridge (Part 1)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Easily and effortlessly deploying applications on Tarantool Cartridge (Part 1)\" src=\"\/wp-content\/uploads\/2019\/12\/0493b6c8d60253352bc971b216e9b63e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir haben bereits \u00fcber <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/465503\/\">Tarantool Cartridge<\/a><\/noindex>, das die Entwicklung verteilter Anwendungen und deren Packung erm\u00f6glicht, berichtet. Nun fehlt nur noch eins: zu lernen, wie man diese Anwendungen bereitstellt und verwaltet. Keine Sorge, wir haben an alles gedacht! Wir haben alle Best Practices zum Arbeiten mit Tarantool Cartridge gesammelt und eine <noindex><a rel=\"nofollow\" href=\"https:\/\/galaxy.ansible.com\/tarantool\/cartridge\">Ansible-Rolle<\/a><\/noindex>geschrieben, die das Paket auf den Servern verteilt, Instanzen startet, sie zu einem Cluster zusammenf\u00fchrt, die Autorisierung konfiguriert, vshard bootstrapped, automatischen Failover aktiviert und die Clusterkonfiguration patched.<\/p>\n<p><\/p>\n<p>Interessiert? Dann lade ich Sie ein, alles im Detail zu erfahren.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"nachnem-s-primera\">Lassen Sie uns mit einem Beispiel beginnen.<\/h1>\n<p><\/p>\n<p>Wir werden nur einen Teil der Funktionen unserer Rolle betrachten. Eine vollst\u00e4ndige Beschreibung aller M\u00f6glichkeiten und Eingabeparameter finden Sie immer in <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge#ansible-role-tarantool-cartridge\">Dokumentation.<\/a><\/noindex>. Aber besser einmal ausprobieren, als hundertmal sehen, also lassen Sie uns eine kleine Anwendung bereitstellen.<\/p>\n<p><\/p>\n<p>Tarantool Cartridge bietet <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/cartridge-cli\/tree\/master\/examples\/getting-started-app#application-example-based-on-tarantool-cartridge\">Tutorial<\/a><\/noindex> zum Erstellen einer kleinen Cartridge-Anwendung, die Informationen \u00fcber Bankkunden und deren Konten speichert und eine API f\u00fcr die Datenverwaltung \u00fcber HTTP bereitstellt. Daf\u00fcr werden im Anwendung zwei m\u00f6gliche Rollen beschrieben: <code>api<\/code> und <code>storage<\/code>, die den Instanzen zugewiesen werden k\u00f6nnen.<\/p>\n<p><\/p>\n<p>Die Tarantool Cartridge selbst gibt keine Hinweise darauf, wie Prozesse gestartet werden. Sie erm\u00f6glicht lediglich die Anpassung bereits gestarteter Instanzen. Den Rest muss der Benutzer selbst erledigen: Konfigurationsdateien ablegen, Dienste starten und die Topologie einrichten. Aber damit wollen wir uns nicht belasten, das \u00fcbernimmt f\u00fcr uns Ansible.<\/p>\n<p><\/p>\n<h3 id=\"ot-slov-k-delu\">Von Worten zu Taten<\/h3>\n<p><\/p>\n<p>Lassen Sie uns also unsere Anwendung auf zwei virtuellen Maschinen bereitstellen und eine einfache Topologie einrichten:<\/p>\n<p><\/p>\n<ul>\n<li>Replikatset <code>app-1<\/code> wird die Rolle implementieren <code>api<\/code>, die die Rolle <code>vshard-router<\/code>beinhaltet. Hier wird es nur eine Instanz geben.<\/li>\n<li>Replikatset <code>storage-1<\/code> implementiert die Rolle <code>storage<\/code> (und gleichzeitig <code>vshard-storage<\/code>), hier f\u00fcgen wir zwei Instanzen von verschiedenen Maschinen hinzu.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Easily and effortlessly deploying applications on Tarantool Cartridge (Part 1)\" src=\"\/wp-content\/uploads\/2019\/12\/62d20050e2d7a6358002ecd758222f1f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>F\u00fcr das Beispiel ben\u00f6tigen wir <noindex><a rel=\"nofollow\" href=\"https:\/\/www.vagrantup.com\/\">Vagrant<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ansible.com\">Ansible<\/a><\/noindex> (Versionen 2.8 oder \u00e4lter).<\/p>\n<p><\/p>\n<p>Die Rolle selbst befindet sich in <noindex><a rel=\"nofollow\" href=\"https:\/\/galaxy.ansible.com\/docs\/\">Ansible Galaxy<\/a><\/noindex>. Dies ist ein Repository, das es erm\u00f6glicht, eigene Entwicklungen zu teilen und fertige Rollen zu nutzen.<\/p>\n<p><\/p>\n<p>Klonen wir das Repository mit dem Beispiel:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ git clone https:\/\/github.com\/dokshina\/deploy-tarantool-cartridge-app.git\n$ cd deploy-tarantool-cartridge-app &amp;&amp; git checkout 1.0.0<\/code><\/pre>\n<p><\/p>\n<p>Starten Sie die virtuellen Maschinen:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ vagrant up<\/code><\/pre>\n<p><\/p>\n<p>Installieren Sie die Ansible-Rolle Tarantool Cartridge:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ ansible-galaxy install tarantool.cartridge,1.0.1<\/code><\/pre>\n<p><\/p>\n<p>F\u00fchren Sie die installierte Rolle aus:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ ansible-playbook -i hosts.yml playbook.yml<\/code><\/pre>\n<p><\/p>\n<p>Wir warten, bis das Playbook abgeschlossen ist, und wechseln zu <noindex><a rel=\"nofollow\" href=\"http:\/\/localhost:8181\/admin\/cluster\/dashboard\">http:\/\/localhost:8181\/admin\/cluster\/dashboard<\/a><\/noindex> und genie\u00dfen das Ergebnis:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Easily and effortlessly deploying applications on Tarantool Cartridge (Part 1)\" src=\"\/wp-content\/uploads\/2019\/12\/6563ddf2f2bfc85714f327c8d6b2d1c4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Daten k\u00f6nnen jetzt \u00fcbertragen werden. Cool, oder?<\/p>\n<p><\/p>\n<p>Lass uns jetzt herausfinden, wie man damit arbeitet und gleichzeitig ein weiteres Replikatset zur Topologie hinzuf\u00fcgen.<\/p>\n<p><\/p>\n<h3 id=\"nachinaem-razbiratsya\">Beginnen wir mit der Erkl\u00e4rung<\/h3>\n<p><\/p>\n<p>Was ist also passiert?<\/p>\n<p><\/p>\n<p>Wir haben zwei virtuelle Maschinen hochgefahren und ein Ansible-Playbook ausgef\u00fchrt, das unseren Cluster eingerichtet hat. Schauen wir uns den Inhalt der Datei an <code>playbook.yml<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\n- name: Deploy my Tarantool Cartridge app\n  hosts: all\n  become: true\n  become_user: root\n  tasks:\n  - name: Import Tarantool Cartridge role\n    import_role:\n      name: tarantool.cartridge<\/code><\/pre>\n<p><\/p>\n<p>Hier passiert nichts Interessantes, wir f\u00fchren die Ansible-Rolle aus, die genannt wird <code>tarantool.cartridge<\/code>.<\/p>\n<p><\/p>\n<p>Alles Wichtige (n\u00e4mlich die Clusterkonfiguration) befindet sich in der <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/intro_inventory.html\">inventory<\/a><\/noindex>-Datei <code>hosts.yml<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\nall:\n  vars:\n    # allgemeine Cluster-Variablen\n    cartridge_app_name: getting-started-app\n    cartridge_package_path: .\/getting-started-app-1.0.0-0.rpm  # Pfad zum Paket\n\n    cartridge_cluster_cookie: app-default-cookie  # Cluster-Cookie\n\n    # allgemeine SSH-Optionen\n    ansible_ssh_private_key_file: ~\/.vagrant.d\/insecure_private_key\n    ansible_ssh_common_args: '-o IdentitiesOnly=yes -o UserKnownHostsFile=\/dev\/null -o StrictHostKeyChecking=no'\n\n  # INSTANZEN\n  hosts:\n    storage-1:\n      config:\n        advertise_uri: '172.19.0.2:3301'\n        http_port: 8181\n\n    app-1:\n      config:\n        advertise_uri: '172.19.0.3:3301'\n        http_port: 8182\n\n    storage-1-replica:\n      config:\n        advertise_uri: '172.19.0.3:3302'\n        http_port: 8183\n\n  children:\n    # GRUPPIERE INSTANZEN NACH MASCHINEN\n    host1:\n      vars:\n        # Optionen f\u00fcr die Verbindung zur ersten Maschine\n        ansible_host: 172.19.0.2\n        ansible_user: vagrant\n\n      hosts:  # Instanzen, die auf der ersten Maschine gestartet werden\n        storage-1:\n\n    host2:\n      vars:\n        # Optionen f\u00fcr die Verbindung zur zweiten Maschine\n        ansible_host: 172.19.0.3\n        ansible_user: vagrant\n\n      hosts:  # Instanzen, die auf der zweiten Maschine gestartet werden\n        app-1:\n        storage-1-replica:\n\n    # GRUPPIERE INSTANZEN NACH REPLIKATSETZEN\n    replicaset_app_1:\n      vars:  # Konfiguration des Replikatsatzes\n        replicaset_alias: app-1\n        failover_priority:\n          - app-1  # Leiter\n        roles:\n          - 'api'\n\n      hosts:  # Instanzen des Replikatsatzes\n        app-1:\n\n    replicaset_storage_1:\n      vars:  # Konfiguration des Replikatsatzes\n        replicaset_alias: storage-1\n        weight: 3\n        failover_priority:\n          - storage-1  # Leiter\n          - storage-1-replica\n        roles:\n          - 'storage'\n\n      hosts:   # Instanzen des Replikatsatzes\n        storage-1:\n        storage-1-replica:<\/code><\/pre>\n<p><\/p>\n<p>Alles, was wir ben\u00f6tigen, ist, zu lernen, wie man Instanzen und Replica-Sets verwaltet, indem wir den Inhalt dieser Datei \u00e4ndern. Im Folgenden werden wir neue Abschnitte hinzuf\u00fcgen. Um nicht durcheinander zu kommen, wo sie hinzugef\u00fcgt werden sollen, k\u00f6nnen Sie die finale Version dieser Datei zurate ziehen, <code>hosts.updated.yml<\/code>, die im Repository mit dem Beispiel zu finden ist.<\/p>\n<p><\/p>\n<h3 id=\"upravlenie-instansami\">Instanzen verwalten<\/h3>\n<p><\/p>\n<p>In den Begriffen von Ansible ist jede Instanz ein Host (nicht zu verwechseln mit einem physischen Server), d.h. ein Infrastrukturknoten, den Ansible verwalten wird. F\u00fcr jeden Host k\u00f6nnen wir Verbindungsparameter angeben (wie z.B. <code>ansible_host<\/code> und <code>ansible_user<\/code>), sowie die Konfiguration der Instanz. Die Beschreibung der Instanzen befindet sich im Abschnitt <code>hosts<\/code>.<\/p>\n<p><\/p>\n<p>Betrachten wir die Konfiguration der Instanz <code>storage-1<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">all:\n  vars:\n    ...\n\n  # INSTANZEN\n  hosts:\n    storage-1:\n      config:\n        advertise_uri: '172.19.0.2:3301'\n        http_port: 8181\n\n  ...<\/code><\/pre>\n<p><\/p>\n<p>In der Variablen <code>config<\/code> wir haben die Parameter der Instanz angegeben \u2014 <code>advertise URI<\/code> und <code>HTTP-Port<\/code>.<br \/>\nIm Folgenden finden Sie die Parameter der Instanzen <code>app-1<\/code> und <code>storage-1-replica<\/code>.<\/p>\n<p><\/p>\n<p>Wir m\u00fcssen Ansible die Verbindungsparameter f\u00fcr jede Instanz mitteilen. Es erscheint sinnvoll, die Instanzen in Gruppen nach virtuellen Maschinen zu gruppieren. Deshalb sind die Instanzen in Gruppen zusammengefasst, <code>host1<\/code> und <code>host2<\/code>, und in jeder Gruppe sind im Abschnitt <code>vars<\/code> die Werte <code>ansible_host<\/code> und <code>ansible_user<\/code> f\u00fcr eine virtuelle Maschine angegeben. Im Abschnitt <code>hosts<\/code> \u2014 Hosts (auch Instanzen genannt), die zu dieser Gruppe geh\u00f6ren:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">all:\n  vars:\n    ...\n  hosts:\n    ...\n  children:\n    # INSTANZEN NACH MASCHINEN GRUPPIEREN\n    host1:\n      vars:\n        # Optionen f\u00fcr die Verbindung zur ersten Maschine\n        ansible_host: 172.19.0.2\n        ansible_user: vagrant\n       hosts:  # Instanzen, die auf der ersten Maschine gestartet werden sollen\n        storage-1:\n\n     host2:\n      vars:\n        # Optionen f\u00fcr die Verbindung zur zweiten Maschine\n        ansible_host: 172.19.0.3\n        ansible_user: vagrant\n       hosts:  # Instanzen, die auf der zweiten Maschine gestartet werden sollen\n        app-1:\n        storage-1-replica:<\/code><\/pre>\n<p><\/p>\n<p>Lass uns \u00c4nderungen vornehmen <code>hosts.yml<\/code>. Wir f\u00fcgen noch zwei Instanzen hinzu, <code>storage-2-replica<\/code> auf der ersten virtuellen Maschine und <code>storage-2<\/code> auf der zweiten:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">all:\n  vars:\n    ...\n\n  # INSTANZEN\n  hosts:\n    ...\n    storage-2:  # &lt;==\n      config:\n        advertise_uri: '172.19.0.3:3303'\n        http_port: 8184\n\n    storage-2-replica:  # &lt;==\n      config:\n        advertise_uri: '172.19.0.2:3302'\n        http_port: 8185\n\n  children:\n    # INSTANZEN NACH MASCHINEN GRUPPIEREN\n    host1:\n      vars:\n        ...\n      hosts:  # Instanzen, die auf der ersten Maschine gestartet werden sollen\n        storage-1:\n        storage-2-replica:  # &lt;==\n\n    host2:\n      vars:\n        ...\n      hosts:  # Instanzen, die auf der zweiten Maschine gestartet werden sollen\n        app-1:\n        storage-1-replica:\n        storage-2:  # &lt;==\n  ...<\/code><\/pre>\n<p><\/p>\n<p>Wir f\u00fchren das Ansible-Playbook aus:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ ansible-playbook -i hosts.yml \n                   --limit storage-2,storage-2-replica \n                   playbook.yml<\/code><\/pre>\n<p><\/p>\n<p>Beachte die Option <code>--limit<\/code>. Da jede Instanz des Clusters in Ansible als Host betrachtet wird, k\u00f6nnen wir spezifisch angeben, welche Instanzen beim Ausf\u00fchren des Playbooks konfiguriert werden sollen.<\/p>\n<p><\/p>\n<p>Wir loggen uns erneut in die Web-Oberfl\u00e4che ein <noindex><a rel=\"nofollow\" href=\"http:\/\/localhost:8181\/admin\/cluster\/dashboard\">http:\/\/localhost:8181\/admin\/cluster\/dashboard<\/a><\/noindex> und beobachten unsere neuen Instanzen:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Easily and effortlessly deploying applications on Tarantool Cartridge (Part 1)\" src=\"\/wp-content\/uploads\/2019\/12\/6181c359e4e5ec4adaee8737600a27e4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir werden nicht stehen bleiben und uns mit der Verwaltung der Topologie vertraut machen.<\/p>\n<p><\/p>\n<h3 id=\"upravlenie-topologiey\">Verwaltung der Topologie<\/h3>\n<p><\/p>\n<p>Verbinden wir unsere neuen Instanzen in einem Replikationssatz <code>storage-2<\/code>. F\u00fcgen wir eine neue Gruppe hinzu <code>replicaset_storage_2<\/code> und beschreiben die Parameter des Replikationssatzes in ihren Variablen analog zu <code>replicaset_storage_1<\/code>. In dem Abschnitt <code>hosts<\/code> geben wir an, welche Instanzen zu dieser Gruppe geh\u00f6ren (also zu unserem Replikationssatz):<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\nall:\n  vars:\n    ...\n  hosts:\n    ...\n  children:\n    ...\n    # INSTANZEN NACH REPLIKATIONS\u00c4TZEN GRUPPIEREN\n    ...\n    replicaset_storage_2:  # &lt;==\n      vars:  # Konfiguration des Replikationssatzes\n        replicaset_alias: storage-2\n        weight: 2\n        failover_priority:\n          - storage-2\n          - storage-2-replica\n        roles:\n          - &#039;storage&#039;\n\n      hosts:   # Instanzen des Replikationssatzes\n        storage-2:\n        storage-2-replica:<\/code><\/pre>\n<p><\/p>\n<p>F\u00fchren wir das Playbook erneut aus:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ ansible-playbook -i hosts.yml \n                   --limit replicaset_storage_2 \n                   --tags cartridge-replicasets \n                   playbook.yml<\/code><\/pre>\n<p><\/p>\n<p>Im Parameter <code>--limit<\/code> haben wir dieses Mal den Gruppennamen \u00fcbergeben, der unserem Replikationssatz entspricht.<\/p>\n<p><\/p>\n<p>Schauen wir uns die Option an <code>tags<\/code>.<\/p>\n<p><\/p>\n<p>Unsere Rolle f\u00fchrt nacheinander verschiedene Aufgaben aus, die mit den folgenden Tags gekennzeichnet sind:<\/p>\n<p><\/p>\n<ul>\n<li><code>cartridge-instances<\/code>: Verwaltung der Instanzen (Konfiguration, Anschluss an Membership);<\/li>\n<li><code>cartridge-replicasets<\/code>: Verwaltung der Topologie (Verwaltung der Replikationss\u00e4tze und unwiderrufliches Entfernen (expel) von Instanzen aus dem Cluster);<\/li>\n<li><code>cartridge-config<\/code>: Verwaltung der anderen Clusterparameter (vshard-Bootstrapping, automatischer Failover-Modus, Autorisierungsparameter und Anwendungsconfiguration).<\/li>\n<\/ul>\n<p><\/p>\n<p>Wir k\u00f6nnen ausdr\u00fccklich angeben, welchen Teil der Arbeit wir erledigen m\u00f6chten, sodass die Rolle die Ausf\u00fchrung der anderen Aufgaben \u00fcberspringt. In unserem Fall m\u00f6chten wir nur mit der Topologie arbeiten, daher haben wir angegeben, <code>cartridge-replicasets<\/code>.<\/p>\n<p><\/p>\n<p>Lassen Sie uns das Ergebnis unserer Bem\u00fchungen bewerten. Wir finden ein neues Replikaset unter <noindex><a rel=\"nofollow\" href=\"http:\/\/localhost:8181\/admin\/cluster\/dashboard\">http:\/\/localhost:8181\/admin\/cluster\/dashboard<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Easily and effortlessly deploying applications on Tarantool Cartridge (Part 1)\" src=\"\/wp-content\/uploads\/2019\/12\/20da99480df519b1ee239cd81f67b786.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hurra!<\/p>\n<p><\/p>\n<p>Experimentieren Sie mit der \u00c4nderung der Konfiguration von Instanzen und Replikasets und beobachten Sie, wie sich die Cluster-Topologie \u00e4ndert. Sie k\u00f6nnen verschiedene Betriebsszenarien ausprobieren, wie zum Beispiel <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/playbooks_delegation.html#rolling-update-batch-size\">Rolling Update<\/a><\/noindex> oder Erh\u00f6hung von <code>memtx_memory<\/code>. Die Rolle wird versuchen, dies ohne Neustart der Instanz zu tun, um m\u00f6gliche Ausfallzeiten Ihrer Anwendung zu minimieren.<\/p>\n<p><\/p>\n<p>Vergessen Sie nicht zu starten <code>vagrant halt<\/code>, um die virtuellen Maschinen zu stoppen, wenn Sie mit ihnen fertig sind.<\/p>\n<p><\/p>\n<h1 id=\"a-chto-pod-kapotom\">Und was steckt dahinter?<\/h1>\n<p><\/p>\n<p>Hier werde ich n\u00e4her darauf eingehen, was w\u00e4hrend unserer Experimente unter der Haube der Ansible-Rolle geschah.<\/p>\n<p><\/p>\n<p>Betrachten wir die Schritte zum Deployment der Cartridge-Anwendung.<\/p>\n<p><\/p>\n<h3 id=\"ustanovka-paketa-i-start-instansov\">Installation des Pakets und Start der Instanzen<\/h3>\n<p><\/p>\n<p>Zuerst m\u00fcssen wir das Paket auf den Server bringen und installieren. Die Rolle kann jetzt mit RPM- und DEB-Paketen arbeiten.<\/p>\n<p><\/p>\n<p>Als N\u00e4chstes starten wir die Instanzen. Das ist ganz einfach: jede Instanz ist ein separater <code>systemd<\/code>-Dienste. Ich erkl\u00e4re es am Beispiel:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ systemctl start myapp@storage-1<\/code><\/pre>\n<p><\/p>\n<p>Dieser Befehl startet die Instanz <code>storage-1<\/code> der Anwendung <code>myapp<\/code>. Die gestartete Instanz wird nach ihrer <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tarantool.io\/ru\/doc\/2.2\/book\/cartridge\/cartridge_dev\/#configuring-instances\">Einstellungen erm\u00f6glicht<\/a><\/noindex> in <code>\/etc\/tarantool\/conf.d\/<\/code>. Die Protokolle der Instanz k\u00f6nnen mit <code>journald<\/code>.<\/p>\n<p><\/p>\n<p>Die Unit-Datei <code>\/etc\/systemd\/system\/myapp@.sevice<\/code> f\u00fcr den systemd-Dienst wird zusammen mit dem Paket bereitgestellt.<\/p>\n<p><\/p>\n<p>In Ansible gibt es eingebaute Module f\u00fcr die Paketinstallation und das Management von systemd-Diensten, hier haben wir nichts Neues erfunden.<\/p>\n<p><\/p>\n<h3 id=\"nastroyka-topologii-klastera\">Konfiguration der Cluster-Topologie<\/h3>\n<p><\/p>\n<p>Hier beginnt das Interessante. Es w\u00e4re doch seltsam, eine spezielle Ansible-Rolle f\u00fcr die Installation von Paketen und den Start von <code>systemd<\/code>-Diensten zu erstellen.<\/p>\n<p><\/p>\n<p>Den Cluster kann man auch manuell einrichten:<\/p>\n<p><\/p>\n<ul>\n<li>Erste Option: Wir \u00f6ffnen die Web-Oberfl\u00e4che und klicken auf die Buttons. F\u00fcr den einmaligen Start mehrerer Instanzen ist das durchaus ausreichend.<\/li>\n<li>Zweite Option: Man k\u00f6nnte die GraphQL-API verwenden. Hier kann man etwas automatisieren, zum Beispiel ein Python-Skript schreiben.<\/li>\n<li>Dritte Option (f\u00fcr die Mutigen): Wir loggen uns auf dem Server ein, verbinden uns mit einer der Instanzen \u00fcber <code>tarantoolctl verbinden<\/code> und alle notwendigen Manipulationen mit dem Lua-Modul durchf\u00fchren <code>cartridge<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>Die Hauptaufgabe unserer Erfindung ist es, diesen schwierigsten Teil der Arbeit f\u00fcr Sie zu \u00fcbernehmen.<\/p>\n<p><\/p>\n<p>Ansible erm\u00f6glicht es, ein eigenes Modul zu schreiben und es in Rollen zu verwenden. Unsere Rolle nutzt solche Module zur Verwaltung verschiedener Cluster-Komponenten.<\/p>\n<p><\/p>\n<p>Wie funktioniert das? Sie beschreiben den gew\u00fcnschten Zustand des Clusters in einer deklarativen Konfiguration, und die Rolle \u00fcbergibt jedem Modul seinen Konfigurationsabschnitt. Das Modul erh\u00e4lt den aktuellen Zustand des Clusters und vergleicht ihn mit dem, was angekommen ist. Dann wird \u00fcber den Socket einer der Instanzen der Code gestartet, der den Cluster in den gew\u00fcnschten Zustand versetzt.<\/p>\n<p><\/p>\n<h1 id=\"itogi\">Ergebnisse<\/h1>\n<p><\/p>\n<p>Heute haben wir erl\u00e4utert und demonstriert, wie Sie Ihre Anwendung auf Tarantool Cartridge bereitstellen und eine einfache Topologie einrichten. Dazu haben wir Ansible verwendet \u2013 ein leistungsf\u00e4higes Werkzeug, das sich durch Benutzerfreundlichkeit auszeichnet und es erm\u00f6glicht, gleichzeitig viele Infrastrukturknoten zu konfigurieren (in unserem Fall handelt es sich um Cluster-Instanzen).<\/p>\n<p><\/p>\n<p>Oben haben wir einen der vielen Ans\u00e4tze zur Beschreibung der Clusterkonfiguration mit Ansible behandelt. Sobald Sie bereit sind, weiterzugehen, schauen Sie sich <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/playbooks_best_practices.html\">Best Practices<\/a><\/noindex> f\u00fcr das Schreiben von Playbooks an. Es k\u00f6nnte einfacher sein, die Topologie mithilfe von <code>group_vars<\/code> und <code>host_vars<\/code>.<\/p>\n<p><\/p>\n<p>Bald werden wir Ihnen zeigen, wie Sie Instanzen endg\u00fcltig aus der Topologie entfernen, vshard bootstrapen, den automatischen Failover verwalten, die Autorisierung einrichten und die Clusterkonfiguration patchen k\u00f6nnen. In der Zwischenzeit k\u00f6nnen Sie selbst <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge#ansible-role-tarantool-cartridge\">Dokumentation<\/a><\/noindex> die Clusterparameter erkunden und experimentieren.<\/p>\n<p><\/p>\n<p>Wenn etwas nicht funktioniert, z\u00f6gern Sie nicht, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge\/issues\/new\">uns \u00fcber das Problem zu informieren. Wir k\u00fcmmern uns schnell um alles!<\/a><\/noindex> uns \u00fcber das Problem. Wir k\u00fcmmern uns schnell um alles!<\/p>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/478710\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u044b \u0443\u0436\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438 \u043f\u0440\u043e Tarantool Cartridge, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0438\u0445. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0435\u0433\u043e \u043d\u0438\u0447\u0435\u0433\u043e: \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u044d\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c\u0438. \u041d\u0435 \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0439\u0442\u0435\u0441\u044c, \u043c\u044b \u0432\u0441\u0451 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438! \u041c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0432\u0441\u0435 best practices \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Tarantool Cartridge \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 ansible-\u0440\u043e\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0437\u043b\u043e\u0436\u0438\u0442 \u043f\u0430\u043a\u0435\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u044b, \u0441\u0442\u0430\u0440\u0442\u0430\u043d\u0435\u0442 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u044b, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442 \u0438\u0445 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-53611","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u044b \u0443\u0436\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438 \u043f\u0440\u043e Tarantool Cartridge, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0438\u0445. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0435\u0433\u043e \u043d\u0438\u0447\u0435\u0433\u043e: \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u044d\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c\u0438. \u041d\u0435 \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0439\u0442\u0435\u0441\u044c, \u043c\u044b \u0432\u0441\u0451 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438! \u041c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0432\u0441\u0435 best practices \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Tarantool Cartridge \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 ansible-\u0440\u043e\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0437\u043b\u043e\u0436\u0438\u0442 \u043f\u0430\u043a\u0435\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u044b, \u0441\u0442\u0430\u0440\u0442\u0430\u043d\u0435\u0442 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u044b, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442 \u0438\u0445 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041b\u0435\u0433\u043a\u043e \u0438 \u043d\u0435\u043f\u0440\u0438\u043d\u0443\u0436\u0434\u0435\u043d\u043d\u043e \u0434\u0435\u043f\u043b\u043e\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Tarantool Cartridge (\u0447\u0430\u0441\u0442\u044c 1) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u044b \u0443\u0436\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438 \u043f\u0440\u043e Tarantool Cartridge, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0438\u0445. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0435\u0433\u043e \u043d\u0438\u0447\u0435\u0433\u043e: \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u044d\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c\u0438. \u041d\u0435 \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0439\u0442\u0435\u0441\u044c, \u043c\u044b \u0432\u0441\u0451 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438! \u041c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0432\u0441\u0435 best practices \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Tarantool Cartridge \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 ansible-\u0440\u043e\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0437\u043b\u043e\u0436\u0438\u0442 \u043f\u0430\u043a\u0435\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u044b, \u0441\u0442\u0430\u0440\u0442\u0430\u043d\u0435\u0442 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u044b, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442 \u0438\u0445 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-05T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:01:32+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Einfach und m\u00fchelos Anwendungen mit Tarantool Cartridge bereitstellen (Teil 1) | ProHoster","description":"Wir haben bereits \u00fcber Tarantool Cartridge gesprochen, das die Entwicklung verteilter Anwendungen und deren Verpackung erm\u00f6glicht. Es fehlt nur noch eines: Lernen, diese Anwendungen zu deployen und zu verwalten. Keine Sorge, wir haben alles vorbereitet! Wir haben alle Best Practices f\u00fcr die Arbeit mit Tarantool Cartridge zusammengetragen und eine Ansible-Rolle verfasst, die das Paket auf den Servern verteilt, die Instanzen startet, sie in einem Cluster zusammenf\u00fchrt und konfiguriert.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041b\u0435\u0433\u043a\u043e \u0438 \u043d\u0435\u043f\u0440\u0438\u043d\u0443\u0436\u0434\u0435\u043d\u043d\u043e \u0434\u0435\u043f\u043b\u043e\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Tarantool Cartridge (\u0447\u0430\u0441\u0442\u044c 1) | ProHoster","og:description":"\u041c\u044b \u0443\u0436\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438 \u043f\u0440\u043e Tarantool Cartridge, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0438\u0445. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0435\u0433\u043e \u043d\u0438\u0447\u0435\u0433\u043e: \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u044d\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c\u0438. \u041d\u0435 \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0439\u0442\u0435\u0441\u044c, \u043c\u044b \u0432\u0441\u0451 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438! \u041c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0432\u0441\u0435 best practices \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Tarantool Cartridge \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 ansible-\u0440\u043e\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0437\u043b\u043e\u0436\u0438\u0442 \u043f\u0430\u043a\u0435\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u044b, \u0441\u0442\u0430\u0440\u0442\u0430\u043d\u0435\u0442 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u044b, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442 \u0438\u0445 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-12-05T21:00:00+00:00","article:modified_time":"2020-02-18T11:01:32+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"53611","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 08:06:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:22:49","updated":"2026-01-24 08:06:19"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/53611","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=53611"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/53611\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=53611"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=53611"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=53611"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}