He ngawari te tuku tono ki te Kaata Tarantool (waahanga 1)

He ngawari te tuku tono ki te Kaata Tarantool (waahanga 1)

Kua korerohia e matou Kaata Tarantool, ka taea e koe te whakawhanake i nga tono toha me te whakaemi. Ko nga mea katoa e toe ana ko te ako me pehea te tuku i enei tono me te whakahaere. Kaua e māharahara, kua kapi katoa i a matou! I whakahiatohia e matou nga tikanga pai katoa mo te mahi me te Kaata Tarantool me te tuhi ansible-role, ka tohatoha i te kete ki nga kaitoro, ka whakarewahia nga tauira, ka whakakotahi ki roto i te kahui, ka whirihora i te whakamanatanga, te bootstrap vshard, ka taea te whakakore aunoa me te papaki i te whirihora tautau.

He mea whakamere? Na koa, i raro i te tapahi, ka korero atu matou ki a koe ka whakaatu ki a koe nga mea katoa.

Me timata ma te tauira

Ka titiro noa tatou ki tetahi waahanga o te mahi o ta tatou mahi. Ka kitea e koe he whakaahuatanga katoa mo ona kaha katoa me nga tawhā whakauru i roto tuhinga. Engari he pai ake ki te ngana kotahi i te kite kotahi rau nga wa, na me tuku he tono iti.

Kei a Tarantool Cartridge akoranga ki te hanga i tetahi tono Cartridge iti e pupuri ana i nga korero mo nga kaihoko putea me o raatau kaute, me te whakarato hoki i te API mo te whakahaere raraunga ma te HTTP. Hei whakatutuki i tenei, ka whakaahuahia e te taapiri nga mahi e rua: api и storage, ka taea te tautapa ki nga tauira.

Kaore he korero a Cartridge ake mo te huarahi ki te whakarewa i nga tikanga, ka taea noa e ia te whirihora i nga waa kua rere ke. Me mahi e te kaiwhakamahi te toenga: whakarite i nga konae whirihoranga, tiimata nga ratonga me te whirihora i te topology. Engari e kore matou e mahi i enei mea katoa; Ma Ansible e mahi ma matou.

Mai i nga kupu ki nga mahi

Na, me tuku ta maatau tono ki nga miihini mariko e rua ka whakarite i tetahi topology ngawari:

  • He huinga tauira app-1 ka whakatinana i te mahi api, kei roto ko te mahi vshard-router. Ka kotahi noa te tauira i konei.
  • He huinga tauira storage-1 ka whakatinana i te mahi storage (me te wa ano vshard-storage), i konei ka taapirihia e matou nga waahanga e rua mai i nga miihini rereke.

He ngawari te tuku tono ki te Kaata Tarantool (waahanga 1)

Hei whakahaere i te tauira e hiahiatia ana Vagrant и Ka taea (putanga 2.8 pakeke ake ranei).

Ko te mahi ano kei roto tupuni Ansible. He putunga tenei e taea ai e koe te tiri i o mahi me te whakamahi i nga mahi kua rite.

Kia whakakaohia te putunga me tetahi tauira:

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

Ka whakaarahia e matou nga miihini mariko:

$ vagrant up

Tāutahia te Kaata Tarantool ka taea te mahi:

$ ansible-galaxy install tarantool.cartridge,1.0.1

Whakarewahia te mahi kua whakauruhia:

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

Ka tatari kia oti te mahi a te pukapuka takaro, haere ki http://localhost:8181/admin/cluster/dashboard ka koa ki te hua:

He ngawari te tuku tono ki te Kaata Tarantool (waahanga 1)

Ka taea e koe te tuku raraunga. Ataahua, tika?

Inaianei me whakaaro me pehea te mahi me tenei, me te taapiri i tetahi atu tauira ki te topology.

Kia timata tatou ki te whakaaro

Na he aha te mea i tupu?

I whakaturia e matou etahi miihini mariko e rua, ka whakarewahia he pukapuka takaro e whirihora ana i ta matou roopu. Kia titiro tatou ki nga korero o te konae 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

Karekau he mea whakamere i konei, kia whakarewahia e tatou tetahi mahi e kiia nei tarantool.cartridge.

Ko nga mea tino nui katoa (ara, te whirihoranga tautau) kei roto rārangi-kōnae 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:

