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

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

Yr ydym 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'r cymwysiadau hyn a'u rheoli. Peidiwch â phoeni, rydym wedi rhoi sylw i'r cyfan! Fe wnaethon ni lunio'r holl arferion gorau ar gyfer gweithio gyda Tarantool Cartridge ac ysgrifennu asible-rôl, a fydd yn dosbarthu'r pecyn i weinyddion, lansio achosion, eu huno i mewn i glwstwr, ffurfweddu awdurdodiad, bootstrap vshard, galluogi failover awtomatig a chlytio'r ffurfwedd clwstwr.

Diddorol? Yna os gwelwch yn dda, o dan y toriad, byddwn yn dweud wrthych ac yn dangos popeth i chi.

Gadewch i ni ddechrau gydag enghraifft

Dim ond rhan o ymarferoldeb ein rôl y byddwn yn edrych arno. Gallwch chi bob amser ddod o hyd i ddisgrifiad cyflawn o'i holl alluoedd a pharamedrau mewnbwn yn dogfennaeth. Ond mae'n well ceisio unwaith na'i weld ganwaith, felly gadewch i ni ddefnyddio cymhwysiad bach.

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

Nid yw cetris ei hun yn dweud unrhyw beth am sut i lansio prosesau, dim ond y gallu i ffurfweddu achosion sydd eisoes yn rhedeg y mae'n ei ddarparu. Rhaid i'r defnyddiwr wneud y gweddill ei hun: trefnu ffeiliau ffurfweddu, cychwyn gwasanaethau a ffurfweddu'r topoleg. Ond ni wnawn hyn i gyd; bydd Ansible yn ei wneud i ni.

O eiriau i weithredoedd

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

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

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

I redeg yr esiampl sydd ei angen arnom Crwydrol и Ateb (fersiwn 2.8 neu hŷn).

Mae'r rôl ei hun ynddi Galaxy Atebol. Mae hon yn ystorfa sy'n eich galluogi i rannu eich gwaith a defnyddio rolau parod.

Gadewch i ni glonio'r ystorfa gydag enghraifft:

$ 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

Gosod y rôl asible Cartridge Tarantool:

$ ansible-galaxy install tarantool.cartridge,1.0.1

Lansio'r rôl sydd wedi'i gosod:

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

Rydyn ni'n aros i'r llyfr chwarae gwblhau ei gyflawni, ewch i http://localhost:8181/admin/cluster/dashboard a mwynhewch y canlyniad:

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

Gallwch uwchlwytho data. Cŵl, dde?

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

Gadewch i ni ddechrau ei chyfrifo

Felly beth ddigwyddodd?

Fe wnaethom sefydlu dau beiriant rhithwir a lansio llyfr chwarae ansible a oedd yn ffurfweddu 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

Nid oes dim byd diddorol yn digwydd yma, gadewch i ni lansio rôl ansible o'r enw tarantool.cartridge.

Mae'r holl bethau pwysicaf (sef, cyfluniad y clwstwr) wedi'u lleoli yn 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 ei angen arnom yw dysgu sut i reoli achosion a atgynyrchiadau trwy newid cynnwys y ffeil hon. Nesaf byddwn yn ychwanegu adrannau newydd ato. Er mwyn peidio â drysu ble i'w hychwanegu, gallwch edrych ar fersiwn derfynol y ffeil hon, hosts.updated.yml, sydd yn yr ystorfa esiampl.

Rheoli achosion

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

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

all:
  vars:
    ...

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

  ...

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

Mae angen i ni ddweud wrth Ansible y paramedrau cysylltu ar gyfer pob achos. Mae'n ymddangos yn rhesymegol grwpio achosion yn grwpiau peiriannau rhithwir. At y diben hwn, cyfunir achosion yn grwpiau host1 и host2, ac ym mhob grŵp yn yr adran vars gwerthoedd yn cael eu nodi ansible_host и ansible_user ar gyfer un peiriant rhithwir. Ac yn yr adran hosts — gwesteiwyr (aka enghreifftiau) sydd wedi'u cynnwys yn y 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:

Rydyn ni'n dechrau newid hosts.yml. Gadewch i ni ychwanegu dau achos 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:  # <==
  ...

Lansio'r llyfr chwarae anible:

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

Nodwch yr opsiwn --limit. Gan fod pob enghraifft clwstwr yn westeiwr yn nhermau Ansible, gallwn nodi'n benodol pa achosion y dylid eu ffurfweddu wrth weithredu'r llyfr chwarae.

Mynd yn ôl i'r We UI http://localhost:8181/admin/cluster/dashboard a gweld ein hachosion newydd:

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

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

Rheoli topoleg

Gadewch i ni gyfuno ein hachosion newydd yn set replica storage-2. Gadewch i ni ychwanegu grŵp newydd replicaset_storage_2 a disgrifio'r paramedrau a atgynhyrchwyd yn ei newidynnau trwy gyfatebiaeth â 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 replica):

---
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 ddechrau'r llyfr chwarae eto:

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

Fesul paramedr --limit Y tro hwn fe wnaethom basio enw'r grŵp sy'n cyfateb i'n hatgynhyrchiad.

