ื‘ืงืœื•ืช ื•ื‘ืื•ืคืŸ ื˜ื‘ืขื™ ืœืคืจื•ืก ื™ื™ืฉื•ืžื™ื ืœ-Tarantool Cartridge (ื—ืœืง 1)

ื‘ืงืœื•ืช ื•ื‘ืื•ืคืŸ ื˜ื‘ืขื™ ืœืคืจื•ืก ื™ื™ืฉื•ืžื™ื ืœ-Tarantool Cartridge (ื—ืœืง 1)

ื›ื‘ืจ ื“ื™ื‘ืจื ื• ืขืœ ืžื—ืกื ื™ืช ื˜ืจื ื˜ื•ืœ, ื”ืžืืคืฉืจ ืœืš ืœืคืชื— ืืคืœื™ืงืฆื™ื•ืช ืžื‘ื•ื–ืจื•ืช ื•ืœืืจื•ื– ืื•ืชืŸ. ื›ืœ ืžื” ืฉื ื•ืชืจ ื”ื•ื ืœืœืžื•ื“ ื›ื™ืฆื“ ืœืคืจื•ืก ืืช ื”ื™ื™ืฉื•ืžื™ื ื”ืœืœื• ื•ืœื ื”ืœ ืื•ืชื. ืืœ ื“ืื’ื”, ืกื™ืคืงื ื• ื”ื›ืœ! ืจื™ื›ื–ื ื• ืืช ื›ืœ ืฉื™ื˜ื•ืช ื”ืขื‘ื•ื“ื” ื”ืžื•ืžืœืฆื•ืช ืœืขื‘ื•ื“ื” ืขื Tarantool Cartridge ื•ื›ืชื‘ื ื• ansible-ืชืคืงื™ื“, ืืฉืจ ื™ืคื™ืฅ ืืช ื”ื—ื‘ื™ืœื” ืœืฉืจืชื™ื, ื™ืคืขื™ืœ ืžื•ืคืขื™ื, ื™ืื—ื“ ืื•ืชื ืœืืฉื›ื•ืœ, ืชื’ื“ื™ืจ ื”ืจืฉืื•ืช, ื™ืคืขืœ ืืชื—ื•ืœ vshard, ื™ืืคืฉืจ ื›ืฉืœ ืื•ื˜ื•ืžื˜ื™ ื•ื™ืชืงืŸ ืืช ืชืฆื•ืจืช ื”ืืฉื›ื•ืœ.

ืžืขื ื™ื™ืŸ? ืื– ื‘ื‘ืงืฉื”, ืžืชื—ืช ืœื’ื–ืจื”, ื ืกืคืจ ืœืš ื•ื ืจืื” ืœืš ื”ื›ืœ.

ื ืชื—ื™ืœ ืขื ื“ื•ื’ืžื”

ื ืกืชื›ืœ ืจืง ืขืœ ื—ืœืง ืžื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ ื”ืชืคืงื™ื“ ืฉืœื ื•. ืชืžื™ื“ ืชื•ื›ืœ ืœืžืฆื•ื ืชื™ืื•ืจ ืžืœื ืฉืœ ื›ืœ ื”ื™ื›ื•ืœื•ืช ื•ืคืจืžื˜ืจื™ ื”ืงืœื˜ ืฉืœื• ื‘ ืชื™ืขื•ื“. ืื‘ืœ ืขื“ื™ืฃ ืœื ืกื•ืช ืคืขื ืื—ืช ืžืืฉืจ ืœืจืื•ืช ืืช ื–ื” ืžืื” ืคืขืžื™ื, ืื– ื‘ื•ืื• ื ืคืจื•ืก ืืคืœื™ืงืฆื™ื” ืงื˜ื ื”.

ืœืžื—ืกื ื™ืช Tarantool ื™ืฉ ื”ื“ืจื›ื” ืœื™ืฆื•ืจ ืืคืœื™ืงืฆื™ื™ืช Cartridge ืงื˜ื ื” ื”ืžืื—ืกื ืช ืžื™ื“ืข ืขืœ ืœืงื•ื—ื•ืช ื”ื‘ื ืง ื•ื”ื—ืฉื‘ื•ื ื•ืช ืฉืœื”ื, ื•ื’ื ืžืกืคืงืช API ืœื ื™ื”ื•ืœ ื ืชื•ื ื™ื ื‘ืืžืฆืขื•ืช HTTP. ื›ื“ื™ ืœื”ืฉื™ื’ ื–ืืช, ื”ื ืกืคื— ืžืชืืจ ืฉื ื™ ืชืคืงื™ื“ื™ื ืืคืฉืจื™ื™ื: api ะธ storage, ืฉื ื™ืชืŸ ืœื”ืงืฆื•ืช ืœืžื•ืคืขื™ื.

