Bi hêsanî û xwezayî serlêdanan li Tarantool Cartridge bicîh bikin (beş 1)

Bi hêsanî û xwezayî serlêdanan li Tarantool Cartridge bicîh bikin (beş 1)

Me berê jî li ser axivî Tarantool Cartridge, ku dihêle hûn serîlêdanên belavkirî pêşve bibin û wan pak bikin. Tiştê ku maye ev e ku meriv fêr bibe ka meriv van sepanan çawa bi cih dike û wan îdare dike. Xem neke, me her tişt girtiye! Me ji bo xebata bi Tarantool Cartridge re hemî pratîkên çêtirîn berhev kir û nivîsand nesîb-rola, ku dê pakêtê li pêşkêşkeran belav bike, mînakan bide destpêkirin, wan di komekê de bike yek, destûrnameyê mîheng bike, vshard bootstrap bike, têkçûna otomatîkî çalak bike û mîhengê komê bike.

Balkêş? Wê hingê ji kerema xwe, di bin qutbûnê de, em ê ji we re vebêjin û her tiştî nîşanî we bidin.

Ka em bi mînakek dest pê bikin

Em ê tenê li beşek fonksiyona rola xwe binêrin. Hûn dikarin her gav ravekek bêkêmasî ya hemî jêhatîbûn û pîvanên têketinê tê de bibînin belgekirin. Lê çêtir e ku meriv carekê biceribîne ji sed carî dîtina wê, ji ber vê yekê em serîlêdanek piçûk saz bikin.

Tarantool Cartridge heye tutorial ji bo afirandina serîlêdanek piçûk a Cartridge ku agahdariya li ser xerîdarên bankê û hesabên wan hilîne, û di heman demê de ji bo rêveberiya daneyê bi riya HTTP-ê jî API peyda dike. Ji bo gihîştina vê yekê, pêvek du rolên gengaz diyar dike: api и storage, ku dikare ji bo nimûneyan were destnîşankirin.

Cartridge bixwe tiştek nabêje ka meriv çawa pêvajoyan dest pê dike, ew tenê şiyana mîhengkirina mînakên ku berê têne xebitandin peyda dike. Pêdivî ye ku bikarhêner bi xwe ya mayî bike: pelên mîhengê saz bike, karûbaran bide destpêkirin û topolojiyê mîheng bike. Lê em ê van hemûyan nekin; Ansible wê ji bo me bike.

Ji gotinan heta kirinan

Ji ber vê yekê, bila em serîlêdana xwe li du makîneyên virtual bicîh bikin û topolojîyek hêsan saz bikin:

  • Replicaset app-1 dê rola xwe pêk bînin api, ku rola xwe dihewîne vshard-router. Dê li vir tenê mînakek hebe.
  • Replicaset storage-1 rolê pêk tîne storage (û di heman demê de vshard-storage), li vir em ê du mînakan ji makîneyên cihê lê zêde bikin.

Bi hêsanî û xwezayî serlêdanan li Tarantool Cartridge bicîh bikin (beş 1)

Ji bo ku em nimûneyê bimeşînin hewce ne vagrant и Ansible (guhertoya 2.8 an kevntir).

Rola xwe di nav de ye Galaxy Ansible. Ev depoyek e ku dihêle hûn xebata xwe parve bikin û rolên amade bikar bînin.

Ka em bi mînakek depoyê klon bikin:

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

Em makîneyên virtual mezin dikin:

$ vagrant up

Rola kartêker a Tarantool saz bikin:

$ ansible-galaxy install tarantool.cartridge,1.0.1

Rola sazkirî dest pê bikin:

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

Em li bendê ne ku pirtûka lîstikê temam bibe, biçin http://localhost:8181/admin/cluster/dashboard û ji encamê kêfxweş bibin:

Bi hêsanî û xwezayî serlêdanan li Tarantool Cartridge bicîh bikin (beş 1)

Hûn dikarin daneyan barkirin. Cool, rast?

Naha em fêr bibin ka meriv çawa bi vê yekê re bixebite, û di heman demê de kopiyek din li topolojiyê zêde bike.

Werin em dest bi fêhmkirina wê bikin

Îcar çi qewimî?

Me du makîneyên virtual saz kirin û pirtûkek lîstikê ya bêkêmasî ya ku koma me mîheng kir da destpêkirin. Ka em li naveroka dosyayê binêrin 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

Tiştek balkêş li vir diqewime, bila em rolek berbiçav bi navê bidin destpêkirin tarantool.cartridge.

Hemî tiştên herî girîng (ango, veavakirina komê) tê de cih digirin ambaran de-dosî 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:

Tiştê ku em hewce ne ev e ku em fêr bibin ka meriv çawa bi guheztina naverokên vê pelê mînak û replikasetan îdare dike. Piştre em ê beşên nû lê zêde bikin. Ji bo ku hûn li ku derê lê zêde bikin tevlihev nebin, hûn dikarin li guhertoya dawî ya vê pelê binêrin, hosts.updated.yml, ku di depoya nimûneyê de ye.

rêveberiya nimûne

Bi şertên Ansible, her mînakek mêvandarek e (ku bi serverek hardware re neyê tevlihev kirin), ango. girêka binesaziyê ya ku Ansible dê birêve bibe. Ji bo her mêvandar em dikarin pîvanên girêdanê diyar bikin (wek ansible_host и ansible_user), û her weha veavakirina nimûneyê. Danasîna mînakan di beşê de ye hosts.

Ka em li veavakirina nimûneyê binêrin storage-1:

all:
  vars:
    ...

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

  ...

Di guherbar config me pîvanên nimûne diyar kir - advertise URI и HTTP port.
Li jêr pîvanên nimûne hene app-1 и storage-1-replica.

Pêdivî ye ku em ji bo her nimûneyê pîvanên pêwendiyê ji Ansible re vebêjin. Bi mentiqî xuya dike ku mînakan di komên makîneya virtual de kom bikin. Ji bo vê armancê, nimûne di koman de têne hev kirin host1 и host2, û di her komê de di beşê de vars nirx têne destnîşan kirin ansible_host и ansible_user ji bo yek makîneya virtual. Û di beşê de hosts - mêvandar (wek mînak) ku di vê komê de cih digirin:

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:

Em dest bi guhertinê dikin hosts.yml. Ka em du mînakên din lê zêde bikin, storage-2-replica li ser yekem virtual machine û storage-2 Li ser duyemîn:

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

Pirtûka lîstikê ya ansible dest pê bikin:

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

Ji kerema xwe vebijarkê hişyar bikin --limit. Ji ber ku her mînakek komê di şertên Ansible de mêvandar e, em dikarin bi eşkere diyar bikin ka kîjan mînak dema ku pirtûka lîstikê tê darve kirin divê werin mîheng kirin.

Vegere ser UI-ya Webê http://localhost:8181/admin/cluster/dashboard û mînakên me yên nû bibînin:

Bi hêsanî û xwezayî serlêdanan li Tarantool Cartridge bicîh bikin (beş 1)

Ka em li wir nesekinin û rêveberiya topolojiyê master bikin.

Rêveberiya topolojiyê

Werin em mînakên xwe yên nû di nav komek replica de berhev bikin storage-2. Ka em komek nû lê zêde bikin replicaset_storage_2 û pîvanên replicaset di guhêrbarên wê de bi analojiya bi rave bike replicaset_storage_1. Di beşa hosts Ka em destnîşan bikin ka kîjan mînak dê di vê komê de cih bigirin (ango, berhevoka meya replika):

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

Ka em dîsa dest bi lîstika lîstikê bikin:

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

Di parametreyê de --limit Vê carê me navê koma ku bi replicaset me re têkildar derbas kir.

Werin em vebijarkê bifikirin tags.

Rola me bi rêzdarî peywirên cihêreng pêk tîne, ku bi tagên jêrîn têne nîşankirin:

  • cartridge-instances: rêveberiya nimûneyê (veavakirin, girêdana bi endamtiyê re);
  • cartridge-replicasets: rêveberiya topolojiyê (rêveberiya replicaset û rakirina daîmî (derxistina) mînakan ji komê);
  • cartridge-config: birêvebirina parametreyên din ên komê (bootstrapping vshard, moda têkçûna otomatîkî, parametreyên destûrnameyê û veavakirina serîlêdanê).

Em dikarin bi eşkere diyar bikin ka em dixwazin kîjan beşa xebatê bikin, wê hingê rol dê ji karên mayî derbas bibe. Di doza me de, em dixwazin tenê bi topolojiyê re bixebitin, ji ber vê yekê me diyar kir cartridge-replicasets.

Werin em encama xebatên xwe binirxînin. Em li ser replikasetek nû dibînin http://localhost:8181/admin/cluster/dashboard.

Bi hêsanî û xwezayî serlêdanan li Tarantool Cartridge bicîh bikin (beş 1)

Hooray!

Bi guheztina veavakirina mînakan û setên replica ceribandinê bikin û bibînin ka topolojiya komê çawa diguhere. Hûn dikarin senaryoyên cûda yên xebitandinê biceribînin, mînakî. nûvekirina gerok an zêde bikin memtx_memory. Rol dê hewl bide ku vê yekê bêyî destpêkirina nimûneyê ji nû ve bike da ku wextê gengaz a serîlêdana we kêm bike.

