{"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":"Anwendungen einfach und unkompliziert auf Tarantool Cartridge bereitstellen (Teil 1)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Anwendungen einfach und unkompliziert auf Tarantool Cartridge bereitstellen (Teil 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>berichtet, das die Entwicklung verteilter Anwendungen erm\u00f6glicht und deren Verpackung. Es bleibt nur noch wenig zu lernen: diese Anwendungen bereitzustellen und zu verwalten. Keine Sorge, wir haben alles vorgesehen! Wir haben alle Best Practices zur Arbeit mit Tarantool Cartridge gesammelt und geschrieben <noindex><a rel=\"nofollow\" href=\"https:\/\/galaxy.ansible.com\/tarantool\/cartridge\">ansible-Rolle<\/a><\/noindex>, die das Paket auf Servern verteilt, Instanzen startet, sie in einem Cluster zusammenf\u00fchrt, die Autorisierung einrichtet, vshard bootstrapped, den automatischen Failover aktiviert und die Cluster-Konfiguration patched.<\/p>\n<p><\/p>\n<p>Interessiert? Dann kommen Sie bitte unter den Cut, wir werden alles erz\u00e4hlen und zeigen.<\/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 Funktionalit\u00e4t unserer Rolle betrachten. Eine vollst\u00e4ndige Beschreibung aller M\u00f6glichkeiten und Eingabeparameter finden Sie jederzeit 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 hat <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> die Erstellung einer kleinen Cartridge-Anwendung, die Informationen \u00fcber Bankkunden und deren Konten speichert und ein API zur Datenverwaltung \u00fcber HTTP bereitstellt. Dazu werden im Programm zwei m\u00f6gliche Rollen beschrieben: <code>API<\/code> und <code>storage<\/code>, die Instanzen zugewiesen werden k\u00f6nnen.<\/p>\n<p><\/p>\n<p>Die Cartridge sagt nichts dar\u00fcber aus, wie Prozesse gestartet werden; sie bietet lediglich die M\u00f6glichkeit, bereits gestartete Instanzen zu konfigurieren. Den Rest muss der Benutzer selbst erledigen: Konfigurationsdateien verteilen, Dienste starten und die Topologie einrichten. Aber damit werden wir uns nicht besch\u00e4ftigen, das wird Ansible f\u00fcr uns \u00fcbernehmen.<\/p>\n<p><\/p>\n<h3 id=\"ot-slov-k-delu\">Von den Worten zur Tat<\/h3>\n<p><\/p>\n<p>Also, lassen Sie uns unsere Anwendung auf zwei virtuellen Maschinen bereitstellen und eine einfache Topologie einrichten:<\/p>\n<p><\/p>\n<ul>\n<li>Replikatsatz <code>app-1<\/code> wird die Rolle implementieren <code>API<\/code>, die die Rolle <code>vshard-router<\/code>. Hier wird es nur eine Instanz geben.<\/li>\n<li>Replikatsatz <code>storage-1<\/code> implementiert die Rolle <code>storage<\/code> (und gleichzeitig <code>vshard-storage<\/code>), wir f\u00fcgen zwei Instanzen von verschiedenen Maschinen hinzu.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Anwendungen einfach und unkompliziert auf Tarantool Cartridge bereitstellen (Teil 1)\" src=\"\/wp-content\/uploads\/2019\/12\/62d20050e2d7a6358002ecd758222f1f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Um das Beispiel zu starten, 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> (Version 2.8 oder h\u00f6her).<\/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>. Das ist ein Repository, das es erm\u00f6glicht, eigene Entwicklungen zu teilen und fertige Rollen zu verwenden.<\/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>Heben wir die virtuellen Maschinen an:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ vagrant up<\/code><\/pre>\n<p><\/p>\n<p>Installieren wir 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>Starten wir die installierte Rolle:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ ansible-playbook -i hosts.yml playbook.yml<\/code><\/pre>\n<p><\/p>\n<p>Warten wir, bis die Ausf\u00fchrung des Playbooks abgeschlossen ist, und gehen wir weiter 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=\"Anwendungen einfach und unkompliziert auf Tarantool Cartridge bereitstellen (Teil 1)\" src=\"\/wp-content\/uploads\/2019\/12\/6563ddf2f2bfc85714f327c8d6b2d1c4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Daten k\u00f6nnen eingespeist werden. Cool, oder?<\/p>\n<p><\/p>\n<p>Und jetzt lassen Sie uns herausfinden, wie man damit arbeitet, und gleichzeitig f\u00fcgen wir noch ein weiteres Replika-Set in die Topologie hinzu.<\/p>\n<p><\/p>\n<h3 id=\"nachinaem-razbiratsya\">Wir beginnen mit dem Verst\u00e4ndnis<\/h3>\n<p><\/p>\n<p>Also, was ist passiert?<\/p>\n<p><\/p>\n<p>Wir haben zwei virtuelle Maschinen hochgefahren und ein Ansible-Playbook ausgef\u00fchrt, das unseren Cluster eingerichtet hat. Lassen Sie uns den Inhalt der Datei ansehen <code>playbook.yml<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\n- name: Deploy meine Tarantool Cartridge-App\n  hosts: all\n  become: true\n  become_user: root\n  tasks:\n  - name: Tarantool Cartridge-Rolle importieren\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 hei\u00dft <code>tarantool.cartridge<\/code>.<\/p>\n<p><\/p>\n<p>Alles Wichtige (n\u00e4mlich die Konfiguration des Clusters) befindet sich in <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  # Paketpfad\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    # INSTANZEN NACH MASCHINEN GRUPPIEREN\n    host1:\n      vars:\n        # Optionen zur Verbindung der 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 zur Verbindung der 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    # INSTANZEN NACH REPLIKA-S\u00c4TZEN GRUPPIEREN\n    replicaset_app_1:\n      vars:  # Konfiguration des Replika-Satzes\n        replicaset_alias: app-1\n        failover_priority:\n          - app-1  # Anf\u00fchrer\n        roles:\n          - 'api'\n\n      hosts:  # Instanzen des Replika-Satzes\n        app-1:\n\n    replicaset_storage_1:\n      vars:  # Konfiguration des Replika-Satzes\n        replicaset_alias: storage-1\n        weight: 3\n        failover_priority:\n          - storage-1  # Anf\u00fchrer\n          - storage-1-replica\n        roles:\n          - 'storage'\n\n      hosts:   # Instanzen des Replika-Satzes\n        storage-1:\n        storage-1-replica:<\/code><\/pre>\n<p><\/p>\n<p>Alles, was wir brauchen, ist, zu lernen, wie man Instanzen und Replika-S\u00e4tze verwaltet, indem wir den Inhalt dieser Datei \u00e4ndern. Danach werden wir neue Abschnitte hinzuf\u00fcgen. Um nicht durcheinander zu kommen, wo sie hinzugef\u00fcgt werden sollen, k\u00f6nnen Sie einen Blick in die endg\u00fcltige Version dieser Datei werfen, <code>hosts.updated.yml<\/code>, die sich im Repository mit dem Beispiel befindet.<\/p>\n<p><\/p>\n<h3 id=\"upravlenie-instansami\">Verwaltung der Instanzen<\/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 Knoten der Infrastruktur, den Ansible verwalten wird. F\u00fcr jeden Host k\u00f6nnen wir Verbindungsparameter angeben (wie zum Beispiel <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> haben wir die Parameter der Instanz angegeben \u2014 <code>advertise URI<\/code> und <code>HTTP-Port<\/code>.<br \/>\nIm Folgenden sind die Parameter der Instanzen aufgef\u00fchrt <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 ist sinnvoll, die Instanzen in Gruppen nach virtuellen Maschinen zu gliedern. Dazu 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 angegeben <code>ansible_host<\/code> und <code>ansible_user<\/code> f\u00fcr eine virtuelle Maschine. Und im Abschnitt <code>hosts<\/code> \u2014 die Hosts (d.h. die Instanzen), 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        # Verbindungsoptionen f\u00fcr die erste 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        # Verbindungsoptionen f\u00fcr die zweite 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>Wir beginnen mit den \u00c4nderungen <code>hosts.yml<\/code>. Wir f\u00fcgen zwei weitere 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: &#039;172.19.0.3:3303&#039;\n        http_port: 8184\n\n    storage-2-replica:  # &lt;==\n      config:\n        advertise_uri: &#039;172.19.0.2:3302&#039;\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 starten das Ansible-Playbook:<\/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>Beachten Sie die Option <code>--limit<\/code>. Da jede Instanz des Clusters in den Begriffen von Ansible ein Host ist, k\u00f6nnen wir explizit angeben, welche Instanzen bei der Ausf\u00fchrung des Playbooks konfiguriert werden sollen.<\/p>\n<p><\/p>\n<p>Wir gehen erneut in die Web-Benutzeroberfl\u00e4che <noindex><a rel=\"nofollow\" href=\"http:\/\/localhost:8181\/admin\/cluster\/dashboard\">http:\/\/localhost:8181\/admin\/cluster\/dashboard<\/a><\/noindex> und sehen unsere neuen Instanzen:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Anwendungen einfach und unkompliziert auf Tarantool Cartridge bereitstellen (Teil 1)\" src=\"\/wp-content\/uploads\/2019\/12\/6181c359e4e5ec4adaee8737600a27e4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lassen Sie uns nicht auf den lorbeeren ausruhen, sondern das Management der Topologie meistern.<\/p>\n<p><\/p>\n<h3 id=\"upravlenie-topologiey\">Management der Topologie<\/h3>\n<p><\/p>\n<p>Wir fassen unsere neuen Instanzen in einem Replikat-Set zusammen <code>storage-2<\/code>. Wir f\u00fcgen eine neue Gruppe hinzu <code>replicaset_storage_2<\/code> und beschreiben in ihren Variablen die Parameter des Replikats analog zu <code>replicaset_storage_1<\/code>. Im Abschnitt <code>hosts<\/code> Wir geben an, welche Instanzen in diese Gruppe geh\u00f6ren (also unser Replikat-Set):<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\nall:\n  vars:\n    ...\n  hosts:\n    ...\n  children:\n    ...\n    # INSTANZEN NACH REPLIKAT-SETS GRUPPIEREN\n    ...\n    replicaset_storage_2:  # &lt;==\n      vars:  # Replikat-Konfiguration\n        replicaset_alias: storage-2\n        weight: 2\n        failover_priority:\n          - storage-2\n          - storage-2-replika\n        roles:\n          - 'storage'\n\n      hosts:   # Replikat-Instanzen\n        storage-2:\n        storage-2-replika:<\/code><\/pre>\n<p><\/p>\n<p>Wir starten das Playbook erneut:<\/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 Namen der Gruppe \u00fcbergeben, die unserem Replikat-Set entspricht.<\/p>\n<p><\/p>\n<p>Betrachten wir die Option <code>tags<\/code>.<\/p>\n<p><\/p>\n<p>Unsere Rolle f\u00fchrt schrittweise 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, Verbindung zur Mitgliedschaft);<\/li>\n<li><code>cartridge-replicasets<\/code>: Verwaltung der Topologie (Verwaltung von Replikat-Sets und unwiderrufliches L\u00f6schen (expel) von Instanzen aus dem Cluster);<\/li>\n<li><code>cartridge-config<\/code>: Verwaltung der \u00fcbrigen Clusterparameter (Vshard-Initialisierung, automatischer Failover-Modus, Authentifizierungsparameter und Anwendungs-Konfiguration).<\/li>\n<\/ul>\n<p><\/p>\n<p>Wir k\u00f6nnen ausdr\u00fccklich angeben, welchen Teil der Arbeit wir erledigen m\u00f6chten, dann \u00fcberspringt die Rolle die Ausf\u00fchrung der anderen Aufgaben. 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>Lasst uns das Ergebnis unserer Bem\u00fchungen bewerten. Wir finden das neue Replikat-Set 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=\"Anwendungen einfach und unkompliziert auf Tarantool Cartridge bereitstellen (Teil 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 der Instanzen und Replikat-Sets und sehen Sie, wie sich die Topologie des Clusters \u00e4ndert. Sie k\u00f6nnen verschiedene Betriebsszenarien ausprobieren, 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 eine Erh\u00f6hung von <code>memtx_memory<\/code>. Die Rolle wird versuchen, dies ohne einen Neustart der Instanz zu tun, um die m\u00f6gliche Ausfallzeit Ihrer Anwendung zu minimieren.<\/p>\n<p><\/p>\n<p>Vergessen Sie nicht, <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\">Was steckt darunter?<\/h1>\n<p><\/p>\n<p>Hier erkl\u00e4re ich genauer, was w\u00e4hrend unserer Experimente unter der Haube der Ansible-Rolle geschah.<\/p>\n<p><\/p>\n<p>Betrachten wir die Schritte zur Bereitstellung einer 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 muss das Paket auf den Server geliefert und installiert werden. Die Rolle kann jetzt mit RPM- und DEB-Paketen arbeiten.<\/p>\n<p><\/p>\n<p>Dann starten wir die Instanzen. Hier ist alles ganz einfach: jede Instanz ist ein eigener <code>systemd<\/code>-Dienst. 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\">Konfiguration<\/a><\/noindex> in <code>\/etc\/tarantool\/conf.d\/<\/code>. Die Instanzprotokolle k\u00f6nnen mit Hilfe von <code>journald<\/code>.<\/p>\n<p><\/p>\n<p>Unit-Datei <code>\/etc\/systemd\/system\/myapp@.sevice<\/code> f\u00fcr den systemd-Dienst werden zusammen mit dem Paket bereitgestellt.<\/p>\n<p><\/p>\n<p>Ansible verf\u00fcgt \u00fcber integrierte Module zur Installation von Paketen und zur Verwaltung von systemd-Diensten, wir haben hier 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 wirklich Interessante. Es w\u00e4re doch seltsam, sich mit einer speziellen Ansible-Rolle f\u00fcr die Installation von Paketen und das Starten <code>systemd<\/code>-Dienste.<\/p>\n<p><\/p>\n<p>Den Cluster kann man manuell einrichten:<\/p>\n<p><\/p>\n<ul>\n<li>Erste M\u00f6glichkeit: Wir \u00f6ffnen das Web-UI und dr\u00fccken die Tasten. F\u00fcr einen einmaligen Start mehrerer Instanzen ist das durchaus geeignet.<\/li>\n<li>Zweite M\u00f6glichkeit: Man kann die GraphQl API nutzen. Hier kann man etwas automatisieren, zum Beispiel ein Skript in Python schreiben.<\/li>\n<li>Dritte M\u00f6glichkeit (f\u00fcr die Mutigen): Wir gehen auf den Server, verbinden uns mit einer der Instanzen mithilfe von <code>tarantoolctl connect<\/code> und f\u00fchren alle notwendigen Manipulationen mit dem Lua-Modul <code>cartridge<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>Die Hauptaufgabe unserer Erfindung besteht darin, diesen, den schwierigsten Teil der Arbeit, f\u00fcr Sie zu erledigen.<\/p>\n<p><\/p>\n<p>Ansible erlaubt es, ein eigenes Modul zu schreiben und in der Rolle zu verwenden. Unsere Rolle verwendet solche Module zur Verwaltung verschiedener Komponenten des Clusters.<\/p>\n<p><\/p>\n<p>Wie funktioniert das? Sie beschreiben den gew\u00fcnschten Zustand des Clusters in einem deklarativen Config und die Rolle \u00fcbergibt jedem Modul seinen Konfigurationsabschnitt als Eingabe. Das Modul erh\u00e4lt den aktuellen Zustand des Clusters und vergleicht ihn mit dem, was eingegangen 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 erkl\u00e4rt und gezeigt, wie man Ihre Anwendung auf Tarantool Cartridge bereitstellt und eine einfache Topologie einrichtet. Dazu haben wir Ansible verwendet \u2013 ein leistungsstarkes Werkzeug, das sich durch Benutzerfreundlichkeit auszeichnet und es erm\u00f6glicht, gleichzeitig viele Knoten der Infrastruktur (in unserem Fall die Instanzen des Clusters) zu konfigurieren.<\/p>\n<p><\/p>\n<p>Wir haben uns oben mit einer der vielen M\u00f6glichkeiten zur Beschreibung der Cluster-Konfiguration mit Ansible besch\u00e4ftigt. Sobald Sie bereit sind, weiterzugehen, schauen Sie sich die <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/playbooks_best_practices.html\">best practices<\/a><\/noindex> zum Schreiben von Playbooks an. Es k\u00f6nnte einfacher sein, die Topologie mit Hilfe von <code>group_vars<\/code> und <code>host_vars<\/code>.<\/p>\n<p><\/p>\n<p>In K\u00fcrze werden wir Ihnen erkl\u00e4ren, wie Sie Instanzen dauerhaft aus der Topologie entfernen (expel), vshard bootstrappen, den automatischen Failover-Modus verwalten, die Autorisierung einrichten und die Cluster-Konfiguration patchen k\u00f6nnen. Bis dahin k\u00f6nnen Sie eigenst\u00e4ndig <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge#ansible-role-tarantool-cartridge\">Dokumentation<\/a><\/noindex> mit der \u00c4nderung der Clusterparameter experimentieren.<\/p>\n<p><\/p>\n<p>Wenn etwas nicht funktioniert, informieren Sie bitte <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge\/issues\/new\">uns \u00fcber das Problem. Wir werden alles schnell l\u00f6sen!<\/a><\/noindex> Was tun, wenn die Newsletter bereits im \u201eSpam\u201c gelandet sind: 5 praktische Schritte<\/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 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u044b \u0443\u0436\u0435.\" \/>\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) 5.0.1.1\" \/>\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.\" \/>\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 auf Tarantool Cartridge bereitstellen (Teil 1) | ProHoster","description":"Wir schon.","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.","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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"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}]}}