ืžื—ืกื ื™ืช ืขืฆืžื” ืœื ืื•ืžืจืช ืฉื•ื ื“ื‘ืจ ืขืœ ืื™ืš ืœื”ืคืขื™ืœ ืชื”ืœื™ื›ื™ื, ื”ื™ื ืจืง ืžืกืคืงืช ืืช ื”ื™ื›ื•ืœืช ืœื”ื’ื“ื™ืจ ืžื•ืคืขื™ื ืฉื›ื‘ืจ ืคื•ืขืœื™ื. ืขืœ ื”ืžืฉืชืžืฉ ืœืขืฉื•ืช ืืช ื”ืฉืืจ ื‘ืขืฆืžื•: ืœืืจื’ืŸ ืงื‘ืฆื™ ืชืฆื•ืจื”, ืœื”ืคืขื™ืœ ืฉื™ืจื•ืชื™ื ื•ืœื”ื’ื“ื™ืจ ืืช ื”ื˜ื•ืคื•ืœื•ื’ื™ื”. ืื‘ืœ ืื ื—ื ื• ืœื ื ืขืฉื” ืืช ื›ืœ ื–ื”; Ansible ืชืขืฉื” ืืช ื–ื” ื‘ืฉื‘ื™ืœื ื•.

ืžืžื™ืœื™ื ืœืžืขืฉื™ื

ืื– ื‘ื•ืื• ื ืคืจื•ืก ืืช ื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื• ืœืฉืชื™ ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ื•ื ื’ื“ื™ืจ ื˜ื•ืคื•ืœื•ื’ื™ื” ืคืฉื•ื˜ื”:

  • ืขืจื›ืช ื”ืขืชืง app-1 ื™ื™ืฉื ืืช ื”ืชืคืงื™ื“ api, ื”ื›ื•ืœืœ ืืช ื”ืชืคืงื™ื“ vshard-router. ื™ื”ื™ื” ื›ืืŸ ืจืง ืžืงืจื” ืื—ื“.
  • ืขืจื›ืช ื”ืขืชืง storage-1 ืžื™ื™ืฉื ืืช ื”ืชืคืงื™ื“ storage (ื‘ืื•ืชื• ื”ื–ืžืŸ vshard-storage), ื›ืืŸ ื ื•ืกื™ืฃ ืฉื ื™ ืžื•ืคืขื™ื ืžืžื›ื•ื ื•ืช ืฉื•ื ื•ืช.

ื‘ืงืœื•ืช ื•ื‘ืื•ืคืŸ ื˜ื‘ืขื™ ืœืคืจื•ืก ื™ื™ืฉื•ืžื™ื ืœ-Tarantool Cartridge (ื—ืœืง 1)

ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ื”ื“ื•ื’ืžื” ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื ืžึฐืฉืื•ึนื˜ึตื˜ ะธ ื‘ืœืชื™ ืืคืฉืจื™ (ื’ืจืกื” 2.8 ื•ืžืขืœื”).

ื”ืชืคืงื™ื“ ืขืฆืžื• ื ืžืฆื ืื ืกื™ื‘ืœ ื’ืœืงืกื™. ื–ื”ื• ืžืื’ืจ ื”ืžืืคืฉืจ ืœืš ืœืฉืชืฃ ืืช ืขื‘ื•ื“ืชืš ื•ืœื”ืฉืชืžืฉ ื‘ืชืคืงื™ื“ื™ื ืžื•ื›ื ื™ื.

ื‘ื•ืื• ื ืฉื›ืคืœ ืืช ื”ืžืื’ืจ ืขื ื“ื•ื’ืžื”:

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

ืื ื• ืžื’ื™ื™ืกื™ื ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช:

$ vagrant up

ื”ืชืงืŸ ืืช ื”ืชืคืงื™ื“ ื”ืืคืฉืจื™ ืฉืœ ืžื—ืกื ื™ืช Tarantool:

$ ansible-galaxy install tarantool.cartridge,1.0.1

ื”ืคืขืœ ืืช ื”ืชืคืงื™ื“ ื”ืžื•ืชืงืŸ:

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

