Mosavuta komanso mwachilengedwe tumizani mapulogalamu ku Tarantool Cartridge (gawo 1)

Mosavuta komanso mwachilengedwe tumizani mapulogalamu ku Tarantool Cartridge (gawo 1)

Takambirana kale Cartridge ya Tarantool, zomwe zimakupatsani mwayi wopanga mapulogalamu omwe amagawidwa ndikuziyika. Zomwe zatsala ndikuphunzira momwe mungagwiritsire ntchito mapulogalamuwa ndikuwongolera. Osadandaula, zonse zaphimbidwa! Tidaphatikiza njira zabwino zonse zogwirira ntchito ndi Tarantool Cartridge ndikulemba woyenerera-udindo, yomwe idzagawira phukusi ku ma seva, kuyambitsa zochitika, kuwagwirizanitsa kukhala gulu, sinthani chilolezo, bootstrap vshard, yambitsani kulephera kwadzidzidzi ndikuyika konsati ya cluster.

Zosangalatsa? Ndiye chonde, pansi pa odulidwa, tidzakuuzani ndi kukuwonetsani chirichonse.

Tiyeni tiyambe ndi chitsanzo

Tingoyang'ana gawo limodzi la magwiridwe antchito athu. Mutha kupeza nthawi zonse kufotokozera kwamphamvu zake zonse ndi magawo ake zolemba. Koma ndikwabwino kuyesa kamodzi kuposa kuziwona nthawi zana, ndiye tiyeni tigwiritse ntchito pulogalamu yaying'ono.

Tarantool Cartridge ili ndi phunziro kupanga pulogalamu yaing'ono ya Cartridge yomwe imasunga zambiri zamakasitomala aku banki ndi maakaunti awo, komanso imapereka API yoyang'anira data kudzera pa HTTP. Kuti izi zitheke, zakumapeto zikulongosola maudindo awiri omwe angatheke: api ΠΈ storage, yomwe ikhoza kuperekedwa ku zochitika.

Cartridge palokha sichinena chilichonse chokhudza momwe mungayambitsire njira, imangopereka luso lokonzekera zochitika zomwe zikuyenda kale. Wogwiritsa ntchito ayenera kuchita zotsala yekha: konzani mafayilo osinthira, yambitsani ntchito ndikukhazikitsa topology. Koma sitidzachita zonsezi; Ansible adzatichitira ife.

Kuchokera pa mawu kupita ku zochita

Chifukwa chake, tiyeni titumize ntchito yathu pamakina awiri enieni ndikukhazikitsa topology yosavuta:

  • Seweraninso app-1 adzakwaniritsa udindo api, zomwe zikuphatikizapo udindo vshard-router. Padzakhala chitsanzo chimodzi chokha apa.
  • Seweraninso storage-1 amakwaniritsa udindo storage (ndipo nthawi yomweyo vshard-storage), apa tidzawonjezera zitsanzo ziwiri kuchokera pamakina osiyanasiyana.

Mosavuta komanso mwachilengedwe tumizani mapulogalamu ku Tarantool Cartridge (gawo 1)

Kuti tiyendetse chitsanzo chomwe tikufuna Wachilendo ΠΈ Amatha (mtundu 2.8 kapena kupitilira apo).

Udindo womwewo uli mkati Ansible Galaxy. Ichi ndi chosungira chomwe chimakupatsani mwayi wogawana ntchito yanu ndikugwiritsa ntchito maudindo omwe mwakonzekera.

Tiyeni tifananize chosungiramo ndi chitsanzo:

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

Timayika makina owoneka bwino:

$ vagrant up

Ikani Tarantool Cartridge udindo woyenerera:

$ ansible-galaxy install tarantool.cartridge,1.0.1

Yambitsani ntchito yoyika:

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

Timadikirira kuti playbook imalize kuphedwa, pitani http://localhost:8181/admin/cluster/dashboard ndikusangalala ndi zotsatira zake:

Mosavuta komanso mwachilengedwe tumizani mapulogalamu ku Tarantool Cartridge (gawo 1)

Mutha kukweza deta. Chabwino, chabwino?

Tsopano tiyeni tiwone momwe tingagwiritsire ntchito izi, ndipo panthawi imodzimodziyo yonjezerani chofanana china pa topology.

Tiyeni tiyambe kulingalira

Ndiye chinachitika ndi chiyani?

Tidapanga makina awiri owoneka bwino ndikuyambitsa buku lamasewera lomwe lidakonza gulu lathu. Tiyeni tiwone zomwe zili mufayiloyo 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

Palibe chosangalatsa chomwe chikuchitika apa, tiyeni tiyambitse gawo loyenera lotchedwa tarantool.cartridge.

Zinthu zonse zofunika kwambiri (ndiko, kasinthidwe kamagulu) zili mkati kufufuza-fayilo 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:

Zomwe timafunikira ndikuphunzira momwe mungasamalire zochitika ndi zofananira posintha zomwe zili mufayiloyi. Kenako tidzawonjezera zigawo zatsopano kwa izo. Kuti musasokonezeke komwe mungawawonjezere, mutha kuyang'ana mtundu womaliza wa fayiloyi, hosts.updated.yml, yomwe ili mu chitsanzo chosungira.

Kasamalidwe ka zochitika

M'mawu Ansible, chitsanzo chilichonse ndi cholandira (chosasokonezedwa ndi seva ya hardware), i.e. node ya zomangamanga yomwe Ansible idzayendetsa. Kwa wolandira aliyense titha kufotokozera magawo olumikizirana (monga ansible_host ΠΈ ansible_user), komanso makonzedwe achitsanzo. Kufotokozera za zochitika kuli mu gawoli hosts.

Tiyeni tiwone kasinthidwe kachitsanzo storage-1:

all:
  vars:
    ...

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

  ...

Mu variable config tidafotokoza zachitsanzo - advertise URI ΠΈ HTTP port.
Pansipa pali magawo a zitsanzo app-1 ΠΈ storage-1-replica.

Tiyenera kuuza Ansible magawo olumikizirana pamwambo uliwonse. Zikuwoneka zomveka kuyika zochitika m'magulu a makina enieni. Pachifukwa ichi, zitsanzo zimaphatikizidwa m'magulu host1 ΠΈ host2, ndi m’gulu lililonse m’gawolo vars ma values ​​amawonetsedwa ansible_host ΠΈ ansible_user kwa makina amodzi. Ndipo mu gawo hosts - makamu (akanthawi) omwe akuphatikizidwa mu gulu ili:

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:

Timayamba kusintha hosts.yml. Tiyeni tiwonjezere zitsanzo zina ziwiri, storage-2-replica pa makina oyamba pafupifupi ndi storage-2 Pa chachiwiri:

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

Yambitsani playbook yoyenera:

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

Chonde dziwani njira --limit. Popeza kuti gulu lililonse limakhala ndi mawu akuti Ansible, titha kufotokoza momveka bwino kuti ndi zochitika ziti zomwe zikuyenera kukhazikitsidwa popanga playbook.

Kubwerera ku Web UI http://localhost:8181/admin/cluster/dashboard ndikuwona zochitika zathu zatsopano:

Mosavuta komanso mwachilengedwe tumizani mapulogalamu ku Tarantool Cartridge (gawo 1)

Osayima pamenepo ndikuwongolera kasamalidwe ka topology.

Topology Management

Tiyeni tiphatikize zochitika zathu zatsopano kukhala zofananira storage-2. Tiyeni tiwonjezere gulu latsopano replicaset_storage_2 ndikufotokozera magawo ofananirako muzosintha zake mofananiza ndi replicaset_storage_1. Mu gawo hosts Tiyeni tiwonetse zochitika zomwe zidzaphatikizidwe mugululi (ndiko kuti, zofananira zathu):

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

Tiyeni tiyambenso sewerolo:

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

Pa njira --limit Nthawi ino tidapereka dzina la gulu lomwe limagwirizana ndi zomwe tajambula.

Tiyeni tikambirane zimene mungachite tags.

Ntchito yathu motsatizana imagwira ntchito zosiyanasiyana, zomwe zimalembedwa ndi ma tag awa:

  • cartridge-instances: kasamalidwe ka zitsanzo (kusintha, kulumikizana ndi umembala);
  • cartridge-replicasets: kasamalidwe ka topology (kasamalidwe kofananira ndi kuchotsedwa kosatha (kuchotsa) zochitika pagulu);
  • cartridge-config: kasamalidwe ka magawo ena amagulu (vshard bootstrapping, automatic failover mode, zololeza magawo ndi kasinthidwe ka ntchito).

Titha kufotokoza momveka bwino kuti ndi gawo liti la ntchito yomwe tikufuna kuchita, ndiye kuti gawolo lidzadumpha zina zonse. Kwa ife, tikufuna kugwira ntchito ndi topology yokha, ndiye tidafotokoza cartridge-replicasets.

Tiyeni tione zotsatira za khama lathu. Tapeza chofananira chatsopano http://localhost:8181/admin/cluster/dashboard.

Mosavuta komanso mwachilengedwe tumizani mapulogalamu ku Tarantool Cartridge (gawo 1)

Hooray!

Yesani kusintha masinthidwe a zochitika ndi ma seti ofananira ndikuwona momwe ma cluster topology amasinthira. Mutha kuyesa zochitika zosiyanasiyana zogwirira ntchito, mwachitsanzo. kusintha kwatsopano kapena kuwonjezeka memtx_memory. Ntchitoyi idzayesa kuchita izi popanda kuyambitsanso chitsanzo kuti muchepetse nthawi yochepetsera pulogalamu yanu.

Osayiwala kuthamanga vagrant haltkuyimitsa makina enieni mukamaliza kugwira nawo ntchito.

Ndipo pansi pa hood ndi chiyani?

Pano ndikuuzani zambiri za zomwe zinali kuchitika pansi pa hood ya udindo wovomerezeka panthawi yoyesera.

Tiyeni tiwone kuyika pulogalamu ya Cartridge pang'onopang'ono.

Kuyika phukusi ndi zochitika zoyambira

Choyamba muyenera kupereka phukusi ku seva ndikuyiyika. Pakadali pano ntchitoyi imatha kugwira ntchito ndi RPM ndi DEB phukusi.

Apa tikuyamba zochitika. Chilichonse ndi chophweka apa: chitsanzo chilichonse ndi chosiyana systemd- utumiki. Ndikupatsani chitsanzo:

$ systemctl start myapp@storage-1

Lamuloli liyambitsa chitsanzo storage-1 mapulogalamu myapp. Chitsanzo chokhazikitsidwa chidzayang'ana zake kasinthidwe Π² /etc/tarantool/conf.d/. Zithunzi zojambulidwa zimatha kuwonedwa pogwiritsa ntchito journald.

Fayilo ya unit /etc/systemd/system/[email protected] kwa ntchito ya systemd idzaperekedwa pamodzi ndi phukusi.

Ansible ali ndi ma module opangira kukhazikitsa mapaketi ndikuwongolera ma systemd services; sitinapange china chatsopano pano.

Kupanga topology yamagulu

Apa ndi pamene zosangalatsa zimayambira. Gwirizanani, zingakhale zachilendo kuvutitsidwa ndi gawo lapadera la Ansible pakuyika mapaketi ndikuyendetsa systemd-zinthu.

Mutha kusintha cluster pamanja:

  • Njira yoyamba: tsegulani Web UI ndikudina mabatani. Ndikoyenera kuti muyambe kamodzi pakanthawi zingapo.
  • Njira yachiwiri: mutha kugwiritsa ntchito GraphQl API. Apa mutha kusintha kale china chake, mwachitsanzo, lembani script mu Python.
  • Njira yachitatu (kwa ofunitsitsa): pitani ku seva, kulumikizana ndi imodzi mwazogwiritsa ntchito tarantoolctl connect ndikuchita zonse zofunikira ndi gawo la Lua cartridge.

Ntchito yayikulu yomwe tapanga ndikupanga izi ndendende, gawo lovuta kwambiri pantchitoyo kwa inu.

Ansible imakulolani kuti mulembe gawo lanu ndikuligwiritsa ntchito ngati gawo. Ntchito yathu imagwiritsa ntchito ma modules kuti aziyang'anira zigawo zosiyanasiyana zamagulu.

Zimagwira ntchito bwanji? Mumalongosola momwe gululo likufunira mukusintha kofotokozera, ndipo gawolo limapereka gawo lililonse ndi gawo lake lokonzekera ngati cholowetsa. Gawoli limalandira momwe gululi likukhalira ndikulifanizira ndi zomwe zidalandilidwa ngati zolowetsa. Kenako, code imayambitsidwa kudzera mu socket ya imodzi mwazochitika, zomwe zimabweretsa gululo kudziko lomwe mukufuna.

Zotsatira

Lero tidauza ndikuwonetsa momwe mungatumizire pulogalamu yanu ku Tarantool Cartridge ndikukhazikitsa topology yosavuta. Kuti tichite izi, tidagwiritsa ntchito Ansible - chida champhamvu chomwe ndi chosavuta kugwiritsa ntchito ndipo chimakupatsani mwayi wokonza nthawi imodzi ma node ambiri (kwa ife, zochitika zamagulu).

Pamwambapa tidayang'ana njira imodzi yofotokozera masanjidwe amagulu pogwiritsa ntchito Ansible. Mukangomva kuti mwakonzeka kupitilira, fufuzani zabwino polemba ma playbook. Mutha kuwona kukhala kosavuta kuyang'anira topology yanu pogwiritsa ntchito group_vars ΠΈ host_vars.

Posachedwapa tidzakuuzani momwe mungachotsere (kutulutsa) zochitika kuchokera ku topology, bootstrap vshard, kusamalira mode automatic failover, sinthani chilolezo ndikuyika chigamba config. Pakali pano, mukhoza kuphunzira nokha zolemba ndi kuyesa kusintha magawo a magulu.

Ngati china chake sichikuyenda, onetsetsani ndidziwitseni ife za vuto. Tikonza zonse mwachangu!

Source: www.habr.com

Kuwonjezera ndemanga