Feidhmchláir a imscaradh go héasca agus go nádúrtha chuig Cartús Tarantool (cuid 1)

Feidhmchláir a imscaradh go héasca agus go nádúrtha chuig Cartús Tarantool (cuid 1)

Táimid tar éis labhairt cheana féin faoi Cartúis Tarantool, a ligeann duit feidhmchláir dháilte a fhorbairt agus iad a phacáistiú. Níl fágtha ach foghlaim conas na feidhmchláir seo a imscaradh agus iad a bhainistiú. Ná bí buartha, tá sé clúdaithe againn ar fad! Chuireamar na cleachtais is fearr ar fad le chéile chun oibriú le Tarantool Cartridge agus scríobhamar asible-ról, a dháilfidh an pacáiste ar fhreastalaithe, cásanna seolta, iad a aontú isteach i mbraisle, údarú a chumrú, bootstrap vshard, a chumasú failover uathoibríoch agus paiste an config braisle.

Suimiúil? Ansin le do thoil, faoin gearrtha, inseoimid duit agus taispeánfaimid gach rud duit.

Let tús le sampla

Ní fhéachfaimid ach ar chuid d’fheidhmiúlacht ár róil. Is féidir leat cur síos iomlán a fháil i gcónaí ar a chumais agus a paraiméadair ionchuir go léir i doiciméadú. Ach is fearr iarracht a dhéanamh uair amháin ná é a fheiceáil céad uair, mar sin déanaimis feidhmchlár beag a imscaradh.

Tá Cartús Tarantool teagaisc chun feidhmchlár Cartús beag a chruthú a stórálann faisnéis faoi chliaint bainc agus a gcuntais, agus a sholáthraíonn API do bhainistiú sonraí trí HTTP. Chun é seo a bhaint amach, déanann an t-aguisín cur síos ar dhá ról féideartha: api и storage, is féidir a shannadh do chásanna.

Ní deir Cartús féin rud ar bith faoi conas próisis a sheoladh, ní sholáthraíonn sé ach an cumas cásanna atá ag rith cheana féin a chumrú. Ní mór don úsáideoir an chuid eile a dhéanamh é féin: comhaid cumraíochta a shocrú, tús a chur le seirbhísí agus an topology a chumrú. Ach ní dhéanfaimid é seo go léir; déanfaidh Ansible dúinn é.

Ó fhocail go gníomhais

Mar sin, déanaimis ár n-iarratas a imscaradh chuig dhá mheaisín fhíorúla agus cuirfimid topology simplí ar bun:

  • Macasamhail app-1 an ról a chur i bhfeidhm api, a chuimsíonn an ról vshard-router. Ní bheidh ach cás amháin anseo.
  • Macasamhail storage-1 cuireann an ról i bhfeidhm storage (agus ag an am céanna vshard-storage), anseo cuirfimid dhá chás ó mheaisíní éagsúla.

Feidhmchláir a imscaradh go héasca agus go nádúrtha chuig Cartús Tarantool (cuid 1)

Chun an sampla a theastaíonn uainn a rith luaineach и Freagra (leagan 2.8 nó níos sine).

Tá an ról féin i Réaltra Inchurtha. Is stór é seo a ligeann duit do chuid oibre a roinnt agus róil réamhdhéanta a úsáid.

Déanaimis an stór a chlónáil le sampla:

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

Déanaimid meaisíní fíorúla a ardú:

$ vagrant up

Suiteáil an ról insible Cartridge Tarantool:

$ ansible-galaxy install tarantool.cartridge,1.0.1

Seoladh an ról suiteáilte:

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

Táimid ag fanacht leis an leabhar súgartha chun an forghníomhú a chríochnú, téigh go dtí http://localhost:8181/admin/cluster/dashboard agus bain sult as an toradh:

Feidhmchláir a imscaradh go héasca agus go nádúrtha chuig Cartús Tarantool (cuid 1)

Is féidir leat sonraí a uaslódáil. Cool, ceart?

Anois déanaimis amach conas oibriú leis seo, agus ag an am céanna cuir macasamhail eile leis an topology.

Let tús a dhéanamh amach é

Mar sin, cad a tharla?

Chuireamar dhá mheaisín fhíorúla ar bun agus sheolamar leabhar súgartha ansible a chumraigh ár mbraisle. Breathnaímid ar ábhar an chomhaid 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

Ní tharlaíonn aon rud suimiúil anseo, a ligean ar sheoladh ról insible ar a dtugtar tarantool.cartridge.

Tá na rudaí is tábhachtaí ar fad (is é sin, an chumraíocht braisle) suite i fardal-chomhad 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:

Níl le déanamh againn ach foghlaim conas cásanna agus macasamhla a bhainistiú trí ábhar an chomhaid seo a athrú. Ansin cuirfimid rannóga nua leis. Ionas nach mbeidh mearbhall ort cá háit ar cheart iad a chur leis, is féidir leat breathnú ar an leagan deiridh den chomhad seo, hosts.updated.yml, atá sa stór samplach.

Bainistíocht Cáis

I dtéarmaí Insible, is óstach é gach cás (gan a mheascadh le freastalaí crua-earraí), i.e. an nód bonneagair a bhainisteoidh Ansible. I gcás gach ósta is féidir linn paraiméadair nasc a shonrú (mar shampla ansible_host и ansible_user), chomh maith leis an gcumraíocht shampla. Tá cur síos ar chásanna sa rannán hosts.

A ligean ar breathnú ar an chumraíocht shampla storage-1:

all:
  vars:
    ...

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

  ...

I athróg config shonraigh muid na paraiméadair shampla - advertise URI и HTTP port.
Seo thíos na paraiméadair shampla app-1 и storage-1-replica.

Ní mór dúinn na paraiméadair naisc a insint do gach cás. Dealraíonn sé go bhfuil sé loighciúil cásanna a ghrúpáil i ngrúpaí meaisíní fíorúla. Chun na críche seo, cuirtear cásanna le chéile i ngrúpaí host1 и host2, agus i ngach grúpa sa roinn vars cuirtear luachanna in iúl ansible_host и ansible_user le haghaidh meaisín fíorúil amháin. Agus sa rannóg hosts — óstaigh (mar shampla) atá san áireamh sa ghrúpa seo:

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:

Tosaímid ag athrú hosts.yml. Cuirimis dhá chás eile leis, storage-2-replica ar an gcéad meaisín fíorúil agus storage-2 Ar an dara ceann:

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

Seol an leabhar súgartha ciallmhar:

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

Tabhair faoi deara an rogha --limit. Ós rud é gur óstach é gach cás braisle i dtéarmaí Ansible, is féidir linn a shonrú go sainráite cé na cásanna ba cheart a chumrú agus an leabhar súgartha á chur i gcrích.

Ag dul ar ais go dtí an Chomhéadain Gréasáin http://localhost:8181/admin/cluster/dashboard agus féach ar ár gcásanna nua:

Feidhmchláir a imscaradh go héasca agus go nádúrtha chuig Cartús Tarantool (cuid 1)

Ná stopaimis ansin agus máistreacht againn ar bhainistíocht topology.

Bainistíocht topology

Déanaimis ár gcásanna nua a chomhcheangal i sraith macasamhail storage-2. Cuirimis grúpa nua leis replicaset_storage_2 agus déan cur síos ar na paraiméadair macasamhlaithe ina athróga de réir analaí replicaset_storage_1. In alt hosts Cuirimis in iúl cé na cásanna a bheidh san áireamh sa ghrúpa seo (is é sin, ár macasamhail tacair):

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

Cuirimis tús leis an leabhar súgartha arís:

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

I bparaiméadar --limit An uair seo chuireamar thar ainm an ghrúpa a fhreagraíonn dár macasamhail.

Déanaimis machnamh ar an rogha tags.

Déanann ár ról tascanna éagsúla go seicheamhach, atá marcáilte leis na clibeanna seo a leanas:

  • cartridge-instances: bainistíocht shampla (cumraíocht, ceangal le ballraíocht);
  • cartridge-replicasets: bainistíocht topology (macasamhlú a bhainistiú agus cásanna a bhaint go buan (a dhíbirt) as an mbraisle);
  • cartridge-config: bainistiú paraiméadair braisle eile (vshard bootstrapping, modh teip uathoibríoch, paraiméadair údaraithe agus cumraíocht feidhmchláir).

Is féidir linn a shonrú go sainráite cén chuid den obair ba mhaith linn a dhéanamh, ansin ní rachaidh an ról thar an gcuid eile de na tascanna. In ár gcás, ba mhaith linn a bheith ag obair ach amháin leis an topology, mar sin sonraithe againn cartridge-replicasets.

Déanaimis meastóireacht ar thoradh ár n-iarrachtaí. Faighimid macasamhail nua ar http://localhost:8181/admin/cluster/dashboard.

Feidhmchláir a imscaradh go héasca agus go nádúrtha chuig Cartús Tarantool (cuid 1)

Hooray!

Triail a dhéanamh le cumraíocht cásanna agus tacair macasamhail a athrú agus féach conas a athraíonn topology an bhraisle. Is féidir leat triail a bhaint as cásanna oibriúcháin éagsúla, m.sh. nuashonrú rollta nó méadú memtx_memory. Déanfaidh an ról iarracht é seo a dhéanamh gan an sampla a atosú chun an t-am aga a d’fhéadfadh a bheith i gceist le d’iarratas a laghdú.