ืื ื—ื ื• ืžื—ื›ื™ื ืฉืกืคืจ ื”ืžืฉื—ืงื™ื ื™ืฉืœื™ื ืืช ื”ื‘ื™ืฆื•ืข, ืขื‘ื•ืจ ืืœ http://localhost:8181/admin/cluster/dashboard ื•ืชื™ื”ื ื• ืžื”ืชื•ืฆืื”:

ื‘ืงืœื•ืช ื•ื‘ืื•ืคืŸ ื˜ื‘ืขื™ ืœืคืจื•ืก ื™ื™ืฉื•ืžื™ื ืœ-Tarantool Cartridge (ื—ืœืง 1)

ืืชื” ื™ื›ื•ืœ ืœื”ืขืœื•ืช ื ืชื•ื ื™ื. ืžื’ื ื™ื‘ ื ื›ื•ืŸ?

ืขื›ืฉื™ื• ื‘ื•ืื• ื ื‘ื™ืŸ ืื™ืš ืœืขื‘ื•ื“ ืขื ื–ื”, ื•ื‘ืžืงื‘ื™ืœ ื ื•ืกื™ืฃ ืขื•ื“ ืกื˜ ื”ืขืชืง ืœื˜ื•ืคื•ืœื•ื’ื™ื”.

ื‘ื•ืื• ื ืชื—ื™ืœ ืœื”ื‘ื™ืŸ ืืช ื–ื”

ืื– ืžื” ืงืจื”?

ื”ืงืžื ื• ืฉืชื™ ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ื•ื”ืฉืงื ื• ืกืคืจ ื”ืคืขืœื” ืืคืฉืจื™ ืฉื”ื’ื“ื™ืจ ืืช ื”ืืฉื›ื•ืœ ืฉืœื ื•. ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ืชื•ื›ืŸ ื”ืงื•ื‘ืฅ 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

ืฉื•ื ื“ื‘ืจ ืžืขื ื™ื™ืŸ ืœื ืงื•ืจื” ื›ืืŸ, ื‘ื•ืื• ื ืฉื™ืง ืชืคืงื™ื“ ืกื‘ื™ืจ ืฉื ืงืจื tarantool.cartridge.

ื›ืœ ื”ื“ื‘ืจื™ื ื”ื—ืฉื•ื‘ื™ื ื‘ื™ื•ืชืจ (ื›ืœื•ืžืจ, ืชืฆื•ืจืช ื”ืืฉื›ื•ืœ) ื ืžืฆืื™ื ื‘ ืžืœืื™-ืงื•ึนื‘ึถืฅ 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:

ื›ืœ ืžื” ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื ื–ื” ืœืœืžื•ื“ ืื™ืš ืœื ื”ืœ ืžื•ืคืขื™ื ื•ืขืจื›ื•ืช ืžืฉื•ื›ืคืœื•ืช ืขืœ ื™ื“ื™ ืฉื™ื ื•ื™ ื”ืชื•ื›ืŸ ืฉืœ ื”ืงื•ื‘ืฅ ื”ื–ื”. ื‘ืฉืœื‘ ื”ื‘ื ื ื•ืกื™ืฃ ืœื• ืงื˜ืขื™ื ื—ื“ืฉื™ื. ื›ื“ื™ ืœื ืœื”ืชื‘ืœื‘ืœ ื”ื™ื›ืŸ ืœื”ื•ืกื™ืฃ ืื•ืชื, ืืชื” ื™ื›ื•ืœ ืœื”ืกืชื›ืœ ืขืœ ื”ื’ืจืกื” ื”ืกื•ืคื™ืช ืฉืœ ื”ืงื•ื‘ืฅ ื”ื–ื”, hosts.updated.yml, ืฉื ืžืฆื ื‘ืžืื’ืจ ืœื“ื•ื’ืžื”.

ื ื™ื”ื•ืœ ืžื•ืคืขื™ื

ื‘ืžื•ื ื—ื™ื ืฉืœ Ansible, ื›ืœ ืžื•ืคืข ื”ื•ื ืžืืจื— (ืœื ืœื”ืชื‘ืœื‘ืœ ืขื ืฉืจืช ื—ื•ืžืจื”), ื›ืœื•ืžืจ. ืฆื•ืžืช ื”ืชืฉืชื™ืช ืฉืื ืกื™ื‘ืœ ืชื ื”ืœ. ืขื‘ื•ืจ ื›ืœ ืžืืจื— ืื ื• ื™ื›ื•ืœื™ื ืœืฆื™ื™ืŸ ืคืจืžื˜ืจื™ ื—ื™ื‘ื•ืจ (ื›ื’ื•ืŸ ansible_host ะธ ansible_user), ื›ืžื• ื’ื ืชืฆื•ืจืช ื”ืžื•ืคืข. ืชื™ืื•ืจ ื”ืžื•ืคืขื™ื ื ืžืฆื ื‘ืกืขื™ืฃ hosts.

ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ืชืฆื•ืจืช ื”ืžื•ืคืข storage-1:

all:
  vars:
    ...

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

  ...

ื‘ืžืฉืชื ื” config ืฆื™ื™ื ื• ืืช ืคืจืžื˜ืจื™ ื”ืžื•ืคืข - advertise URI ะธ HTTP port.
ืœื”ืœืŸ ืคืจืžื˜ืจื™ ื”ืžื•ืคืข app-1 ะธ storage-1-replica.

ืขืœื™ื ื• ืœื•ืžืจ ืœืื ืกื™ื‘ืœ ืืช ืคืจืžื˜ืจื™ ื”ื—ื™ื‘ื•ืจ ืขื‘ื•ืจ ื›ืœ ืžื•ืคืข. ื ืจืื” ื”ื’ื™ื•ื ื™ ืœืงื‘ืฅ ืžื•ืคืขื™ื ืœืงื‘ื•ืฆื•ืช ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช. ืœืฉื ื›ืš, ืžื•ืคืขื™ื ืžืฉื•ืœื‘ื™ื ืœืงื‘ื•ืฆื•ืช host1 ะธ host2, ื•ื‘ื›ืœ ืงื‘ื•ืฆื” ื‘ืžื“ื•ืจ vars ืขืจื›ื™ื ืžืฆื•ื™ื ื™ื ansible_host ะธ ansible_user ืขื‘ื•ืจ ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ืื—ืช. ื•ื‘ืžื“ื•ืจ hosts - ืžืืจื—ื™ื (ื”ืžื›ื•ื ื” ื’ื ืžื•ืคืขื™ื) ื”ื›ืœื•ืœื™ื ื‘ืงื‘ื•ืฆื” ื–ื•:

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:

ืื ื—ื ื• ืžืชื—ื™ืœื™ื ืœื”ืฉืชื ื•ืช hosts.yml. ื‘ื•ืื• ื ื•ืกื™ืฃ ืขื•ื“ ืฉื ื™ ืžืงืจื™ื, storage-2-replica ื‘ืžื›ื•ื ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช ื”ืจืืฉื•ื ื” ื• storage-2 ื‘ืฉื ื™:

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

ื”ืคืขืœ ืืช ืกืคืจ ื”ืžืฉื—ืงื™ื ื”ืืคืฉืจื™:

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

ืฉื™ืžื• ืœื‘ ืœืืคืฉืจื•ืช --limit. ืžื›ื™ื•ื•ืŸ ืฉื›ืœ ืžื•ืคืข ืืฉื›ื•ืœ ื”ื•ื ืžืืจื— ื‘ืžื•ื ื—ื™ื ืฉืœ Ansible, ืื ื• ื™ื›ื•ืœื™ื ืœืฆื™ื™ืŸ ื‘ืžืคื•ืจืฉ ืื™ืœื• ืžื•ืคืขื™ื ื™ืฉ ืœื”ื’ื“ื™ืจ ื‘ืขืช ื”ืคืขืœืช ืกืคืจ ื”ื”ืคืขืœื”.

ื—ื•ื–ืจื™ื ืœืžืžืฉืง ื”ืžืฉืชืžืฉ ื‘ืื™ื ื˜ืจื ื˜ http://localhost:8181/admin/cluster/dashboard ื•ืจืื” ืืช ื”ืžื•ืคืขื™ื ื”ื—ื“ืฉื™ื ืฉืœื ื•:

ื‘ืงืœื•ืช ื•ื‘ืื•ืคืŸ ื˜ื‘ืขื™ ืœืคืจื•ืก ื™ื™ืฉื•ืžื™ื ืœ-Tarantool Cartridge (ื—ืœืง 1)

ื‘ื•ืื• ืœื ื ืขืฆื•ืจ ืฉื ื•ื ืฉืœื•ื˜ ื‘ื ื™ื”ื•ืœ ื˜ื•ืคื•ืœื•ื’ื™ื”.

ื ื™ื”ื•ืœ ื˜ื•ืคื•ืœื•ื’ื™ื”

