Pag-deploy sa mga Aplikasyon nga Dali ug Natural sa Tarantool Cartridge (Bahin 1)

Pag-deploy sa mga Aplikasyon nga Dali ug Natural sa Tarantool Cartridge (Bahin 1)

Nagstorya na mi Tarantool Cartridge, nga nagtugot kanimo sa pagpalambo sa gipang-apod-apod nga mga aplikasyon ug pagputos niini. Wala nay nahabilin: pagkat-on unsaon pag-deploy ug pagdumala niini nga mga aplikasyon. Ayaw kabalaka, nahunahuna na namo ang tanan! Gihiusa namon ang tanan nga labing kaayo nga mga gawi alang sa pagtrabaho kauban ang Tarantool Cartridge ug nagsulat ansible nga papel, nga mag-decompose sa package ngadto sa mga server, magsugod sa mga instances, i-combine sila ngadto sa usa ka cluster, i-configure ang authorization, bootstrap vshard, enable ang automatic failover ug i-patch ang cluster config.

Makapainteres? Unya mangutana ko under the cut, isulti namo ug ipakita ang tanan.

Magsugod ta sa usa ka pananglitan

Among tabonan ang bahin lamang sa pagpaandar sa atong tahas. Kanunay nimong makit-an ang usa ka kompleto nga paghulagway sa tanan nga mga bahin niini ug mga parameter sa pag-input dokumentasyon. Apan mas maayo nga sulayan kausa kaysa makita ang usa ka gatos ka beses, busa mag-deploy kita usa ka gamay nga aplikasyon.

Ang Tarantool Cartridge adunay tutorial sa paghimo og gamay nga Cartridge nga aplikasyon nga nagtipig og impormasyon bahin sa mga kustomer sa bangko ug sa ilang mga account, ug naghatag usab og API alang sa pagdumala sa datos pinaagi sa HTTP. Aron mahimo kini, ang aplikasyon naghulagway sa duha ka posible nga mga tahas: api ΠΈ storagenga mahimong ma-assign sa mga higayon.

Ang Cartridge mismo wala magsulti bisan unsa bahin sa kung giunsa pagsugod ang mga proseso, naghatag lamang kini og katakus sa pag-configure nga nagdagan na nga mga higayon. Kinahanglan nga buhaton sa user ang nahabilin sa iyang kaugalingon: pag-decompose sa mga file sa pag-configure, pagsugod sa mga serbisyo ug pag-set up sa topology. Pero dili namo buhaton kining tanan, Ansible ang mubuhat para namo.

Gikan sa mga pulong ngadto sa mga buhat

Busa, atong i-deploy ang atong aplikasyon ngadto sa duha ka virtual machine ug magbutang ug simple nga topology:

  • Replicaset app-1 maoy modala sa papel apinga naglakip sa papel vshard-router. Adunay usa ra ka higayon dinhi.
  • replicate storage-1 nagpatuman sa papel storage (ug sa samang higayon vshard-storage), dinhi magdugang kami og duha ka mga higayon gikan sa lainlaing mga makina.

Pag-deploy sa mga Aplikasyon nga Dali ug Natural sa Tarantool Cartridge (Bahin 1)

Aron sa pagpadagan sa panig-ingnan, kita kinahanglan Mabango ΠΈ Ansible (bersyon 2.8 o sa ulahi).

Ang papel mismo mao Ansible nga Galaxy. Kini usa ka tipiganan nga nagtugot kanimo sa pagpaambit sa imong trabaho ug paggamit sa andam nga mga tahas.

I-clone ang repository sa usa ka pananglitan:

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

Gipataas namo ang mga virtual machine:

$ vagrant up

I-install ang Tarantool Cartridge ansible nga papel:

$ ansible-galaxy install tarantool.cartridge,1.0.1

Pagdalagan ang na-install nga papel:

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

Naghulat kami sa katapusan sa pagpatuman sa playbook, adto sa http://localhost:8181/admin/cluster/dashboard ug pahimusli ang resulta:

Pag-deploy sa mga Aplikasyon nga Dali ug Natural sa Tarantool Cartridge (Bahin 1)

Mahimo nimong ibubo ang datos. Cool, dili ba?

Karon atong mahibal-an kung unsaon pagtrabaho niini, ug sa samang higayon makadugang og laing replika nga set sa topology.

Nagsugod mi sa pagsabot

Busa unsay nahitabo?

Naghimo kami og duha ka VM ug nagpadagan sa usa ka praktikal nga playbook nga nagbutang sa among cluster. Atong tan-awon ang sulod sa file 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

Walay makapaikag nga mahitabo dinhi, kita magsugod sa ansible-papel, nga gitawag tarantool.cartridge.

Ang tanan nga labing importante (nga mao, ang cluster configuration) nahimutang sa imbentaryo- file 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:

