Deplwaye aplikasyon yo fasilman ak natirèlman sou katouch Tarantool (pati 1)

Deplwaye aplikasyon yo fasilman ak natirèlman sou katouch Tarantool (pati 1)

Nou te deja pale de Tarantool katouch, ki pèmèt ou devlope aplikasyon distribiye epi pake yo. Pa gen anyen ki rete: aprann kijan pou deplwaye ak jere aplikasyon sa yo. Pa enkyete, nou te panse a tout bagay! Nou te mete ansanm tout pi bon pratik pou travay ak Tarantool Cartridge epi nou te ekri ansible-wòl, ki pral dekonpoze pake a nan sèvè, kòmanse ka yo, konbine yo nan yon gwoup, konfigirasyon otorizasyon, bootstrap vshard, pèmèt failover otomatik ak patch konfigirasyon gwoup la.

Enteresan? Lè sa a, mwen mande anba koupe a, nou pral di ak montre tout bagay.

Ann kòmanse ak yon egzanp

Nou pral kouvri sèlman yon pati nan fonksyonalite wòl nou an. Ou ka toujou jwenn yon deskripsyon konplè sou tout karakteristik li yo ak paramèt opinyon nan dokiman. Men, li pi bon eseye yon fwa pase wè yon santèn fwa, kidonk ann deplwaye yon ti aplikasyon.

Tarantool Cartridge gen leson patikilye pou kreye yon ti aplikasyon Cartridge ki estoke enfòmasyon sou kliyan bank yo ak kont yo, epi tou li bay yon API pou jere done atravè HTTP. Pou fè sa, aplikasyon an dekri de wòl posib: api и storageki ka plase nan ka.

Katouch tèt li pa di anyen sou kòman yo kòmanse pwosesis, li sèlman bay kapasite nan konfigirasyon deja kouri enstans. Itilizatè a dwe fè rès la tèt li: dekonpoze fichye konfigirasyon yo, kòmanse sèvis yo epi mete topoloji a. Men nou pap fè tout sa, Ansible ap fè l pou nou.

Soti nan pawòl rive nan zèv

Se konsa, ann deplwaye aplikasyon nou an nan de machin vityèl epi mete yon senp topoloji:

  • Replicaset app-1 pral jwe wòl la apiki gen ladann wòl la vshard-router. Pral gen yon sèl egzanp isit la.
  • replicaset storage-1 aplike wòl la storage (e an menm tan an vshard-storage), isit la nou ajoute de ka soti nan machin diferan.

Deplwaye aplikasyon yo fasilman ak natirèlman sou katouch Tarantool (pati 1)

Pou kouri egzanp lan, nou bezwen Vagabon и Ansible (vèsyon 2.8 oswa pita).

Wòl nan tèt li se Ansible Galaksi. Sa a se yon depo ki pèmèt ou pataje travay ou epi sèvi ak wòl ki pare yo.

Klone repozitwa a ak yon egzanp:

$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0

Nou ogmante machin vityèl:

$ vagrant up

Enstale Tarantool Cartridge ansible wòl:

$ ansible-galaxy install tarantool.cartridge,1.0.1

Kouri wòl enstale a:

$ ansible-playbook -i hosts.yml playbook.yml

Nou ap tann nan fen ekzekisyon liv la, ale nan http://localhost:8181/admin/cluster/dashboard epi jwi rezilta a:

Deplwaye aplikasyon yo fasilman ak natirèlman sou katouch Tarantool (pati 1)

Ou ka vide done. Cool, dwa?

Koulye a, kite a konnen ki jan yo travay ak sa a, epi an menm tan an ajoute yon lòt seri kopi nan topoloji a.

Nou kòmanse konprann

Se konsa, sa ki te pase?

Nou te gen de VM kanpe ak kouri yon liv jwèt ansible ki te mete gwoup nou an. Ann gade sa ki nan dosye a playbook.yml:

---
- name: Deploy my Tarantool Cartridge app
  hosts: all
  become: true
  become_user: root
  tasks:
  - name: Import Tarantool Cartridge role
    import_role:
      name: tarantool.cartridge

Pa gen anyen ki enteresan k ap pase isit la, nou kòmanse ansible-wòl la, ki rele tarantool.cartridge.

Tout bagay ki pi enpòtan (savwa, konfigirasyon gwoup la) sitiye nan envantè-dosye hosts.yml:

---
all:
  vars:
    # common cluster variables
    cartridge_app_name: getting-started-app
    cartridge_package_path: ./getting-started-app-1.0.0-0.rpm  # path to package

    cartridge_cluster_cookie: app-default-cookie  # cluster cookie

    # common ssh options
    ansible_ssh_private_key_file: ~/.vagrant.d/insecure_private_key
    ansible_ssh_common_args: '-o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

  # INSTANCES
  hosts:
    storage-1:
      config:
        advertise_uri: '172.19.0.2:3301'
        http_port: 8181

    app-1:
      config:
        advertise_uri: '172.19.0.3:3301'
        http_port: 8182

    storage-1-replica:
      config:
        advertise_uri: '172.19.0.3:3302'
        http_port: 8183

  children:
    # GROUP INSTANCES BY MACHINES
    host1:
      vars:
        # first machine connection options
        ansible_host: 172.19.0.2
        ansible_user: vagrant

      hosts:  # instances to be started on the first machine
        storage-1:

    host2:
      vars:
        # second machine connection options
        ansible_host: 172.19.0.3
        ansible_user: vagrant

      hosts:  # instances to be started on the second machine
        app-1:
        storage-1-replica:

    # GROUP INSTANCES BY REPLICA SETS
    replicaset_app_1:
      vars:  # replica set configuration
        replicaset_alias: app-1
        failover_priority:
          - app-1  # leader
        roles:
          - 'api'

      hosts:  # replica set instances
        app-1:

    replicaset_storage_1:
      vars:  # replica set configuration
        replicaset_alias: storage-1
        weight: 3
        failover_priority:
          - storage-1  # leader
          - storage-1-replica
        roles:
          - 'storage'

      hosts:   # replica set instances
        storage-1:
        storage-1-replica:

Tout sa nou bezwen se aprann kijan pou jere enstans ak replik yo lè w chanje sa ki nan dosye sa a. Apre sa, nou pral ajoute nouvo seksyon nan li. Pou pa konfonn kote pou ajoute yo, ou ka gade nan vèsyon final la nan dosye sa a, hosts.updated.yml, ki nan depo egzanp lan.

Jesyon enstans

An tèm de Ansible, chak egzanp se yon lame (pa dwe konfonn ak yon sèvè fè), i.e. ne enfrastrikti ke Ansible pral jere. Pou chak lame, nou ka presize paramèt koneksyon (tankou ansible_host и ansible_user), osi byen ke konfigirasyon egzanp lan. Deskripsyon nan ka yo se nan seksyon an hosts.

Konsidere konfigirasyon egzanp lan storage-1:

all:
  vars:
    ...

  # INSTANCES
  hosts:
    storage-1:
      config:
        advertise_uri: '172.19.0.2:3301'
        http_port: 8181

  ...

Nan yon varyab config nou espesifye paramèt egzanp yo - advertise URI и HTTP port.
Anba a se paramèt egzanp yo app-1 и storage-1-replica.

Nou bezwen di Ansible paramèt koneksyon yo pou chak egzanp. Li sanble lojik pou gwoupe ka yo nan gwoup machin vityèl. Pou fè sa, ka yo konbine an gwoup. host1 и host2, ak nan chak gwoup nan seksyon an vars valè ansible_host и ansible_user pou yon machin vityèl. Ak nan seksyon an hosts - lame (yo se egzanp) ki enkli nan gwoup sa a:

all:
  vars:
    ...
  hosts:
    ...
  children:
    # GROUP INSTANCES BY MACHINES
    host1:
      vars:
        # first machine connection options
        ansible_host: 172.19.0.2
        ansible_user: vagrant
       hosts:  # instances to be started on the first machine
        storage-1:

     host2:
      vars:
        # second machine connection options
        ansible_host: 172.19.0.3
        ansible_user: vagrant
       hosts:  # instances to be started on the second machine
        app-1:
        storage-1-replica:

Nou kòmanse chanje hosts.yml. Ann ajoute de lòt egzanp, storage-2-replica sou premye machin vityèl la ak storage-2 Sou dezyèm lan:

all:
  vars:
    ...

  # INSTANCES
  hosts:
    ...
    storage-2:  # <==
      config:
        advertise_uri: '172.19.0.3:3303'
        http_port: 8184

    storage-2-replica:  # <==
      config:
        advertise_uri: '172.19.0.2:3302'
        http_port: 8185

  children:
    # GROUP INSTANCES BY MACHINES
    host1:
      vars:
        ...
      hosts:  # instances to be started on the first machine
        storage-1:
        storage-2-replica:  # <==

    host2:
      vars:
        ...
      hosts:  # instances to be started on the second machine
        app-1:
        storage-1-replica:
        storage-2:  # <==
  ...

Kouri ansible playbook:

$ ansible-playbook -i hosts.yml 
                   --limit storage-2,storage-2-replica 
                   playbook.yml

Peye atansyon sou opsyon an --limit. Depi chak egzanp gwoup se yon lame nan tèm Ansible, nou ka presize klèman ki enstans yo ta dwe configuré lè w ap kouri liv la.

Retounen nan entènèt UI http://localhost:8181/admin/cluster/dashboard epi obsève nouvo egzanp nou yo:

Deplwaye aplikasyon yo fasilman ak natirèlman sou katouch Tarantool (pati 1)

Nou pa pral repoze sou lorye nou yo epi yo pral metrize kontwòl topoloji.

Jesyon topoloji

Ann rantre nouvo egzanp nou yo nan yon replik storage-2. Ajoute yon nouvo gwoup replicaset_storage_2 epi dekri nan varyab li yo paramèt replicaset la pa analoji ak replicaset_storage_1. Nan seksyon hosts presize ki ka yo pral enkli nan gwoup sa a (ki se, seri kopi nou an):

---
all:
  vars:
    ...
  hosts:
    ...
  children:
    ...
    # GROUP INSTANCES BY REPLICA SETS
    ...
    replicaset_storage_2:  # <==
      vars:  # replicaset configuration
        replicaset_alias: storage-2
        weight: 2
        failover_priority:
          - storage-2
          - storage-2-replica
        roles:
          - 'storage'

      hosts:   # replicaset instances
        storage-2:
        storage-2-replica:

Ann kòmanse liv la ankò:

$ ansible-playbook -i hosts.yml 
                   --limit replicaset_storage_2 
                   --tags cartridge-replicasets 
                   playbook.yml

Pou chak opsyon --limit nou fwa sa a te pase non gwoup la ki koresponn ak replicaset nou an.

Konsidere opsyon an tags.

Wòl nou an sekans fè plizyè travay, ki make ak tags sa yo:

  • cartridge-instances: jesyon egzanp (konfigirasyon, koneksyon ak manm);
  • cartridge-replicasets: jesyon topoloji (jesyon replika ansanm ak retire pèmanan (expulse) nan ka ki soti nan gwoup la);
  • cartridge-config: jere lòt paramèt gwoup (vshard bootstrapping, mòd failover otomatik, paramèt otorizasyon ak konfigirasyon aplikasyon an).

Nou ka presize klèman ki pati nan travay la nou vle fè, Lè sa a, wòl la pral sote rès travay yo. Nan ka nou an, nou vle travay sèlman ak topoloji a, kidonk nou espesifye cartridge-replicasets.

Ann evalye rezilta efò nou yo. Jwenn yon nouvo replicaset http://localhost:8181/admin/cluster/dashboard.

Deplwaye aplikasyon yo fasilman ak natirèlman sou katouch Tarantool (pati 1)

Hooray!

Eksperyans ak rekonfigirasyon enstans ak kopi ansanm epi wè ki jan topoloji gwoup la chanje. Ou ka eseye diferan senaryo operasyonèl, pou egzanp, aktyalizasyon woule oswa ogmante memtx_memory. Wòl la pral eseye fè sa san yo pa rekòmanse egzanp lan nan lòd yo diminye tan an posib aplikasyon w lan.