ื‘ื•ืื• ื ืฉืœื‘ ืืช ื”ืžื•ืคืขื™ื ื”ื—ื“ืฉื™ื ืฉืœื ื• ืœืกื˜ ื”ืขืชืง storage-2. ื‘ื•ืื• ื ื•ืกื™ืฃ ืงื‘ื•ืฆื” ื—ื“ืฉื” replicaset_storage_2 ื•ืชืืจ ืืช ื”ืคืจืžื˜ืจื™ื ืฉืœ ืขืจื›ืช ื”ืขืชืง ื‘ืžืฉืชื ื™ื ืฉืœื• ื‘ืื ืœื•ื’ื™ื” ืขื replicaset_storage_1. ื‘ืกืขื™ืฃ hosts ื”ื‘ื” ื ืฆื™ื™ืŸ ืื™ืœื• ืžืงืจื™ื ื™ื™ื›ืœืœื• ื‘ืงื‘ื•ืฆื” ื–ื• (ื›ืœื•ืžืจ, ืขืจื›ืช ื”ืขืชืง ืฉืœื ื•):

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

ื‘ื•ืื• ื ืชื—ื™ืœ ืฉื•ื‘ ืืช ืกืคืจ ื”ืžืฉื—ืงื™ื:

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

ื‘ืคืจืžื˜ืจ --limit ื”ืคืขื ืขื‘ืจื ื• ืืช ืฉื ื”ืงื‘ื•ืฆื” ื”ืชื•ืืžืช ืืช ืขืจื›ืช ื”ืขืชืง ืฉืœื ื•.

ื‘ื•ืื• ื ืฉืงื•ืœ ืืช ื”ืืคืฉืจื•ืช tags.

ื”ืชืคืงื™ื“ ืฉืœื ื• ืžื‘ืฆืข ื‘ืจืฆืฃ ืžืฉื™ืžื•ืช ืฉื•ื ื•ืช, ื”ืžืกื•ืžื ื•ืช ื‘ืชื’ื™ื ื”ื‘ืื™ื:

  • cartridge-instances: ื ื™ื”ื•ืœ ืžื•ืคืขื™ื (ืชืฆื•ืจื”, ื—ื™ื‘ื•ืจ ืœื—ื‘ืจื•ืช);
  • cartridge-replicasets: ื ื™ื”ื•ืœ ื˜ื•ืคื•ืœื•ื’ื™ื” (ื ื™ื”ื•ืœ ืขืจื›ื•ืช ืžืฉื•ื›ืคืœื•ืช ื•ื”ืกืจื” ืœืฆืžื™ืชื•ืช (ื’ื™ืจื•ืฉ) ืฉืœ ืžื•ืคืขื™ื ืžื”ืืฉื›ื•ืœ);
  • cartridge-config: ื ื™ื”ื•ืœ ืฉืœ ืคืจืžื˜ืจื™ื ืื—ืจื™ื ืฉืœ ืืฉื›ื•ืœ (vshard bootstrapping, ืžืฆื‘ ื›ืฉืœ ืื•ื˜ื•ืžื˜ื™, ืคืจืžื˜ืจื™ ื”ืจืฉืื” ื•ืชืฆื•ืจืช ืืคืœื™ืงืฆื™ื”).

ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืฆื™ื™ืŸ ื‘ืžืคื•ืจืฉ ืื™ื–ื” ื—ืœืง ืžื”ืขื‘ื•ื“ื” ืื ื—ื ื• ืจื•ืฆื™ื ืœืขืฉื•ืช, ื•ืื– ื”ืชืคืงื™ื“ ื™ื“ืœื’ ืขืœ ืฉืืจ ื”ืžืฉื™ืžื•ืช. ื‘ืžืงืจื” ืฉืœื ื•, ืื ื—ื ื• ืจื•ืฆื™ื ืœืขื‘ื•ื“ ืจืง ืขื ื”ื˜ื•ืคื•ืœื•ื’ื™ื”, ืื– ืคื™ืจื˜ื ื• cartridge-replicasets.

ื‘ื•ืื• ื ืขืจื™ืš ืืช ื”ืชื•ืฆืื” ืฉืœ ื”ืžืืžืฆื™ื ืฉืœื ื•. ืื ื—ื ื• ืžื•ืฆืื™ื ืขืจื›ืช ื”ืขืชืง ื—ื“ืฉ ืขืœ http://localhost:8181/admin/cluster/dashboard.

ื‘ืงืœื•ืช ื•ื‘ืื•ืคืŸ ื˜ื‘ืขื™ ืœืคืจื•ืก ื™ื™ืฉื•ืžื™ื ืœ-Tarantool Cartridge (ื—ืœืง 1)

ื”ื™ื“ื“!

