Könnyen és természetesen telepíthet alkalmazásokat a Tarantool kazettára (1. rész)

Könnyen és természetesen telepíthet alkalmazásokat a Tarantool kazettára (1. rész)

Már beszéltünk róla Tarantool patron, amely lehetővé teszi elosztott alkalmazások fejlesztését és csomagolását. Már csak az alkalmazások telepítésének és kezelésének megtanulása van hátra. Ne aggódjon, mindennel megvan! Összegyűjtöttük a Tarantool kazettával való munkavégzés legjobb gyakorlatait, és írtunk lehetséges-szerep, amely szétosztja a csomagot a kiszolgálók között, elindítja a példányokat, egyesíti őket egy fürtbe, konfigurálja az engedélyezést, bootstrap vshardot, engedélyezi az automatikus feladatátvételt és javítja a fürt konfigurációját.

Érdekes? Akkor kérem, a vágás alatt mindent elmondunk és megmutatunk.

Kezdjük egy példával

Csak szerepünk funkcionalitásának egy részét nézzük meg. Mindig megtalálja az összes képességének és bemeneti paraméterének teljes leírását dokumentáció. De jobb egyszer megpróbálni, mint százszor megnézni, ezért telepítsünk egy kis alkalmazást.

A Tarantool kazettában van oktatóanyag egy kis Cartridge alkalmazás létrehozására, amely a banki ügyfelekről és számláikról tárol információkat, valamint API-t biztosít a HTTP-n keresztüli adatkezeléshez. Ennek eléréséhez a függelék két lehetséges szerepet ír le: api и storage, amely példányokhoz rendelhető.

Maga a kazetta nem mond semmit a folyamatok elindításának módjáról, csak a már futó példányok konfigurálására ad lehetőséget. A többit a felhasználónak magának kell elvégeznie: el kell rendeznie a konfigurációs fájlokat, elindítani a szolgáltatásokat és konfigurálnia a topológiát. De mindezt nem mi tesszük meg; az Ansible megteszi helyettünk.

A szavaktól a tettekig

Tehát telepítsük alkalmazásunkat két virtuális gépre, és állítsunk be egy egyszerű topológiát:

  • Replicaset app-1 végrehajtja a szerepet api, amely magában foglalja a szerepet vshard-router. Itt csak egy példa lesz.
  • Replicaset storage-1 végrehajtja a szerepet storage (és ugyanakkor vshard-storage), itt hozzáadunk két példányt különböző gépekről.

Könnyen és természetesen telepíthet alkalmazásokat a Tarantool kazettára (1. rész)

A példa futtatásához szükségünk van Csavargó и Ansible (2.8-as vagy régebbi verzió).

Maga a szerep benne van Ansible Galaxy. Ez egy olyan adattár, amely lehetővé teszi a munka megosztását és a kész szerepkörök használatát.

Klónozzuk a tárolót egy példával:

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

Virtuális gépeket emelünk:

$ vagrant up

Telepítse a Tarantool kazettát egy lehetséges szerepkörben:

$ ansible-galaxy install tarantool.cartridge,1.0.1

Indítsa el a telepített szerepet:

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

Megvárjuk, amíg a játékkönyv befejezi a végrehajtást, menjen a következőre http://localhost:8181/admin/cluster/dashboard és élvezd az eredményt:

Könnyen és természetesen telepíthet alkalmazásokat a Tarantool kazettára (1. rész)

Adatokat tölthet fel. Menő, igaz?

Most nézzük meg, hogyan dolgozhatunk ezzel, és egyidejűleg adjunk hozzá egy másik replikakészletet a topológiához.

Kezdjük kitalálni

Szóval mi történt?

Beállítottunk két virtuális gépet, és elindítottunk egy lehetséges játékkönyvet, amely konfigurálta a fürtünket. Nézzük meg a fájl tartalmát 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

Itt nem történik semmi érdekes, indítsunk el egy lehetséges szerepet, ún tarantool.cartridge.

Az összes legfontosabb dolog (nevezetesen a fürt konfigurációja) ebben található leltár- fájl 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:

Csak meg kell tanulnunk a példányok és a replikátumok kezelését a fájl tartalmának módosításával. Ezután új szakaszokat adunk hozzá. Annak érdekében, hogy ne keveredjen bele abba, hogy hol kell hozzáadni őket, tekintse meg a fájl végleges verzióját, hosts.updated.yml, amely a példatárban található.

Példánykezelés

Ansible kifejezéssel minden példány egy gazdagép (nem tévesztendő össze a hardveres szerverrel), azaz. az Ansible által kezelt infrastruktúra csomópont. Minden gazdagéphez megadhatunk kapcsolati paramétereket (pl ansible_host и ansible_user), valamint a példány konfigurációja. Az esetek leírása a részben található hosts.

Nézzük a példány konfigurációját storage-1:

all:
  vars:
    ...

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

  ...

Változóban config megadtuk a példány paramétereit - advertise URI и HTTP port.
Alább láthatók a példány paraméterei app-1 и storage-1-replica.

Minden egyes példányhoz meg kell mondanunk az Ansible-nek a kapcsolati paramétereket. Logikusnak tűnik, hogy a példányokat virtuálisgép-csoportokba csoportosítsák. Ebből a célból a példányokat csoportokba vonják össze host1 и host2, és a szakasz minden csoportjában vars értékek vannak feltüntetve ansible_host и ansible_user egy virtuális géphez. És a szekcióban hosts — hosztok (más néven példányok), amelyek ebbe a csoportba tartoznak:

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:

Kezdünk változni hosts.yml. Adjunk hozzá még két esetet, storage-2-replica az első virtuális gépen és storage-2 A másodikon:

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:  # <==
  ...

Indítsa el a lehetséges játékkönyvet:

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

Kérjük, vegye figyelembe a lehetőséget --limit. Mivel az Ansible kifejezéssel minden fürtpéldány gazdagép, kifejezetten megadhatjuk, hogy mely példányokat kell konfigurálni a játékkönyv futtatásakor.

Visszatérés a webes felhasználói felületre http://localhost:8181/admin/cluster/dashboard és tekintse meg új példányainkat:

Könnyen és természetesen telepíthet alkalmazásokat a Tarantool kazettára (1. rész)

Ne álljunk meg itt, és sajátítsuk el a topológiakezelést.

Topológia kezelés

Egyesítsük új példányainkat egy replikakészletbe storage-2. Adjunk hozzá egy új csoportot replicaset_storage_2 és analógiával írja le a replikált paramétereket változóiban replicaset_storage_1. Szakaszban hosts Jelöljük, mely példányok fognak szerepelni ebben a csoportban (vagyis a replikakészletünkben):

---
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:

Kezdjük újra a játékkönyvet:

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

Paraméterenként --limit Ezúttal átadtuk annak a csoportnak a nevét, amely megfelel a replikátumunknak.

Tekintsük a lehetőséget tags.

Szerepünk szekvenciálisan különböző feladatokat lát el, melyeket a következő címkékkel jelölünk:

  • cartridge-instances: példánykezelés (konfiguráció, csatlakozás a tagsághoz);
  • cartridge-replicasets: topológiakezelés (replikátumkezelés és a példányok végleges eltávolítása (kizárása) a fürtből);
  • cartridge-config: egyéb fürtparaméterek kezelése (vshard bootstrapping, automatikus feladatátvételi mód, engedélyezési paraméterek és alkalmazáskonfiguráció).

Kifejezetten megadhatjuk, hogy a munka melyik részét szeretnénk elvégezni, akkor a szerepkör kihagyja a többi feladatot. Esetünkben csak a topológiával akarunk dolgozni, ezért pontosítottuk cartridge-replicasets.

Értékeljük erőfeszítéseink eredményét. Találtunk egy új replikátot http://localhost:8181/admin/cluster/dashboard.

Könnyen és természetesen telepíthet alkalmazásokat a Tarantool kazettára (1. rész)

Hurrá!

Kísérletezzen a példányok és a replikakészletek konfigurációjának módosításával, és nézze meg, hogyan változik a fürt topológia. Kipróbálhat különböző működési forgatókönyveket, pl. gördülő frissítés vagy növelni memtx_memory. A szerepkör megpróbálja ezt a példány újraindítása nélkül megtenni, hogy csökkentse az alkalmazás lehetséges állásidejét.