Pa bliye kouri vagrant haltpou sispann VMs lè w fini ak yo.

Ki sa ki nan anba kapo a?

Isit la mwen pral pale plis sou sa ki te pase anba kapo a nan wòl nan ansible pandan eksperyans nou yo.

Ann pran yon gade nan deplwaye yon aplikasyon Cartridge etap pa etap.

Enstale pake a ak kòmanse ka yo

Premye ou bezwen delivre pake a nan sèvè a epi enstale li. Koulye a, wòl la ka travay ak pakè RPM ak DEB.

Apre sa, nou lanse enstans yo. Tout bagay trè senp isit la: chak egzanp se yon separe systemd-sèvis. M ap pale de yon egzanp:

$ systemctl start myapp@storage-1

Kòmand sa a pral lanse egzanp lan storage-1 apps myapp. Enstans lan te lanse a ap chèche pou li konfigirasyon в /etc/tarantool/conf.d/. Ou ka wè mòso bwa egzanp yo lè l sèvi avèk journald.

Fichye inite /etc/systemd/system/[email protected] pou yon sèvis systemd pral delivre ak pake a.

Ansible gen modil entegre pou enstale pakè ak jere sèvis sistèm, nou pa envante anyen nouvo isit la.

Konfigirasyon topoloji gwoup la

Ak isit la ki pi enteresan an kòmanse. Dakò, li ta etranj deranje ak yon wòl espesyal ansible pou enstale pakè ak kouri systemd-servis.

Ou ka mete gwoup la manyèlman:

  • Premye opsyon a: louvri UI Web la epi klike sou bouton yo. Pou yon kòmansman yon sèl fwa nan plizyè ka, li se byen apwopriye.
  • Dezyèm opsyon: ou ka itilize API GraphQl. Isit la ou ka deja otomatize yon bagay, pou egzanp, ekri yon script nan Python.
  • Twazyèm opsyon (pou fò nan lespri): ale nan sèvè a, konekte nan youn nan ka yo lè l sèvi avèk tarantoolctl connect epi fè tout manipilasyon ki nesesè yo ak modil Lua cartridge.

Travay prensipal la nan envansyon nou an se fè sa a, pati ki pi difisil nan travay la pou ou.

Ansible pèmèt ou ekri pwòp modil ou epi sèvi ak li nan yon wòl. Wòl nou itilize modil sa yo pou jere divès eleman gwoup la.

Ki jan li fonksyone? Ou dekri eta a vle nan gwoup la nan yon konfigirasyon deklaratif, epi wòl la bay chak modil seksyon konfigirasyon li yo kòm opinyon. Modil la resevwa eta aktyèl la nan gwoup la epi konpare li ak opinyon an. Apre sa, yon kòd kouri nan priz youn nan ka yo, ki pote gwoup la nan eta a vle.

Rezilta

Jodi a nou te di epi montre kijan pou deplwaye aplikasyon w lan sou Tarantool Cartridge epi mete yon senp topoloji. Pou fè sa, nou te itilize Ansible, yon zouti pwisan ki fasil pou itilize epi ki pèmèt ou konfigirasyon anpil nœuds enfrastrikti ansanm (nan ka nou an, sa yo se ka gwoup).

Pi wo a, nou te fè fas ak youn nan plizyè fason yo dekri konfigirasyon gwoup la lè l sèvi avèk Ansible. Yon fwa ou konnen ou pare pou avanse pou pi, aprann pi bon pratik pou ekri liv jwèt. Ou ka jwenn li pi pratik pou jere topoloji a group_vars и host_vars.

Trè byento nou pral di w kijan pou w retire (ekspilsyon) ka yo nan topoloji a pou tout tan, demaraj vshard, jere mòd otomatik failover, konfigirasyon otorizasyon ak patch konfigirasyon gwoup la. Antretan, ou ka etidye poukont ou dokimantasyon epi fè eksperyans ak chanje paramèt gwoup yo.

Si yon bagay pa mache, asire w enfòme nou sou pwoblèm nan. Nou pral kraze li byen vit!

Sous: www.habr.com

Add nouvo kòmantè