Gadewch i ni ystyried yr opsiwn tags.

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

  • cartridge-instances: rheoli enghreifftiau (cyfluniad, cysylltiad ag aelodaeth);
  • cartridge-replicasets: rheoli topoleg (rheoli atgynhyrchu a thynnu (diarddel) achosion yn barhaol o'r clwstwr);
  • cartridge-config: rheoli paramedrau clwstwr eraill (vshard bootstrapping, modd methu awtomatig, paramedrau awdurdodi a chyfluniad cymhwysiad).

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

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

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

Hwre!

Arbrofwch â newid ffurfweddiad enghreifftiau a setiau atgynhyrchiadau a gweld sut mae topoleg y clwstwr yn newid. Gallwch roi cynnig ar wahanol senarios gweithredol, e.e. diweddariad treigl neu gynyddu memtx_memory. Bydd y rôl yn ceisio gwneud hyn heb ailgychwyn yr enghraifft er mwyn lleihau amser segur posibl eich cais.

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 dweud mwy wrthych am yr hyn oedd yn digwydd o dan y cwfl y rôl asible yn ystod ein harbrofion.

Gadewch i ni edrych ar ddefnyddio'r cais Cetris gam wrth gam.

Gosod y pecyn ac achosion cychwyn

Yn gyntaf mae angen i chi gyflwyno'r 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 achosion. Mae popeth yn syml iawn yma: mae pob achos ar wahân systemd-gwasanaeth. Rhoddaf enghraifft ichi:

$ systemctl start myapp@storage-1

Bydd y gorchymyn hwn yn lansio'r enghraifft storage-1 apps myapp. Bydd yr enghraifft a lansiwyd yn edrych am ei cyfluniad в /etc/tarantool/conf.d/. Gellir gweld logiau enghraifft gan ddefnyddio journald.

Ffeil uned /etc/systemd/system/[email protected] ar gyfer gwasanaeth systemd yn cael ei gyflwyno ynghyd â'r pecyn.

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

Sefydlu topoleg clwstwr

Dyma lle mae'r hwyl yn dechrau. Cytuno, byddai'n rhyfedd trafferthu gyda rôl Ansible arbennig ar gyfer gosod pecynnau a rhedeg systemd-gwasanaethau.

Gallwch chi ffurfweddu'r clwstwr â llaw:

  • Yr opsiwn cyntaf: agorwch We UI a chliciwch ar y botymau. Mae'n eithaf addas ar gyfer cychwyn un-amser o sawl achos.
  • Ail opsiwn: gallwch ddefnyddio'r API GraphQl. Yma gallwch chi eisoes awtomeiddio rhywbeth, er enghraifft, ysgrifennu sgript yn Python.
  • Trydydd opsiwn (ar gyfer y rhai cryf-willed): ewch i'r gweinydd, cysylltu ag un o'r achosion gan ddefnyddio tarantoolctl connect a pherfformio'r holl driniaethau angenrheidiol gyda'r modiwl Lua cartridge.

Prif dasg ein dyfais yw gwneud hyn yn union, y rhan anoddaf o'r gwaith i chi.

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

Sut mae'n gweithio? Rydych chi'n disgrifio cyflwr dymunol y clwstwr mewn ffurfweddiad datganiadol, ac mae'r rôl yn rhoi ei adran ffurfweddu i bob modiwl fel mewnbwn. Mae'r modiwl yn derbyn cyflwr presennol y clwstwr ac yn ei gymharu â'r hyn a dderbyniwyd fel mewnbwn. Nesaf, mae cod yn cael ei lansio trwy soced un o'r achosion, sy'n dod â'r clwstwr i'r cyflwr dymunol.

Canlyniadau

Heddiw fe wnaethom ddweud a dangos sut i ddefnyddio'ch cais i Tarantool Cartridge a sefydlu topoleg syml. I wneud hyn, gwnaethom ddefnyddio Ansible - offeryn pwerus sy'n hawdd ei ddefnyddio ac sy'n eich galluogi i ffurfweddu llawer o nodau seilwaith ar yr un pryd (yn ein hachos ni, achosion clwstwr).

Uchod, fe wnaethom edrych ar un o'r ffyrdd niferus o ddisgrifio cyfluniad clwstwr gan ddefnyddio Ansible. Unwaith y byddwch chi'n teimlo'n barod i symud ymlaen, archwiliwch arferion gorau ar ysgrifennu llyfrau chwarae. Efallai y bydd yn haws i chi reoli eich topoleg gan ddefnyddio group_vars и host_vars.

Yn fuan iawn byddwn yn dweud wrthych sut i ddileu (diarddel) achosion yn barhaol o'r topoleg, bootstrap vshard, rheoli modd methu awtomatig, ffurfweddu awdurdodiad a chlytio'r ffurfwedd clwstwr. Yn y cyfamser, gallwch astudio ar eich pen eich hun dogfennaeth ac arbrofi gyda newid paramedrau clwstwr.

Os nad yw rhywbeth yn gweithio, gwnewch yn siŵr hysbysu ni am y broblem. Byddwn yn datrys popeth yn gyflym!

Ffynhonnell: hab.com

Ychwanegu sylw