Nerapkeun Aplikasi Gampang sareng Alami dina Cartridge Tarantool (Bagian 1)

Nerapkeun Aplikasi Gampang sareng Alami dina Cartridge Tarantool (Bagian 1)

Urang geus ngobrol ngeunaan Tarantool Cartridge, anu ngamungkinkeun anjeun pikeun ngembangkeun aplikasi anu disebarkeun sareng ngarangkepana. Henteu aya anu tinggaleun: diajar kumaha nyebarkeun sareng ngatur aplikasi ieu. Tong hariwang, kami parantos panginten sadayana! Kami parantos ngahijikeun sadaya prakték pangsaéna pikeun damel sareng Tarantool Cartridge sareng nyerat ansible-peran, nu bakal decompose pakét kana server, ngamimitian instansi, ngagabungkeun kana klaster a, ngonpigurasikeun otorisasina, bootstrap vshard, ngaktipkeun failover otomatis tur patch config klaster.

metot? Teras kuring naroskeun handapeun cut, kami bakal nyarios sareng nunjukkeun sadayana.

Hayu urang mimitian ku conto

Urang bakal nutupan ukur bagian tina pungsionalitas peran urang. Anjeun salawasna bisa manggihan pedaran lengkep sadaya fitur sarta parameter input dina dokuméntasi. Tapi éta hadé pikeun nyobaan sakali ti ningali saratus kali, jadi hayu urang nyebarkeun hiji aplikasi leutik.

Tarantool Cartridge boga tutorial pikeun nyieun hiji aplikasi Cartridge leutik nu nyimpen informasi ngeunaan nasabah bank tur rekening maranéhanana, sarta nyadiakeun ogé hiji API pikeun ngatur data via HTTP. Jang ngalampahkeun ieu, aplikasi ngajelaskeun dua peran anu mungkin: api и storagenu bisa ditugaskeun ka instansi.

Cartridge sorangan henteu nyarios nanaon ngeunaan kumaha ngamimitian prosés, éta ngan ukur nyayogikeun kamampuan pikeun ngonpigurasikeun instansi anu parantos jalan. Pamaké kudu ngalakukeun sésana sorangan: decompose file konfigurasi, ngamimitian jasa jeung nyetél topologi nu. Tapi urang moal ngalakukeun sadayana ieu, Ansible bakal ngalakukeun pikeun urang.

Ti kecap nepi ka lampah

Janten, hayu urang nyebarkeun aplikasi urang kana dua mesin virtual sareng nyetél topologi saderhana:

  • réplikat app-1 bakal maénkeun peran apinu ngawengku kalungguhan vshard-router. Bakal aya ngan hiji conto di dieu.
  • réplikat storage-1 ngalaksanakeun peran storage (sareng dina waktos anu sami vshard-storage), Di dieu urang tambahkeun dua instansi tina mesin anu béda.

Nerapkeun Aplikasi Gampang sareng Alami dina Cartridge Tarantool (Bagian 1)

Pikeun ngajalankeun conto, urang peryogi Seungit и Ansible (versi 2.8 atanapi engké).

Peran sorangan Galaxy Ansible. Ieu mangrupikeun gudang anu ngamungkinkeun anjeun ngabagi karya anjeun sareng nganggo peran anu siap-siap.

Kloning gudang kalayan conto:

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

Kami ngangkat mesin virtual:

$ vagrant up

Pasang peran Tarantool Cartridge ansible:

$ ansible-galaxy install tarantool.cartridge,1.0.1

Jalankeun peran anu dipasang:

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

Kami ngantosan tungtung palaksanaan playbook, buka http://localhost:8181/admin/cluster/dashboard sareng nikmati hasilna:

Nerapkeun Aplikasi Gampang sareng Alami dina Cartridge Tarantool (Bagian 1)

Anjeun tiasa tuang data. Keren, leres?

Ayeuna hayu urang terang kumaha carana dianggo kalayan ieu, sarta dina waktos anu sareng nambahkeun replica set sejen ka topologi nu.

Urang mimitian ngartos

Janten naon anu lumangsung?

Kami ngagaduhan dua VM sareng ngajalankeun playbook ansible anu nyetél kluster kami. Hayu urang nempo eusi file 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

Euweuh metot kajadian di dieu, urang mimitian ansible-peran, nu disebut tarantool.cartridge.

Sadaya anu paling penting (nyaéta, konfigurasi klaster) ayana di inventory- file 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:

Sadaya anu urang peryogikeun nyaéta diajar kumaha ngatur instansi sareng réplikat ku cara ngarobih eusi file ieu. Salajengna, urang bakal nambihan bagian anyar kana éta. Supados teu bingung dimana nambihanana, anjeun tiasa ngintip kana versi ahir file ieu, hosts.updated.yml, anu aya dina conto gudang.

Manajemén Instance

Dina watesan Ansible, unggal conto nyaéta host (teu aya patalina sareng server beusi), i.e. titik infrastruktur anu Ansible bakal ngatur. Pikeun unggal host, urang tiasa netepkeun parameter sambungan (sapertos ansible_host и ansible_user), kitu ogé konfigurasi instance. Katerangan ngeunaan instansi aya dina bagian hosts.

Mertimbangkeun konfigurasi conto storage-1:

all:
  vars:
    ...

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

  ...

Dina hiji variabel config kami netepkeun parameter conto - advertise URI и HTTP port.
Di handap ieu aya parameter conto app-1 и storage-1-replica.

Urang kudu ngabejaan Ansible parameter sambungan pikeun tiap conto. Sigana logis pikeun grup instansi kana grup mesin virtual. Pikeun ieu, instansi digabungkeun kana grup. host1 и host2, sarta dina unggal grup dina bagian vars nilai-nilai ansible_host и ansible_user pikeun hiji mesin virtual. Sareng dina bagian hosts - host (aranjeunna mangrupikeun instansi) anu kalebet dina grup ieu:

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:

Urang mimitian robah hosts.yml. Hayu urang tambahkeun dua conto deui, storage-2-replica dina mesin virtual munggaran tur storage-2 Dina kadua:

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

Ngajalankeun playbook ansible:

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

Nengetan pilihan --limit. Kusabab unggal conto klaster mangrupikeun host dina istilah Ansible, urang sacara eksplisit tiasa netepkeun instansi mana anu kedah dikonpigurasi nalika ngajalankeun playbook.

Balik deui ka UI Wéb http://localhost:8181/admin/cluster/dashboard sareng perhatikeun conto anyar kami:

Nerapkeun Aplikasi Gampang sareng Alami dina Cartridge Tarantool (Bagian 1)

Urang moal beristirahat on laurels kami sarta bakal ngawasaan kontrol topologi.

manajemén Topology

Hayu urang ngagabung instansi anyar urang kana replikaset a storage-2. Tambahkeun grup anyar replicaset_storage_2 sarta ngajelaskeun dina variabel na parameter tina replikaset ku analogi jeung replicaset_storage_1. Dina bagian hosts tangtukeun instansi mana anu bakal dilebetkeun kana grup ieu (nyaéta, set réplika kami):

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

Hayu urang ngamimitian deui playbook:

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

Per pilihan --limit urang waktos ieu lulus nami grup nu pakait jeung replikaset urang.

Mertimbangkeun pilihan tags.

Peran urang sacara berurutan ngalaksanakeun sababaraha pancén, anu ditandaan ku tag ieu:

  • cartridge-instances: manajemén conto (konfigurasi, sambungan ka kaanggotaan);
  • cartridge-replicasets: manajemén topologi (manajemén replicaset sarta ngaleupaskeun permanén (usir) tina instansi tina klaster);
  • cartridge-config: ngatur parameter klaster séjén (vshard bootstrapping, mode failover otomatis, parameter otorisasina sarta konfigurasi aplikasi).

Urang sacara eksplisit tiasa ngécéskeun naon bagian tina padamelan anu urang hoyong laksanakeun, teras peranna bakal ngalangkungan sesa tugas. Dina kasus urang, urang hoyong dianggo ukur ku topologi, jadi urang dieusian cartridge-replicasets.

Hayu urang evaluasi hasil tina usaha urang. Pananjung replikaset anyar http://localhost:8181/admin/cluster/dashboard.

Nerapkeun Aplikasi Gampang sareng Alami dina Cartridge Tarantool (Bagian 1)

Hooray!

Ékspérimén sareng konfigurasi ulang instansi sareng réplikaset sareng tingali kumaha topologi klaster robih. Anjeun tiasa nyobian sababaraha skenario operasional, contona, update rolling atawa nambahan memtx_memory. Peran bakal nyobian ngalakukeun ieu tanpa ngamimitian deui conto pikeun ngirangan kamungkinan downtime tina aplikasi anjeun.