Ang atong gikinahanglan mao ang pagkat-on unsaon pagdumala sa mga higayon ug mga replicase pinaagi sa pag-usab sa mga sulod niini nga file. Sunod, magdugang kami ug bag-ong mga seksyon niini. Aron dili malibog kung asa kini idugang, mahimo nimong tan-awon ang katapusang bersyon niini nga file, hosts.updated.yml, nga anaa sa pananglitan nga repository.

Pagdumala sa Instance

Sa termino sa Ansible, ang matag higayon usa ka host (dili malibog sa usa ka puthaw nga server), i.e. ang node sa imprastraktura nga pagdumala sa Ansible. Alang sa matag host, mahimo natong ipiho ang mga parameter sa koneksyon (sama sa ansible_host ΠΈ ansible_user), ingon man ang pag-configure sa pananglitan. Ang paghulagway sa mga higayon naa sa seksyon hosts.

Tagda ang instance configuration storage-1:

all:
  vars:
    ...

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

  ...

Sa usa ka variable config among gipiho ang mga parameter sa pananglitan - advertise URI ΠΈ HTTP port.
Sa ubos mao ang mga parameter sa pananglitan app-1 ΠΈ storage-1-replica.

Kinahanglan natong isulti sa Ansible ang mga parameter sa koneksyon alang sa matag higayon. Morag lohikal ang paggrupo sa mga higayon ngadto sa mga grupo sa virtual machine. Aron mahimo kini, ang mga higayon gihiusa sa mga grupo. host1 ΠΈ host2, ug sa matag grupo sa seksyon vars mga mithi ansible_host ΠΈ ansible_user alang sa usa ka virtual machine. Ug sa seksyon hosts - mga host (sila mga instance) nga nalakip sa kini nga grupo:

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:

Nagsugod kami sa pagbag-o hosts.yml. Atong idugang ang duha pa ka higayon, storage-2-replica sa unang virtual machine ug storage-2 Sa ikaduha:

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

Pagdalag ansible nga playbook:

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

Hatagi'g pagtagad ang kapilian --limit. Tungod kay ang matag cluster nga instance usa ka host sa Ansible nga mga termino, mahimo namon nga klaro nga mahibal-an kung unsang mga higayon ang kinahanglan i-configure kung gipadagan ang playbook.

Balik sa Web UI http://localhost:8181/admin/cluster/dashboard ug tan-awa ang among bag-ong mga higayon:

Pag-deploy sa mga Aplikasyon nga Dali ug Natural sa Tarantool Cartridge (Bahin 1)

Dili kami mopahulay sa among mga kadaugan ug mag-master sa kontrol sa topology.

Pagdumala sa Topology

Atong iusa ang atong bag-ong mga instance ngadto sa usa ka replicase storage-2. Pagdugang og bag-ong grupo replicaset_storage_2 ug ihulagway sa mga baryable niini ang mga parametro sa replicaset pinaagi sa analohiya sa replicaset_storage_1. Sa seksyon hosts ipiho kung unsang mga higayon ang maapil sa kini nga grupo (nga mao, ang among replica set):

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

Atong sugdan pag-usab ang playbook:

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

Kada parameter --limit kami niining higayona gipasa ang ngalan sa grupo nga katumbas sa among replicase.

Tagda ang kapilian tags.

Ang among tahas nagsunud-sunod nga naghimo sa lainlaing mga buluhaton, nga gimarkahan sa mga musunud nga tag:

  • cartridge-instances: pagdumala sa pananglitan (konfigurasyon, koneksyon sa membership);
  • cartridge-replicasets: pagdumala sa topology (pagdumala sa replicaset ug permanenteng pagtangtang (pagpalagpot) sa mga instance gikan sa cluster);
  • cartridge-config: pagdumala sa ubang mga cluster parameters (vshard bootstrapping, automatic failover mode, authorization parameters ug application configuration).

Mahimo natong tin-aw nga ipiho kung unsang bahin sa trabaho ang gusto natong buhaton, unya laktawan sa tahas ang nahabilin nga mga buluhaton. Sa among kaso, gusto namon nga magtrabaho lamang sa topology, mao nga among gipiho cartridge-replicasets.

Atong susihon ang resulta sa atong mga paningkamot. Pagpangita usa ka bag-ong kopya http://localhost:8181/admin/cluster/dashboard.

Pag-deploy sa mga Aplikasyon nga Dali ug Natural sa Tarantool Cartridge (Bahin 1)

Hooray!

Eksperimento sa pag-reconfigure sa mga higayon ug mga replicase ug tan-awa kung giunsa pagbag-o ang topology sa cluster. Mahimo nimong sulayan ang lainlaing mga senaryo sa operasyon, pananglitan, rolling update o pagdugang memtx_memory. Ang tahas mosulay sa pagbuhat niini nga dili i-restart ang instance aron makunhuran ang posible nga downtime sa imong aplikasyon.