Ji bîr nekin ku birevin vagrant haltji bo rawestandina makîneyên virtual gava ku hûn bi wan re xebata xwe qedandin.

Û di bin hoodê de çi ye?

Li vir ez ê bêtir ji we re bibêjim ka di ceribandinên me de çi diqewime di bin kaxeza rola nesîb de.

Ka em gav bi gav li bicîhkirina serîlêdana Cartridge binêrin.

Sazkirina pakêtê û destpêkirina mînakan

Pêşî hûn hewce ne ku pakêtê radestî serverê bikin û saz bikin. Heya nuha rol dikare bi pakêtên RPM û DEB re bixebite.

Piştre em mînakan didin destpêkirin. Li vir her tişt pir hêsan e: her mînakek cûda ye systemd-xizmetkar. Ez ê mînakek bidim te:

$ systemctl start myapp@storage-1

Ev ferman dê nimûneyê bide destpêkirin storage-1 apps myapp. Mînaka hatî destpêkirin dê li wê bigere veavakirina в /etc/tarantool/conf.d/. Têketinên nimûneyê dikarin bikar bînin journald.

Pelê yekîneyê /etc/systemd/system/[email protected] ji bo karûbarê systemd dê digel pakêtê were radest kirin.

Ansible ji bo sazkirina pakêtan û birêvebirina karûbarên pergalêd modulên çêkirî hene; me li vir tiştek nû îcad nekiriye.

Sazkirina topolojiya komê

Li vir kêfê dest pê dike. Bipejirînim, dê xerîb be ku meriv bi rola taybetî ya Ansible ji bo sazkirina pakêtan û xebitandinê aciz bibe systemd-servîs.

Hûn dikarin komê bi destan mîheng bikin:

  • Vebijarka yekem: UI-ya Webê vekin û li ser bişkokan bikirtînin. Ew ji bo destpêkek yek-carî ya çend mînakan pir maqûl e.
  • Vebijarka duyemîn: hûn dikarin API-a GraphQl bikar bînin. Li vir hûn dikarin jixwe tiştek bixweber bikin, mînakî, skrîptek di Python de binivîsin.
  • Vebijarka sêyemîn (ji bo îradeya bihêz): biçin serverê, bi yek ji mînakên ku bikar tînin ve girêdin tarantoolctl connect û bi modula Lua re hemî manipulasyonên pêwîst pêk bînin cartridge.

Erka sereke ya dahênana me ev e ku em tam vê yekê bikin, beşa herî dijwar a xebatê ji bo we.

Ansible destûrê dide te ku hûn modula xwe binivîsin û di rolek de bikar bînin. Rola me modulên weha bikar tîne da ku pêkhateyên cihêreng ên komê birêve bibe.

Çawa dixebite? Hûn rewşa xwestî ya komê di mîhengek daxuyandî de vedibêjin, û rol ji her module re beşa veavakirina xwe wekî têketinê peyda dike. Modul rewşa heyî ya komê distîne û wê bi ya ku wekî têketinê hatî wergirtin berhev dike. Dûv re, kodek bi navgîniya yek ji mînakan ve tê destpêkirin, ku komê digihîne rewşa xwestî.

Encam

Îro me got û destnîşan kir ka meriv çawa serîlêdana xwe li Tarantool Cartridge-ê bicîh dike û topolojîyek hêsan saz dike. Ji bo vê yekê, me Ansible bikar anî - amûrek hêzdar ku karanîna wê hêsan e û dihêle hûn bi hevdemî gelek girêkên binesaziyê mîheng bikin (di doza me de, mînakên komê).

Li jor me li yek ji gelek awayên danasîna veavakirina komê bi karanîna Ansible nihêrî. Gava ku hûn xwe amade hîs bikin ku biçin pêş, lêkolîn bikin pratîkên herî baş li ser nivîsandina pirtûkên lîstikê. Hûn dikarin hêsantir bibînin ku hûn topolojiya xwe bikar bînin group_vars и host_vars.

Di demek nêzîk de em ê ji we re vebêjin ka meriv çawa bi domdarî mînakan ji topolojiyê jêbirin (derdixe), vshard bootstrap, moda têkçûna otomatîkî birêve dibe, destûrnameyê mîheng dike û mîhengê komê pêça. Di vê navberê de, hûn dikarin bi tena serê xwe bixwînin belgekirin û bi guherîna parametreyên komê biceribîne.

Ger tiştek nexebite, bê guman bikin bêlin em bizanin me li ser pirsgirêkê. Em ê her tiştî zû bi rê ve bibin!

Source: www.habr.com

Add a comment