Ho Kenya Likopo Habonolo le ka Tlhaho ho Tarantool Cartridge (Karolo ea 1)

Ho Kenya Likopo Habonolo le ka Tlhaho ho Tarantool Cartridge (Karolo ea 1)

Re se re buile ka Cartridge ea Tarantool, e u lumellang hore u ntlafatse lits'ebetso tse ajoang le ho li paka. Ha ho na letho le setseng: ithute ho tsamaisa le ho laola lits'ebetso tsena. Se ke oa tšoenyeha, re nahanne ka tsohle! Re kopantse mekhoa eohle e metle ea ho sebetsa le Tarantool Cartridge mme re ngotse ho nahanela-karolo, e tla senya sephutheloana hore e be li-server, qala maemo, u li kopanye hore e be sehlopha, u lokise tumello, bootstrap vshard, u nolofalletse ho falla ka mokhoa o itekanetseng le ho pata "cluster config".

E thahasellisa? Joale ke botsa tlas'a sehiloeng, re tla bolela le ho bontša tsohle.

A re qaleng ka mohlala

Re tla fana ka karolo feela ea ts'ebetso ea karolo ea rona. U ka fumana tlhaloso e felletseng ea likarolo tsohle tsa eona le li-parameter tsa ho kenya litokomane. Empa ho molemo ho leka hang ho feta ho bona makhetlo a lekholo, kahoo ha re sebeliseng kopo e nyenyane.

Tarantool Cartridge e na le thuto ho etsa kopo e nyane ea Cartridge e bolokang tlhahisoleseling mabapi le bareki ba banka le li-account tsa bona, hape e fana ka API bakeng sa ho laola data ka HTTP. Ho etsa sena, kopo e hlalosa likarolo tse peli tse ka khonehang: api и storagee ka abelwang mehlala.

Cartridge ka boeona ha e bue letho ka mokhoa oa ho qala lits'ebetso, e fana feela ka bokhoni ba ho hlophisa maemo a seng a ntse a sebetsa. Mosebelisi o tlameha ho etsa tse ling ka boeena: senya lifaele tsa tlhophiso, qala lits'ebeletso ebe o theha topology. Empa re ke ke ra etsa tsena tsohle, Ansible o tla re etsetsa tsona.

Ho tloha ho mantswe ho isa diketsong

Kahoo, a re ke re sebeliseng kopo ea rona ho mechini e 'meli ea sebele 'me re thehe topology e bonolo:

  • Replicaset app-1 e tla bapala karolo apie kenyeletsang karolo vshard-router. Ho tla ba le mohlala o le mong feela mona.
  • replicaset storage-1 phetha karolo storage (mme ka nako e tšoanang vshard-storage), mona re eketsa mehlala e 'meli ho tloha mechine e fapaneng.

Ho Kenya Likopo Habonolo le ka Tlhaho ho Tarantool Cartridge (Karolo ea 1)

Ho etsa mohlala, re hloka Moferefere и Ea nahanang (phetolelo ea 2.8 kapa hamorao).

Karolo ka boeona ke Ansible Galaxy. Ena ke sebaka sa polokelo se u lumellang hore u arolelane mosebetsi oa hau le ho sebelisa likarolo tse seng li entsoe.

Kopanya polokelo ka mohlala:

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

Re phahamisa mechini e hlakileng:

$ vagrant up

Kenya karolo e loketseng ea Tarantool Cartridge:

$ ansible-galaxy install tarantool.cartridge,1.0.1

Etsa karolo e kentsoeng:

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

Re emetse pheletso ea ts'ebetso ea buka ea ho bapala, e ea ho http://localhost:8181/admin/cluster/dashboard 'me u natefeloe ke sephetho:

Ho Kenya Likopo Habonolo le ka Tlhaho ho Tarantool Cartridge (Karolo ea 1)

O ka tšela data. Pholile, ho joalo?

Joale a re boneng hore na re ka sebetsana joang le sena, 'me ka nako e ts'oanang re kenye setšoantšo se seng sa topology.

Re qala ho utloisisa

Joale ho etsahetse’ng?

Re na le li-VM tse peli mme re tsamaisa buka ea ho bapala e loketseng e thehileng sehlopha sa rona. Ha re shebeng litaba tsa faele 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

Ha ho letho le thahasellisang le etsahalang mona, re qala karolo e utloahalang, e bitsoang tarantool.cartridge.

Lintho tsohle tsa bohlokoa ka ho fetisisa (e leng, tlhophiso ea lihlopha) e teng inventory-faele 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:

Seo re se hlokang feela ke ho ithuta ho laola maemo le likopi ka ho fetola litaba tsa faele ena. Ka mor'a moo, re tla eketsa likarolo tse ncha ho eona. E le hore u se ke ua ferekanngoa hore na u li kenye hokae, u ka sheba phetolelong ea ho qetela ea faele ena, hosts.updated.yml, e leng sebakeng sa polokelo ea mohlala.

Tsamaiso ea maemo

Mabapi le Ansible, mohlala o mong le o mong ke moeti (o se ke oa ferekanngoa le seva sa tšepe), i.e. node ea meaho eo Ansible e tla e laola. Bakeng sa moamoheli e mong le e mong, re ka hlakisa liparamente tsa khokahano (joalo ka ansible_host и ansible_user), hammoho le tlhophiso ea mohlala. Tlhaloso ea mehlala e karolong hosts.

Nahana ka tlhophiso ea mohlala storage-1:

all:
  vars:
    ...

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

  ...

Ka ho feto-fetoha config re hlalositse li-parameter tsa mohlala - advertise URI и HTTP port.
Ka tlase ke li-parameter tsa mohlala app-1 и storage-1-replica.

Re hloka ho bolella Ansible li-parameter tsa khokahano bakeng sa mohlala o mong le o mong. Ho bonahala ho utloahala ho arola maemo ka lihlopha tsa mochini oa sebele. Ho etsa sena, mehlala e kopantsoe ka lihlopha. host1 и host2, le sehlopheng ka seng karolong eo vars litekanyetso ansible_host и ansible_user bakeng sa mochine o le mong oa sebele. Le karolong hosts - baamoheli (ke mehlala) ba kenyellelitsoeng sehlopheng sena:

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:

Re qala ho fetoha hosts.yml. Ha re kenye mehlala e meng e 'meli, storage-2-replica mochine oa pele oa sebele le storage-2 Ea bobeli:

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

Etsa buka ea ho bapala e loketseng:

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

Ela hloko khetho --limit. Kaha mohlala o mong le o mong oa sehlopha ke moamoheli ka mantsoe a Ansible, re ka hlakisa ka ho hlaka hore na ke maemo afe a lokelang ho hlophisoa ha ho sebetsa buka ea ho bapala.

Khutlela ho Web UI http://localhost:8181/admin/cluster/dashboard 'me u shebe liketsahalo tsa rona tse ncha:

Ho Kenya Likopo Habonolo le ka Tlhaho ho Tarantool Cartridge (Karolo ea 1)

Re ke ke ra phomola 'me re tla ipabola taolong ea topology.

Tsamaiso ea thuto-thuto

Ha re kopanye mehlala ea rona e mecha ho etsa mohlala storage-2. Kenya sehlopha se secha replicaset_storage_2 le ho hlalosa ka mefuta-futa ea eona liparamente tsa replicaset ka papiso le replicaset_storage_1. Karolong hosts hlakisa hore na ke mehlala efe e tla kenyeletsoa sehlopheng sena (ke hore, replica sete ea rona):

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

Ha re qaleng buka ea ho bapala hape:

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

Ka paramente --limit rona lekhetlong lena re fetisitse lebitso la sehlopha se lumellanang le sehatisi sa rona.

Nahana ka khetho tags.

Karolo ea rona e etsa mesebetsi e fapaneng ka tatellano, e tšoailoeng ka li-tag tse latelang:

  • cartridge-instances: tsamaiso ea mohlala (tlhophiso, khokahanyo ho litho);
  • cartridge-replicasets: tsamaiso ea topology (taolo ea likopi le ho tlosa ka ho sa feleng (ho leleka) liketsahalo ho tsoa sehlopheng);
  • cartridge-config: Laola likarolo tse ling tsa lihlopha (vshard bootstrapping, mode automatic failover mode, tumello ea tumello le tlhophiso ea kopo).

Re ka hlakisa ka ho hlaka hore na ke karolo efe ea mosebetsi eo re batlang ho e etsa, ebe karolo e tla tlola mesebetsi e meng. Tabeng ea rona, re batla ho sebetsa feela le topology, kahoo re boletse cartridge-replicasets.

A re hlahlobeng liphello tsa boiteko ba rōna. Ho fumana replicaset e ncha http://localhost:8181/admin/cluster/dashboard.

Ho Kenya Likopo Habonolo le ka Tlhaho ho Tarantool Cartridge (Karolo ea 1)

Hooray!

Leka ka maemo a ho hlophisa bocha le likopi 'me u bone hore na topology ea sehlopha e fetoha joang. U ka leka maemo a fapaneng a ts'ebetso, mohlala, ntlafatso ea rolling kapa ho eketseha memtx_memory. Karolo e tla leka ho etsa sena ntle le ho qala mohlala hape ho fokotsa nako e ka bang teng ea kopo ea hau.