ื”ืชื ืกื” ื‘ืฉื™ื ื•ื™ ื”ืชืฆื•ืจื” ืฉืœ ืžื•ืคืขื™ื ื•ืขืจื›ื•ืช ื”ืขืชืง ื•ืจืื” ื›ื™ืฆื“ ื˜ื•ืคื•ืœื•ื’ื™ื™ืช ื”ืืฉื›ื•ืœื•ืช ืžืฉืชื ื”. ืืชื” ื™ื›ื•ืœ ืœื ืกื•ืช ืชืจื—ื™ืฉื™ื ืชืคืขื•ืœื™ื™ื ืฉื•ื ื™ื, ืœืžืฉืœ. ืขื“ื›ื•ืŸ ืžืชื’ืœื’ืœ ืื• ืœื”ื’ื“ื™ืœ memtx_memory. ื”ืชืคืงื™ื“ ื™ื ืกื” ืœืขืฉื•ืช ื–ืืช ืžื‘ืœื™ ืœื”ืคืขื™ืœ ืžื—ื“ืฉ ืืช ื”ืžื•ืคืข ืขืœ ืžื ืช ืœืฆืžืฆื ืืช ื–ืžืŸ ื”ื”ืฉื‘ืชื” ื”ืืคืฉืจื™ ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ืฉืœืš.

ืืœ ืชืฉื›ื— ืœืจื•ืฅ vagrant haltืœืขืฆื•ืจ ืืช ื”ืžื›ื•ื ื•ืช ื”ื•ื™ืจื˜ื•ืืœื™ื•ืช ื›ืฉืชืกื™ื™ื ืœืขื‘ื•ื“ ืื™ืชืŸ.

ืžื” ืžืชื—ืช ืœืžื›ืกื” ื”ืžื ื•ืข?

ื›ืืŸ ืืกืคืจ ืœื›ื ื™ื•ืชืจ ืขืœ ืžื” ืฉื”ืชืจื—ืฉ ืžืชื—ืช ืœืžื›ืกื” ื”ืžื ื•ืข ืฉืœ ื”ืชืคืงื™ื“ ื”ืืคืฉืจื™ ื‘ืžื”ืœืš ื”ื ื™ืกื•ื™ื™ื ืฉืœื ื•.

ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ืคืจื™ืกืช ืืคืœื™ืงืฆื™ื™ืช Cartridge ืฉืœื‘ ืื—ืจ ืฉืœื‘.

ื”ืชืงื ืช ื”ื—ื‘ื™ืœื” ื•ื”ืชื—ืœืช ืžื•ืคืขื™ื

ืจืืฉื™ืช ืขืœื™ืš ืœื”ืขื‘ื™ืจ ืืช ื”ื—ื‘ื™ืœื” ืœืฉืจืช ื•ืœื”ืชืงื™ืŸ ืื•ืชื”. ื ื›ื•ืŸ ืœืขื›ืฉื™ื• ื”ืชืคืงื™ื“ ื™ื›ื•ืœ ืœืขื‘ื•ื“ ืขื ื—ื‘ื™ืœื•ืช RPM ื•-DEB.

ืœืื—ืจ ืžื›ืŸ ื ืฉื™ืง ืืช ื”ืžื•ืคืขื™ื. ื”ื›ืœ ืžืื•ื“ ืคืฉื•ื˜ ื›ืืŸ: ื›ืœ ืžื•ืคืข ื”ื•ื ื ืคืจื“ systemd-ืฉืึตืจื•ึผืช. ืื ื™ ืืชืŸ ืœืš ื“ื•ื’ืžื”:

$ systemctl start myapp@storage-1

ืคืงื•ื“ื” ื–ื• ืชืคืขื™ืœ ืืช ื”ืžื•ืคืข storage-1 ืืคืœื™ืงืฆื™ื•ืช myapp. ื”ืžื•ืคืข ืฉื”ื•ืฉืง ื™ื—ืคืฉ ืืช ื–ื” ืชึฐืฆื•ึผืจึธื” ะฒ /etc/tarantool/conf.d/. ื ื™ืชืŸ ืœืฆืคื•ืช ื‘ื™ื•ืžื ื™ ืžื•ืคืข ื‘ืืžืฆืขื•ืช journald.

ืงื•ื‘ืฅ ื™ื—ื™ื“ื” /etc/systemd/system/[email protected] ืฉื™ืจื•ืช systemd ื™ืกื•ืคืง ื™ื—ื“ ืขื ื”ื—ื‘ื™ืœื”.

