Defnyddio cymwysiadau i Tarantool Cartridge yn hawdd ac yn naturiol (rhan 1)

Defnyddio cymwysiadau i Tarantool Cartridge yn hawdd ac yn naturiol (rhan 1)

Rydym eisoes wedi siarad am Cetris Tarantool, sy'n eich galluogi i ddatblygu cymwysiadau dosbarthedig a'u pecynnu. Y cyfan sydd ar ôl yw dysgu sut i ddefnyddio a rheoli'r cymwysiadau hyn. Peidiwch â phoeni, rydym wedi rhoi sylw i chi! Rydym wedi llunio'r holl arferion gorau ar gyfer gweithio gyda Tarantool Cartridge ac wedi ysgrifennu rôl gyfrifol, a fydd yn dosbarthu'r pecyn i weinyddion, yn cychwyn achosion, yn eu cyfuno'n glwstwr, yn ffurfweddu awdurdodiad, yn cychwyn vshard, yn galluogi methiant drosodd awtomatig, ac yn clytio ffurfweddiad y clwstwr.

 diddordeb? ​​Yna darllenwch ymlaen, byddwn yn dweud wrthych ac yn dangos popeth i chi.

Gadewch i ni ddechrau gydag enghraifft

Dim ond rhan o swyddogaethau ein rôl y byddwn yn eu trafod. Gellir dod o hyd i ddisgrifiad llawn o'i holl alluoedd a pharamedrau mewnbwn bob amser yn dogfennaethOnd mae'n well rhoi cynnig arni unwaith na gweld cant o weithiau, felly gadewch i ni ddefnyddio cymhwysiad bach.

Mae gan Gartrid Tarantool tiwtorial I greu cymhwysiad Cartridge bach sy'n storio gwybodaeth am gleientiaid banc a'u cyfrifon ac yn darparu API ar gyfer rheoli data trwy HTTP. I gyflawni hyn, mae'r cymhwysiad yn disgrifio dau rôl bosibl: api и storage, y gellir ei aseinio i achosion.

Nid yw Cartridge ei hun yn esbonio sut i lansio prosesau; dim ond y gallu i ffurfweddu enghreifftiau sydd eisoes yn rhedeg y mae'n ei ddarparu. Rhaid i'r defnyddiwr wneud y gweddill ei hun: defnyddio ffeiliau ffurfweddu, cychwyn gwasanaethau, a ffurfweddu'r topoleg. Ond ni fyddwn yn gwneud hynny i gyd; bydd Ansible yn ei wneud i ni.

O eiriau i weithredoedd

Felly, gadewch i ni ddefnyddio ein cymhwysiad ar ddau beiriant rhithwir a sefydlu topoleg syml:

  • Set Atgynhyrchu app-1 fydd yn gweithredu'r rôl api, sy'n cynnwys y rôl vshard-routerDim ond un enghraifft fydd yma.
  • Set Atgynhyrchu storage-1 yn sylweddoli'r rôl storage (ac ar yr un pryd vshard-storage), byddwn yn ychwanegu dau achos o wahanol beiriannau yma.

Defnyddio cymwysiadau i Tarantool Cartridge yn hawdd ac yn naturiol (rhan 1)