Se lebale ho matha vagrant haltho emisa li-VM ha u qetile ka tsona.

Hona ke eng e ka tlas'a sekoahelo?

Mona ke tla bua haholoanyane ka se etsahetseng tlas'a hood ea karolo e utloahalang nakong ea liteko tsa rona.

Ha re shebeng ho tsamaisa kopo ea Cartridge mohato ka mohato.

Ho kenya sephutheloana le maemo a ho qala

Pele u lokela ho isa sephutheloana ho seva ebe u se kenya. Hona joale karolo e ka sebetsa le liphutheloana tsa RPM le DEB.

Ka mor'a moo, re qala liketsahalo. Ntho e 'ngoe le e' ngoe e bonolo haholo mona: mohlala o mong le o mong o arohane systemd- tšebeletso. Ke bua ka mohlala:

$ systemctl start myapp@storage-1

Taelo ena e tla qala mohlala storage-1 ditiriso myapp. Mohlala o qalileng o tla shebana le eona tlhophiso в /etc/tarantool/conf.d/. Li-logs tsa mohlala li ka bonoa ho sebelisoa journald.

Faele ea yuniti /etc/systemd/system/[email protected] bakeng sa ts'ebeletso ea systemd e tla tlisoa le sephutheloana.

Ansible e na le li-module tse hahelletsoeng kahare bakeng sa ho kenya liphutheloana le ho tsamaisa lits'ebeletso tsa sistimi, ha re so qape letho le lecha mona.

Ho lokisa topology ea lihlopha

'Me mona ho qala ho thahasellisang ka ho fetisisa. Lumellana, e ka ba ntho e makatsang ho khathatseha ka karolo e khethehileng ea ansible bakeng sa ho kenya liphutheloana le ho sebetsa systemd-litšebeletso.

U ka theha sehlopha ka letsoho:

  • Khetho ea pele: bula UI ea Webo ebe o tobetsa likonopo. Bakeng sa qaleho ea nako e le 'ngoe ea maemo a' maloa, e loketse haholo.
  • Khetho ea bobeli: o ka sebelisa GraphQl API. Mona u se u ka iketsetsa ntho e itseng, ka mohlala, ngola script ho Python.
  • Khetho ea boraro (bakeng sa ba matla moeeng): e-ea ho seva, hokela ho e 'ngoe ea maemo a sebelisang tarantoolctl connect 'me u etse lintho tsohle tse hlokahalang ka module ea Lua cartridge.

Mosebetsi o ka sehloohong oa tlhahiso ea rona ke ho etsa sena, karolo e thata ka ho fetisisa ea mosebetsi ho uena.

Ansible e o lumella ho ngola mojule oa hau le ho o sebelisa ka karolo. Karolo ea rona e sebelisa li-module tsena ho laola likarolo tse fapaneng tsa sehlopha.

E sebetsa joang? U hlalosa boemo bo lakatsehang ba sehlopha ka har'a tlhophiso ea phatlalatso, 'me karolo e fa mojule ka mong karolo ea eona ea tlhophiso joalo ka tlhahiso. Mojule o amohela boemo ba hona joale ba sehlopha mme o bo bapisa le ho kenya letsoho. Ka mor'a moo, khoutu e tsamaisoa ka soketeng ea e 'ngoe ea maemo, e tlisang sehlopha sebakeng seo u se batlang.

Liphello

Kajeno re boletse le ho bonts'a mokhoa oa ho kenya kopo ea hau ho Tarantool Cartridge le ho theha topology e bonolo. Ho etsa sena, re sebelisitse Ansible, sesebelisoa se matla seo ho leng bonolo ho se sebelisa mme se u lumella hore ka nako e le 'ngoe u lokise li-node tse ngata tsa meaho (ho rona, tsena ke maemo a lihlopha).

Ka holimo, re sebetsana le e 'ngoe ea mekhoa e mengata ea ho hlalosa tlhophiso ea sehlopha ka ho sebelisa Ansible. Hang ha u tseba hore u se u loketse ho tsoela pele, ithute mekhoa e metle bakeng sa ho ngola libuka tsa ho bapala. U ka fumana ho le bonolo ho laola topology ka group_vars и host_vars.

Haufinyane re tla u bolella mokhoa oa ho tlosa (ho leleka) ka ho sa feleng maemo ho tloha ho topology, bootstrap vshard, ho laola mokhoa o itekanetseng oa failover, ho lokisa tumello le ho pata sehlopha sa lihlopha. Khabareng, u ka ithuta u le mong litokomane le ho leka ho fetola liparamente tsa cluster.

Haeba ho hong ho sa sebetse, etsa bonnete tsebisa rona ka bothata. Re tla e senya kapele!

Source: www.habr.com

Eketsa ka tlhaloso