Zviri nyore uye nemasikirwo shandisa zvikumbiro kuTarantool Cartridge (chikamu 1)

Zviri nyore uye nemasikirwo shandisa zvikumbiro kuTarantool Cartridge (chikamu 1)

Takatotaura nezvazvo Tarantool Cartridge, izvo zvinokutendera kuti ugadzire maapplication akagoverwa uye kuarongedza. Chasara kudzidza kuendesa aya maapplication uye nekuatonga. Usanetseke, isu takazvifukidza zvese! Isu takaisa pamwechete ese akanakisa maitiro ekushanda neTarantool Cartridge uye takanyora ansible-basa, iyo inogovera iyo pasuru kumaseva, kutanga zviitiko, kuvabatanidza kuita sumbu, gadzirisa mvumo, bootstrap vshard, inogonesa otomatiki failover uye chigamba chemasumbu config.

Inonakidza? Zvadaro ndapota, pasi pekucheka, tichakuudza uye kukuratidza zvose.

Ngatitange nemuenzaniso

Tichangotarisa chikamu chekushanda kwebasa redu. Iwe unogona kugara uchiwana tsananguro yakazara yezvese kugona kwayo uye ma paramita ekuisa mukati zvinyorwa. Asi zviri nani kuedza kamwe chete pane kuzviona kazana, saka ngatiisei diki application.

Tarantool Cartridge ine tutorial kugadzira diki Cartridge application inochengeta ruzivo nezvevatengi vebhangi nemaakaundi avo, uye inopawo API yekutarisira data kuburikidza neHTTP. Kuti izvi zviitike, apendikisi inotsanangura mabasa maviri anobvira: api ΠΈ storage, iyo inogona kugoverwa kune zviitiko.

Cartridge pachayo haitaure chero chinhu nezve nzira yekutangisa maitiro, inongopa kugona kugadzirisa yatove kuita zviitiko. Mushandisi anofanira kuita zvakasara pachake: kuronga mafaera ekugadzirisa, tanga masevhisi uye gadzirisa iyo topology. Asi isu hatingaiti zvese izvi; Ansible achatiitira isu.

Kubva pamashoko kusvika pazviito

Saka, ngatiisei application yedu kumakina maviri chaiwo uye timise yakapusa topology:

  • Replicaset app-1 achaita basa racho api, iyo inosanganisira basa vshard-router. Pachave nemuenzaniso mumwe chete pano.
  • Replicaset storage-1 anoita basa racho storage (uye panguva imwe chete vshard-storage), pano isu tichawedzera zviitiko zviviri kubva kumashini akasiyana.

Zviri nyore uye nemasikirwo shandisa zvikumbiro kuTarantool Cartridge (chikamu 1)

Kuti tiite muenzaniso watinoda vagrant ΠΈ Anable (shanduro 2.8 kana kupfuura).

Basa pacharo ririmo Ansible Galaxy. Iyi inzvimbo inobvumidza iwe kugovera basa rako uye kushandisa akagadzirira-akagadzirwa mabasa.

Ngatitorei repository nemuenzaniso:

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

Isu tinosimudza virtual muchina:

$ vagrant up

Isa iyo Tarantool Cartridge inobatika basa:

$ ansible-galaxy install tarantool.cartridge,1.0.1

Tangisa iyo yakaiswa basa:

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

Isu takamirira kuti playbook ipedze kuurayiwa, enda ku http://localhost:8181/admin/cluster/dashboard uye unakirwe nemhedzisiro:

Zviri nyore uye nemasikirwo shandisa zvikumbiro kuTarantool Cartridge (chikamu 1)

Unogona kurodha data. Zvakanaka, handizvo?

Iye zvino ngationei kuti tingashanda sei neizvi, uye panguva imwechete wedzera imwe replica yakaiswa kune topology.

Ngatitangei kuzvinzwisisa

Saka chii chakaitika?

Isu takamisikidza maviri chaiwo muchina uye takatanga bhuku rekutamba rinonzwisisika iro rakagadzirisa cluster yedu. Ngatitarisei zviri mukati mefaira 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

Hapana chinonakidza chinoitika pano, ngatitangei basa rinonzwisisika rinonzi tarantool.cartridge.

Zvese zvinhu zvakanyanya kukosha (kureva, iyo cluster kumisikidza) zviri mukati Inventory-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:

