{"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\/fr\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1","title":{"rendered":"D\u00e9ployer des applications sur Tarantool Cartridge de mani\u00e8re simple et conviviale (partie 1)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"D\u00e9ployer des applications sur Tarantool Cartridge de mani\u00e8re simple et conviviale (partie 1)\" src=\"\/wp-content\/uploads\/2019\/12\/0493b6c8d60253352bc971b216e9b63e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous avons d\u00e9j\u00e0 parl\u00e9 de <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/465503\/\">Tarantool Cartridge<\/a><\/noindex>, qui permet de d\u00e9velopper des applications distribu\u00e9es et de les empaqueter. Il ne reste plus qu'\u00e0 apprendre \u00e0 d\u00e9ployer ces applications et \u00e0 les g\u00e9rer. Ne vous inqui\u00e9tez pas, nous avons tout pr\u00e9vu ! Nous avons rassembl\u00e9 toutes les meilleures pratiques pour travailler avec Tarantool Cartridge et avons \u00e9crit <noindex><a rel=\"nofollow\" href=\"https:\/\/galaxy.ansible.com\/tarantool\/cartridge\">un r\u00f4le ansible<\/a><\/noindex>, qui d\u00e9ploiera le paquet sur les serveurs, lancera les instances, les regroupera en cluster, configurera l'autorisation, initialisera vshard, activera le basculement automatique et mettra \u00e0 jour la configuration du cluster.<\/p>\n<p><\/p>\n<p>Int\u00e9ress\u00e9 ? Alors suivez-nous, nous vous raconterons et montrerons tout.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"nachnem-s-primera\">Commen\u00e7ons par un exemple<\/h1>\n<p><\/p>\n<p>Nous allons examiner seulement une partie des fonctionnalit\u00e9s de notre r\u00f4le. Vous pouvez toujours trouver une description compl\u00e8te de toutes ses capacit\u00e9s et param\u00e8tres d'entr\u00e9e dans <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge#ansible-role-tarantool-cartridge\">documentation<\/a><\/noindex>. Mais mieux vaut essayer une fois que de voir cent fois, alors d\u00e9ployons une petite application.<\/p>\n<p><\/p>\n<p>Tarantool Cartridge offre <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/cartridge-cli\/tree\/master\/examples\/getting-started-app#application-example-based-on-tarantool-cartridge\">tutoriel<\/a><\/noindex> la cr\u00e9ation d'une petite application Cartridge qui stocke des informations sur les clients d'une banque et leurs comptes, tout en proposant une API pour g\u00e9rer les donn\u00e9es via HTTP. Pour ce faire, l'application d\u00e9crit deux r\u00f4les possibles : <code>api<\/code> et <code>storage<\/code>, qui peuvent \u00eatre attribu\u00e9s aux instances.<\/p>\n<p><\/p>\n<p>Le Cartridge lui-m\u00eame ne dit rien sur la fa\u00e7on de lancer les processus, il offre seulement la possibilit\u00e9 de configurer les instances d\u00e9j\u00e0 lanc\u00e9es. Le reste doit \u00eatre fait par l'utilisateur : placer les fichiers de configuration, lancer les services et configurer la topologie. Mais nous n'allons pas nous occuper de tout cela, Ansible s'en chargera pour nous.<\/p>\n<p><\/p>\n<h3 id=\"ot-slov-k-delu\">Passons aux actes<\/h3>\n<p><\/p>\n<p>Alors, d\u00e9ployons notre application sur deux machines virtuelles et configurons une topologie simple :<\/p>\n<p><\/p>\n<ul>\n<li>Replica set <code>app-1<\/code> mettra en \u0153uvre le r\u00f4le <code>api<\/code>, qui inclut le r\u00f4le <code>vshard-router<\/code>. Il n'y aura qu'une seule instance ici.<\/li>\n<li>Replica set <code>storage-1<\/code> met en \u0153uvre le r\u00f4le <code>storage<\/code> (et en m\u00eame temps <code>vshard-storage<\/code>), nous ajouterons deux instances provenant de machines diff\u00e9rentes.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"D\u00e9ployer des applications sur Tarantool Cartridge de mani\u00e8re simple et conviviale (partie 1)\" src=\"\/wp-content\/uploads\/2019\/12\/62d20050e2d7a6358002ecd758222f1f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pour lancer l'exemple, nous aurons besoin de <noindex><a rel=\"nofollow\" href=\"https:\/\/www.vagrantup.com\/\">Vagrant<\/a><\/noindex> et <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ansible.com\">Ansible<\/a><\/noindex> (version 2.8 ou sup\u00e9rieure).<\/p>\n<p><\/p>\n<p>Le r\u00f4le se trouve sur <noindex><a rel=\"nofollow\" href=\"https:\/\/galaxy.ansible.com\/docs\/\">Ansible Galaxy<\/a><\/noindex>. C'est un stockage qui permet de partager ses r\u00e9alisations et d'utiliser des r\u00f4les pr\u00eats \u00e0 l'emploi.<\/p>\n<p><\/p>\n<p>Clonons le d\u00e9p\u00f4t avec l'exemple :<\/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>Lan\u00e7ons les machines virtuelles :<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ vagrant up<\/code><\/pre>\n<p><\/p>\n<p>Installons le r\u00f4le ansible de 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>Lan\u00e7ons le r\u00f4le install\u00e9 :<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ ansible-playbook -i hosts.yml playbook.yml<\/code><\/pre>\n<p><\/p>\n<p>En attendant que l'ex\u00e9cution du playbook soit termin\u00e9e, passons \u00e0 <noindex><a rel=\"nofollow\" href=\"http:\/\/localhost:8181\/admin\/cluster\/dashboard\">http:\/\/localhost:8181\/admin\/cluster\/dashboard<\/a><\/noindex> et profitons du r\u00e9sultat :<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"D\u00e9ployer des applications sur Tarantool Cartridge de mani\u00e8re simple et conviviale (partie 1)\" src=\"\/wp-content\/uploads\/2019\/12\/6563ddf2f2bfc85714f327c8d6b2d1c4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous pouvons maintenant injecter des donn\u00e9es. C'est g\u00e9nial, n'est-ce pas ?<\/p>\n<p><\/p>\n<p>Et maintenant, comprenons comment travailler avec cela et ajoutons un autre replica set \u00e0 la topologie.<\/p>\n<p><\/p>\n<h3 id=\"nachinaem-razbiratsya\">Commen\u00e7ons \u00e0 examiner<\/h3>\n<p><\/p>\n<p>Alors, que s'est-il pass\u00e9 ?<\/p>\n<p><\/p>\n<p>Nous avons lev\u00e9 deux machines virtuelles et ex\u00e9cut\u00e9 un playbook ansible qui a configur\u00e9 notre cluster. Voyons le contenu du fichier <code>playbook.yml<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\n- name: D\u00e9ployer mon application Tarantool Cartridge\n  hosts: all\n  become: true\n  become_user: root\n  tasks:\n  - name: Importer le r\u00f4le Tarantool Cartridge\n    import_role:\n      name: tarantool.cartridge<\/code><\/pre>\n<p><\/p>\n<p>Il ne se passe rien d'int\u00e9ressant ici, nous ex\u00e9cutons le r\u00f4le ansible qui s'appelle <code>tarantool.cartridge<\/code>.<\/p>\n<p><\/p>\n<p>Tout ce qui est important (c'est-\u00e0-dire, la configuration du cluster) se trouve dans <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/intro_inventory.html\">inventory<\/a><\/noindex>-fichier <code>hosts.yml<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\nall:\n  vars:\n    # variables communes au cluster\n    cartridge_app_name: getting-started-app\n    cartridge_package_path: .\\\/getting-started-app-1.0.0-0.rpm  # chemin vers le package\n\n    cartridge_cluster_cookie: app-default-cookie  # cookie du cluster\n\n    # options SSH communes\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  # INSTANCES\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    # GROUPEZ LES INSTANCES PAR MACHINE\n    host1:\n      vars:\n        # options de connexion \u00e0 la premi\u00e8re machine\n        ansible_host: 172.19.0.2\n        ansible_user: vagrant\n\n      hosts:  # instances \u00e0 d\u00e9marrer sur la premi\u00e8re machine\n        storage-1:\n\n    host2:\n      vars:\n        # options de connexion \u00e0 la seconde machine\n        ansible_host: 172.19.0.3\n        ansible_user: vagrant\n\n      hosts:  # instances \u00e0 d\u00e9marrer sur la seconde machine\n        app-1:\n        storage-1-replica:\n\n    # GROUPEZ LES INSTANCES PAR REPLICA SETS\n    replicaset_app_1:\n      vars:  # configuration du replica set\n        replicaset_alias: app-1\n        failover_priority:\n          - app-1  # leader\n        roles:\n          - 'api'\n\n      hosts:  # instances du replica set\n        app-1:\n\n    replicaset_storage_1:\n      vars:  # configuration du replica set\n        replicaset_alias: storage-1\n        weight: 3\n        failover_priority:\n          - storage-1  # leader\n          - storage-1-replica\n        roles:\n          - 'storage'\n\n      hosts:   # instances du replica set\n        storage-1:\n        storage-1-replica:<\/code><\/pre>\n<p><\/p>\n<p>Tout ce dont nous avons besoin, c'est d'apprendre \u00e0 g\u00e9rer les instances et les replica sets en modifiant le contenu de ce fichier. Par la suite, nous allons y ajouter de nouvelles sections. Pour ne pas vous perdre, vous pouvez jeter un \u0153il \u00e0 la version finale de ce fichier, <code>hosts.updated.yml<\/code>, qui se trouve dans le d\u00e9p\u00f4t d'exemple.<\/p>\n<p><\/p>\n<h3 id=\"upravlenie-instansami\">Gestion des instances<\/h3>\n<p><\/p>\n<p>En termes d'Ansible, chaque instance est un h\u00f4te (\u00e0 ne pas confondre avec un serveur physique), c'est-\u00e0-dire un n\u0153ud d'infrastructure que Ansible g\u00e9rera. Pour chaque h\u00f4te, nous pouvons sp\u00e9cifier les param\u00e8tres de connexion (tels que <code>ansible_host<\/code> et <code>ansible_user<\/code>), ainsi que la configuration de l'instance. La description des instances se trouve dans la section <code>hosts<\/code>.<\/p>\n<p><\/p>\n<p>Examinons la configuration de l'instance <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>Dans la variable <code>fichier config<\/code> nous avons sp\u00e9cifi\u00e9 les param\u00e8tres de l'instance \u2014 <code>URI de publicit\u00e9<\/code> et <code>port HTTP<\/code>.<br \/>\nCi-dessous se trouvent les param\u00e8tres des instances <code>app-1<\/code> et <code>storage-1-replica<\/code>.<\/p>\n<p><\/p>\n<p>Nous devons informer Ansible des param\u00e8tres de connexion pour chaque instance. Il semble logique de regrouper les instances par machines virtuelles. Pour cela, les instances sont regroup\u00e9es en groupes <code>host1<\/code> et <code>host2<\/code>, et dans chaque groupe, dans la section <code>vars<\/code> sont indiqu\u00e9es les valeurs <code>ansible_host<\/code> et <code>ansible_user<\/code> pour une machine virtuelle. Et dans la section <code>hosts<\/code> \u2014 les h\u00f4tes (qui sont \u00e9galement les instances) entrant dans ce groupe :<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">all:\n  vars:\n    ...\n  hosts:\n    ...\n  children:\n    # GROUPEZ LES INSTANCES PAR MACHINES\n    host1:\n      vars:\n        # options de connexion de la premi\u00e8re machine\n        ansible_host: 172.19.0.2\n        ansible_user: vagrant\n       hosts:  # instances \u00e0 d\u00e9marrer sur la premi\u00e8re machine\n        storage-1:\n\n     host2:\n      vars:\n        # options de connexion de la seconde machine\n        ansible_host: 172.19.0.3\n        ansible_user: vagrant\n       hosts:  # instances \u00e0 d\u00e9marrer sur la seconde machine\n        app-1:\n        storage-1-replica:<\/code><\/pre>\n<p><\/p>\n<p>Nous commen\u00e7ons \u00e0 modifier <code>hosts.yml<\/code>. Ajoutons deux nouvelles instances, <code>storage-2-replica<\/code> sur la premi\u00e8re machine virtuelle et <code>storage-2<\/code> sur la seconde :<\/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: '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    # GROUPEZ LES INSTANCES PAR MACHINES\n    host1:\n      vars:\n        ...\n      hosts:  # instances \u00e0 d\u00e9marrer sur la premi\u00e8re machine\n        storage-1:\n        storage-2-replica:  # &lt;==\n\n    host2:\n      vars:\n        ...\n      hosts:  # instances \u00e0 d\u00e9marrer sur la seconde machine\n        app-1:\n        storage-1-replica:\n        storage-2:  # &lt;==\n  ...<\/code><\/pre>\n<p><\/p>\n<p>Lan\u00e7ons le playbook ansible :<\/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>Notez l'option <code>--limit<\/code>. Comme chaque instance de cluster est un h\u00f4te en termes d'Ansible, nous pouvons indiquer explicitement quelles instances doivent \u00eatre configur\u00e9es lors de l'ex\u00e9cution du playbook.<\/p>\n<p><\/p>\n<p>Reconnectons-nous \u00e0 l'interface Web <noindex><a rel=\"nofollow\" href=\"http:\/\/localhost:8181\/admin\/cluster\/dashboard\">http:\/\/localhost:8181\/admin\/cluster\/dashboard<\/a><\/noindex> et observons nos nouvelles instances :<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"D\u00e9ployer des applications sur Tarantool Cartridge de mani\u00e8re simple et conviviale (partie 1)\" src=\"\/wp-content\/uploads\/2019\/12\/6181c359e4e5ec4adaee8737600a27e4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ne restons pas sur nos lauriers et ma\u00eetrisons la gestion de la topologie.<\/p>\n<p><\/p>\n<h3 id=\"upravlenie-topologiey\">Gestion de la topologie<\/h3>\n<p><\/p>\n<p>Regroupons nos nouvelles instances dans un ensemble de r\u00e9plicas <code>storage-2<\/code>. Ajoutons un nouveau groupe <code>replicaset_storage_2<\/code> et d\u00e9crivons dans ses variables les param\u00e8tres de l'ensemble de r\u00e9plicas par analogie avec <code>replicaset_storage_1<\/code>. Dans la section <code>hosts<\/code> indiquons quelles instances entreront dans ce groupe (c'est-\u00e0-dire notre ensemble de r\u00e9plicas) :<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\nall:\n  vars:\n    ...\n  hosts:\n    ...\n  children:\n    ...\n    # GROUPEZ LES INSTANCES PAR \u00c9QUIPEMENTS DE REPLIQUE\n    ...\n    replicaset_storage_2:  # &lt;==\n      vars:  # configuration de l&#039;\u00e9quipement de r\u00e9plique\n        replicaset_alias: stockage-2\n        weight: 2\n        failover_priority:\n          - stockage-2\n          - stockage-2-replica\n        roles:\n          - &#039;stockage&#039;\n\n      hosts:   # instances de l&#039;\u00e9quipement de r\u00e9plique\n        stockage-2:\n        stockage-2-replica:<\/code><\/pre>\n<p><\/p>\n<p>Nous relan\u00e7ons le playbook :<\/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>Dans le param\u00e8tre <code>--limit<\/code> nous avons cette fois transmis le nom du groupe qui correspond \u00e0 notre r\u00e9plique.<\/p>\n<p><\/p>\n<p>Examinons l\u2019option <code>tags<\/code>.<\/p>\n<p><\/p>\n<p>Notre r\u00f4le ex\u00e9cute successivement diff\u00e9rentes t\u00e2ches, qui sont marqu\u00e9es par les balises suivantes :<\/p>\n<p><\/p>\n<ul>\n<li><code>cartridge-instances<\/code>: gestion des instances (configuration, connexion au membership);<\/li>\n<li><code>cartridge-replicasets<\/code>: gestion de la topologie (gestion des r\u00e9pliques et suppression irr\u00e9versible (expulser) des instances du cluster);<\/li>\n<li><code>cartridge-config<\/code>: gestion des autres param\u00e8tres du cluster (vshard bootstrapping, mode de failover automatique, param\u00e8tres d'authentification et configuration de l'application).<\/li>\n<\/ul>\n<p><\/p>\n<p>Nous pouvons indiquer explicitement quelle partie du travail nous souhaitons effectuer, alors le r\u00f4le ignorera l'ex\u00e9cution des autres t\u00e2ches. Dans notre cas, nous voulons travailler uniquement avec la topologie, donc nous avons indiqu\u00e9 <code>cartridge-replicasets<\/code>.<\/p>\n<p><\/p>\n<p>\u00c9valuons le r\u00e9sultat de nos efforts. Trouvons la nouvelle r\u00e9plique sur <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=\"D\u00e9ployer des applications sur Tarantool Cartridge de mani\u00e8re simple et conviviale (partie 1)\" src=\"\/wp-content\/uploads\/2019\/12\/20da99480df519b1ee239cd81f67b786.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hourra !<\/p>\n<p><\/p>\n<p>Exp\u00e9rimentez avec la modification de la configuration des instances et des r\u00e9pliques et observez comment la topologie du cluster change. Vous pouvez essayer diff\u00e9rents sc\u00e9narios, par exemple, <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/playbooks_delegation.html#rolling-update-batch-size\">mise \u00e0 jour progressive<\/a><\/noindex> ou augmentation de <code>memtx_memory<\/code>. Le r\u00f4le essaiera de le faire sans red\u00e9marrer l'instance, afin de minimiser le temps d'arr\u00eat potentiel de votre application.<\/p>\n<p><\/p>\n<p>N'oubliez pas de lancer <code>vagrant halt<\/code>, pour arr\u00eater les machines virtuelles lorsque vous avez fini de travailler avec elles.<\/p>\n<p><\/p>\n<h1 id=\"a-chto-pod-kapotom\">Et qu'en est-il en coulisses ?<\/h1>\n<p><\/p>\n<p>Ici, je vais expliquer plus en d\u00e9tail ce qui se passait sous le capot du r\u00f4le ansible pendant nos exp\u00e9rimentations.<\/p>\n<p><\/p>\n<p>D\u00e9ployons une application Cartridge \u00e9tape par \u00e9tape.<\/p>\n<p><\/p>\n<h3 id=\"ustanovka-paketa-i-start-instansov\">Installation du paquet et d\u00e9marrage des instances<\/h3>\n<p><\/p>\n<p>Tout d'abord, il faut d\u00e9livrer le paquet sur le serveur et l'installer. Actuellement, le r\u00f4le peut travailler avec des paquets RPM et DEB.<\/p>\n<p><\/p>\n<p>Ensuite, nous lan\u00e7ons les instances. C'est tr\u00e8s simple : chaque instance est un service distinct. J'illustre avec un exemple : <code>systemd<\/code>$ systemctl start myapp@storage-1<\/p>\n<p><\/p>\n<pre><code class=\"bash\">Cette commande d\u00e9marrera l'instance<\/code><\/pre>\n<p><\/p>\n<p>. L'instance lanc\u00e9e cherchera son <code>storage-1<\/code> applications <code>myapp<\/code>. Les journaux de l'instance pourront \u00eatre consult\u00e9s avec <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tarantool.io\/ru\/doc\/2.2\/book\/cartridge\/cartridge_dev\/#configuring-instances\">configuration<\/a><\/noindex> dans <code>\/etc\/tarantool\/conf.d\/<\/code>Le fichier Unit <code>journald<\/code>.<\/p>\n<p><\/p>\n<p>pour le service systemd sera livr\u00e9 avec le paquet. <code>\/etc\/systemd\/system\/myapp@.sevice<\/code> le service systemd sera livr\u00e9 avec le paquet.<\/p>\n<p><\/p>\n<p>Ansible dispose de modules int\u00e9gr\u00e9s pour l'installation de packages et la gestion des services systemd, ici nous n'avons rien r\u00e9invent\u00e9.<\/p>\n<p><\/p>\n<h3 id=\"nastroyka-topologii-klastera\">Configuration de la topologie du cluster<\/h3>\n<p><\/p>\n<p>C'est ici que les choses deviennent vraiment int\u00e9ressantes. Admettons qu'il serait \u00e9trange de se compliquer la vie avec un r\u00f4le ansible sp\u00e9cial pour l'installation de packages et le d\u00e9marrage <code>systemd<\/code>-des services.<\/p>\n<p><\/p>\n<p>Vous pouvez configurer le cluster manuellement :<\/p>\n<p><\/p>\n<ul>\n<li>Premi\u00e8re option : ouvrez l'interface Web et cliquez sur des boutons. Pour un d\u00e9marrage unique de plusieurs instances, cela conviendra parfaitement.<\/li>\n<li>Deuxi\u00e8me option : vous pouvez utiliser l'API GraphQl. Ici, vous pouvez automatiser quelque chose, par exemple, \u00e9crire un script en Python.<\/li>\n<li>Troisi\u00e8me option (pour les courageux) : connectez-vous au serveur, connectez-vous \u00e0 l'une des instances via <code>tarantoolctl connect<\/code> et effectuez toutes les manipulations n\u00e9cessaires avec le module Lua <code>cartridge<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>La principale t\u00e2che de notre invention est de r\u00e9aliser pour vous cette partie du travail, la plus difficile.<\/p>\n<p><\/p>\n<p>Ansible vous permet d'\u00e9crire votre propre module et de l'utiliser dans un r\u00f4le. Notre r\u00f4le utilise de tels modules pour g\u00e9rer diff\u00e9rents composants du cluster.<\/p>\n<p><\/p>\n<p>Comment cela fonctionne-t-il ? Vous d\u00e9crivez l'\u00e9tat souhait\u00e9 du cluster dans une configuration d\u00e9clarative, et le r\u00f4le fournit \u00e0 chaque module sa section de configuration. Le module obtient l'\u00e9tat actuel du cluster et le compare \u00e0 ce qu'il a re\u00e7u en entr\u00e9e. Ensuite, via le socket de l'une des instances, un code est ex\u00e9cut\u00e9 pour amener le cluster \u00e0 l'\u00e9tat souhait\u00e9.<\/p>\n<p><\/p>\n<h1 id=\"itogi\">R\u00e9sultats<\/h1>\n<p><\/p>\n<p>Aujourd'hui, nous avons expliqu\u00e9 et montr\u00e9 comment d\u00e9ployer votre application sur Tarantool Cartridge et configurer une simple topologie. Pour cela, nous avons utilis\u00e9 Ansible - un outil puissant, qui se distingue par sa simplicit\u00e9 d'utilisation et permet de configurer simultan\u00e9ment de nombreux n\u0153uds d'infrastructure (dans notre cas, ce sont des instances de cluster).<\/p>\n<p><\/p>\n<p>Nous avons examin\u00e9 ci-dessus l'un des nombreux moyens de d\u00e9crire la configuration du cluster \u00e0 l'aide d'Ansible. Une fois que vous serez pr\u00eat \u00e0 aller plus loin, explorez les <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/playbooks_best_practices.html\">meilleures pratiques<\/a><\/noindex> pour \u00e9crire des playbooks. Il se peut que vous trouviez plus pratique de g\u00e9rer la topologie \u00e0 l'aide de <code>group_vars<\/code> et <code>host_vars<\/code>.<\/p>\n<p><\/p>\n<p>Tr\u00e8s bient\u00f4t, nous vous expliquerons comment supprimer d\u00e9finitivement (expulser) des instances de la topologie, effectuer un bootstrap vshard, g\u00e9rer le mode de failover automatique, configurer l'authentification et patcher la configuration du cluster. En attendant, vous pouvez explorer par vous-m\u00eame. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge#ansible-role-tarantool-cartridge\">documentation<\/a><\/noindex> et exp\u00e9rimenter avec les param\u00e8tres du cluster.<\/p>\n<p><\/p>\n<p>Si quelque chose ne fonctionne pas, n'h\u00e9sitez pas \u00e0 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge\/issues\/new\">nous informer<\/a><\/noindex> du probl\u00e8me. Nous nous en occuperons rapidement !<\/p>\n<p>Source : <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.2 - 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\/fr\/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.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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\udd47D\u00e9ployez facilement et sans effort des applications sur Tarantool Cartridge (partie 1) | ProHoster","description":"Nous y sommes d\u00e9j\u00e0.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/53611","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=53611"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/53611\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=53611"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=53611"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=53611"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}