A sauƙaƙe kuma a zahiri tura aikace-aikace zuwa Tarantool Cartridge (Kashi na 1)

A sauƙaƙe kuma a zahiri tura aikace-aikace zuwa Tarantool Cartridge (Kashi na 1)

Mun riga mun yi magana akai Tarantool Cartridge, wanda ke ba ka damar haɓaka aikace-aikacen da aka rarraba da kuma kunshe su. Abin da ya rage shi ne koyon yadda ake tura waɗannan aikace-aikacen da sarrafa su. Kada ku damu, mun rufe duka! Mun haɗa duk mafi kyawun ayyuka don aiki tare da Tarantool Cartridge kuma mun rubuta rawar da za ta iya, wanda zai rarraba fakitin zuwa sabobin, ƙaddamar da misalai, haɗa su cikin gungu, saita izini, bootstrap vshard, ba da damar gazawar atomatik da facin saitin gungu.

Abin sha'awa? Sa'an nan don Allah, a ƙarƙashin yanke, za mu gaya muku kuma mu nuna muku komai.

Bari mu fara da misali

Za mu kalli wani bangare na ayyukan rawar mu ne kawai. Kuna iya samun cikakken bayanin duk iyawarsa da sigogin shigarwa a ciki takardun. Amma yana da kyau a gwada sau ɗaya fiye da ganin shi sau ɗari, don haka bari mu tura karamin aikace-aikacen.

Tarantool Cartridge yana da koyawa don ƙirƙirar ƙaramin aikace-aikacen Cartridge wanda ke adana bayanai game da abokan cinikin banki da asusunsu, sannan kuma yana ba da API don sarrafa bayanai ta HTTP. Don cimma wannan, shafi ya bayyana ayyuka biyu masu yiwuwa: api и storage, wanda za'a iya sanya shi zuwa lokuta.

Cartridge da kansa bai ce komai ba game da yadda ake ƙaddamar da matakai, kawai yana ba da ikon daidaita al'amuran da ke gudana. Dole ne mai amfani ya yi sauran da kansa: shirya fayilolin sanyi, fara sabis da saita topology. Amma ba za mu yi duk wannan ba; Mai yiwuwa ne zai yi mana.

Daga kalmomi zuwa ayyuka

Don haka, bari mu tura aikace-aikacenmu zuwa na'urori masu kama-da-wane guda biyu kuma mu kafa topology mai sauƙi:

  • Replicaset app-1 zai aiwatar da rawar api, wanda ya hada da rawar vshard-router. Za a sami misali ɗaya kawai a nan.
  • Replicaset storage-1 aiwatar da rawar storage (kuma a lokaci guda vshard-storage), a nan za mu ƙara misalai biyu daga inji daban-daban.

A sauƙaƙe kuma a zahiri tura aikace-aikace zuwa Tarantool Cartridge (Kashi na 1)

Don gudanar da misalin da muke bukata Baƙi и Mai yiwuwa (version 2.8 ko fiye).

Rawar da kanta ke ciki Galaxy mai yiwuwa. Wannan wurin ajiya ne wanda ke ba ku damar raba aikinku da amfani da shirye-shiryen da aka yi.

Bari mu rufe ma'ajiyar da misali:

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

Muna haɓaka inji mai kama-da-wane:

$ vagrant up

Shigar da Tarantool Cartridge mai yiwuwa rawar:

$ ansible-galaxy install tarantool.cartridge,1.0.1

Kaddamar da aikin da aka shigar:

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

Muna jiran littafin wasan ya kammala aiwatarwa, je zuwa http://localhost:8181/admin/cluster/dashboard kuma ku ji daɗin sakamakon:

A sauƙaƙe kuma a zahiri tura aikace-aikace zuwa Tarantool Cartridge (Kashi na 1)

Kuna iya loda bayanai. Sannu, dama?

Yanzu bari mu gano yadda za a yi aiki tare da wannan, kuma a lokaci guda ƙara wani saitin kwafi zuwa topology.

Bari mu fara gane shi

To me ya faru?

Mun kafa injuna guda biyu kuma muka ƙaddamar da littafin wasan kwaikwayo mai yiwuwa wanda ya daidaita tarin mu. Bari mu dubi abubuwan da ke cikin fayil ɗin 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

Babu wani abu mai ban sha'awa da ya faru a nan, bari mu ƙaddamar da rawar da ta dace da ake kira tarantool.cartridge.

Dukkan abubuwan da suka fi mahimmanci (wato, tsarin cluster) suna cikin su kaya- fayil 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:

Duk abin da muke buƙata shine mu koyi yadda ake sarrafa al'amura da kwafi ta hanyar canza abubuwan da ke cikin wannan fayil ɗin. Na gaba za mu ƙara sabbin sassa zuwa gare shi. Domin kar a ruɗe inda za a ƙara su, kuna iya duba sigar ƙarshe na wannan fayil ɗin, hosts.updated.yml, wanda ke cikin ma'ajiyar misali.

Gudanar da misali

A cikin Mahimman sharuddan, kowane misali mai watsa shiri ne (kada a ruɗe shi da uwar garken hardware), watau. kullin abubuwan more rayuwa wanda Mai yiwuwa zai sarrafa. Ga kowane mai masaukin baki muna iya ƙayyade sigogin haɗi (kamar ansible_host и ansible_user), da kuma daidaitawar misali. Bayanin misalai yana cikin sashin hosts.

Bari mu kalli tsarin daidaitawa storage-1:

all:
  vars:
    ...

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

  ...

A cikin m config mun ayyana sigogin misali - advertise URI и HTTP port.
A ƙasa akwai sigogin misali app-1 и storage-1-replica.

Muna buƙatar gaya wa Mai yiwuwa ma'aunin haɗi na kowane misali. Da alama yana da ma'ana don haɗa misalan cikin ƙungiyoyin injina. Don wannan dalili, ana haɗa al'amura zuwa rukuni host1 и host2, kuma a kowace rukuni a cikin sashe vars ana nuna dabi'u ansible_host и ansible_user don injin kama-da-wane. Kuma a cikin sashe hosts - runduna (aka misalan) waɗanda ke cikin wannan rukunin:

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:

Mun fara canzawa hosts.yml. Bari mu ƙara ƙarin misalai biyu, storage-2-replica a kan na'ura mai mahimmanci na farko da storage-2 A na biyu:

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

Kaddamar da littafin wasa mai yiwuwa:

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

Da fatan za a lura da zaɓi --limit. Tun da kowane misalan gungu mai masaukin baki ne a cikin Mahimman sharuddan, za mu iya ƙayyadaddun takamaiman abubuwan da ya kamata a saita yayin aiwatar da littafin wasan.

Komawa zuwa Yanar Gizo UI http://localhost:8181/admin/cluster/dashboard kuma duba sabbin abubuwan mu:

A sauƙaƙe kuma a zahiri tura aikace-aikace zuwa Tarantool Cartridge (Kashi na 1)

Kada mu tsaya nan mu kware wajen sarrafa topology.

Topology management

Bari mu haɗa sabbin abubuwan mu cikin saitin kwafi storage-2. Bari mu ƙara sabon rukuni replicaset_storage_2 da kuma bayyana sigogin da aka sake maimaitawa a cikin masu canjin sa ta kwatankwacinsu replicaset_storage_1. A cikin sashe hosts Bari mu nuna waɗanne lokuta ne za a haɗa a cikin wannan rukunin (wato, saitin kwafin mu):

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

Bari mu sake fara littafin wasan:

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

Kowane zaɓi --limit A wannan karon mun ƙaddamar da sunan ƙungiyar da ta dace da tsarin mu.

Bari mu yi la'akari da zabin tags.

Matsayinmu yana aiwatar da ayyuka daban-daban a jere, waɗanda aka yi musu alama da alamun masu zuwa:

  • cartridge-instances: gudanarwa na misali (tsari, haɗi zuwa mamba);
  • cartridge-replicasets: topology management (replicaset management da dindindin cire (kore) na lokuta daga tari);
  • cartridge-config: gudanar da wasu sigogin gungu (vshard bootstrapping, yanayin gazawar atomatik, sigogin izini da tsarin aikace-aikacen).

Za mu iya bayyana a fili wane ɓangaren aikin da muke so mu yi, to rawar za ta tsallake sauran ayyukan. A cikin yanayinmu, muna so muyi aiki kawai tare da topology, don haka muka ƙayyade cartridge-replicasets.

Mu tantance sakamakon kokarinmu. Mun sami sabon kwafi akan http://localhost:8181/admin/cluster/dashboard.

A sauƙaƙe kuma a zahiri tura aikace-aikace zuwa Tarantool Cartridge (Kashi na 1)

Hooray!

Gwaji tare da canza tsarin misalai da saitin kwafi kuma duba yadda tarin topology ke canzawa. Kuna iya gwada yanayin aiki daban-daban, misali. mirgina sabuntawa ko karuwa memtx_memory. Matsayin zai yi ƙoƙarin yin hakan ba tare da sake farawa misali ba don rage yuwuwar lokacin faɗuwar aikace-aikacen ku.

Kar a manta da gudu vagrant haltdon dakatar da injunan kama-da-wane lokacin da kuka gama aiki da su.

Menene a ƙarƙashin hular?

Anan zan ba ku ƙarin bayani game da abin da ke faruwa a ƙarƙashin murfin rawar da za a iya ɗauka yayin gwaje-gwajenmu.

Bari mu kalli ƙaddamar da aikace-aikacen Cartridge mataki-mataki.

Shigar da kunshin da farawa

Da farko kuna buƙatar isar da kunshin zuwa uwar garken kuma shigar da shi. A halin yanzu rawar na iya aiki tare da fakitin RPM da DEB.

Na gaba za mu kaddamar da misalai. Komai yana da sauqi a nan: kowane misali daban ne systemd- sabis. Zan ba ku misali:

$ systemctl start myapp@storage-1

Wannan umarnin zai ƙaddamar da misalin storage-1 apps myapp. Misalin da aka kaddamar zai nemi ta daidaitawa в /etc/tarantool/conf.d/. Ana iya duba rajistan ayyukan ta amfani da su journald.

Fayil na raka'a /etc/systemd/system/[email protected] don sabis na tsarin za a ba da shi tare da kunshin.

Mai yiwuwa yana da na'urori masu gina jiki don shigar da fakiti da sarrafa ayyukan tsarin; ba mu ƙirƙira wani sabon abu a nan ba.

Kafa cluster topology

Anan ne ake fara jin daɗi. Yarda, zai zama abin ban mamaki a damu da rawar da za ta iya ta musamman don shigar da fakiti da gudana systemd-aiki.

Kuna iya saita gungu da hannu:

  • Zaɓin farko: buɗe UI na Yanar Gizo kuma danna maɓallan. Ya dace sosai don farawa sau ɗaya na lokuta da yawa.
  • Zabi na biyu: zaka iya amfani da GraphQl API. Anan kun riga kun iya sarrafa wani abu, misali, rubuta rubutun a Python.
  • Zabi na uku (ga masu ƙarfi): je zuwa uwar garken, haɗa zuwa ɗaya daga cikin abubuwan da ake amfani da su tarantoolctl connect da aiwatar da duk abubuwan da suka dace tare da tsarin Lua cartridge.

Babban aikin ƙirƙirar mu shine yin daidai wannan, ɓangaren mafi wahala na aikin a gare ku.

Mai yiwuwa yana ba ka damar rubuta naka tsarin kuma amfani da shi a cikin rawar. Matsayin namu yana amfani da irin waɗannan samfuran don sarrafa abubuwan tari daban-daban.

Ta yaya yake aiki? Kuna bayyana yanayin da ake so na gungu a cikin ƙayyadaddun tsari, kuma aikin yana samar da kowane tsari tare da sashin daidaitawarsa azaman shigarwa. Tsarin yana karɓar halin yanzu na gungu kuma yana kwatanta shi da abin da aka karɓa azaman shigarwa. Bayan haka, ana ƙaddamar da lambar ta hanyar soket na ɗaya daga cikin abubuwan, wanda ke kawo gungu zuwa yanayin da ake so.

Sakamakon

A yau mun fada kuma mun nuna yadda ake tura aikace-aikacenku zuwa Tarantool Cartridge da saita topology mai sauƙi. Don yin wannan, mun yi amfani da Mai yiwuwa - kayan aiki mai ƙarfi wanda ke da sauƙin amfani kuma yana ba ku damar daidaita kuɗaɗen ababen more rayuwa da yawa a lokaci guda (a cikin yanayinmu, misalan tari).

A sama mun kalli ɗayan hanyoyi masu yawa don kwatanta tsarin tari ta amfani da Mai yiwuwa. Da zarar kun ji shirye don ci gaba, bincika ayyuka mafi kyau akan rubuta littattafan wasan kwaikwayo. Kuna iya samun sauƙin sarrafa topology ta amfani da shi group_vars и host_vars.

Nan ba da jimawa ba za mu gaya muku yadda ake share (kore) har abada daga topology, bootstrap vshard, sarrafa yanayin gazawa ta atomatik, saita izini da facin saitin cluster. A halin yanzu, kuna iya yin karatu da kanku takardun shaida da gwaji tare da canza sigogin tari.

Idan wani abu bai yi aiki ba, tabbas sanarwa mu akan matsalar. Za mu warware komai da sauri!

source: www.habr.com

Add a comment