Faka kalula futhi ngokwemvelo izinhlelo zokusebenza ku-Tarantool Cartridge (ingxenye 1)

Faka kalula futhi ngokwemvelo izinhlelo zokusebenza ku-Tarantool Cartridge (ingxenye 1)

Sesike sakhuluma ngayo I-Cartridge ye-Tarantool, okuvumela ukuthi uthuthukise izinhlelo zokusebenza ezisabalalisiwe futhi uzipakishe. Okusele nje ukufunda ukuthi ungazisebenzisa kanjani lezi zinhlelo zokusebenza futhi uzilawule. Ungakhathazeki, sikuhlanganise konke! Sihlanganise zonke izindlela ezingcono kakhulu zokusebenza ne-Tarantool Cartridge futhi sabhala indima enengqondo, ezosabalalisa iphakheji kumaseva, iqalise izimo, izihlanganise zibe yiqoqo, lungiselela ukugunyazwa, i-bootstrap vshard, inike amandla i-failover ezenzakalelayo futhi ihlanganise ukulungiselelwa kweqoqo.

Kuyathakazelisa? Bese sicela, ngaphansi kokusikwa, sizokutshela futhi sikubonise konke.

Ake siqale ngesibonelo

Sizobheka kuphela ingxenye yokusebenza kwendima yethu. Ungathola njalo incazelo ephelele yawo wonke amakhono ayo kanye nemingcele yokufaka kuyo imibhalo. Kodwa kungcono ukuzama kanye kunokuyibona izikhathi eziyikhulu, ngakho-ke ake sithumele isicelo esincane.

I-Tarantool Cartridge ine okokufundisa ukwakha uhlelo lokusebenza oluncane lweCartridge olugcina ulwazi olumayelana namakhasimende asebhange nama-akhawunti awo, futhi luhlinzeka nge-API yokuphathwa kwedatha nge-HTTP. Ukufeza lokhu, isithasiselo sichaza izindima ezimbili ezingaba khona: api и storage, okungabelwa izimo.

I-Cartridge ngokwayo ayisho lutho mayelana nendlela yokuqalisa izinqubo, inikeza kuphela amandla okumisa izimo ezisebenzayo kakade. Umsebenzisi kufanele azenzele yena konke okunye: ahlele amafayela wokumisa, aqale izinsizakalo futhi alungiselele i-topology. Kodwa ngeke sikwenze konke lokhu; u-Ansible uzosenzela kona.

Kusukela emazwini kuya ezenzweni

Ngakho-ke, ake sisebenzise uhlelo lwethu lokusebenza emishinini emibili ebonakalayo futhi simise i-topology elula:

  • Ukuphindaphinda app-1 izosebenzisa indima api, okuhlanganisa indima vshard-router. Kuzoba nesibonelo esisodwa kuphela lapha.
  • Ukuphindaphinda storage-1 ufeza indima storage (futhi ngesikhathi esifanayo vshard-storage), lapha sizofaka izimo ezimbili ezivela emishinini ehlukene.

Faka kalula futhi ngokwemvelo izinhlelo zokusebenza ku-Tarantool Cartridge (ingxenye 1)

Ukwenza isibonelo esisidingayo Umfokazi и Ansible (inguqulo 2.8 noma ngaphezulu).

Indima uqobo lwayo ingaphakathi I-Ansible Galaxy. Lena inqolobane ekuvumela ukuthi wabelane ngomsebenzi wakho futhi usebenzise izindima ezenziwe ngomumo.

Ake sihlanganise indawo yokugcina ngesibonelo:

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

Siphakamisa imishini ebonakalayo:

$ vagrant up

Faka indima efanelekile ye-Tarantool Cartridge:

$ ansible-galaxy install tarantool.cartridge,1.0.1

Yethula indima efakiwe:

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

Silinda ukuthi i-playbook iqedele ukwenza, iya ku http://localhost:8181/admin/cluster/dashboard futhi ujabulele umphumela:

Faka kalula futhi ngokwemvelo izinhlelo zokusebenza ku-Tarantool Cartridge (ingxenye 1)

Ungalayisha idatha. Kupholile, akunjalo?

Manje ake sithole ukuthi singasebenza kanjani nalokhu, futhi ngesikhathi esifanayo sengeza enye isethi ye-replica ku-topology.

Ake siqale ukukuqonda

Pho kwenzekani?

Sakha imishini emibili ebonakalayo futhi sethula incwadi yokudlala enengqondo elungise iqoqo lethu. Ake sibheke okuqukethwe ifayela 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

Akukho okuthakazelisayo okwenzekayo lapha, ake sethule indima enengqondo ebizwa ngokuthi tarantool.cartridge.

Zonke izinto ezibaluleke kakhulu (okungukuthi, ukucushwa kweqoqo) zitholakala yokusungula-ifayela 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:

Esikudingayo nje ukufunda ukuphatha izimo nezifaniso ngokushintsha okuqukethwe kwaleli fayela. Okulandelayo sizokwengeza izigaba ezintsha kuyo. Ukuze ungadideki ukuthi ungawengeza kuphi, ungabheka inguqulo yokugcina yaleli fayela, hosts.updated.yml, esendaweni yesibonelo.

Ukuphathwa kwezigameko

Ngokwemibandela engaqondakali, isibonelo ngasinye singusokhaya (okungafanele kudidaniswe neseva yehadiwe), i.e. indawo yengqalasizinda ezophathwa yi-Ansible. Ngomsingathi ngamunye singacacisa imingcele yokuxhuma (njenge ansible_host и ansible_user), kanye nokucushwa kwesibonelo. Incazelo yezimo ikusigaba hosts.

Ake sibheke ukucushwa kwesibonelo storage-1:

all:
  vars:
    ...

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

  ...

Ngokuguquguqukayo config sicacise amapharamitha esibonelo - advertise URI и HTTP port.
Ngezansi kukhona amapharamitha esibonelo app-1 и storage-1-replica.

Sidinga ukutshela u-Ansible amapharamitha wokuxhuma kusibonelo ngasinye. Kubonakala kunengqondo ukuhlanganisa izimo zibe amaqembu emishini ebonakalayo. Ngale njongo, izimo zihlanganiswa zibe ngamaqembu host1 и host2, naseqenjini ngalinye esigabeni vars amanani akhonjisiwe ansible_host и ansible_user ngomshini owodwa we-virtual. Futhi esigabeni hosts - ababungazi (izikhathi ze-aka) ezifakwe kuleli qembu:

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:

Siqala ukushintsha hosts.yml. Ake sengeze ezinye izibonelo ezimbili, storage-2-replica emshinini wokuqala we-virtual futhi storage-2 Kwesibili:

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

Yethula incwadi yokudlala enengqondo:

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

Sicela uqaphele inketho --limit. Njengoba i-cluster ngayinye ingumsingathi ngamatemu Afaneleka, singacacisa ngokucacile ukuthi yiziphi izimo okufanele zilungiswe lapho kusetshenziswa i-playbook.

Ukubuyela emuva ku-Web UI http://localhost:8181/admin/cluster/dashboard futhi ubone izimo zethu ezintsha:

Faka kalula futhi ngokwemvelo izinhlelo zokusebenza ku-Tarantool Cartridge (ingxenye 1)

Masingayeki lapho futhi nokuphatha i-topology.

Ukuphathwa kwe-Topology

Ake sihlanganise izehlakalo zethu ezintsha zibe isethi yokufanisa storage-2. Masingeze iqembu elisha replicaset_storage_2 futhi uchaze amapharamitha wokuphindaphinda kokuguquguqukayo kwawo ngokufanisa ne replicaset_storage_1. Esigabeni hosts Ake sikhombise ukuthi yiziphi izimo ezizofakwa kuleli qembu (okungukuthi, isethi yethu yokukopisha):

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

Asiqale futhi ibhuku lokudlala:

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

Kupharamitha --limit Kulokhu sidlulise igama leqembu elihambisana nekhophi yethu.

Ake sicabangele inketho tags.

Indima yethu yenza imisebenzi eyahlukene ngokulandelana kwayo, ephawulwe ngalamathegi alandelayo:

  • cartridge-instances: ukuphathwa kwesibonelo (ukumisa, ukuxhumana nobulungu);
  • cartridge-replicasets: ukuphathwa kwe-topology (ukuphathwa kwe-replicaset nokususwa unomphela (ukuxosha) izimo eqenjini);
  • cartridge-config: Ukuphathwa kwamanye amapharamitha eqoqo (i-vshard bootstrapping, imodi ye-faillover ezenzakalelayo, imingcele yokugunyazwa nokucushwa kwesicelo).

Singacacisa ngokusobala ukuthi iyiphi ingxenye yomsebenzi esifuna ukuwenza, bese indima izokweqa eminye imisebenzi. Esimweni sethu, sifuna ukusebenza nge-topology kuphela, ngakho sicacisile cartridge-replicasets.

Ake sihlole umphumela wemizamo yethu. Sithola i-replicaset entsha ivuliwe http://localhost:8181/admin/cluster/dashboard.

Faka kalula futhi ngokwemvelo izinhlelo zokusebenza ku-Tarantool Cartridge (ingxenye 1)

Hooray!

Linga ngokushintsha ukucushwa kwezimo namasethi okukopisha futhi ubone ukuthi i-cluster topology ishintsha kanjani. Ungazama izimo zokusebenza ezihlukene, isb. ukuvuselela kabusha noma andise memtx_memory. Indima izozama ukwenza lokhu ngaphandle kokuqala kabusha isibonelo ukuze kwehliswe isikhathi sokungasebenzi esingaba khona sohlelo lwakho lokusebenza.

Ungakhohlwa ukugijima vagrant haltukumisa imishini ebonakalayo lapho usuqedile ukusebenza nayo.

Futhi yini engaphansi kwekhodi?

Lapha ngizokutshela kabanzi mayelana nokwakwenzeka ngaphansi kwesibopho sendima enengqondo phakathi nokuhlolwa kwethu.

Ake sibheke ukufaka isicelo seCartridge isinyathelo ngesinyathelo.

Ukufaka iphakheji kanye nezimo zokuqala

Okokuqala udinga ukuletha iphakheji kuseva futhi uyifake. Okwamanje indima ingasebenza namaphakheji e-RPM kanye ne-DEB.

Okulandelayo sethula izimo. Konke kulula kakhulu lapha: isibonelo ngasinye sihlukile systemd-inkonzo. Ngizokunikeza isibonelo:

$ systemctl start myapp@storage-1

Lo myalo uzokwethula isibonelo storage-1 izicelo myapp. Isigameko esethulwe sizobheka sona ukumisa в /etc/tarantool/conf.d/. Amalogi wesibonelo angabukwa kusetshenziswa journald.

Ifayela leyunithi /etc/systemd/system/[email protected] yesevisi ye-systemd izolethwa kanye nephakheji.

I-Ansible inamamojula akhelwe ngaphakathi okufaka amaphakheji nokuphatha izinsiza zesistimu; akukho okusha esisungule lapha.

Ukusetha i-topology yeqoqo

Yilapho ubumnandi buqala khona. Vuma, kungaba yinqaba ukuzihlupha ngendima ekhethekile ebhekelela ukufakwa kwamaphakheji nokusebenza systemd-izinsizakalo.

Ungakwazi ukumisa iqoqo ngokwenza:

  • Inketho yokuqala: vula i-Web UI bese uchofoza izinkinobho. Ilungele ukuqala kwesikhathi esisodwa kwezimo eziningana.
  • Inketho yesibili: ungasebenzisa i-GraphQl API. Lapha usungakwazi ukwenza okuthile ngokuzenzakalelayo, isibonelo, bhala iskripthi kuPython.
  • Inketho yesithathu (kwabanamandla): iya kuseva, xhuma kwesinye sezimo usebenzisa tarantoolctl connect futhi wenze konke ukukhohlisa okudingekayo ngemojula ye-Lua cartridge.

Umsebenzi oyinhloko wokusungulwa kwethu ukwenza lokhu kanye, ingxenye enzima kakhulu yomsebenzi kuwe.

I-Ansible ikuvumela ukuthi ubhale imojula yakho futhi uyisebenzise endimeni. Indima yethu isebenzisa amamojula anjalo ukuphatha izingxenye zeqoqo ezahlukahlukene.

Isebenza kanjani? Uchaza isimo esifiswayo seqoqo ekucushweni kwesimemezelo, futhi indima ihlinzeka ngemojuli ngayinye nesigaba sayo sokumisa njengokufakwayo. Imojula ithola isimo samanje seqoqo futhi iqhathanise nalokho okutholwe njengokufakiwe. Okulandelayo, ikhodi yethulwa ngesokhethi kwesinye sezimo, okuletha iqoqo kusimo esifiswayo.

Imiphumela

Namuhla sitshele futhi sabonisa indlela yokufaka isicelo sakho ku-Tarantool Cartridge futhi usethe i-topology elula. Ukwenza lokhu, sisebenzise i-Ansible - ithuluzi elinamandla elisebenziseka kalula futhi likuvumela ukuthi ulungise ngesikhathi esisodwa izindawo eziningi zengqalasizinda (kithi, izimo zeqoqo).

Ngenhla sibheke enye yezindlela eziningi zokuchaza ukucushwa kweqoqo usebenzisa i-Ansible. Uma usuzizwa ulungele ukuqhubeka, hlola imikhuba engcono kakhulu ekubhaleni izincwadi zokudlala. Ungase ukuthole kulula ukuphatha i-topology yakho usebenzisa group_vars и host_vars.

Maduze nje sizokutshela ukuthi ungazisusa kanjani unomphela (ukuxosha) izimo ku-topology, i-bootstrap vshard, phatha imodi ye-failiover ezenzakalelayo, lungiselela ukugunyazwa futhi unamathisele ukulungiselelwa kweqoqo. Okwamanje, ungafunda wedwa imibhalo futhi uzame ngokushintsha amapharamitha eqoqo.

Uma okuthile kungasebenzi, qiniseka ukwenza kanjalo ngazise nathi ngenkinga. Sizolungisa konke ngokushesha!

Source: www.habr.com

Engeza amazwana