Ni irọrun ati nipa ti ara lo awọn ohun elo si Tarantool Cartridge (apakan 1)

Ni irọrun ati nipa ti ara lo awọn ohun elo si Tarantool Cartridge (apakan 1)

A ti sọrọ tẹlẹ Tarantool katiriji, eyiti o fun ọ laaye lati ṣe agbekalẹ awọn ohun elo ti a pin kaakiri ati ṣajọ wọn. Gbogbo ohun ti o kù ni lati kọ ẹkọ bi o ṣe le fi awọn ohun elo wọnyi ranṣẹ ati ṣakoso wọn. Maṣe yọ ara rẹ lẹnu, a ti bo gbogbo rẹ! A ṣajọpọ gbogbo awọn iṣe ti o dara julọ fun ṣiṣẹ pẹlu Tarantool Cartridge ati kọ ansible-ipa, eyi ti yoo pin kaakiri package si awọn olupin, awọn iṣẹlẹ ifilọlẹ, ṣọkan wọn sinu iṣupọ kan, tunto aṣẹ, bootstrap vshard, mu ikuna aifọwọyi ṣiṣẹ ati patch konfigi iṣupọ.

Awon nkan? Lẹhinna jọwọ, labẹ gige, a yoo sọ fun ọ ati fi ohun gbogbo han ọ.

Jẹ ká bẹrẹ pẹlu ohun apẹẹrẹ

A yoo wo apakan nikan ti iṣẹ ṣiṣe ti ipa wa. O le rii nigbagbogbo apejuwe pipe ti gbogbo awọn agbara rẹ ati awọn aye igbewọle sinu iwe. Ṣugbọn o dara lati gbiyanju lẹẹkan ju lati rii ni igba ọgọrun, nitorinaa jẹ ki a fi ohun elo kekere kan ranṣẹ.

Tarantool Katiriji ni o ni ikẹkọ lati ṣẹda ohun elo Katiriji kekere kan ti o tọju alaye nipa awọn alabara banki ati awọn akọọlẹ wọn, ati tun pese API fun iṣakoso data nipasẹ HTTP. Lati ṣaṣeyọri eyi, afikun naa ṣe apejuwe awọn ipa meji ti o ṣeeṣe: api и storage, eyi ti o le wa ni sọtọ si instances.

Katiriji funrararẹ ko sọ ohunkohun nipa bii o ṣe le ṣe ifilọlẹ awọn ilana, o pese agbara nikan lati tunto awọn iṣẹlẹ ti nṣiṣẹ tẹlẹ. Olumulo gbọdọ ṣe isinmi funrararẹ: ṣeto awọn faili iṣeto, bẹrẹ awọn iṣẹ ati tunto topology. Ṣugbọn a kii yoo ṣe gbogbo eyi; Agbara yoo ṣe fun wa.

Lati ọrọ si awọn iṣẹ

Nitorinaa, jẹ ki a gbe ohun elo wa si awọn ẹrọ foju meji ati ṣeto topology ti o rọrun kan:

  • Replicaset app-1 yoo mu ipa naa ṣiṣẹ api, eyiti o pẹlu ipa vshard-router. Apeere kan ṣoṣo yoo wa nibi.
  • Replicaset storage-1 muse ipa storage (ati ni akoko kanna vshard-storage), Nibi a yoo ṣafikun awọn iṣẹlẹ meji lati awọn ẹrọ oriṣiriṣi.

Ni irọrun ati nipa ti ara lo awọn ohun elo si Tarantool Cartridge (apakan 1)

Lati ṣiṣẹ apẹẹrẹ ti a nilo Ajinde и O ṣee (ẹya 2.8 tabi agbalagba).

Ipa funrararẹ wa ninu Galaxy ti o ṣeeṣe. Eyi jẹ ibi ipamọ ti o fun ọ laaye lati pin iṣẹ rẹ ati lo awọn ipa ti a ti ṣetan.

Jẹ ki a ṣe ẹda ibi ipamọ pẹlu apẹẹrẹ:

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

A gbe awọn ẹrọ foju soke:

$ vagrant up

Fi ipa ti Tarantool Cartridge sori ẹrọ:

$ ansible-galaxy install tarantool.cartridge,1.0.1

Lọlẹ ipa ti a fi sori ẹrọ:

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

A duro fun iwe-iṣere lati pari ipaniyan, lọ si http://localhost:8181/admin/cluster/dashboard ati gbadun abajade:

Ni irọrun ati nipa ti ara lo awọn ohun elo si Tarantool Cartridge (apakan 1)

O le po si data. Dara, otun?

Nisisiyi ẹ ​​​​jẹ ki a ṣawari bi a ṣe le ṣiṣẹ pẹlu eyi, ati ni akoko kanna fi ẹda miiran kun si topology.

Jẹ ká bẹrẹ lati ro ero o jade

Nitorina kini o ṣẹlẹ?

A ṣeto awọn ẹrọ foju meji ati ṣe ifilọlẹ iwe-iṣere ti o ṣee ṣe ti o tunto iṣupọ wa. Jẹ ki a wo awọn akoonu ti faili naa 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

Ko si ohun ti awon ti o ṣẹlẹ nibi, jẹ ki ká lọlẹ ohun ansible ipa ti a npe ni tarantool.cartridge.

Gbogbo awọn ohun pataki julọ (eyun, iṣeto iṣupọ) wa ninu oja-faili 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:

Gbogbo ohun ti a nilo ni lati kọ ẹkọ bi a ṣe le ṣakoso awọn iṣẹlẹ ati awọn ẹda nipa yiyipada awọn akoonu inu faili yii. Nigbamii ti a yoo fi awọn apakan titun kun si. Ni ibere ki o má ba ni idamu ni ibiti o ti le ṣafikun wọn, o le wo ẹya ikẹhin ti faili yii, hosts.updated.yml, eyi ti o wa ni ibi ipamọ apẹẹrẹ.

Iṣakoso apẹẹrẹ

Ni awọn ofin Ansible, apẹẹrẹ kọọkan jẹ agbalejo (kii ṣe idamu pẹlu olupin ohun elo), i.e. ipade amayederun ti Ansible yoo ṣakoso. Fun agbalejo kọọkan a le pato awọn paramita asopọ (bii ansible_host и ansible_user), bakanna bi iṣeto apẹẹrẹ. Apejuwe ti awọn iṣẹlẹ wa ni apakan hosts.

Jẹ ki a wo iṣeto apẹẹrẹ storage-1:

all:
  vars:
    ...

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

  ...

Ni oniyipada config a pato awọn paramita apẹẹrẹ - advertise URI и HTTP port.
Ni isalẹ wa ni awọn paramita apẹẹrẹ app-1 и storage-1-replica.

A nilo lati sọ fun Ansible awọn paramita asopọ fun apẹẹrẹ kọọkan. O dabi ọgbọn lati ṣe akojọpọ awọn apẹẹrẹ sinu awọn ẹgbẹ ẹrọ foju. Fun idi eyi, awọn iṣẹlẹ ti wa ni idapo sinu awọn ẹgbẹ host1 и host2, ati ninu ẹgbẹ kọọkan ni apakan vars awọn iye ti wa ni itọkasi ansible_host и ansible_user fun ọkan foju ẹrọ. Ati ni apakan hosts - ogun (aka awọn apẹẹrẹ) ti o wa ninu ẹgbẹ yii:

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:

A bẹrẹ lati yipada hosts.yml. Jẹ ki a ṣafikun awọn apẹẹrẹ meji diẹ sii, storage-2-replica lori akọkọ foju ẹrọ ati storage-2 Lori keji:

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

Lọlẹ iwe-iṣere ti o ṣeeṣe:

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

Jọwọ ṣe akiyesi aṣayan naa --limit. Níwọ̀n bí àpẹẹrẹ ìdìpọ̀ kọ̀ọ̀kan jẹ́ agbalejo ní àwọn ọ̀rọ̀ Aṣàyẹ̀wò, a le ní pàtó ní pàtó pàtó irú àwọn ìṣẹ̀lẹ̀ wo tí ó yẹ kí a túntò nígbà tí a bá ń ṣiṣẹ́ ìwé eré náà.

Nlọ pada si UI Wẹẹbu naa http://localhost:8181/admin/cluster/dashboard ati ki o wo awọn iṣẹlẹ tuntun wa:

Ni irọrun ati nipa ti ara lo awọn ohun elo si Tarantool Cartridge (apakan 1)

Jẹ ki a ko da nibẹ ki o si titunto si topology isakoso.

Topology isakoso

Jẹ ki a ṣajọpọ awọn iṣẹlẹ tuntun wa sinu eto ajọra kan storage-2. Jẹ ki a ṣafikun ẹgbẹ tuntun kan replicaset_storage_2 ki o si se apejuwe replicaset paramita ninu awọn oniwe-oniyipada nipa apéerẹìgbìyànjú pẹlu replicaset_storage_1. Ni apakan hosts Jẹ ki a tọkasi iru awọn iṣẹlẹ ti yoo wa ninu ẹgbẹ yii (iyẹn, eto ẹda wa):

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

Jẹ ki a tun bẹrẹ iwe-iṣere naa lẹẹkansi:

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

Ni paramita --limit Ni akoko yii a kọja orukọ ẹgbẹ ti o baamu si ẹda wa.

Jẹ ká ro aṣayan tags.

Ipa wa leralera ṣe awọn iṣẹ ṣiṣe lọpọlọpọ, eyiti o jẹ samisi pẹlu awọn afi wọnyi:

  • cartridge-instances: iṣakoso apẹẹrẹ (atunto, asopọ si ẹgbẹ);
  • cartridge-replicasets: topology isakoso (replicaset isakoso ati yẹ yiyọ (jade) ti instances lati awọn iṣupọ);
  • cartridge-config: iṣakoso ti awọn paramita iṣupọ miiran (vshard bootstrapping, ipo ikuna aifọwọyi, awọn aye aṣẹ aṣẹ ati iṣeto ni ohun elo).

A le sọ ni pato iru apakan ti iṣẹ ti a fẹ ṣe, lẹhinna ipa naa yoo foju awọn iṣẹ iyokù. Ninu ọran wa, a fẹ lati ṣiṣẹ nikan pẹlu topology, nitorinaa a ṣalaye cartridge-replicasets.

Jẹ ki a ṣe ayẹwo abajade ti akitiyan wa. A ri titun kan replicaset lori http://localhost:8181/admin/cluster/dashboard.

Ni irọrun ati nipa ti ara lo awọn ohun elo si Tarantool Cartridge (apakan 1)

Hooray!

Ṣàdánwò pẹlu yiyipada iṣeto ni ti awọn iṣẹlẹ ati awọn eto ajọra ki o wo bii iṣupọ topology ṣe yipada. O le gbiyanju awọn oju iṣẹlẹ iṣẹ ṣiṣe ti o yatọ, fun apẹẹrẹ. sẹsẹ imudojuiwọn tabi alekun memtx_memory. Ipa naa yoo gbiyanju lati ṣe eyi laisi tun bẹrẹ apẹẹrẹ lati le dinku akoko idaduro ohun elo rẹ.

Maṣe gbagbe lati ṣiṣe vagrant haltlati da awọn ẹrọ foju duro nigbati o ba ti pari ṣiṣẹ pẹlu wọn.

Ati ohun ti ni labẹ awọn Hood?

Nibi Emi yoo sọ fun ọ diẹ sii nipa ohun ti n ṣẹlẹ labẹ hood ti ipa ti o ṣeeṣe lakoko awọn adanwo wa.

Jẹ ki a wo gbigbe ohun elo Katiriji ni igbese nipasẹ igbese.

Fifi sori ẹrọ package ati awọn iṣẹlẹ ibẹrẹ

Ni akọkọ o nilo lati fi package ranṣẹ si olupin naa ki o fi sii. Lọwọlọwọ ipa le ṣiṣẹ pẹlu awọn idii RPM ati DEB.

Nigbamii ti a lọlẹ awọn instances. Ohun gbogbo rọrun pupọ nibi: apẹẹrẹ kọọkan jẹ lọtọ systemd-iṣẹ. Emi yoo fun ọ ni apẹẹrẹ:

$ systemctl start myapp@storage-1

Aṣẹ yii yoo ṣe ifilọlẹ apẹẹrẹ naa storage-1 afikun myapp. Apeere ti a ṣe ifilọlẹ yoo wa fun rẹ iṣeto ni в /etc/tarantool/conf.d/. Awọn iwe apẹẹrẹ le ṣee wo ni lilo journald.

Faili Unit /etc/systemd/system/[email protected] fun systemd iṣẹ yoo wa ni jišẹ pẹlú pẹlu awọn package.

Ansible ti ni awọn modulu ti a ṣe sinu fun fifi awọn idii ati ṣiṣakoso awọn iṣẹ eto; a ko ṣẹda ohunkohun tuntun nibi.

Eto soke a iṣupọ topology

Eyi ni ibi ti igbadun bẹrẹ. Gba, yoo jẹ ajeji lati ṣe wahala pẹlu ipa Ansible pataki kan fun fifi sori ẹrọ awọn idii ati ṣiṣiṣẹ systemd-awọn iṣẹ.

O le tunto iṣupọ pẹlu ọwọ:

  • Aṣayan akọkọ: ṣii UI oju opo wẹẹbu ki o tẹ awọn bọtini. O dara pupọ fun ibẹrẹ akoko kan ti ọpọlọpọ awọn iṣẹlẹ.
  • Aṣayan keji: o le lo GraphQl API. Nibi o le ṣe adaṣe ohunkan tẹlẹ, fun apẹẹrẹ, kọ iwe afọwọkọ ni Python.
  • Aṣayan kẹta (fun awọn ti o lagbara): lọ si olupin naa, sopọ si ọkan ninu awọn iṣẹlẹ nipa lilo tarantoolctl connect ki o si ṣe gbogbo awọn ifọwọyi pataki pẹlu Lua module cartridge.

Iṣẹ akọkọ ti kiikan wa ni lati ṣe deede eyi, apakan ti o nira julọ ti iṣẹ fun ọ.

Ansible faye gba o lati kọ ara rẹ module ati ki o lo o ni a ipa. Ipa wa nlo iru awọn modulu lati ṣakoso ọpọlọpọ awọn paati iṣupọ.

Bawo ni o ṣe n ṣiṣẹ? O ṣe apejuwe ipo iṣupọ ti o fẹ ni atunto asọye, ati pe ipa naa pese module kọọkan pẹlu apakan iṣeto ni bi titẹ sii. Module naa gba ipo iṣupọ lọwọlọwọ ati ṣe afiwe rẹ pẹlu ohun ti a gba bi titẹ sii. Nigbamii ti, koodu kan ti ṣe ifilọlẹ nipasẹ iho ti ọkan ninu awọn iṣẹlẹ, eyiti o mu iṣupọ wa si ipo ti o fẹ.

Awọn esi

Loni a sọ ati ṣafihan bi o ṣe le fi ohun elo rẹ ranṣẹ si Tarantool Cartridge ati ṣeto topology ti o rọrun. Lati ṣe eyi, a lo Ansible - ohun elo ti o lagbara ti o rọrun lati lo ati gba ọ laaye lati tunto ọpọlọpọ awọn apa amayederun nigbakanna (ninu ọran wa, awọn iṣẹlẹ iṣupọ).

Loke a wo ọkan ninu awọn ọna pupọ lati ṣapejuwe iṣeto iṣupọ kan nipa lilo Ansible. Ni kete ti o ba ti ṣetan lati lọ siwaju, ṣawari iṣẹ ti o dara julọ lori kikọ awọn iwe-iṣere. O le rii i rọrun lati ṣakoso topology rẹ nipa lilo group_vars и host_vars.

Laipẹ a yoo sọ fun ọ bi o ṣe le paarẹ (jade) awọn iṣẹlẹ patapata lati topology, bootstrap vshard, ṣakoso ipo ikuna aifọwọyi, tunto aṣẹ ati patch konfigi iṣupọ naa. Lakoko, o le ṣe ikẹkọ funrararẹ iwe aṣẹ ati ki o ṣàdánwò pẹlu iyipada iṣupọ sile.

Ti nkan ko ba ṣiṣẹ, rii daju lati sọfun wa nipa iṣoro naa. A yoo to awọn ohun gbogbo jade ni kiakia!

orisun: www.habr.com

Fi ọrọìwòye kun