Ná déan dearmad a rith vagrant haltchun stop a chur leis na meaisíní fíorúla nuair a bhíonn tú críochnaithe ag obair leo.

Agus cad atá faoin gcochall?

Anseo inseoidh mé duit níos mó faoi cad a bhí ag tarlú faoi chochall an ról insible le linn ár dturgnaimh.

Breathnaímid ar an iarratas Cartús a imscaradh céim ar chéim.

Suiteáil an phacáiste agus cásanna tosaigh

Ar dtús ní mór duit an pacáiste a sheachadadh chuig an bhfreastalaí agus é a shuiteáil. Faoi láthair is féidir leis an ról oibriú le pacáistí RPM agus DEB.

Ansin cuirimid na cásanna ar aghaidh. Tá gach rud an-simplí anseo: tá gach cás ar leith systemd-seirbhís. Tabharfaidh mé sampla duit:

$ systemctl start myapp@storage-1

Seolfaidh an t-ordú seo an cás storage-1 apps myapp. Beidh an ásc seolta ag lorg a cumraíocht в /etc/tarantool/conf.d/. Is féidir logaí cásanna a fheiceáil ag baint úsáide as journald.

Comhad aonad /etc/systemd/system/[email protected] le haghaidh seirbhíse systemd a sheachadadh chomh maith leis an bpacáiste.

Tá modúil ionsuite ag Ansible chun pacáistí a shuiteáil agus chun seirbhísí córasacha a bhainistiú; níl aon rud nua cruthaithe againn anseo.

Topology braisle a bhunú

Seo nuair a thosaíonn an spraoi. Aontaigh, bheadh ​​​​sé aisteach bodhraigh le ról Freagrach speisialta maidir le pacáistí a shuiteáil agus a reáchtáil systemd-seirbhísí.

Is féidir leat an braisle a chumrú de láimh:

  • An chéad rogha: oscail an Chomhéadain Gréasáin agus cliceáil ar na cnaipí. Tá sé oiriúnach go leor le haghaidh tús aonuaire i roinnt cásanna.
  • An dara rogha: is féidir leat an API GraphQl a úsáid. Anseo is féidir leat rud éigin a uathoibriú cheana féin, mar shampla, scríobh script i Python.
  • Tríú rogha (don láidir-willed): téigh go dtí an freastalaí, ceangal le ceann de na cásanna ag baint úsáide as tarantoolctl connect agus na hionramhálacha riachtanacha go léir a dhéanamh leis an modúl Lua cartridge.

Is é príomhchúram ár n-aireagán é seo a dhéanamh go díreach, an chuid is deacra den obair duit.

Ligeann Ansible duit do mhodúl féin a scríobh agus é a úsáid i ról. Úsáideann ár ról modúil den sórt sin chun comhpháirteanna braisle éagsúla a bhainistiú.

Conas a oibríonn sé? Déanann tú cur síos ar staid inmhianaithe an bhraisle i gcumraíocht dhearbhaithe, agus soláthraíonn an ról a rannóg cumraíochta do gach modúl mar ionchur. Faigheann an modúl staid reatha an bhraisle agus cuireann sé é i gcomparáid leis an méid a fuarthas mar ionchur. Ansin, seoltar cód trí shoicéad ceann de na cásanna, a thugann an braisle go dtí an staid atá ag teastáil.

Torthaí

Inniu d’inis muid agus léirigh muid conas d’iarratas a imscaradh chuig Tarantool Cartridge agus topology simplí a bhunú. Chun seo a dhéanamh, d'úsáideamar Ansible - uirlis chumhachtach atá éasca le húsáid agus a ligeann duit go leor nóid bonneagair a chumrú ag an am céanna (inár gcás, cásanna braisle).

Thuas d’fhéachamar ar cheann de na bealaí iomadúla chun cur síos a dhéanamh ar chumraíocht bhraisle ag baint úsáide as Ansible. Nuair a bhraitheann tú réidh le bogadh ar aghaidh, déan iniúchadh dea-chleachtais ar leabhair súgartha a scríobh. Seans go mbeidh sé níos fusa leat do thipeolaíocht a bhainistiú ag baint úsáide as group_vars и host_vars.

Go han-luath inseoimid duit conas cásanna a scriosadh go buan (a dhíbirt) ón topology, bootstrap vshard, modh teipthe uathoibríoch a bhainistiú, údarú a chumrú agus an cumraíocht braisle a phaisteáil. Idir an dá linn, is féidir leat staidéar a dhéanamh leat féin doiciméadú agus triail a bhaint as paraiméadair bhraisle a athrú.

Mura n-oibríonn rud éigin, bí cinnte in iúl dom linn faoin bhfadhb. Déanfaimid gach rud a réiteach go tapa!

Foinse: will.com

Add a comment