I redeg yr enghraifft bydd angen i ni Crwydrol и Ateb (fersiwn 2.8 neu'n ddiweddarach).

Mae'r rôl ei hun yn Galaeth AnsibleMae hon yn storfa sy'n eich galluogi i rannu eich datblygiadau a defnyddio rolau parod.

Gadewch i ni glonio'r storfa enghreifftiol:

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

Rydym yn codi peiriannau rhithwir:

$ vagrant up

Gosodwch rôl Ansible Cartridge Tarantool:

$ ansible-galaxy install tarantool.cartridge,1.0.1

Gadewch i ni lansio'r rôl sydd wedi'i gosod:

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

Rydym yn aros i'r llyfr chwarae gwblhau, yna'n mynd i http://localhost:8181/admin/cluster/dashboard a mwynhau'r canlyniad:

Defnyddio cymwysiadau i Tarantool Cartridge yn hawdd ac yn naturiol (rhan 1)

Gallwch chi dywallt data. Cŵl, iawn?

Nawr gadewch i ni ddarganfod sut i weithio gyda hyn, ac ar yr un pryd ychwanegu set replica arall at y topoleg.

Gadewch i ni ddechrau ei ddarganfod

Felly beth ddigwyddodd?

Rydym wedi sefydlu dau beiriant rhithwir ac wedi rhedeg y llyfr chwarae Ansible a ffurfweddodd ein clwstwr. Gadewch i ni edrych ar gynnwys y ffeil. 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

Does dim byd diddorol yn digwydd yma, rydyn ni'n lansio'r rôl atebol o'r enw tarantool.cartridge.

Mae'r holl bethau pwysicaf (sef, ffurfweddiad y clwstwr) ynddo rhestr-ffeil 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:

Y cyfan sydd angen i ni ei wneud yw dysgu sut i reoli achosion a setiau replica trwy newid cynnwys y ffeil hon. Byddwn yn ychwanegu adrannau newydd ati yn ddiweddarach. Er mwyn osgoi dryswch ynghylch ble i'w hychwanegu, gallwch gyfeirio at y fersiwn derfynol o'r ffeil hon. hosts.updated.yml, sydd wedi'i leoli yn y storfa enghreifftiol.

Rheoli achosion

Yn nhermau Ansible, mae pob achos yn westeiwr (peidiwch â'i gymysgu â gweinydd caledwedd), h.y., nod seilwaith y bydd Ansible yn ei reoli. Ar gyfer pob gwesteiwr, gallwn nodi paramedrau cysylltiad (megis ansible_host и ansible_user), yn ogystal â chyfluniad yr achos. Mae disgrifiadau o achosion yn yr adran hosts.

Gadewch i ni edrych ar gyfluniad yr enghraifft storage-1:

all:
  vars:
    ...

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

  ...

Yn amrywiol config fe wnaethon ni nodi'r paramedrau enghraifft - advertise URI и HTTP port.
Isod mae'r paramedrau enghraifft app-1 и storage-1-replica.

Mae angen i ni ddweud wrth Ansible y paramedrau cysylltiad ar gyfer pob achos. Mae'n ymddangos yn rhesymegol grwpio achosion yn ôl peiriant rhithwir. At y diben hwn, mae achosion yn cael eu grwpio. host1 и host2, ac ym mhob grŵp yn yr adran vars nodir gwerthoedd ansible_host и ansible_user ar gyfer un peiriant rhithwir. Ac yn yr adran hosts — gwesteiwyr (a elwir hefyd yn achosion) sy'n rhan o'r grŵp hwn:

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:

Rydym yn dechrau newid hosts.ymlGadewch i ni ychwanegu dau enghraifft arall, storage-2-replica ar y peiriant rhithwir cyntaf a storage-2 ar yr ail:

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

Gadewch i ni redeg llyfr chwarae Ansible:

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

Nodwch yr opsiwn os gwelwch yn dda --limitGan fod pob enghraifft o glwstwr yn westeiwr yn nhermau Ansible, gallwn nodi'n benodol pa achosion y dylid eu ffurfweddu wrth weithredu llyfr chwarae.

Gadewch i ni fynd yn ôl at y rhyngwyneb gwe http://localhost:8181/admin/cluster/dashboard ac rydym yn gweld ein hachosion newydd:

Defnyddio cymwysiadau i Tarantool Cartridge yn hawdd ac yn naturiol (rhan 1)

Gadewch i ni beidio â stopio yno a meistroli rheoli topoleg.

Rheoli topoleg

Gadewch i ni gyfuno ein hachosion newydd yn set atgynhyrchu storage-2Gadewch i ni ychwanegu grŵp newydd. replicaset_storage_2 a byddwn yn disgrifio paramedrau'r set replica yn ei newidynnau trwy analogiaeth â replicaset_storage_1. Yn adran hosts Gadewch i ni nodi pa achosion fydd yn cael eu cynnwys yn y grŵp hwn (hynny yw, ein set atgynhyrchiadau):

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

Gadewch i ni redeg y llyfr chwarae eto:

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

Yn y paramedr --limit Y tro hwn fe wnaethon ni basio enw'r grŵp sy'n cyfateb i'n set replica.

Gadewch i ni ystyried yr opsiwn tags.

Mae ein rôl yn cyflawni amrywiol dasgau yn olynol, sydd wedi'u labelu â'r tagiau canlynol:

  • cartridge-instancesrheoli achosion (ffurfweddu, cysylltiad ag aelodaeth);
  • cartridge-replicasets: rheoli topoleg (rheoli setiau replica a dileu (gwrthod) achosion o'r clwstwr yn barhaol);
  • cartridge-config: rheoli paramedrau clwstwr eraill (bootstrapping vshard, modd methiant awtomatig, paramedrau awdurdodi a ffurfweddiad cymhwysiad).

Gallwn nodi'n benodol pa ran o'r gwaith yr ydym am ei chyflawni, ac yna bydd y rôl yn hepgor gweddill y tasgau. Yn ein hachos ni, dim ond gyda'r topoleg yr ydym am weithio, felly fe wnaethom nodi cartridge-replicasets.

Gadewch i ni werthuso canlyniadau ein hymdrechion. Rydym yn dod o hyd i set replica newydd ar http://localhost:8181/admin/cluster/dashboard.

Defnyddio cymwysiadau i Tarantool Cartridge yn hawdd ac yn naturiol (rhan 1)

Hwre!

Arbrofwch gyda newid ffurfweddiadau setiau enghreifftiau a replicâu a gweld sut mae topoleg y clwstwr yn newid. Gallwch roi cynnig ar wahanol senarios gweithredol, fel: diweddariad treigl neu gynyddu memtx_memoryBydd y rôl yn ceisio gwneud hyn heb ailgychwyn yr achos er mwyn lleihau amser segur posibl ar gyfer eich cymhwysiad.

Peidiwch ag anghofio rhedeg vagrant halti atal y peiriannau rhithwir pan fyddwch wedi gorffen gweithio gyda nhw.

Beth sydd o dan y cwfl?

Yma byddaf yn manylu mwy am yr hyn oedd yn digwydd o dan gwfl rôl Ansible yn ystod ein harbrofion.

Gadewch i ni edrych ar y camau ar gyfer defnyddio cymhwysiad Cartridge.

Gosod y pecyn a chychwyn achosion

Yn gyntaf, mae angen i chi ddanfon y pecyn i'r gweinydd a'i osod. Ar hyn o bryd, gall y rôl weithio gyda phecynnau RPM a DEB.

Nesaf, rydym yn lansio'r enghreifftiau. Mae'r cyfan yn syml iawn: mae pob enghraifft yn un ar wahân. systemd-gwasanaeth. Byddaf yn egluro gydag enghraifft:

$ systemctl start myapp@storage-1

Bydd y gorchymyn hwn yn cychwyn yr enghraifft. storage-1 apps myappBydd yr achos a lansiwyd yn chwilio am ei ffurfweddiad в /etc/tarantool/conf.d/Gellir gweld logiau enghreifftiau gan ddefnyddio journald.

Ffeil uned /etc/systemd/system/myapp@.sevice ar gyfer y gwasanaeth systemd bydd yn cael ei gyflwyno ynghyd â'r pecyn.

Mae gan Ansible fodiwlau adeiledig ar gyfer gosod pecynnau a rheoli gwasanaethau systemd, ond nid ydym wedi dyfeisio unrhyw beth newydd yma.

Ffurfweddu topoleg clwstwr

A dyma lle mae pethau'n mynd yn ddiddorol. Byddwch chi'n cytuno, byddai'n rhyfedd trafferthu gyda rôl Ansible arbennig ar gyfer gosod pecynnau a rhedeg systemd-gwasanaethau.

Gallwch chi ffurfweddu'r clwstwr â llaw:

  • Y dewis cyntaf: agorwch y rhyngwyneb gwe a chliciwch ar y botymau. Mae hyn yn iawn ar gyfer lansio sawl achos unwaith.
  • Yr ail opsiwn yw defnyddio'r API GraphQl. Mae hyn yn caniatáu awtomeiddio, fel ysgrifennu sgript Python.
  • Y trydydd opsiwn (i'r rhai cryf eu hewyllys): ewch i'r gweinydd, cysylltwch ag un o'r achosion gan ddefnyddio tarantoolctl connect ac rydym yn cyflawni'r holl driniaethau angenrheidiol gyda'r modiwl Lua cartridge.

Prif nod ein dyfais yw gwneud y rhan anoddaf hon o'r gwaith i chi.

Mae Ansible yn caniatáu ichi ysgrifennu eich modiwlau eich hun a'u defnyddio mewn rôl. Mae ein rôl yn defnyddio'r modiwlau hyn i reoli gwahanol gydrannau clwstwr.

Sut mae'n gweithio? Rydych chi'n disgrifio'r cyflwr clwstwr a ddymunir mewn ffurfweddiad datganiadol, ac mae'r rôl yn trosglwyddo ei adran ffurfweddu fel mewnbwn i bob modiwl. Mae'r modiwl yn derbyn cyflwr cyfredol y clwstwr ac yn ei gymharu â'r mewnbwn. Yna, mae cod yn cael ei redeg trwy soced ar un o'r achosion, gan ddod â'r clwstwr i'r cyflwr a ddymunir.

Canlyniadau

Heddiw, fe wnaethon ni esbonio a dangos sut i ddefnyddio eich cymhwysiad i Tarantool Cartridge a sefydlu topoleg syml. I wneud hyn, fe wnaethon ni ddefnyddio Ansible, offeryn pwerus, hawdd ei ddefnyddio sy'n eich galluogi i ffurfweddu sawl nod seilwaith ar yr un pryd (yn ein hachos ni, achosion clwstwr).

Uchod, rydym wedi trafod un o'r nifer o ffyrdd o ddisgrifio ffurfweddiad clwstwr gan ddefnyddio Ansible. Unwaith y byddwch chi'n barod i symud ymlaen, archwiliwch arferion gorau ar gyfer ysgrifennu llyfrau chwarae. Efallai y byddwch yn ei chael hi'n fwy cyfleus rheoli'r topoleg gan ddefnyddio group_vars и host_vars.

Cyn bo hir, byddwn yn egluro sut i ddileu (gwrthod) achosion o'r topoleg yn barhaol, bootstrap vshard, rheoli modd methiant drosodd awtomatig, ffurfweddu awdurdodiad, a chlytsio ffurfweddiad y clwstwr. Yn y cyfamser, gallwch archwilio ar eich pen eich hun. dogfennaeth ac arbrofi gyda newid paramedrau clwstwr.

Os nad yw rhywbeth yn gweithio, gwnewch yn siŵr rhowch wybod i mi Dywedwch wrthym am y broblem. Byddwn yn ei datrys yn gyflym!

Ffynhonnell: hab.com

Prynu gwesteio dibynadwy ar gyfer gwefannau sydd â diogelwch DDoS, gweinyddwyr VPS VDS 🔥 Prynu cynnal gwefannau dibynadwy gyda diogelwch DDoS, gweinyddion VPS VDS | ProHoster