ืœ-Ansible ื™ืฉ ืžื•ื“ื•ืœื™ื ืžื•ื‘ื ื™ื ืœื”ืชืงื ืช ื—ื‘ื™ืœื•ืช ื•ื ื™ื”ื•ืœ ืฉื™ืจื•ืชื™ ืžืขืจื›ืช; ืœื ื”ืžืฆืื ื• ื›ืืŸ ืฉื•ื ื“ื‘ืจ ื—ื“ืฉ.

ื”ื’ื“ืจืช ื˜ื•ืคื•ืœื•ื’ื™ื™ืช ืืฉื›ื•ืœ

ื›ืืŸ ืžืชื—ื™ืœ ื”ื›ื™ืฃ. ืžืกื›ื™ื, ื–ื” ื™ื”ื™ื” ืžื•ื–ืจ ืœื”ืชืขืกืง ืขื ืชืคืงื™ื“ Ansible ืžื™ื•ื—ื“ ืœื”ืชืงื ืช ื—ื‘ื™ืœื•ืช ื•ื”ืจืฆื” systemdืฉื™ืจื•ืชื™ื.

ืืชื” ื™ื›ื•ืœ ืœื”ื’ื“ื™ืจ ืืช ื”ืืฉื›ื•ืœ ื‘ืื•ืคืŸ ื™ื“ื ื™:

  • ืืคืฉืจื•ืช ืจืืฉื•ื ื”: ืคืชื— ืืช ืžืžืฉืง ื”ืžืฉืชืžืฉ ื‘ืื™ื ื˜ืจื ื˜ ื•ืœื—ืฅ ืขืœ ื”ื›ืคืชื•ืจื™ื. ื–ื” ื“ื™ ืžืชืื™ื ืœื”ืชื—ืœื” ื—ื“ ืคืขืžื™ืช ืฉืœ ืžืกืคืจ ืžืงืจื™ื.
  • ืืคืฉืจื•ืช ืฉื ื™ื™ื”: ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘-API ืฉืœ GraphQl. ื›ืืŸ ืืชื” ื›ื‘ืจ ื™ื›ื•ืœ ืœื”ืคื•ืš ืžืฉื”ื• ืœืื•ื˜ื•ืžื˜ื™, ืœืžืฉืœ, ืœื›ืชื•ื‘ ืกืงืจื™ืคื˜ ื‘-Python.
  • ืืคืฉืจื•ืช ืฉืœื™ืฉื™ืช (ืœื‘ืขืœื™ ืจืฆื•ืŸ ื—ื–ืง): ืขื‘ื•ืจ ืœืฉืจืช, ื”ืชื—ื‘ืจ ืœืื—ื“ ื”ืžื•ืคืขื™ื ื‘ืืžืฆืขื•ืช tarantoolctl connect ื•ืœื‘ืฆืข ืืช ื›ืœ ื”ืžื ื™ืคื•ืœืฆื™ื•ืช ื”ื“ืจื•ืฉื•ืช ืขื ืžื•ื“ื•ืœ Lua cartridge.

ื”ืžืฉื™ืžื” ื”ืขื™ืงืจื™ืช ืฉืœ ื”ื”ืžืฆืื” ืฉืœื ื• ื”ื™ื ืœืขืฉื•ืช ื‘ื“ื™ื•ืง ืืช ื–ื”, ื”ื—ืœืง ื”ืงืฉื” ื‘ื™ื•ืชืจ ื‘ืขื‘ื•ื“ื” ืขื‘ื•ืจืš.

Ansible ืžืืคืฉืจ ืœืš ืœื›ืชื•ื‘ ืžื•ื“ื•ืœ ืžืฉืœืš ื•ืœื”ืฉืชืžืฉ ื‘ื• ื‘ืชืคืงื™ื“. ื”ืชืคืงื™ื“ ืฉืœื ื• ืžืฉืชืžืฉ ื‘ืžื•ื“ื•ืœื™ื ื›ืืœื” ืœื ื™ื”ื•ืœ ืจื›ื™ื‘ื™ ืืฉื›ื•ืœื•ืช ืฉื•ื ื™ื.

