{"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\/nl\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1","title":{"rendered":"Eenvoudig en moeiteloos applicaties implementeren op Tarantool Cartridge (deel 1)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Eenvoudig en moeiteloos applicaties implementeren op Tarantool Cartridge (deel 1)\" src=\"\/wp-content\/uploads\/2019\/12\/0493b6c8d60253352bc971b216e9b63e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>We hebben al gesproken over <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/465503\/\">Tarantool Cartridge<\/a><\/noindex>, dat het mogelijk maakt om gedistribueerde toepassingen te ontwikkelen en deze in te pakken. Er is nog maar \u00e9\u00e9n ding te doen: leren hoe deze toepassingen te implementeren en te beheren. Maak je geen zorgen, we hebben alles al geregeld! We hebben alle best practices voor het werken met Tarantool Cartridge verzameld en geschreven <noindex><a rel=\"nofollow\" href=\"https:\/\/galaxy.ansible.com\/tarantool\/cartridge\">ansible-rol<\/a><\/noindex>, die het pakket op de servers uitrolt, instanties opstart, ze in een cluster samenvoegt, autorisatie instelt, vshard bootstrap en automatische failover inschakelt, en de clusterconfiguratie patcht.<\/p>\n<p><\/p>\n<p>Interesse? Kom dan verder, we vertellen en laten alles zien.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"nachnem-s-primera\">Laten we beginnen met een voorbeeld<\/h1>\n<p><\/p>\n<p>We zullen slechts een deel van de functionaliteit van onze rol bekijken. Een volledige beschrijving van al zijn mogelijkheden en ingangsparameters vind je altijd in <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge#ansible-role-tarantool-cartridge\">de documentatie<\/a><\/noindex>. Maar beter \u00e9\u00e9n keer proberen dan honderd keer zien, laten we dus een kleine applicatie implementeren.<\/p>\n<p><\/p>\n<p>Tarantool Cartridge heeft <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> om een kleine Cartridge-applicatie te maken, die informatie over bankklanten en hun rekeningen opslaat, en een API biedt voor het beheren van gegevens via HTTP. Hiervoor worden in de applicatie twee mogelijke rollen beschreven: <code>api<\/code> en <code>opslag<\/code>, die aan instanties kunnen worden toegewezen.<\/p>\n<p><\/p>\n<p>De Cartridge zegt niets over hoe processen te starten; hij biedt alleen de mogelijkheid om al geconfigureerde instanties in te stellen. De gebruiker moet de rest zelf doen: configuratiebestanden uitrollen, services starten en de topologie instellen. Maar we gaan ons daar niet mee bezig houden, dat doet Ansible voor ons.<\/p>\n<p><\/p>\n<h3 id=\"ot-slov-k-delu\">Van woorden naar daden<\/h3>\n<p><\/p>\n<p>Laten we dus onze applicatie op twee virtuele machines implementeren en een simpele topologie instellen:<\/p>\n<p><\/p>\n<ul>\n<li>Replicaset <code>app-1<\/code> zal de rol realiseren <code>api<\/code>, die de rol omvat <code>vshard-router<\/code>. Hier zal er maar \u00e9\u00e9n instantie zijn.<\/li>\n<li>Replicaset <code>storage-1<\/code> realiseert de rol <code>opslag<\/code> (en tegelijkertijd <code>vshard-storage<\/code>), hier voegen we twee instanties toe van verschillende machines.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Eenvoudig en moeiteloos applicaties implementeren op Tarantool Cartridge (deel 1)\" src=\"\/wp-content\/uploads\/2019\/12\/62d20050e2d7a6358002ecd758222f1f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Voor het uitvoeren van het voorbeeld hebben we <noindex><a rel=\"nofollow\" href=\"https:\/\/www.vagrantup.com\/\">Vagrant<\/a><\/noindex> en <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ansible.com\">Ansible<\/a><\/noindex> (versies 2.8 of hoger).<\/p>\n<p><\/p>\n<p>De rol zelf bevindt zich in <noindex><a rel=\"nofollow\" href=\"https:\/\/galaxy.ansible.com\/docs\/\">Ansible Galaxy<\/a><\/noindex>. Dit is een opslagplaats waar je je ervaringen kunt delen en kant-en-klare rollen kunt gebruiken.<\/p>\n<p><\/p>\n<p>Laten we de repository met het voorbeeld klonen:<\/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>Laten we de virtuele machines opstarten:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ vagrant up<\/code><\/pre>\n<p><\/p>\n<p>We installeren de ansible-rol voor 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>We voeren de ge\u00efnstalleerde rol uit:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ ansible-playbook -i hosts.yml playbook.yml<\/code><\/pre>\n<p><\/p>\n<p>Wacht op de voltooiing van de playbook-uitvoering en ga naar <noindex><a rel=\"nofollow\" href=\"http:\/\/localhost:8181\/admin\/cluster\/dashboard\">http:\/\/localhost:8181\/admin\/cluster\/dashboard<\/a><\/noindex> en genieten van het resultaat:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Eenvoudig en moeiteloos applicaties implementeren op Tarantool Cartridge (deel 1)\" src=\"\/wp-content\/uploads\/2019\/12\/6563ddf2f2bfc85714f327c8d6b2d1c4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Gegevens kunnen worden ingevoerd. Cool, toch?<\/p>\n<p><\/p>\n<p>Laten we nu eens kijken hoe we hiermee kunnen werken en tegelijkertijd een andere replicaset aan de topologie kunnen toevoegen.<\/p>\n<p><\/p>\n<h3 id=\"nachinaem-razbiratsya\">Laten we beginnen met begrijpen<\/h3>\n<p><\/p>\n<p>Dus, wat is er eigenlijk gebeurd?<\/p>\n<p><\/p>\n<p>We hebben twee virtuele machines opgezet en een Ansible-playbook uitgevoerd dat onze cluster heeft geconfigureerd. Laten we eens kijken naar de inhoud van het bestand <code>playbook.yml<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\n- name: Deploy mijn Tarantool Cartridge app\n  hosts: all\n  become: true\n  become_user: root\n  tasks:\n  - name: Importeer Tarantool Cartridge rol\n    import_role:\n      name: tarantool.cartridge<\/code><\/pre>\n<p><\/p>\n<p>Hier gebeurt niets bijzonders, we starten de Ansible-rol die <code>tarantool.cartridge<\/code>.<\/p>\n<p><\/p>\n<p>Alles wat belangrijk is (namelijk, de clusterconfiguratie) bevindt zich in <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/intro_inventory.html\">inventaris<\/a><\/noindex>-bestand <code>hosts.yml<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\nall:\n  vars:\n    # algemene clustervariabelen\n    cartridge_app_name: getting-started-app\n    cartridge_package_path: .\\\/getting-started-app-1.0.0-0.rpm  # pad naar pakket\n\n    cartridge_cluster_cookie: app-default-cookie  # cluster cookie\n\n    # algemene ssh-opties\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  # INSTANCIEREN\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    # GROEP INSTANCIEREN OP MACHINES\n    host1:\n      vars:\n        # verbindingsopties eerste machine\n        ansible_host: 172.19.0.2\n        ansible_user: vagrant\n\n      hosts:  # instanties die op de eerste machine moeten worden gestart\n        storage-1:\n\n    host2:\n      vars:\n        # verbindingsopties tweede machine\n        ansible_host: 172.19.0.3\n        ansible_user: vagrant\n\n      hosts:  # instanties die op de tweede machine moeten worden gestart\n        app-1:\n        storage-1-replica:\n\n    # GROEP INSTANCIEREN OP REPLICASETS\n    replicaset_app_1:\n      vars:  # replicaset configuratie\n        replicaset_alias: app-1\n        failover_priority:\n          - app-1  # leider\n        roles:\n          - 'api'\n\n      hosts:  # replicaset instanties\n        app-1:\n\n    replicaset_storage_1:\n      vars:  # replicaset configuratie\n        replicaset_alias: storage-1\n        weight: 3\n        failover_priority:\n          - storage-1  # leider\n          - storage-1-replica\n        roles:\n          - 'storage'\n\n      hosts:   # replicaset instanties\n        storage-1:\n        storage-1-replica:<\/code><\/pre>\n<p><\/p>\n<p>Alles wat we hoeven te leren is hoe we instanties en replicsets kunnen beheren door de inhoud van dit bestand te wijzigen. We zullen er binnenkort nieuwe secties aan toevoegen. Om niet in de war te raken waar ze moeten worden toegevoegd, kun je een kijkje nemen in de finale versie van dit bestand, <code>hosts.updated.yml<\/code>, die zich in de repository met het voorbeeld bevindt.<\/p>\n<p><\/p>\n<h3 id=\"upravlenie-instansami\">Beheer van instanties<\/h3>\n<p><\/p>\n<p>In termen van Ansible is elke instantie een host (niet te verwarren met een fysieke server), d.w.z. een infrastructuurknoop waar Ansible de controle over heeft. Voor elke host kunnen we verbindingsparameters opgeven (zoals <code>ansible_host<\/code> en <code>ansible_user<\/code>), en de configuratie van de instantie. Beschrijving van instanties is te vinden in de sectie <code>hosts<\/code>.<\/p>\n<p><\/p>\n<p>Laten we de configuratie van de instantie bekijken <code>storage-1<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">all:\n  vars:\n    ...\n\n  # INSTANCES\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 de variabele <code>-bestand, deze gegevens naar de server verzendt<\/code> we hebben de parameters van de instantie opgegeven \u2014 <code>advertise URI<\/code> en <code>HTTP poort<\/code>.<br \/>\nHieronder staan de parameters van de instanties <code>app-1<\/code> en <code>storage-1-replica<\/code>.<\/p>\n<p><\/p>\n<p>We moeten Ansible de verbindingsparameters voor elke instantie doorgeven. Het lijkt logisch om instanties te groeperen op basis van virtuele machines. Daarom zijn de instanties in groepen samengevoegd <code>host1<\/code> en <code>host2<\/code>, en in elke groep in de sectie <code>vars<\/code> zijn de waarden opgegeven <code>ansible_host<\/code> en <code>ansible_user<\/code> voor \u00e9\u00e9n virtuele machine. En in de sectie <code>hosts<\/code> \u2014 hosts (dat zijn ook instanties), die tot deze groep behoren:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">all:\n  vars:\n    ...\n  hosts:\n    ...\n  children:\n    # GROEP INSTANTIES OP BASIS VAN MACHINES\n    host1:\n      vars:\n        # verbindingsopties voor de eerste machine\n        ansible_host: 172.19.0.2\n        ansible_user: vagrant\n       hosts:  # instanties die op de eerste machine moeten worden gestart\n        storage-1:\n\n     host2:\n      vars:\n        # verbindingsopties voor de tweede machine\n        ansible_host: 172.19.0.3\n        ansible_user: vagrant\n       hosts:  # instanties die op de tweede machine moeten worden gestart\n        app-1:\n        storage-1-replica:<\/code><\/pre>\n<p><\/p>\n<p>We beginnen met het aanpassen <code>hosts.yml<\/code>. Laten we nog twee instanties toevoegen, <code>storage-2-replica<\/code> op de eerste virtuele machine en <code>storage-2<\/code> op de tweede:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">all:\n  vars:\n    ...\n\n  # INSTANCES\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    # GROEP INSTANTIES OP BASIS VAN MACHINES\n    host1:\n      vars:\n        ...\n      hosts:  # instanties die op de eerste machine moeten worden gestart\n        storage-1:\n        storage-2-replica:  # &lt;==\n\n    host2:\n      vars:\n        ...\n      hosts:  # instanties die op de tweede machine moeten worden gestart\n        app-1:\n        storage-1-replica:\n        storage-2:  # &lt;==\n  ...<\/code><\/pre>\n<p><\/p>\n<p>We starten de 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>Let op de optie <code>--limit<\/code>. Aangezien elke instantie van het cluster een host is in de termen van Ansible, kunnen we expliciet aangeven welke instanties moeten worden geconfigureerd tijdens het uitvoeren van de playbook.<\/p>\n<p><\/p>\n<p>We gaan weer naar de Web UI <noindex><a rel=\"nofollow\" href=\"http:\/\/localhost:8181\/admin\/cluster\/dashboard\">http:\/\/localhost:8181\/admin\/cluster\/dashboard<\/a><\/noindex> en zien onze nieuwe instanties:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Eenvoudig en moeiteloos applicaties implementeren op Tarantool Cartridge (deel 1)\" src=\"\/wp-content\/uploads\/2019\/12\/6181c359e4e5ec4adaee8737600a27e4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Laten we niet stoppen bij wat we hebben bereikt en onze beheertopologie verbeteren.<\/p>\n<p><\/p>\n<h3 id=\"upravlenie-topologiey\">Beheer van de topologie<\/h3>\n<p><\/p>\n<p>Laten we onze nieuwe instanties samenvoegen in een replicaset <code>storage-2<\/code>. Laten we een nieuwe groep toevoegen <code>replicaset_storage_2<\/code> en de parameters van de replicaset beschrijven in zijn variabelen, vergelijkbaar met <code>replicaset_storage_1<\/code>. In de sectie <code>hosts<\/code> laten we aangeven welke instanties tot deze groep behoren (dat wil zeggen onze replicaset):<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\nall:\n  vars:\n    ...\n  hosts:\n    ...\n  children:\n    ...\n    # GROEP INSTANCI\u00cbS OP REPLICASETTEN\n    ...\n    replicaset_storage_2:  # &lt;=\n      vars:  # replicaset configuratie\n        replicaset_alias: opslag-2\n        weight: 2\n        failover_priority:\n          - opslag-2\n          - opslag-2-replica\n        roles:\n          - &#039;opslag&#039;\n\n      hosts:   # replicaset instanties\n        opslag-2:\n        opslag-2-replica:<\/code><\/pre>\n<p><\/p>\n<p>We starten het playbook opnieuw:<\/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>In de parameter <code>--limit<\/code> hebben we deze keer de groepsnaam doorgegeven die overeenkomt met onze replicaset.<\/p>\n<p><\/p>\n<p>Laten we de optie bekijken <code>tags<\/code>.<\/p>\n<p><\/p>\n<p>Onze rol voert verschillende taken uit die zijn gemarkeerd met de volgende tags:<\/p>\n<p><\/p>\n<ul>\n<li><code>cartridge-instances<\/code>: beheer van instanties (configuratie, verbinding met lidmaatschap);<\/li>\n<li><code>cartridge-replicasets<\/code>: beheer van de topologie (beheer van replicasetten en onomkeerbaar verwijderen (expel) van instanties uit de cluster);<\/li>\n<li><code>cartridge-config<\/code>: beheer van overige clusterparameters (vshard bootstrapping, automatische failover modus, autorisatieparameters en applicatieconfiguratie).<\/li>\n<\/ul>\n<p><\/p>\n<p>We kunnen expliciet aangeven welk deel van het werk we willen doen, dan zal de rol de uitvoering van de overige taken overslaan. In ons geval willen we alleen met de topologie werken, dus hebben we aangegeven <code>cartridge-replicasets<\/code>.<\/p>\n<p><\/p>\n<p>Laten we het resultaat van onze inspanningen evalueren. We vinden de nieuwe replicaset op <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=\"Eenvoudig en moeiteloos applicaties implementeren op Tarantool Cartridge (deel 1)\" src=\"\/wp-content\/uploads\/2019\/12\/20da99480df519b1ee239cd81f67b786.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hoera!<\/p>\n<p><\/p>\n<p>Experimenteer met het wijzigen van de configuratie van instanties en replicasets en kijk hoe de topologie van de cluster verandert. U kunt verschillende operationele scenario's uitproberen, zoals <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/playbooks_delegation.html#rolling-update-batch-size\">rolling update<\/a><\/noindex> of het verhogen van <code>memtx_memory<\/code>. De rol zal proberen dit zonder het herstarten van de instantie te doen, om de mogelijke downtime van uw applicatie te minimaliseren.<\/p>\n<p><\/p>\n<p>Vergeet niet om <code>vagrant halt<\/code>, uit te voeren om de virtuele machines te stoppen wanneer u klaar bent met ze te werken.<\/p>\n<p><\/p>\n<h1 id=\"a-chto-pod-kapotom\">En wat gebeurt er achter de schermen?<\/h1>\n<p><\/p>\n<p>Hier zal ik uitgebreid ingaan op wat er achter de schermen van de ansible-rol gebeurde tijdens onze experimenten.<\/p>\n<p><\/p>\n<p>Laten we de stappen van de implementatie van de Cartridge-applicatie bekijken.<\/p>\n<p><\/p>\n<h3 id=\"ustanovka-paketa-i-start-instansov\">Het installeren van het pakket en het starten van instanties<\/h3>\n<p><\/p>\n<p>Eerst moet het pakket op de server worden bezorgd en ge\u00efnstalleerd. Momenteel kan de rol werken met RPM- en DEB-pakketten.<\/p>\n<p><\/p>\n<p>Vervolgens starten we de instanties. Dit is heel eenvoudig: elke instantie is een aparte <code>systemd<\/code>-dienst. Ik zal het uitleggen met een voorbeeld:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ systemctl start myapp@storage-1<\/code><\/pre>\n<p><\/p>\n<p>Deze opdracht start de instantie. <code>storage-1<\/code> applicatie <code>myapp<\/code>De gestart instantie zal zijn <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tarantool.io\/ru\/doc\/2.2\/book\/cartridge\/cartridge_dev\/#configuring-instances\">configuratie<\/a><\/noindex> in <code>\/etc\/tarantool\/conf.d\/<\/code>. De logboeken van de instantie kunnen worden bekeken met behulp van <code>journald<\/code>.<\/p>\n<p><\/p>\n<p>De Unit-bestand <code>\/etc\/systemd\/system\/myapp@.sevice<\/code> voor de systemd-dienst wordt samen met het pakket geleverd.<\/p>\n<p><\/p>\n<p>Ansible heeft ingebouwde modules voor het installeren van pakketten en het beheren van systemd-services, hier hebben we niets nieuws uitgevonden.<\/p>\n<p><\/p>\n<h3 id=\"nastroyka-topologii-klastera\">Configuratie van de cluster-topologie<\/h3>\n<p><\/p>\n<p>En hier begint het interessantste gedeelte. U moet toegeven dat het vreemd zou zijn om een speciale Ansible-rol te maken voor het installeren van pakketten en het starten <code>systemd<\/code>-services.<\/p>\n<p><\/p>\n<p>U kunt de cluster handmatig configureren:<\/p>\n<p><\/p>\n<ul>\n<li>Eerste optie: open de Web UI en druk op de knoppen. Voor een eenmalige opstart van enkele instanties is dit heel geschikt.<\/li>\n<li>Tweede optie: u kunt gebruikmaken van de GraphQL API. Hier kunt u iets automatiseren, bijvoorbeeld een script in Python schrijven.<\/li>\n<li>Derde optie (voor de sterkeren van geest): ga naar de server, maak verbinding met een van de instanties met behulp van <code>tarantoolctl connect<\/code> en voer alle benodigde handelingen uit met de Lua-module <code>cartridge<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>De belangrijkste taak van onze uitvinding is om dit, het moeilijkste deel van het werk, voor u te doen.<\/p>\n<p><\/p>\n<p>Ansible stelt u in staat om uw eigen module te schrijven en deze in een rol te gebruiken. Onze rol maakt gebruik van dergelijke modules voor het beheren van verschillende componenten van de cluster.<\/p>\n<p><\/p>\n<p>Hoe werkt dit? U beschrijft de gewenste toestand van de cluster in een declaratief configuratiebestand, en de rol geeft elke module zijn configuratiesectie door. De module krijgt de huidige toestand van de cluster en vergelijkt deze met wat binnenkomt. Vervolgens wordt via de socket van een van de instanties een code gestart die de cluster naar de gewenste toestand brengt.<\/p>\n<p><\/p>\n<h1 id=\"itogi\">Conclusies<\/h1>\n<p><\/p>\n<p>Vandaag hebben we laten zien hoe u uw applicatie kunt implementeren op Tarantool Cartridge en een eenvoudige topologie kunt configureren. Hiervoor hebben we Ansible gebruikt - een krachtig hulpmiddel dat zich onderscheidt door gebruiksgemak en dat in staat is om tegelijkertijd veel knooppunten in de infrastructuur in te stellen (in ons geval de clusterinstanties).<\/p>\n<p><\/p>\n<p>Hierboven hebben we een van de vele manieren verkend om de configuratie van de cluster met Ansible te beschrijven. Zodra u begrijpt dat u verder kunt, bestudeer dan <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/playbooks_best_practices.html\">best practices<\/a><\/noindex> voor het schrijven van playbooks. Het kan handiger voor u zijn om de topologie te beheren met behulp van <code>group_vars<\/code> en <code>host_vars<\/code>.<\/p>\n<p><\/p>\n<p>Heel binnenkort zullen we uitleggen hoe we instanties onomkeerbaar uit de topologie verwijderen (expel), vshard opstarten, de automatische failovermodus beheren, autorisatie instellen en de clusterconfiguratie patchen. Tot die tijd kunt u zelf verder leren. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge#ansible-role-tarantool-cartridge\">documentatie<\/a><\/noindex> en experimenteren met het aanpassen van de clusterparameters.<\/p>\n<p><\/p>\n<p>Als iets niet werkt, laat het ons dan zeker weten <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge\/issues\/new\">meld het<\/a><\/noindex> ons het probleem. We lossen het snel op!<\/p>\n<p>Bron: <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.3 - 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\/nl\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\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\/nl\/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\udd47Eenvoudig en vrijblijvend applicaties implementeren op Tarantool Cartridge (deel 1) | ProHoster","description":"Dat hebben we al gedaan.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/53611","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=53611"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/53611\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=53611"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=53611"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=53611"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}