Ne felejts el futni vagrant halta virtuális gépek leállításához, amikor befejezte a velük való munkát.

Mi van a motorháztető alatt?

Itt többet fogok elmondani arról, hogy mi történt kísérleteink során az ansible szerep burkolata alatt.

Nézzük meg lépésről lépésre a Cartridge alkalmazás telepítését.

A csomag telepítése és a példányok indítása

Először el kell juttatnia a csomagot a szerverre, és telepítenie kell. Jelenleg a szerepkör RPM és DEB csomagokkal működik.

Ezután elindítjuk a példányokat. Itt minden nagyon egyszerű: minden példány különálló systemd-szolgáltatás. Mondok egy példát:

$ systemctl start myapp@storage-1

Ez a parancs elindítja a példányt storage-1 alkalmazások myapp. Az elindított példány megkeresi konfigurációt в /etc/tarantool/conf.d/. A példánynaplók a segítségével tekinthetők meg journald.

Egységfájl /etc/systemd/system/[email protected] a systemd szolgáltatáshoz a csomaggal együtt szállítjuk.

Az Ansible beépített modulokkal rendelkezik a csomagok telepítéséhez és a rendszerszolgáltatások kezeléséhez, itt nem találtunk ki semmi újat.

Klaszter topológia beállítása

Itt kezdődik a móka. Egyetértek, furcsa lenne egy speciális Ansible szereppel bajlódni a csomagok telepítéséhez és futtatásához systemd-szolgáltatások.

A fürt manuálisan konfigurálható:

  • Első lehetőség: nyissa meg a webes felhasználói felületet, és kattintson a gombokra. Nagyon alkalmas több példány egyszeri indítására.
  • Második lehetőség: használhatja a GraphQl API-t. Itt már lehet automatizálni valamit, például Pythonban szkriptet írni.
  • Harmadik lehetőség (akaratúak számára): menjen a szerverre, csatlakozzon az egyik példányhoz tarantoolctl connect és végezze el az összes szükséges manipulációt a Lua modullal cartridge.

Találmányunk fő feladata pontosan ezt, a munka legnehezebb részét elvégezni Ön helyett.

Az Ansible lehetővé teszi saját modul megírását és szerepkörben való használatát. Szerepünk ilyen modulokat használ a különböző fürtkomponensek kezelésére.

Hogyan működik? A fürt kívánt állapotát egy deklaratív konfigurációban írja le, és a szerepkör minden modulnak megadja a konfigurációs szakaszát bemenetként. A modul fogadja a fürt aktuális állapotát, és összehasonlítja azt a bemenetként kapottval. Ezután az egyik példány socketjén keresztül elindul egy kód, amely a fürtöt a kívánt állapotba hozza.

Eredményei

Ma elmondtuk és megmutattuk, hogyan telepítheti alkalmazását a Tarantool Cartridge-re, és hogyan állíthat be egy egyszerű topológiát. Ehhez az Ansible-t használtuk - egy hatékony eszköz, amely könnyen használható, és lehetővé teszi számos infrastruktúra-csomópont egyidejű konfigurálását (esetünkben fürtpéldányok).

A fentiekben megvizsgáltuk a fürtkonfiguráció Ansible segítségével történő leírásának számos módját. Ha úgy érzi, készen áll a továbblépésre, fedezze fel legjobb gyakorlatok a játékkönyvek írásáról. Előfordulhat, hogy könnyebben kezelheti topológiáját a használatával group_vars и host_vars.

Hamarosan elmondjuk, hogyan lehet véglegesen törölni (kizárni) a példányokat a topológiából, a bootstrap vshardot, kezelni az automatikus feladatátvételi módot, konfigurálni az engedélyezést és javítani a fürt konfigurációját. Addig is tanulhatsz önállóan dokumentáció és kísérletezzen a klaszterparaméterek megváltoztatásával.

Ha valami nem működik, mindenképpen tegye meg tájékoztatni nekünk a problémáról. Gyorsan megoldunk mindent!

Forrás: will.com

Hozzászólás