Hoʻopili maʻalahi a maʻalahi i nā noi i ka Tarantool Cartridge (mahele 1)

Hoʻopili maʻalahi a maʻalahi i nā noi i ka Tarantool Cartridge (mahele 1)

Ua kamaʻilio mua mākou Pahu Tarantool, hiki iā ʻoe ke hoʻomohala i nā noi i hoʻolaha ʻia a pūʻulu iā lākou. ʻO nā mea a pau i koe, ʻo ia ke aʻo pehea e hoʻokau ai i kēia mau noi a mālama iā lākou. Mai hopohopo, ua paʻa iā mākou nā mea a pau! Hoʻohui mākou i nā hana maikaʻi loa no ka hana ʻana me Tarantool Cartridge a kākau ansible-role, ka mea e puʻunaue i ka pūʻolo i nā kikowaena, hoʻomaka i nā manawa, hoʻohui iā lākou i kahi hui, hoʻonohonoho i ka mana, bootstrap vshard, hiki i ka failover aunoa a hoʻopaʻa i ka config cluster.

hoihoi? A laila e ʻoluʻolu, ma lalo o ka ʻoki, e haʻi mākou iā ʻoe a hōʻike iā ʻoe i nā mea āpau.

E hoʻomaka kākou me kahi laʻana

E nānā wale mākou i kahi o ka hana o kā mākou kuleana. Hiki iā ʻoe ke ʻike i ka wehewehe piha ʻana o kona mau mana āpau a me nā ʻāpana komo i loko palapala. Akā ʻoi aku ka maikaʻi o ka hoʻāʻo ʻana i hoʻokahi manawa ma mua o ka ʻike ʻana iā ia i hoʻokahi haneli mau manawa, no laila e kau mākou i kahi noi liʻiliʻi.

Loaʻa iā Tarantool Cartridge kumu aʻo e hana i kahi palapala Cartridge liʻiliʻi e mālama i ka ʻike e pili ana i nā mea kūʻai aku panakō a me kā lākou mau moʻokāki, a hāʻawi pū i kahi API no ka hoʻokele ʻikepili ma o HTTP. No ka hoʻokō ʻana i kēia, wehewehe ka appendix i ʻelua mau kuleana kūpono: api и storage, hiki ke hāʻawi ʻia i nā manawa.

ʻAʻole ʻōlelo ʻo Cartridge i kekahi mea e pili ana i ka hoʻomaka ʻana i nā kaʻina hana, hāʻawi wale ia i ka hiki ke hoʻonohonoho i nā manawa e holo nei. Pono ka mea hoʻohana e hana i ke koena iā ia iho: hoʻonohonoho i nā faila hoʻonohonoho, hoʻomaka i nā lawelawe a hoʻonohonoho i ka topology. Akā ʻaʻole mākou e hana i kēia mau mea; Na Ansible e hana ia no mākou.

Mai ka ʻōlelo a i ka hana

No laila, e kau i kā mākou noi i ʻelua mau mīkini virtual a hoʻonohonoho i kahi topology maʻalahi:

  • Hoʻopili hou app-1 e hoʻokō i ke kuleana api, e pili ana i ke kuleana vshard-router. Hoʻokahi wale nō manawa maʻaneʻi.
  • Hoʻopili hou storage-1 hoʻokō i ke kuleana storage (a i ka manawa like vshard-storage), e hoʻohui mākou i ʻelua mau manawa mai nā mīkini like ʻole.

Hoʻopili maʻalahi a maʻalahi i nā noi i ka Tarantool Cartridge (mahele 1)

E holo i ka laʻana e pono ai mākou Kāhue и ʻO ke kūpono (kahi 2.8 a ʻoi aku paha).

Aia ka hana ponoi Ansible Galaxy. He waihona kēia e hiki ai iā ʻoe ke kaʻana like i kāu hana a hoʻohana i nā hana i mākaukau.

E hoʻopili i ka waihona me kahi laʻana:

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

Hoʻonui mākou i nā mīkini virtual:

$ vagrant up

E hoʻouka i ka Tarantool Cartridge ansible role:

$ ansible-galaxy install tarantool.cartridge,1.0.1