Ayaw kalimot pagdagan vagrant haltaron ihunong ang mga VM kung nahuman na nimo sila.

Ug unsa ang ilawom sa tabon?

Dinhi ako maghisgot og dugang mahitungod sa unsay nahitabo ubos sa hood sa ansible nga papel sa panahon sa among mga eksperimento.

Atong tan-awon ang pag-deploy sa usa ka aplikasyon sa Cartridge nga lakang sa lakang.

Pag-instalar sa package ug pagsugod sa mga higayon

Una kinahanglan nimo nga ihatud ang package sa server ug i-install kini. Karon ang tahas mahimo’g molihok sa mga pakete sa RPM ug DEB.

Sunod, gilansad namon ang mga higayon. Ang tanan yano ra kaayo dinhi: ang matag higayon lahi systemd-serbisyo. Naghisgot ako bahin sa usa ka pananglitan:

$ systemctl start myapp@storage-1

Kini nga mando maglunsad sa pananglitan storage-1 apps myapp. Ang gilunsad nga pananglitan mangita alang niini configuration Π² /etc/tarantool/conf.d/. Ang mga instance logs mahimong tan-awon gamit ang journald.

Unit file /etc/systemd/system/[email protected] kay ang usa ka systemd nga serbisyo ipadala uban sa package.

Ang Ansible adunay mga built-in nga modules alang sa pag-install sa mga pakete ug pagdumala sa mga serbisyo sa systemd, wala kami nakaimbento nga bag-o dinhi.

Pag-configure sa cluster topology

Ug dinhi nagsugod ang labing makapaikag. Uyon, kini katingad-an nga magsamok sa usa ka espesyal nga papel nga mahimo alang sa pag-install sa mga pakete ug pagdagan systemd-serbisyo.

Mahimo nimong i-set up ang cluster nga mano-mano:

  • Ang unang kapilian: ablihi ang Web UI ug i-klik ang mga buton. Alang sa usa ka higayon nga pagsugod sa daghang mga higayon, kini angay.
  • Ikaduha nga kapilian: mahimo nimong gamiton ang GraphQl API. Dinhi mahimo ka na nga mag-automate sa usa ka butang, pananglitan, pagsulat usa ka script sa Python.
  • Ang ikatulo nga kapilian (alang sa kusgan sa espiritu): adto sa server, pagkonektar sa usa sa mga higayon nga gigamit tarantoolctl connect ug ipahigayon ang tanang gikinahanglang manipulasyon gamit ang Lua module cartridge.

Ang nag-unang tahas sa among imbensyon mao ang paghimo niini, ang labing lisud nga bahin sa trabaho alang kanimo.

Gitugotan ka sa Ansible sa pagsulat sa imong kaugalingon nga module ug gamiton kini sa usa ka tahas. Gigamit sa among tahas kini nga mga module aron madumala ang lainlaing mga sangkap sa cluster.

Giunsa kini paglihok? Imong gihulagway ang gitinguha nga kahimtang sa cluster sa usa ka declarative config, ug ang papel naghatag sa matag module sa iyang configuration section isip input. Ang module makadawat sa kasamtangan nga kahimtang sa cluster ug itandi kini sa input. Sunod, ang usa ka code gipadagan pinaagi sa socket sa usa sa mga higayon, nga nagdala sa cluster sa gusto nga estado.

Mga resulta

Karon among gisultihan ug gipakita kung giunsa ang pag-deploy sa imong aplikasyon sa Tarantool Cartridge ug pag-set up sa usa ka yano nga topology. Aron mahimo kini, gigamit namon ang Ansible, usa ka kusgan nga himan nga dali gamiton ug gitugotan ka nga dungan nga i-configure ang daghang mga node sa imprastraktura (sa among kaso, kini ang mga cluster instances).

Sa ibabaw, among giatubang ang usa sa daghang mga paagi sa paghulagway sa configuration sa cluster gamit ang Ansible. Kung nahibal-an nimo nga andam ka nga magpadayon, pagkat-on labing maayo nga mga buhat alang sa pagsulat sa mga playbook. Mahimo nimong makita nga mas kombenyente ang pagdumala sa topolohiya gamit ang group_vars ΠΈ host_vars.

Sa dili madugay isulti namon kanimo kung giunsa ang permanente nga pagtangtang (pagpalagpot) mga higayon gikan sa topology, bootstrap vshard, pagdumala sa awtomatik nga failover mode, pag-configure sa pagtugot ug pag-patch sa cluster config. Sa kasamtangan, mahimo kang magtuon sa imong kaugalingon dokumentasyon ug eksperimento sa pagbag-o sa mga parameter sa cluster.

Kung adunay dili molihok, siguroha ipahibalo kanato mahitungod sa problema. Atong bungkagon dayon!

Source: www.habr.com

Idugang sa usa ka comment