ืื™ืš ื–ื” ืขื•ื‘ื“? ืืชื” ืžืชืืจ ืืช ื”ืžืฆื‘ ื”ืจืฆื•ื™ ืฉืœ ื”ืืฉื›ื•ืœ ื‘ืชืฆื•ืจื” ื”ืฆื”ืจืชื™ืช, ื•ื”ืชืคืงื™ื“ ืžืกืคืง ืœื›ืœ ืžื•ื“ื•ืœ ืืช ืกืขื™ืฃ ื”ืชืฆื•ืจื” ืฉืœื• ื›ืงืœื˜. ื”ืžื•ื“ื•ืœ ืžืงื‘ืœ ืืช ื”ืžืฆื‘ ื”ื ื•ื›ื—ื™ ืฉืœ ื”ืืฉื›ื•ืœ ื•ืžืฉื•ื•ื” ืื•ืชื• ืœืžื” ืฉื”ืชืงื‘ืœ ื›ืงืœื˜. ืœืื—ืจ ืžื›ืŸ, ืžื•ืคืขืœ ืงื•ื“ ื“ืจืš ื”ืฉืงืข ืฉืœ ืื—ื“ ื”ืžื•ืคืขื™ื, ืฉืžื‘ื™ื ืืช ื”ืืฉื›ื•ืœ ืœืžืฆื‘ ื”ืจืฆื•ื™.

ืชื•ืฆืื•ืช ืฉืœ

ื”ื™ื•ื ืกื™ืคืจื ื• ื•ื”ืจืื ื• ื›ื™ืฆื“ ืœืคืจื•ืก ืืช ื”ืืคืœื™ืงืฆื™ื” ืฉืœืš ืœ-Tarantool Cartridge ื•ืœื”ื’ื“ื™ืจ ื˜ื•ืคื•ืœื•ื’ื™ื” ืคืฉื•ื˜ื”. ืœืฉื ื›ืš, ื”ืฉืชืžืฉื ื• ื‘-Ansible - ื›ืœื™ ืจื‘ ืขื•ืฆืžื” ื•ืงืœ ืœืฉื™ืžื•ืฉ ื•ืžืืคืฉืจ ืœื”ื’ื“ื™ืจ ื‘ื•-ื–ืžื ื™ืช ืฆืžืชื™ื ืจื‘ื™ื ืฉืœ ืชืฉืชื™ืช (ื‘ืžืงืจื” ืฉืœื ื•, ืžื•ืคืขื™ ืืฉื›ื•ืœื•ืช).

ืœืขื™ืœ ื”ืกืชื›ืœื ื• ืขืœ ืื—ืช ืžื”ื“ืจื›ื™ื ื”ืจื‘ื•ืช ืœืชืืจ ืชืฆื•ืจืช ืืฉื›ื•ืœ ื‘ืืžืฆืขื•ืช Ansible. ื‘ืจื’ืข ืฉืืชื” ืžืจื’ื™ืฉ ืžื•ื›ืŸ ืœื”ืžืฉื™ืš ื”ืœืื”, ื—ืงื•ืจ ืฉื™ื˜ื•ืช ืขื‘ื•ื“ื” ืžื•ืžืœืฆื•ืช ืขืœ ื›ืชื™ื‘ืช ืกืคืจื™ ืžืฉื—ืง. ื™ื™ืชื›ืŸ ืฉื™ื”ื™ื” ืœืš ืงืœ ื™ื•ืชืจ ืœื ื”ืœ ืืช ื”ื˜ื•ืคื•ืœื•ื’ื™ื” ืฉืœืš ื‘ืืžืฆืขื•ืช group_vars ะธ host_vars.

ื‘ืงืจื•ื‘ ืžืื•ื“ ื ืกืคืจ ืœื›ื ื›ื™ืฆื“ ืœืžื—ื•ืง (ืœื”ื•ืฆื™ื) ืžื•ืคืขื™ื ืœืฆืžื™ืชื•ืช ืžื”ื˜ื•ืคื•ืœื•ื’ื™ื”, bootstrap vshard, ืœื ื”ืœ ืžืฆื‘ ื›ืฉืœ ืื•ื˜ื•ืžื˜ื™, ืœื”ื’ื“ื™ืจ ื”ืจืฉืื•ืช ื•ืœืชืงืŸ ืืช ืชืฆื•ืจืช ื”ืืฉื›ื•ืœ. ื‘ื™ื ืชื™ื™ื ืืคืฉืจ ืœืœืžื•ื“ ืœื‘ื“ ืชื™ืขื•ื“ ื•ืœื”ืชื ืกื•ืช ื‘ืฉื™ื ื•ื™ ืคืจืžื˜ืจื™ ืืฉื›ื•ืœ.

ืื ืžืฉื”ื• ืœื ืขื•ื‘ื“, ื”ืงืคื“ ืœืขืฉื•ืช ื–ืืช ืœื“ื•ื•ื— ืื•ืชื ื• ืœื’ื‘ื™ ื”ื‘ืขื™ื”. ื ืกื“ืจ ื”ื›ืœ ืžื”ืจ!

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”