E hoʻomaka i ka hana i hoʻokomo ʻia:

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

Ke kali nei mākou no ka hoʻokō ʻana o ka puke pāʻani, hele i http://localhost:8181/admin/cluster/dashboard a hauʻoli i ka hopena:

Hoʻopili maʻalahi a maʻalahi i nā noi i ka Tarantool Cartridge (mahele 1)

Hiki iā ʻoe ke hoʻouka i ka ʻikepili. Maikaʻi, pololei?

I kēia manawa, e noʻonoʻo kākou pehea e hana ai me kēia, a ma ka manawa like e hoʻohui i kahi kope hou i ka topology.

E hoʻomaka kākou e noʻonoʻo

No laila he aha ka mea i hana?

Hoʻonohonoho mākou i ʻelua mau mīkini virtual a hoʻomaka i kahi puke pāʻani ansible i hoʻonohonoho i kā mākou hui. E nānā kākou i nā mea o ka faila 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

ʻAʻohe mea hoihoi ma ʻaneʻi, e hoʻomaka kākou i kahi kuleana kūpono i kapa ʻia tarantool.cartridge.

Aia nā mea nui loa (ʻo ia hoʻi, ka hoʻonohonoho cluster) i loko mo'olako- waihona 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:

ʻO nā mea a pau e pono ai mākou e aʻo pehea e hoʻokele ai i nā manawa a me nā replicasets ma ka hoʻololi ʻana i nā ʻike o kēia faila. A laila e hoʻohui mākou i nā ʻāpana hou iā ia. I ʻole e huikau i kahi e hoʻohui ai iā lākou, hiki iā ʻoe ke nānā i ka mana hope o kēia faila, hosts.updated.yml, aia ma ka waihona laʻana.

Hoʻoponopono i nā mea hoʻohālike

Ma nā huaʻōlelo Ansible, ʻo kēlā me kēia laʻana he host (ʻaʻole e huikau me kahi kikowaena hardware), ʻo ia. ka node infrastructure a Ansible e hoʻokele ai. No kēlā me kēia host hiki iā mākou ke kuhikuhi i nā ʻāpana pili (e like me ansible_host и ansible_user), a me ka hoʻonohonoho hoʻonohonoho. ʻO ka wehewehe ʻana o nā hihia aia ma ka ʻāpana hosts.

E nānā kākou i ka hoʻonohonoho hoʻonohonoho storage-1:

all:
  vars:
    ...

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

  ...

Ma ka loli config ua kuhikuhi mākou i nā ʻāpana hoʻohālike - advertise URI и HTTP port.
Aia ma lalo nā ʻāpana hoʻohālike app-1 и storage-1-replica.

Pono mākou e haʻi iā Ansible i nā palena pili no kēlā me kēia manawa. Me he mea lā e hoʻohui i nā manawa i loko o nā hui mīkini virtual. No kēia kumu, hoʻohui ʻia nā ʻano i nā hui host1 и host2, a ma kēlā me kēia hui ma ka māhele vars hōʻike ʻia nā waiwai ansible_host и ansible_user no hoʻokahi mīkini virtual. A ma ka pauku hosts - nā pūʻali (aka manawa) i hoʻokomo ʻia i kēia hui:

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:

Hoʻomaka mākou e hoʻololi hosts.yml. E hoʻohui hou i ʻelua mau manawa, storage-2-replica ma ka mīkini virtual mua a storage-2 Ma ka lua:

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

E hoʻokuʻu i ka puke pāʻani ansible:

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

E ʻoluʻolu e hoʻomaopopo i ke koho --limit. No ka mea he pūʻali kēlā me kēia hui puʻupuʻu i nā huaʻōlelo Ansible, hiki iā mākou ke kuhikuhi pololei i nā manawa e hoʻonohonoho pono ʻia i ka wā e hoʻokō ai i ka playbook.

E hoʻi ana i ka UI Pūnaewele http://localhost:8181/admin/cluster/dashboard a ʻike i kā mākou mau manawa hou:

Hoʻopili maʻalahi a maʻalahi i nā noi i ka Tarantool Cartridge (mahele 1)