Ko nga mea katoa e hiahiatia ana ko te ako me pehea te whakahaere i nga tauira me nga tauira taapiri ma te whakarereke i nga ihirangi o tenei konae. I muri mai ka taapirihia e matou etahi waahanga hou. Kia kore ai e pohehe ki hea hei taapiri, ka taea e koe te titiro ki te putanga whakamutunga o tenei konae, hosts.updated.yml, kei roto i te kohinga tauira.

Te whakahaere tauira

I roto i nga kupu Ansible, he kaihautu ia tauira (kaua e pohehe ki te tūmau taputapu), i.e. te kōpuku hanganga ka whakahaerehia e Ansible. Mo ia kaihautu ka taea e taatau te tautuhi i nga tawhā hononga (penei i ansible_host и ansible_user), me te whirihoranga tauira. Ko te whakaahuatanga o nga tauira kei te waahanga hosts.

Kia titiro tatou ki te whirihoranga tauira storage-1:

all:
  vars:
    ...

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

  ...

I roto i te taurangi config i tohua e matou nga tawhā tauira - advertise URI и HTTP port.
Kei raro ko nga tawhā tauira app-1 и storage-1-replica.

Me korero ki a Ansible nga tawhā hononga mo ia tauira. Te ahua arorau ki te whakarōpū i nga tauira ki nga roopu miihini mariko. Mo tenei kaupapa, ka whakakotahihia nga tauira ki nga roopu host1 и host2, me ia roopu i te waahanga vars kua tohua nga uara ansible_host и ansible_user mo te miihini mariko kotahi. Na i roto i te waahanga hosts — nga kaihautu (aka tauira) kei roto i tenei roopu:

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:

Ka timata tatou ki te huri hosts.yml. Kia rua ano nga tauira taapiri, storage-2-replica i runga i te miihini mariko tuatahi me te storage-2 I te tuarua:

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

Whakarewahia te pukapuka takaro ansible:

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

Kia mahara ki te whiringa --limit. I te mea he kaihautu ia tauira kahui i roto i nga kupu Ansible, ka taea e tatou te tautuhi ko wai nga tauira me whirihora i te wa e mahia ana te pukapuka takaro.

Ka hoki ki te UI Tukutuku http://localhost:8181/admin/cluster/dashboard ka kite i a maatau tauira hou:

He ngawari te tuku tono ki te Kaata Tarantool (waahanga 1)

Kaua tatou e mutu i reira me te rangatira whakahaere topology.

Te whakahaere topology

Whakakotahitia a tatou tauira hou ki te huinga tauira storage-2. Me taapiri he roopu hou replicaset_storage_2 me te whakaahua i nga tawhā tauira i roto i ona taurangi ma te whakataurite ki replicaset_storage_1. I te wahanga hosts Me tohu ko wai nga tauira ka uru ki roto i tenei roopu (ara, to taatau huinga tauira):

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

Me timata ano te pukapuka takaro:

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

Ia kōwhiringa --limit I tenei wa ka tukuna e matou te ingoa o te roopu e rite ana ki to maatau tauira.

Kia whakaaro tatou te kōwhiringa tags.

He maha nga mahi ka mahia e ta maatau mahi, kua tohua ki nga tohu e whai ake nei:

  • cartridge-instances: whakahaere tauira (whirihora, hononga ki te mema);
  • cartridge-replicasets: whakahaere topology (whakahaere tauira me te tango tuturu (peia) o nga tauira mai i te tautau);
  • cartridge-config: te whakahaere i etahi atu tawhā tautau (vshard bootstrapping, aratau failover aunoa, tawhā whakamanatanga me te whirihoranga tono).

Ka taea e tatou te whakaatu marama ko tehea wahanga o te mahi e hiahia ana tatou ki te mahi, katahi ka pekehia e te mahi te toenga o nga mahi. I roto i to maatau, e hiahia ana matou ki te mahi me te topology anake, na reira i tohua e matou cartridge-replicasets.

Kia arotakehia te hua o a tatou mahi. Ka kitea he tauira hou kei runga http://localhost:8181/admin/cluster/dashboard.

He ngawari te tuku tono ki te Kaata Tarantool (waahanga 1)

Ohana!

Whakamātautau me te huri i te whirihoranga o nga tauira me nga huinga tauira ka kite i te huringa o te topology tautau. Ka taea e koe te whakamatau i nga ahuatanga whakahaere rereke, hei tauira. whakahou hurihuri whakanui ranei memtx_memory. Ka ngana te mahi ki te mahi i tenei me te kore e whakaara ano i te tauira hei whakaiti i te wa heke o to tono.

Kaua e wareware ki te oma vagrant haltki te whakamutu i nga miihini mariko ina mutu to mahi ki a raatau.

A he aha te mea kei raro i te potae?

I konei ka korero atu ahau ki a koe mo nga mea e tupu ana i raro i te ahuru o te mahi ansible i a maatau whakamatautau.

Kia titiro tatou ki te tuku i te tono Cartridge ma te taahiraa.

Te tāuta i te mōkihi me te tīmata i ngā wā

Tuatahi me tuku e koe te kete ki te tūmau me te whakauru. I tenei wa ka taea e te mahi te mahi me nga kohinga RPM me DEB.

I muri mai ka whakarewahia e matou nga tauira. He tino ngawari nga mea katoa i konei: he mea motuhake ia tauira systemd- ratonga. Ka hoatu e ahau he tauira:

$ systemctl start myapp@storage-1

Ka whakarewahia e tenei tono te tauira storage-1 taupānga myapp. Ko te tauira kua whakarewahia ka rapu mo tona whirihoranga в /etc/tarantool/conf.d/. Ka taea te tiro i nga raarangi tauira ma te whakamahi journald.

Kōnae wae /etc/systemd/system/[email protected] mo te ratonga systemd ka tukuna me te kete.

Kei a Ansible nga waahanga whakauru mo te whakauru i nga kete me te whakahaere i nga ratonga punaha; kaore ano matou i hanga he mea hou i konei.

Te whakarite topology tautau

I konei ka timata te ngahau. Whakaae, he mea ke ki te whakararuraru i tetahi mahi Ansible motuhake mo te whakauru i nga kete me te whakahaere systemd- ratonga.

Ka taea e koe te whirihora a-ringa i te tautau:

  • Kōwhiringa tuatahi: whakatuwhera i te UI Tukutuku ka paato i nga paatene. He tino pai mo te tiimata kotahi o nga wa maha.
  • Kōwhiringa tuarua: ka taea e koe te whakamahi i te GraphQl API. I konei ka taea e koe te whakaaunoa i tetahi mea, hei tauira, tuhia he tuhinga ki te Python.
  • Kōwhiringa tuatoru (mo te hunga kaha-kaha): haere ki te tūmau, hono atu ki tetahi o nga waahi ma te whakamahi tarantoolctl connect me te mahi i nga whawhe katoa e tika ana me te waahanga Lua cartridge.

Ko te mahi matua o ta maatau tenenga ko te mahi tika i tenei, te waahanga tino uaua o te mahi mo koe.

Ka taea e Ansible te tuhi i to ake waahanga me te whakamahi i tetahi mahi. Ka whakamahia e ta maatau mahi nga momo waahanga hei whakahaere i nga momo huinga huinga.

Pehea te mahi? Ka whakaahua koe i te ahua e hiahiatia ana o te tautau i roto i te whirihora whakapuakanga, a ko te mahi e whakarato ana i ia waahanga me tana waahanga whirihoranga hei whakaurunga. Ka whiwhi te kōwae i te āhua o te kāhui o nāianei, ā, ka whakataurite ki ngā mea i riro hei tāuru. I muri mai, ka whakarewahia he waehere ma te turanga o tetahi o nga tauira, ka kawea te tautau ki te ahua e hiahiatia ana.

Ngā putanga

I tenei ra i korero matou me te whakaatu me pehea te tohatoha i to tono ki te Kaata Tarantool me te whakarite i tetahi topology ngawari. Ki te mahi i tenei, i whakamahia e matou te Ansible - he taputapu kaha e ngawari ana ki te whakamahi ka taea e koe te whirihora i te maha o nga pona hanganga (i roto i ta maatau keehi, nga tauira kahui).

I runga ake i titiro matou ki tetahi o nga huarahi maha ki te whakaahua i tetahi whirihoranga tautau ma te whakamahi i te Ansible. Ina kua rite koe ki te neke haere, torotoro mahi pai ki te tuhi pukapuka takaro. Ka kitea e koe he ngawari ake te whakahaere i to topology ma te whakamahi group_vars и host_vars.

Kaore e roa ka korerotia e matou ki a koe me pehea te whakakore i nga ahuatanga mai i te topology, bootstrap vshard, te whakahaere i te aratau failover aunoa, te whirihora i te whakamanatanga me te papaki i te whirihora tautau. I tenei wa, ka taea e koe te ako i a koe ake tuhinga me te whakamatautau ki te huri i nga tawhā tautau.

Ki te kore tetahi mea e mahi, me tino mohio whakamohio tatou mo te raruraru. Ka tere te whakariterite i nga mea katoa!

Source: will.com

Tāpiri i te kōrero