Tong hilap lumpat vagrant haltpikeun ngeureunkeun VMs mun anjeun geus rengse kalayan aranjeunna.

Jeung naon handapeun tiung?

Di dieu kuring bakal ngobrol langkung seueur ngeunaan naon anu kajantenan di handapeun tiung tina peran ansible salami percobaan urang.

Hayu urang tingali dina nyebarkeun aplikasi Cartridge step by step.

Masang pakét sareng ngamimitian instansi

Kahiji maneh kudu nganteurkeun pakét ka server tur masangkeunana. Ayeuna peranna tiasa dianggo sareng bungkusan RPM sareng DEB.

Salajengna, urang ngajalankeun instansi. Sadayana saderhana pisan di dieu: unggal conto mangrupikeun misah systemd-layanan. Kuring ngawangkong ngeunaan conto:

$ systemctl start myapp@storage-1

Paréntah ieu bakal ngaluncurkeun conto storage-1 aktip myapp. Instance anu diluncurkeun bakal milarian na konfigurasi в /etc/tarantool/conf.d/. Log conto tiasa ditingali nganggo journald.

file Unit /etc/systemd/system/[email protected] pikeun layanan systemd bakal dikirimkeun ku pakét.

Ansible ngagaduhan modul anu diwangun pikeun masang bungkusan sareng ngatur jasa systemd, kami henteu acan mendakan anu énggal di dieu.

Ngonpigurasikeun topologi klaster

Sarta di dieu nu paling metot dimimitian. Satuju, eta bakal aneh mun repot jeung ansible-peran husus pikeun masang bungkusan jeung ngajalankeun systemd-layanan.

Anjeun tiasa nyetél klaster sacara manual:

  • Pilihan kahiji: buka UI Wéb teras klik dina tombol. Pikeun hiji-waktos mimiti sababaraha instansi, éta cukup merenah.
  • Pilihan kadua: anjeun tiasa nganggo API GraphQl. Di dieu anjeun geus bisa ngajadikeun otomatis hal, contona, nulis naskah dina Python.
  • Pilihan katilu (pikeun kuat dina sumanget): buka server, sambungkeun ka salah sahiji instansi maké tarantoolctl connect sarta ngalakukeun sagala manipulasi perlu jeung modul Lua cartridge.

Tugas utama penemuan kami nyaéta pikeun ngalakukeun ieu, bagian anu paling hese pikeun anjeun.

Ansible ngamungkinkeun anjeun nyerat modul anjeun nyalira sareng dianggo dina peran. Peran urang ngagunakeun modul ieu pikeun ngatur rupa-rupa komponén klaster.

Kumaha gawéna? Anjeun ngajelaskeun kaayaan dipikahoyong tina klaster dina config déklaratif, sarta peran méré tiap modul bagian konfigurasi na salaku input. modul narima kaayaan ayeuna tina klaster sarta ngabandingkeun éta kalayan input. Salajengna, kodeu dijalankeun ngaliwatan stop kontak salah sahiji instansi, nu brings klaster ka kaayaan dipikahoyong.

hasil

Dinten ieu kami nyarios sareng nunjukkeun kumaha cara nyebarkeun aplikasi anjeun dina Cartridge Tarantool sareng nyetél topologi saderhana. Jang ngalampahkeun ieu, kami nganggo Ansible, alat anu kuat anu gampang dianggo sareng ngamungkinkeun anjeun sakaligus ngonpigurasikeun seueur titik infrastruktur (dina kasus urang, ieu mangrupikeun conto klaster).

Di luhur, urang diurus salah sahiji tina loba cara pikeun ngajelaskeun konfigurasi klaster maké Ansible. Sakali anjeun terang anjeun siap ngaléngkah, diajar lila-pangalusna pikeun nulis playbooks. Anjeun tiasa mendakan langkung merenah pikeun ngatur topologi group_vars и host_vars.

Pisan geura-giru kami bakal ngabejaan ka maneh kumaha permanén miceun (ngusir) instansi ti topologi nu, bootstrap vshard, ngatur mode failover otomatis, ngonpigurasikeun otorisasina sarta patch config klaster. Samentawis waktos, anjeun tiasa diajar nyalira dokuméntasi sareng ékspérimén sareng ngarobih parameter klaster.

Upami aya anu henteu jalan, pastikeun ngawartosan urang ngeunaan masalah. Urang bakal ngarecahna gancang!

sumber: www.habr.com

Tambahkeun komentar