ʻAʻole kākou e pau i laila a haku i ka hoʻokele topology.

Hooponopono topology

E hoʻohui i kā mākou mau manawa hou i kahi hoʻonohonoho kope storage-2. E hoʻohui i kahi hui hou replicaset_storage_2 a wehewehe i nā ʻāpana replicaset i kona mau ʻano like ʻole me replicaset_storage_1. Ma ka pauku hosts E hōʻike i nā manawa e hoʻokomo ʻia i loko o kēia pūʻulu (ʻo ia hoʻi, kā mākou replica set):

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

E hoʻomaka hou kākou i ka puke pāʻani:

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

I ka palena --limit I kēia manawa ua hāʻawi mākou i ka inoa o ka hui e pili ana i kā mākou kope kope.

E noʻonoʻo kākou i ke koho tags.

Hana ʻia kā mākou kuleana i nā hana like ʻole, i hōʻailona ʻia me nā ʻōlelo aʻe:

  • cartridge-instances: hoʻokele hoʻonohonoho (hoʻonohonoho, pili i ka lālā);
  • cartridge-replicasets: ka hooponopono topology (ka hooponopono hou ana a me ka hoopau mau loa ana (e kipaku aku) o na manawa mai ka hui;
  • cartridge-config: ka mālama ʻana i nā ʻāpana cluster ʻē aʻe (vshard bootstrapping, mode failover aunoa, nā ʻāpana ʻae a me ka hoʻonohonoho noiʻi).

Hiki iā mākou ke kuhikuhi pololei i ka ʻāpana o ka hana a mākou e makemake ai e hana, a laila e hoʻokuʻu ke kuleana i ke koena o nā hana. I kā mākou hihia, makemake mākou e hana wale me ka topology, no laila ua kuhikuhi mākou cartridge-replicasets.

E loiloi kākou i ka hopena o kā kākou hoʻoikaika ʻana. ʻIke mākou i kahi kope hou ma http://localhost:8181/admin/cluster/dashboard.

Hoʻopili maʻalahi a maʻalahi i nā noi i ka Tarantool Cartridge (mahele 1)

Hooray!

E hoʻāʻo me ka hoʻololi ʻana i ka hoʻonohonoho o nā manawa a me nā hoʻonohonoho kope a ʻike i ka loli ʻana o ka topology cluster. Hiki iā ʻoe ke hoʻāʻo i nā hiʻohiʻona hana like ʻole, e.g. hoʻopuka hou a mahuahua paha memtx_memory. E ho'āʻo ke kuleana e hana i kēia me ka ʻole e hoʻomaka hou i ka laʻana i mea e hōʻemi ai i ka manawa haʻahaʻa o kāu noi.

Mai poina e holo vagrant halte hooki i nā mīkini virtual ke pau kāu hana pū me lākou.

A aia ma lalo o ka pākaukau?

Eia wau e haʻi hou aku iā ʻoe e pili ana i nā mea e hana nei ma lalo o ka puʻupuʻu o ke kuleana ansible i kā mākou hoʻokolohua.

E nānā kākou i ka hoʻohana ʻana i ka palapala noi Cartridge i kēlā me kēia pae.

Ke hoʻouka nei i ka pūʻolo a me nā manawa hoʻomaka

Pono mua ʻoe e hāʻawi i ka pūʻolo i ke kikowaena a hoʻokomo iā ia. I kēia manawa hiki ke hana me nā pūʻolo RPM a me DEB.

A laila hoʻomaka mākou i nā hihia. Maʻalahi loa nā mea a pau ma ʻaneʻi: he ʻokoʻa kēlā me kēia laʻana systemd-lawelawe. E hāʻawi wau iā ʻoe i laʻana:

$ systemctl start myapp@storage-1

E hoʻomaka kēia kauoha i ka laʻana storage-1 Apps myapp. E ʻimi ka mea i hoʻokuʻu ʻia i kāna hoʻonohonoho в /etc/tarantool/conf.d/. Hiki ke ʻike ʻia nā log instance me ka hoʻohana ʻana journald.

waihona waihona /etc/systemd/system/[email protected] no ka lawelawe systemd e hāʻawi pū ʻia me ka pūʻolo.

Ua kūkulu ʻia ʻo Ansible i nā modules no ka hoʻokomo ʻana i nā pūʻolo a me ka hoʻokele ʻana i nā lawelawe systemd; ʻaʻole mākou i hana i kahi mea hou ma aneʻi.

Hoʻonohonoho i kahi topology cluster

ʻO kēia kahi e hoʻomaka ai ka leʻaleʻa. ʻAe, he mea ʻē ka pilikia me kahi kuleana Ansible kūikawā no ka hoʻokomo ʻana i nā pūʻolo a me ka holo ʻana systemd-nā lawelawe.

Hiki iā ʻoe ke hoʻonohonoho i ka pūʻulu me ka lima:

  • ʻO ka koho mua: wehe i ka UI pūnaewele a kaomi i nā pihi. He kūpono no ka hoʻomaka hoʻokahi manawa o kekahi mau manawa.
  • Koho lua: hiki iā ʻoe ke hoʻohana i ka GraphQl API. Maanei hiki iā ʻoe ke hoʻokaʻawale i kekahi mea, no ka laʻana, kākau i kahi palapala ma Python.
  • ʻO ke koho ʻekolu (no ka manaʻo ikaika): hele i ke kikowaena, hoʻopili i kekahi o nā manawa e hoʻohana ana tarantoolctl connect a e hana i na hana pono a pau me ka lua module cartridge.

ʻO ka hana nui o kā mākou mea hana, ʻo ia ke hana pololei i kēia, ʻo ka hapa paʻakikī o ka hana no ʻoe.

ʻAe ʻo Ansible iā ʻoe e kākau i kāu module ponoʻī a hoʻohana iā ia i kahi kuleana. Hoʻohana kā mākou kuleana i ia mau modula e hoʻokele i nā ʻāpana cluster like ʻole.

Pehea ka hana? Hōʻike ʻoe i ke kūlana makemake o ka puʻupuʻu ma kahi hoʻonohonoho declarative, a hāʻawi ke kuleana i kēlā me kēia module me kāna ʻāpana hoʻonohonoho i mea hoʻokomo. Loaʻa i ka module ke kūlana o kēia manawa o ka hui a hoʻohālikelike me ka mea i loaʻa ma ke ʻano he hoʻokomo. Ma hope aʻe, hoʻomaka ʻia kahi code ma ke kumu o kekahi o nā manawa, e lawe ana i ka pūʻulu i kahi kūlana i makemake ʻia.

Nā hopena

I kēia lā ua haʻi mākou a hōʻike pehea e kau ai i kāu noi iā Tarantool Cartridge a hoʻonohonoho i kahi topology maʻalahi. No ka hana ʻana i kēia, ua hoʻohana mākou iā Ansible - kahi mea hana maʻalahi e hoʻohana a hiki iā ʻoe ke hoʻonohonoho like i nā nodes waiwai nui (i kā mākou hihia, cluster instance).

Ma luna aʻe ua nānā mākou i kekahi o nā ala he nui e wehewehe i kahi hoʻonohonoho cluster me ka hoʻohana ʻana iā Ansible. Ke mākaukau ʻoe e neʻe, e ʻimi nā hana maikaʻi loa ma ke kākau ʻana i nā puke pāʻani. Hiki iā ʻoe ke maʻalahi i ka hoʻokele ʻana i kāu topology me ka hoʻohana ʻana group_vars и host_vars.

ʻAʻole koke mākou e haʻi iā ʻoe pehea e hoʻopau mau ai (kipaku) i nā manawa mai ka topology, bootstrap vshard, hoʻokele i ke ʻano failover aunoa, hoʻonohonoho i ka ʻae a hoʻopaʻa i ka config cluster. I kēia manawa, hiki iā ʻoe ke aʻo iā ʻoe iho palapala a hoʻokolohua me ka hoʻololi ʻana i nā ʻāpana cluster.

Inā maikaʻi ʻole kekahi mea, e ʻike pono hoʻomaopopo iā mākou e pili ana i ka pilikia. E hoʻoponopono koke mākou i nā mea a pau!

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka