Gampang lan alami masang aplikasi menyang Tarantool Cartridge (bagean 1)

Gampang lan alami masang aplikasi menyang Tarantool Cartridge (bagean 1)

Kita wis ngomong babagan Tarantool Cartridge, sing ngidini sampeyan ngembangake aplikasi sing disebarake lan ngemas. Sing isih ana yaiku sinau babagan cara nyebarake aplikasi kasebut lan ngatur. Aja kuwatir, kita wis ngrampungake kabeh! Kita ngumpulake kabeh praktik paling apik kanggo nggarap Tarantool Cartridge lan nulis ansible-peran, sing bakal disebaraké paket kanggo server, miwiti kedadean, nyawiji menyang kluster, ngatur wewenang, bootstrap vshard, mbisakake failover otomatis lan patch config cluster.

menarik? Banjur mangga, ing ngisor potong, kita bakal ngandhani lan nuduhake kabeh.

Ayo dadi miwiti karo conto

Kita mung bakal ndeleng bagean saka fungsi peran kita. Sampeyan bisa tansah golek gambaran lengkap kabeh kapabilitas lan paramèter input ing dokumentasi. Nanging luwih becik nyoba sapisan tinimbang ndeleng kaping satus, mula ayo masang aplikasi cilik.

Tarantool Cartridge wis tutorial kanggo nggawe aplikasi Cartridge cilik sing nyimpen informasi babagan klien bank lan akun, lan uga menehi API kanggo manajemen data liwat HTTP. Kanggo nggayuh iki, lampiran nerangake rong peran sing bisa ditindakake: api и storage, sing bisa ditugasake kanggo instance.

Cartridge dhewe ora ngomong apa-apa bab carane miwiti proses, iku mung menehi kemampuan kanggo ngatur kedadean wis mlaku. Pangguna kudu nindakake liyane dhewe: ngatur file konfigurasi, miwiti layanan lan ngatur topologi. Nanging kita ora bakal nindakake kabeh iki; Ansible bakal nindakake kanggo kita.

Saka tembung nganti tumindak

Dadi, ayo masang aplikasi kita menyang rong mesin virtual lan nyiyapake topologi sing prasaja:

  • Replika app-1 bakal ngleksanakake peran api, kang kalebu peran vshard-router. Mung ana siji conto ing kene.
  • Replika storage-1 ngleksanakake peran storage (lan ing wektu sing padha vshard-storage), ing kene kita bakal nambah rong conto saka mesin sing beda.

Gampang lan alami masang aplikasi menyang Tarantool Cartridge (bagean 1)

Kanggo mbukak conto kita kudu Sithik и Ansible (versi 2.8 utawa luwih lawas).

Peran kasebut dhewe Galaxy Ansible. Iki minangka gudang sing ngidini sampeyan nuduhake karya lan nggunakake peran sing wis siap.

Ayo tiron repositori kanthi conto:

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

Kita mundhakaken mesin virtual:

$ vagrant up

Instal peran Tarantool Cartridge ansible:

$ ansible-galaxy install tarantool.cartridge,1.0.1

Bukak peran sing diinstal:

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

Kita ngenteni playbook kanggo ngrampungake eksekusi, pindhah menyang http://localhost:8181/admin/cluster/dashboard lan nikmati asil:

Gampang lan alami masang aplikasi menyang Tarantool Cartridge (bagean 1)

Sampeyan bisa ngunggah data. Kelangan, bener?

Saiki ayo dipikirake carane nggarap iki, lan ing wektu sing padha nambahake replika liyane menyang topologi.

Ayo dadi miwiti kanggo tokoh metu

Dadi apa sing kedadeyan?

Kita nyiyapake rong mesin virtual lan ngluncurake playbook ansible sing ngatur kluster. Ayo ndeleng isi file kasebut 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

Ora ana sing menarik ing kene, ayo miwiti peran sing bisa diarani tarantool.cartridge.

Kabeh sing paling penting (yaiku konfigurasi kluster) dumunung ing persediaan-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:

Kabeh sing kita butuhake yaiku sinau babagan ngatur conto lan replika kanthi ngganti isi file iki. Sabanjure kita bakal nambah bagean anyar. Supaya ora bingung ngendi kanggo nambah, sampeyan bisa ndeleng ing versi final saka berkas iki, hosts.updated.yml, sing ana ing gudang conto.

Manajemen conto

Ing istilah Ansible, saben conto minangka host (ora bakal bingung karo server hardware), i.e. simpul infrastruktur sing Ansible bakal ngatur. Kanggo saben host kita bisa nemtokake paramèter sambungan (kayata ansible_host и ansible_user), uga konfigurasi conto. Katrangan saka kedadean ana ing bagean hosts.

Ayo katon ing konfigurasi conto storage-1:

all:
  vars:
    ...

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

  ...

Ing variabel config kita nemtokake paramèter conto - advertise URI и HTTP port.
Ing ngisor iki paramèter conto app-1 и storage-1-replica.

We kudu marang Ansible paramèter sambungan kanggo saben Kayata. Iku misale jek logis kanggo klompok kedadean menyang grup mesin virtual. Kanggo tujuan iki, conto digabungake dadi klompok host1 и host2, lan ing saben klompok ing bagean vars nilai dituduhake ansible_host и ansible_user kanggo siji mesin virtual. Lan ing bagean hosts - host (alias instance) sing kalebu ing grup iki:

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:

Kita wiwiti ngganti hosts.yml. Ayo ditambahake rong conto liyane, storage-2-replica ing mesin virtual pisanan lan storage-2 Ing kaloro:

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

Bukak playbook ansible:

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

Wigati pilihan --limit. Wiwit saben conto kluster minangka host ing istilah Ansible, kita bisa kanthi jelas nemtokake conto sing kudu dikonfigurasi nalika nglakokake playbook.

Bali menyang UI Web http://localhost:8181/admin/cluster/dashboard lan ndeleng conto anyar kita:

Gampang lan alami masang aplikasi menyang Tarantool Cartridge (bagean 1)

Aja mandheg ing kana lan nguwasani manajemen topologi.

Manajemen topologi

Ayo gabungke instansi anyar dadi set replika storage-2. Ayo nambah grup anyar replicaset_storage_2 lan njlèntrèhaké paramèter replikaset ing sawijining variabel dening analogi karo replicaset_storage_1. Ing bagean hosts Ayo nuduhake conto endi sing bakal dilebokake ing grup iki (yaiku, set replika):

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

Ayo miwiti playbook maneh:

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

Ing parameter --limit Wektu iki kita ngliwati jeneng grup sing cocog karo replikat kita.

Ayo dipikirake pilihan kasebut tags.

Peran kita kanthi urutan nindakake macem-macem tugas, sing ditandhani karo tag ing ngisor iki:

  • cartridge-instances: manajemen conto (konfigurasi, sambungan menyang anggota);
  • cartridge-replicasets: manajemen topologi (manajemen replika lan mbusak permanen (ngusir) conto saka kluster);
  • cartridge-config: Manajemen paramèter kluster liyane (vshard bootstrapping, mode failover otomatis, paramèter wewenang lan konfigurasi aplikasi).

Kita bisa kanthi jelas nemtokake bagean saka karya sing arep ditindakake, banjur peran kasebut bakal ngliwati tugas liyane. Ing kasus kita, kita mung pengin nggarap topologi, supaya kita nemtokake cartridge-replicasets.

Ayo padha ngevaluasi asil saka usaha kita. We golek replikaset anyar ing http://localhost:8181/admin/cluster/dashboard.

Gampang lan alami masang aplikasi menyang Tarantool Cartridge (bagean 1)

Hooray!

Eksperimen karo ngganti konfigurasi kedadean lan replika set lan ndeleng carane topologi cluster diganti. Sampeyan bisa nyoba metu skenario operasional beda, f.eks. nganyari rolling utawa mundhak memtx_memory. Peran bakal nyoba nindakake iki tanpa miwiti maneh instance kanggo nyuda kemungkinan downtime aplikasi sampeyan.

Ojo lali mlayu vagrant haltkanggo mungkasi mesin virtual yen sampeyan wis rampung nggarap.

Apa sing ana ing ngisor hood?

Ing kene aku bakal ngandhani sampeyan luwih lengkap babagan apa sing kedadeyan ing sangisore peran sing bisa ditindakake sajrone eksperimen.

Ayo goleki nggunakake aplikasi Cartridge langkah demi langkah.

Nginstal paket lan miwiti kedadean

Pisanan sampeyan kudu ngirim paket menyang server lan nginstal. Saiki peran kasebut bisa digunakake karo paket RPM lan DEB.

Sabanjure kita miwiti conto. Kabeh gampang banget ing kene: saben conto minangka kapisah systemd-layanan. Aku bakal menehi conto:

$ systemctl start myapp@storage-1

Printah iki bakal miwiti conto storage-1 app myapp. Kayata sing diluncurake bakal nggoleki konfigurasi в /etc/tarantool/conf.d/. Log Kayata bisa dideleng nggunakake journald.

File unit /etc/systemd/system/[email protected] kanggo layanan systemd bakal dikirim bebarengan karo paket.

Ansible duwe modul sing dibangun kanggo nginstal paket lan ngatur layanan sistem; kita durung nemokke sing anyar ing kene.

Nggawe topologi cluster

Iki ngendi fun wiwit. Setuju, iku bakal aneh kanggo keganggu peran Ansible khusus kanggo nginstal paket lan mlaku systemd-layanan

Sampeyan bisa ngatur kluster kanthi manual:

  • Opsi pisanan: bukak UI Web banjur klik tombol. Iku cukup cocok kanggo wiwitan siji-wektu sawetara kedadean.
  • Pilihan kapindho: sampeyan bisa nggunakake API GraphQl. Kene sampeyan wis bisa ngotomatisasi soko, contone, nulis script ing Python.
  • Pilihan katelu (kanggo kuwat-karep): pindhah menyang server, nyambung menyang salah siji saka kedadean nggunakake tarantoolctl connect lan nindakake kabeh manipulasi perlu karo modul Lua cartridge.

Tugas utama penemuan kita yaiku nindakake persis iki, bagean paling angel saka karya kanggo sampeyan.

Ansible ngijini sampeyan kanggo nulis modul dhewe lan nggunakake ing peran. Peran kita nggunakake modul kasebut kanggo ngatur macem-macem komponen kluster.

Cara kerjane? Sampeyan njlèntrèhaké negara dikarepake saka kluster ing config declarative, lan peran menehi saben modul karo bagean konfigurasi minangka input. Modul nampa kahanan saiki kluster lan mbandhingake karo apa sing ditampa minangka input. Sabanjure, kode diluncurake liwat soket salah sawijining conto, sing nggawa kluster menyang negara sing dikarepake.

Hasil

Dina iki kita marang lan nuduhake carane masang aplikasi kanggo Tarantool Cartridge lan nyetel topologi prasaja. Kanggo nindakake iki, kita nggunakake Ansible - alat sing kuat sing gampang digunakake lan ngidini sampeyan ngatur akeh simpul infrastruktur (ing kasus kita, conto cluster).

Ndhuwur kita ndeleng salah siji saka akeh cara kanggo njlèntrèhaké konfigurasi cluster nggunakake Ansible. Sawise sampeyan wis siap kanggo nerusake, njelajah praktik paling apik ing nulis playbooks. Sampeyan bisa uga luwih gampang ngatur topologi sampeyan nggunakake group_vars и host_vars.

Rauh banget kita bakal pitutur marang kowe carane mbusak permanen (ngusir) kedadean saka topologi, bootstrap vshard, ngatur mode failover otomatis, ngatur wewenang lan patch config cluster. Ing sawetoro wektu, sampeyan bisa sinau dhewe dokumentasi lan eksperimen karo ngganti paramèter kluster.

Yen ana sing ora bisa, mesthine ngandhani kita babagan masalah kasebut. Kita bakal ngurutake kabeh kanthi cepet!

Source: www.habr.com

Add a comment