Chatinongoda kudzidza maitiro ekugadzirisa zviitiko uye replicases nekushandura zviri mukati meiyi faira. Zvadaro tichawedzera zvikamu zvitsva kwairi. Kuti urege kuvhiringika kuti ungavawedzera kupi, unogona kutarisa iyo yekupedzisira vhezheni yefaira iri, hosts.updated.yml, iri mumuenzaniso repository.

Instance management

Mumashoko Ansible, chiitiko chega chega ndechemuenzi (kwete kuti avhiringidzwe ne server hardware), i.e. iyo node yezvivakwa iyo Ansible ichagadzirisa. Kune yega yega saiti tinogona kutsanangura ma parameter ekubatanidza (senge ansible_host ΠΈ ansible_user), pamwe nekumisikidzwa kwemuenzaniso. Tsanangudzo yezviitiko iri muchikamu hosts.

Ngatitarisei muenzaniso configuration storage-1:

all:
  vars:
    ...

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

  ...

In variable config isu takatsanangura muenzaniso parameters - advertise URI ΠΈ HTTP port.
Pazasi pane muenzaniso parameters app-1 ΠΈ storage-1-replica.

Isu tinofanirwa kuudza Ansible iyo yekubatanidza paramita yemuenzaniso wega wega. Zvinoita sezvine musoro kuunganidza zviitiko mumapoka emuchina chaiwo. Nechinangwa ichi, zviitiko zvinosanganiswa mumapoka host1 ΠΈ host2, uye muboka rimwe nerimwe riri muchikamu chacho vars ma values ​​anoratidzwa ansible_host ΠΈ ansible_user yemuchina mumwe chete. Uye muchikamu hosts - mauto (aka zviitiko) anosanganisirwa muboka iri:

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:

Tinotanga kushanduka hosts.yml. Ngatiwedzere mamwe maenzanisi maviri, storage-2-replica pamushini wekutanga chaiwo uye storage-2 Pechipiri:

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

Tangisa bhuku rekutamba rinoshanda:

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

Ndapota cherechedza sarudzo --limit. Sezvo imwe neimwe cluster muenzaniso iri mugamuchiri mune Ansible mazwi, tinogona kutsanangura zvakajeka kuti ndeapi mamiriro anofanirwa kugadziridzwa paunenge uchiita bhuku rekutamba.

Kudzokera kuWebhu UI http://localhost:8181/admin/cluster/dashboard uye ona zviitiko zvedu zvitsva:

Zviri nyore uye nemasikirwo shandisa zvikumbiro kuTarantool Cartridge (chikamu 1)

Ngatirege kugumira ipapo uye master topology manejimendi.

Topology manejimendi

Ngatisanganise zviitiko zvedu zvitsva kuita replica set storage-2. Ngatiwedzerei boka idzva replicaset_storage_2 uye tsanangura replicaset parameters mune zvinosiyana-siyana nekuenzanisa ne replicaset_storage_1. Muchikamu hosts Ngatiratidze kuti ndedzipi zviitiko zvichabatanidzwa muboka rino (kureva kuti, 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:

Ngatitange bhuku rekutamba zvakare:

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

In parameter --limit Panguva ino takapfuura zita reboka rinoenderana nereplicaset yedu.

Ngationei sarudzo tags.

Basa redu sequentially rinoita mabasa akasiyana siyana, akanyorwa neanotevera ma tag:

  • cartridge-instances: muenzaniso manejimendi (kugadzirisa, kubatana kune nhengo);
  • cartridge-replicasets: topology manejimendi (replicaset manejimendi uye kubviswa zvachose (dzinga) yezviitiko kubva musumbu);
  • cartridge-config: manejimendi emamwe masumbu paramita (vshard bootstrapping, otomatiki failover modhi, mvumo paramita uye application kumisikidza).

Tinogona kunyatso tsanangura kuti ndechipi chikamu chebasa chatinoda kuita, ipapo basa rinodarika mamwe mabasa. Kwatiri isu, isu tinoda kushanda chete neiyo topology, saka isu takatsanangura cartridge-replicasets.

Ngationgororei mugumisiro wekuedza kwedu. Isu tinowana replicaset nyowani pa http://localhost:8181/admin/cluster/dashboard.

Zviri nyore uye nemasikirwo shandisa zvikumbiro kuTarantool Cartridge (chikamu 1)

Hooray!

Edza nekushandura magadzirirwo ezviitiko uye replica seti uye ona kuti iyo cluster topology inoshanduka sei. Unogona kuedza mamiriro akasiyana ekushanda, semuenzaniso. rolling update kana kuwedzera memtx_memory. Basa racho rinoedza kuita izvi pasina kutangazve chiitiko kuitira kudzikisa inogona kudzika nguva yekushandisa kwako.

Usakanganwa kumhanya vagrant haltkumisa iwo chaiwo michina kana wapedza kushanda navo.

Uye chii chiri pasi pehodhi?

Pano ini ndichakuudza zvimwe pamusoro pezvanga zvichiitika pasi pehodhi yebasa rinonzwisisika panguva yekuedza kwedu.

Ngatitarisei kuendesa iyo Cartridge application nhanho nhanho.

Kuisa iyo package uye kutanga zviitiko

Kutanga iwe unofanirwa kuendesa iyo package kune server uye kuiisa. Parizvino iro basa rinogona kushanda neRPM uye DEB mapakeji.

Tevere tinovhura zviitiko. Zvese zviri nyore pano: imwe neimwe muenzaniso yakaparadzana systemd-service. Ndichakupa muenzaniso:

$ systemctl start myapp@storage-1

Uyu murairo uchavhura muenzaniso storage-1 Apps myapp. Iyo yakatangwa chiitiko ichatsvaga yayo configuration Π² /etc/tarantool/conf.d/. Instance logs inogona kutariswa uchishandisa journald.

Unit file /etc/systemd/system/[email protected] ye systemd sevhisi ichaunzwa pamwe chete nepakeji.

Ansible ane akavakirwa-mukati mamodule ekuisa mapakeji uye maneja systemd masevhisi; isu hatina kugadzira chero chinhu chitsva pano.

Kugadzira cluster topology

Apa ndipo panotangira mafaro. Bvumiranai, zvingave zvisinganzwisisike kunetseka nebasa rakakosha rekuisa mapakeji uye kumhanya systemd-sevhisi.

Iwe unogona kugadzirisa iyo cluster nemaoko:

  • Chekutanga sarudzo: vhura iyo Webhu UI uye tinya pane mabhatani. Yakanyatsokodzera kutanga-kamwe kwezviitiko zvakawanda.
  • Chechipiri sarudzo: unogona kushandisa GraphQl API. Pano iwe unogona kutoita otomatiki chimwe chinhu, semuenzaniso, nyora script muPython.
  • Chechitatu sarudzo (yevakasimba-vanoda): enda kune sevha, batanidza kune imwe yezviitiko uchishandisa tarantoolctl connect uye ita zvese zvinodiwa manipulations neLua module cartridge.

Basa guru rekugadzirwa kwedu nderekuita izvi chaizvo, chikamu chakaoma chebasa kwauri.

Ansible inokutendera iwe kunyora yako wega module uye uishandise mune chikamu. Basa redu rinoshandisa mamodule akadai kubata akasiyana masumbu ezvikamu.

Inoshanda sei? Iwe unotsanangura iyo inodiwa mamiriro esumbu mune inozivisa gadziriso, uye iro basa rinopa yega yega module ine yayo yekumisikidza chikamu sekuisa. Iyo module inogamuchira iyo ikozvino mamiriro esumbu uye inoienzanisa neyakagamuchirwa sekuisa. Tevere, kodhi inotangwa kuburikidza nesocket yeimwe yezviitiko, iyo inounza cluster kune inodiwa nyika.

Migumisiro

Nhasi taudza uye takaratidza nzira yekuendesa application yako kuTarantool Cartridge uye kumisikidza yakapusa topology. Kuti tiite izvi, takashandisa Ansible - chishandiso chine simba chiri nyore kushandisa uye chinokutendera iwe kuti ugadzirise panguva imwe chete akawanda ezvivakwa node (munyaya yedu, masumbu ezviitiko).

Pamusoro takatarisa imwe yenzira dzakawanda dzekutsanangura magadzirirwo emasumbu uchishandisa Ansible. Kana wangonzwa wagadzirira kuenderera mberi, ongorora zvakanakisisa zviito pakunyora mabhuku ekutamba. Unogona kuwana zviri nyore kubata yako topology uchishandisa group_vars ΠΈ host_vars.

Nenguva isipi isu tichakuudza nzira yekudzima zvachose (kudzinga) zviitiko kubva kumusoro, bootstrap vshard, tonga otomatiki failover mode, gadzirisa mvumo uye gadzira iyo cluster config. Panguva ino, unogona kudzidza uri woga zvinyorwa uye edza nekuchinja cluster parameters.

Kana chimwe chinhu chisingashande, iva nechokwadi chekuti ndizivise isu nezve dambudziko. Tichagadzirisa zvese nekukurumidza!

Source: www.habr.com

Voeg