ืœื™ื™ื›ื˜ ืื•ืŸ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš ืฆืขื•ื•ื™ืงืœืขืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืฆื• Tarantool Cartridge (ื˜ื™ื™ืœ 1)

ืœื™ื™ื›ื˜ ืื•ืŸ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš ืฆืขื•ื•ื™ืงืœืขืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืฆื• Tarantool Cartridge (ื˜ื™ื™ืœ 1)

ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ื’ืขืจืขื“ื˜ ื•ื•ืขื’ืŸ Tarantool Cartridge, ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืึทื ื˜ื•ื•ื™ืงืœืขืŸ ืคื•ื ืื ื“ืขืจื’ืขื˜ื™ื™ืœื˜ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื•ืŸ ืคึผืขืงืœ ื–ื™ื™. ืึทืœืข ื•ื•ืึธืก ืื™ื– ืœื™ื ืงืก ืื™ื– ืฆื• ืœืขืจื ืขืŸ ื•ื•ื™ ืฆื• ืฆืขื•ื•ื™ืงืœืขืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื•ืŸ ืคื™ืจืŸ ื–ื™ื™. ืฆื™ ื ื™ื˜ ื–ืึธืจื’, ืžื™ืจ ื”ืึธื‘ืŸ ืขืก ืึทืœืข ื‘ืื“ืขืงื˜! ืžื™ืจ ืฉื˜ืขืœืŸ ืฆื•ื–ืึทืžืขืŸ ืึทืœืข ื“ื™ ื‘ืขืกื˜ืขืจ ืคึผืจืึทืงื˜ื™ืกื™ื– ืคึฟืึทืจ ืืจื‘ืขื˜ืŸ ืžื™ื˜ Tarantool Cartridge ืื•ืŸ ื’ืขืฉืจื™ื‘ืŸ ืึทื ืกื™ื‘ืœืข-ืจืึธืœืข, ื•ื•ืึธืก ื•ื•ืขื˜ ืคืึทืจืฉืคึผืจื™ื™ื˜ืŸ ื“ืขื ืคึผืขืงืœ ืฆื• ืกืขืจื•ื•ืขืจืก, ืงืึทื˜ืขืจ ื™ื ืกื˜ืึทื ืกื™ื–, ืคืึทืจื™ื™ื ื™ืงืŸ ื–ื™ื™ ืื™ืŸ ืึท ืงื ื•ื™ืœ, ืงืึทื ืคื™ื’ื™ืขืจ ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ, ื‘ืึธืึธื˜ืกื˜ืจืึทืคึผ ื•ื•ืกื”ืึทืจื“, ื’ืขื‘ืŸ ืึธื˜ืึทืžืึทื˜ื™ืง ืคื™ื™ืœืึธื•ื•ืขืจ ืื•ืŸ ืคึผืึทื˜ืฉ ื“ื™ ืงื ื•ื™ืœ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ.

ื˜ืฉื™ืงืึทื•ื•ืข? ื“ืขืจื™ื‘ืขืจ ื‘ื™ื˜ืข, ืื•ื ื˜ืขืจ ื“ื™ ืฉื ื™ื™ึทื“ืŸ, ืžื™ืจ ื•ื•ืขื˜ ื–ืึธื’ืŸ ืื™ืจ ืื•ืŸ ื•ื•ื™ื™ึทื–ืŸ ืื™ืจ ืึทืœืฅ.

ืœืืžื™ืจ ืื ื”ื™ื™ื‘ืŸ ืžื™ื˜ ื ื‘ื™ื™ืฉืคื™ืœ

ืžื™ืจ ื•ื•ืขืœืŸ ื ืึธืจ ืงื•ืงืŸ ืื™ืŸ ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ืจืึธืœืข. ืื™ืจ ืงืขื ื˜ ืฉื˜ืขื ื“ื™ืง ื’ืขืคึฟื™ื ืขืŸ ืึท ืคื•ืœืฉื˜ืขื ื“ื™ืง ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’ ืคื•ืŸ ืึทืœืข ื–ื™ื™ึทืŸ ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ืื•ืŸ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ืคึผืึทืจืึทืžืขื˜ืขืจืก ืื™ืŸ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ. ืื‘ืขืจ ืขืก ืื™ื– ื‘ืขืกืขืจ ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ืึทืžืึธืœ ื•ื•ื™ ืฆื• ื–ืขืŸ ืขืก ื”ื•ื ื“ืขืจื˜ ืžืืœ, ืึทื–ื•ื™ ืœืึธื–ืŸ ืื•ื ื“ื– ืฆืขื•ื•ื™ืงืœืขืŸ ืึท ืงืœื™ื™ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ.

Tarantool Cartridge ื”ืื˜ ื˜ื•ื˜ืึธืจื™ืึทืœ ืฆื• ืฉืึทืคึฟืŸ ืึท ืงืœื™ื™ืŸ ืงืึทืจื˜ืจืึทื“ื–ืฉืึทื– ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืึทื– ืกื˜ืึธืจื– ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ื‘ืึทื ืง ืงืœื™ื™ืึทื ืฅ ืื•ืŸ ื–ื™ื™ืขืจ ืึทืงืึทื•ื ืฅ, ืื•ืŸ ืื•ื™ืš ื’ื™ื˜ ืึทืŸ ืึทืคึผื™ ืคึฟืึทืจ ื“ืึทื˜ืŸ ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’ ื“ื•ืจืš ื”ื˜ื˜ืคึผ. ืฆื• ื“ืขืจื’ืจื™ื™ื›ืŸ ื“ืขื, ื“ื™ ืึทืคึผืคึผืขื ื“ื™ืงืก ื‘ืืฉืจื™ื™ื‘ื˜ ืฆื•ื•ื™ื™ ืžืขื’ืœืขืš ืจืึธืœืขืก: api ะธ storage, ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืึทืกื™ื™ื ื“ ืฆื• ื™ื ืกื˜ืึทื ืกื™ื–.

ืคึผืึทื˜ืจืึธืŸ ื–ื™ืš ื˜ื•ื˜ ื ื™ืฉื˜ ื–ืึธื’ืŸ ืขืคึผืขืก ื•ื•ืขื’ืŸ ื•ื•ื™ ืฆื• ืงืึทื˜ืขืจ ืคึผืจืึทืกืขืกืึทื–, ืขืก ื ืึธืจ ื’ื™ื˜ ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืงืึทื ืคื™ื’ื™ืขืจ ืฉื•ื™ืŸ ืคืœื™ืกื ื“ื™ืง ื™ื ืกื˜ืึทื ืกื™ื–. ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ ืžื•ื–ืŸ ื˜ืึธืŸ ื“ื™ ืžื ื•ื—ื” ื–ื™ืš: ืฆื•ืœื™ื™ื’ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืขืก, ืึธื ื”ื™ื™ื‘ ื‘ืึทื“ื™ื ื•ื ื’ืก ืื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจ ื“ื™ ื˜ืึธืคึผืึธืœืึธื’ื™. ืึธื‘ืขืจ ืžื™ืจ ื•ื•ืขืœืŸ ื ื™ืฉื˜ ื˜ืึธืŸ ื“ืึธืก ืึทืœืฅ; ืึทื ืกื™ื‘ืœืข ื•ื•ืขื˜ ื˜ืึธืŸ ื“ืึธืก ืคึฟืึทืจ ืื•ื ื“ื–.

ืคื•ืŸ ื•ื•ืขืจื˜ืขืจ ืฆื• ืžืขืฉื™ื

ืึทื–ื•ื™, ืœืึธื–ืŸ ืื•ื ื“ื– ืฆืขื•ื•ื™ืงืœืขืŸ ืื•ื ื“ื–ืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื• ืฆื•ื•ื™ื™ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืืฉื™ื ืขืŸ ืื•ืŸ ืฉื˜ืขืœืŸ ืึท ืคึผืฉื•ื˜ ื˜ืึธืคึผืึธืœืึธื’ื™:

  • ืจืขืคึผืœื™ืงืขืกืขื˜ app-1 ื•ื•ืขื˜ ื™ื ืกื˜ืจื•ืžืขื ื˜ ื“ื™ ืจืึธืœืข api, ื•ื•ืึธืก ื›ื•ืœืœ ื“ื™ ืจืึธืœืข vshard-router. ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื‘ืœื•ื™ื– ืื™ื™ืŸ ื‘ื™ื™ึทืฉืคึผื™ืœ ื“ืึธ.
  • ืจืขืคึผืœื™ืงืขืกืขื˜ storage-1 ื™ืžืคึผืœืึทืžืึทื ืฅ ื“ื™ ืจืึธืœืข storage (ืื•ืŸ ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฆื™ื™ื˜ vshard-storage), ื“ืึธ ืžื™ืจ ื•ื•ืขืœืŸ ืœื™ื™ื’ืŸ ืฆื•ื•ื™ื™ ื™ื ืกื˜ืึทื ืกื™ื– ืคื•ืŸ ืคืึทืจืฉื™ื“ืขื ืข ืžืืฉื™ื ืขืŸ.

ืœื™ื™ื›ื˜ ืื•ืŸ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš ืฆืขื•ื•ื™ืงืœืขืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืฆื• Tarantool Cartridge (ื˜ื™ื™ืœ 1)

ืฆื• ืœื•ื™ืคืŸ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ ืžื™ืจ ื“ืึทืจืคึฟืŸ ื•ื•ืึทื’ืจืึทื ื˜ ะธ Ansible (ื•ื•ืขืจืกื™ืข 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

ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื™ ื˜ืึทืจืึทื ื˜ืึธืึธืœ ืงืึทืจื˜ืจืึทื“ื–ืฉืึทื– ืึทื ืกืึทื‘ืึทืœ ืจืึธืœืข:

$ 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 ื•ื•ืขื˜ ืคื™ืจืŸ. ืคึฟืึทืจ ื™ืขื“ืขืจ ื‘ืึทืœืขื‘ืึธืก ืžื™ืจ ืงืขื ืขืŸ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ืงืฉืจ ืคึผืึทืจืึทืžืขื˜ืขืจืก (ืึทื–ืึท ื•ื•ื™ 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.

ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื–ืึธื’ืŸ Ansible ื“ื™ ืงืฉืจ ืคึผืึทืจืึทืžืขื˜ืขืจืก ืคึฟืึทืจ ื™ืขื“ืขืจ ื‘ื™ื™ึทืฉืคึผื™ืœ. ืขืก ืกื™ืžื– ืœืึทื“ื–ืฉื™ืงืึทืœ ืฆื• ื’ืจื•ืคึผืข ื™ื ืกื˜ืึทื ืกื™ื– ืื™ืŸ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ ื’ืจื•ืคึผืขืก. ืคึฟืึทืจ ื“ืขื ืฆื•ื•ืขืง, ื™ื ืกื˜ืึทื ืกื™ื– ื–ืขื ืขืŸ ืงืึทืžื‘ื™ื™ื ื“ ืื™ืŸ ื’ืจื•ืคึผืขืก 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 ื‘ืึธืึธื˜ืกื˜ืจืึทืคึผืคึผื™ื ื’, ืึธื˜ืึทืžืึทื˜ื™ืง ืคื™ื™ืœืึธื•ื•ืขืจ ืžืึธื“ืข, ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ ืคึผืึทืจืึทืžืขื˜ืขืจืก ืื•ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ).

ืžื™ืจ ืงืขื ืขืŸ ื‘ืคื™ืจื•ืฉ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื•ื•ืึธืก ื˜ื™ื™ืœ ืคื•ืŸ ื“ืขืจ ืึทืจื‘ืขื˜ ืžื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื˜ืึธืŸ, ื“ืขืžืึธืœื˜ ื“ืขืจ ืจืึธืœืข ื•ื•ืขื˜ ื”ืึธืคึผืงืขืŸ ื“ื™ ืจืขืฉื˜ ืคื•ืŸ ื“ื™ ื˜ืึทืกืงืก. ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคืึทืœ, ืžื™ืจ ื•ื•ื™ืœืŸ ืฆื• ืึทืจื‘ืขื˜ืŸ ื‘ืœื•ื™ื– ืžื™ื˜ ื“ื™ ื˜ืึทืคึผืึทืœืึทื“ื–ืฉื™, ืึทื–ื•ื™ ืžื™ืจ ืกืคึผืขืกื™ืคื™ืขื“ cartridge-replicasets.

ื–ืืœ ืก ืึธืคึผืฉืึทืฆืŸ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ื”ืฉืชื“ืœื•ืช. ืžื™ืจ ื’ืขืคึฟื™ื ืขืŸ ืึท ื ื™ื™ึทืข ืจืขืคึผืœื™ืงืขืกืขื˜ ืื•ื™ืฃ http://localhost:8181/admin/cluster/dashboard.

ืœื™ื™ื›ื˜ ืื•ืŸ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš ืฆืขื•ื•ื™ืงืœืขืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืฆื• Tarantool Cartridge (ื˜ื™ื™ืœ 1)

ื”ืึธืึธืจื™ื™ึท!

ืขืงืกืคึผืขืจื™ืžืขื ื˜ ืžื™ื˜ ื˜ืฉืึทื ื’ื™ื ื’ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคื•ืŸ ื™ื ืกื˜ืึทื ืกื™ื– ืื•ืŸ ืจืขืคึผืœื™ืงืข ืฉื˜ืขืœื˜ ืื•ืŸ ื–ืขืŸ ื•ื•ื™ ื“ื™ ืงื ื•ื™ืœ ื˜ืึทืคึผืึทืœืึทื“ื–ืฉื™ ืขื ื“ืขืจื•ื ื’ืขืŸ. ืื™ืจ ืงืขื ืขืŸ ืคึผืจื•ื‘ื™ืจืŸ ืคืึทืจืฉื™ื“ืขื ืข ืึทืคึผืขืจื™ื™ืฉืึทื ืึทืœ ืกื™ื ืขืจื™ืึธื•ื–, ืœืžืฉืœ. ืจืึธื•ืœื™ื ื’ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ืึธื“ืขืจ ืคืึทืจื’ืจืขืกืขืจืŸ memtx_memory. ื“ื™ ืจืึธืœืข ื•ื•ืขื˜ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ื˜ืึธืŸ ื“ืึธืก ืึธืŸ ืจื™ืกื˜ืึทืจื˜ื™ื ื’ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ ืื™ืŸ ืกื“ืจ ืฆื• ืจืขื“ื•ืฆื™ืจืŸ ื“ื™ ืžืขื’ืœืขืš ื“ืึทื•ื ื˜ื™ื™ื ืคื•ืŸ ื“ื™ื™ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ.

ื“ื• ื–ืืœืกื˜ ื ื™ืฉื˜ ืคืึทืจื’ืขืกืŸ ืฆื• ืœื•ื™ืคืŸ vagrant haltืฆื• ื”ืึทืœื˜ืŸ ื“ื™ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืืฉื™ื ืขืŸ ื•ื•ืขืŸ ืื™ืจ ืคืึทืจื˜ื™ืง ืืจื‘ืขื˜ืŸ ืžื™ื˜ ื–ื™ื™.

ื•ื•ืึธืก ืื™ื– ืื•ื ื˜ืขืจ ื“ื™ ืงืึทืคึผื˜ืขืจ?

ื“ืึธ ืื™ืš ื•ื•ืขื˜ ื–ืึธื’ืŸ ืื™ืจ ืžืขืจ ื•ื•ืขื’ืŸ ื•ื•ืึธืก ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืขืฉืขืขื ื™ืฉ ืื•ื ื˜ืขืจ ื“ื™ ืงืึทืคึผื˜ืขืจ ืคื•ืŸ ื“ื™ ืึทื ืกืึทื‘ืึทืœ ืจืึธืœืข ื‘ืขืฉืึทืก ืื•ื ื“ื–ืขืจ ื™ืงืกืคึผืขืจืึทืžืึทื ืฅ.

ื–ืืœ ืก ืงื•ืง ืื™ืŸ ื“ื™ืคึผืœื•ื™ื™ื ื’ ื“ื™ ืคึผืึทื˜ืจืึธืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฉืจื™ื˜ ื“ื•ืจืš ืฉืจื™ื˜.

ื™ื ืกื˜ืึธืœื™ื ื’ ื“ืขื ืคึผืขืงืœ ืื•ืŸ ืึธื ื”ื™ื™ื‘ ื™ื ืกื˜ืึทื ืกื™ื–

ืขืจืฉื˜ืขืจ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื‘ืึทืคืจื™ื™ึทืขืŸ ื“ื™ ืคึผืขืงืœ ืฆื• ื“ื™ ืกืขืจื•ื•ืขืจ ืื•ืŸ ื™ื ืกื˜ืึทืœื™ืจืŸ ืขืก. ื“ืขืจื•ื•ื™ื™ึทืœ ื“ื™ ืจืึธืœืข ืงืขื ืขืŸ ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ RPM ืื•ืŸ DEB ืคึผืึทืงืึทื“ื–ืฉืึทื–.

ื•ื•ื™ื™ึทื˜ืขืจ ืžื™ืจ ืึธื ื”ื™ื™ื‘ืŸ ื“ื™ ื™ื ืกื˜ืึทื ืกื™ื–. ืึทืœืฅ ืื™ื– ื–ื™ื™ืขืจ ืคึผืฉื•ื˜ ื“ืึธ: ื™ืขื“ืขืจ ื‘ื™ื™ึทืฉืคึผื™ืœ ืื™ื– ืึท ื‘ืึทื–ื•ื ื“ืขืจ systemd-ื“ื™ื ืกื˜. ืื™ืš ื•ื•ืขืœ ื“ื™ืจ ื’ืขื‘ืŸ ื ื‘ื™ื™ืฉืคื™ืœ:

$ systemctl start myapp@storage-1

ื“ืขื ื‘ืึทืคึฟืขืœ ื•ื•ืขื˜ ืึธื ื”ื™ื™ื‘ืŸ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ storage-1 annexes myapp. ื“ื™ ืœืึธื ื˜ืฉื˜ ื‘ื™ื™ึทืฉืคึผื™ืœ ื•ื•ืขื˜ ืงื•ืงืŸ ืคึฟืึทืจ ื–ื™ื™ึทืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ะฒ /etc/tarantool/conf.d/. ื‘ื™ื™ึทืฉืคึผื™ืœ ืœืึธื’ืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื•ื•ื™ื•ื“ ื ื™ืฆืŸ journald.

ืึทืคึผืึทืจืึทื˜ ื˜ืขืงืข /etc/systemd/system/[email protected] ืคึฟืึทืจ systemd ื“ื™ื ืกื˜ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืื™ื‘ืขืจื’ืขื’ืขื‘ืŸ ืฆื•ื–ืืžืขืŸ ืžื™ื˜ ื“ืขื ืคึผืขืงืœ.

Ansible ื”ืื˜ ื’ืขื‘ื•ื™ื˜-ืื™ืŸ ืžืึทื“ื–ืฉื•ืœื– ืคึฟืึทืจ ื™ื ืกื˜ืึธืœื™ื ื’ ืคึผืึทืงืึทื“ื–ืฉืึทื– ืื•ืŸ ืึธื ืคื™ืจื•ื ื’ ืกื™ืกื˜ืขื ื‘ืึทื“ื™ื ื•ื ื’ืก; ืžื™ืจ ื”ืึธื‘ืŸ ื ื™ืฉื˜ ื™ื ื•ื•ืขื ื˜ืึทื“ ืขืคึผืขืก ื ื™ื™ึท ื“ืึธ.

ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืึท ืงื ื•ื™ืœ ื˜ืึธืคึผืึธืœืึธื’ื™

ื“ืืก ืื™ื– ื•ื•ื• ื“ื™ ืฉืคึผืึทืก ื”ื™ื™ื‘ื˜. ืฉื˜ื™ืžืขืŸ, ืขืก ื•ื•ืึธืœื˜ ื–ื™ื™ืŸ ืžืึธื“ื ืข ืฆื• ืึทืจืŸ ืžื™ื˜ ืึท ืกืคึผืขืฆื™ืขืœ ืึทื ืกื™ื‘ืœืข ืจืึธืœืข ืคึฟืึทืจ ื™ื ืกื˜ืึธืœื™ื ื’ ืคึผืึทืงืึทื“ื–ืฉืึทื– ืื•ืŸ ืคืœื™ืกื ื“ื™ืง systemd-ื‘ืึทื“ื™ื ื•ื ื’ืขืŸ.

ืื™ืจ ืงืขื ืขืŸ ืงืึทื ืคื™ื’ื™ืขืจ ื“ื™ ืงื ื•ื™ืœ ืžืึทื ื™ื•ืึทืœื™:

  • ืขืจืฉื˜ืขืจ ืึธืคึผืฆื™ืข: ืขืคึฟืขื ืขืŸ ื“ื™ ื•ื•ืขื‘ ื•ื™ ืื•ืŸ ื’ื™ื˜ ืื•ื™ืฃ ื“ื™ ืงื ืขืคึผืœืขืš. ืขืก ืื™ื– ื’ืึทื ืฅ ืคึผืึทืกื™ืง ืคึฟืึทืจ ืึท ืื™ื™ืŸ-ืฆื™ื™ึทื˜ ืึธื ื”ื™ื™ื‘ ืคื•ืŸ ืขื˜ืœืขื›ืข ื™ื ืกื˜ืึทื ืกื™ื–.
  • ืฆื•ื•ื™ื™ื˜ืข ืึธืคึผืฆื™ืข: ืื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ ื“ื™ GraphQl API. ื“ืึธ ืื™ืจ ืงืขื ืขืŸ ืฉื•ื™ืŸ ืึธื˜ืึทืžื™ื™ื˜ ืขืคึผืขืก, ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืฉืจื™ื™ึทื‘ืŸ ืึท ืฉืจื™ืคื˜ ืื™ืŸ ืคึผื™ื˜ื”ืึธืŸ.
  • ื“ืจื™ื˜ ืึธืคึผืฆื™ืข (ืคึฟืึทืจ ื“ื™ ืฉื˜ืึทืจืง-ื•ื•ื™ืœื“): ื’ื™ื™ืŸ ืฆื• ื“ื™ ืกืขืจื•ื•ืขืจ, ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ื™ื ืกื˜ืึทื ืกื™ื– ื ื™ืฆืŸ tarantoolctl connect ืื•ืŸ ื“ื•ืจื›ืคื™ืจืŸ ืึทืœืข ื“ื™ ื ื•ื™ื˜ื™ืง ืžืึทื ื™ืคึผื™ืึทืœื™ื™ืฉืึทื ื– ืžื™ื˜ ื“ื™ Lua ืžืึธื“ื•ืœืข cartridge.

ื“ื™ ื”ื•ื™ืคึผื˜ ืึทืจื‘ืขื˜ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ื“ืขืจืคื™ื ื“ื•ื ื’ ืื™ื– ืฆื• ื˜ืึธืŸ ื“ืึธืก, ื“ื™ ืžืขืจืกื˜ ืฉื•ื•ืขืจ ื˜ื™ื™ืœ ืคื•ืŸ ื“ืขืจ ืึทืจื‘ืขื˜ ืคึฟืึทืจ ืื™ืจ.

Ansible ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ื“ื™ื™ืŸ ืื™ื™ื’ืขื ืข ืžืึธื“ื•ืœืข ืื•ืŸ ื ื•ืฆืŸ ืขืก ืื™ืŸ ืึท ืจืึธืœืข. ืื•ื ื“ื–ืขืจ ืจืึธืœืข ื ื™ืฆื˜ ืึทื–ืึท ืžืึทื“ื–ืฉื•ืœื– ืฆื• ืคื™ืจืŸ ืคืึทืจืฉื™ื“ืŸ ืงื ื•ื™ืœ ืงืึทืžืคึผืึธื•ื ืึทื ืฅ.

ื•ื•ื™ืื–ื•ื™ ืขืก ืืจื‘ืขื˜? ืื™ืจ ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ื“ื™ ื’ืขื‘ืขื˜ืŸ ืฉื˜ืึทื˜ ืคื•ืŸ ื“ืขื ืงื ื•ื™ืœ ืื™ืŸ ืึท ื“ืขืงืœืึทืจืึทื˜ื™ื•ื•ืข ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ, ืื•ืŸ ื“ื™ ืจืึธืœืข ื’ื™ื˜ ื™ืขื“ืขืจ ืžืึธื“ื•ืœืข ื–ื™ื™ึทืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืึธืคึผื˜ื™ื™ืœื•ื ื’ ื•ื•ื™ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘. ื“ืขืจ ืžืึธื“ื•ืœืข ื ืขืžื˜ ื“ื™ ืงืจืึทื ื˜ ืฉื˜ืึทื˜ ืคื•ืŸ ื“ื™ ืงื ื•ื™ืœ ืื•ืŸ ืงืึทืžืคึผืขืจื– ืขืก ืžื™ื˜ ื•ื•ืึธืก ืื™ื– ื‘ืืงื•ืžืขืŸ ื•ื•ื™ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘. ื“ืขืจื ืึธืš, ืึท ืงืึธื“ ืื™ื– ืœืึธื ื˜ืฉื˜ ื“ื•ืจืš ื“ื™ ื›ืึธืœืขืœ ืคื•ืŸ ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ื™ื ืกื˜ืึทื ืกื™ื–, ื•ื•ืึธืก ื‘ืจืขื ื’ื˜ ื“ืขื ืงื ื•ื™ืœ ืฆื• ื“ืขืจ ื’ืขื•ื•ืืœื˜ ืฉื˜ืึทื˜.

ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืคื•ืŸ

ื”ื™ื™ึทื ื˜ ืžื™ืจ ื“ืขืจืฆื™ื™ืœื˜ ืื•ืŸ ื’ืขื•ื•ื™ื–ืŸ ื•ื•ื™ ืฆื• ืฆืขื•ื•ื™ืงืœืขืŸ ื“ื™ื™ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื• Tarantool Cartridge ืื•ืŸ ืฉื˜ืขืœืŸ ืึท ืคึผืฉื•ื˜ ื˜ืึธืคึผืึธืœืึธื’ื™. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืžื™ืจ ื’ืขื•ื•ื™ื™ื ื˜ Ansible - ืึท ืฉื˜ืึทืจืง ื’ืขืฆื™ื™ึทื’ ื•ื•ืึธืก ืื™ื– ื’ืจื™ื ื’ ืฆื• ื ื•ืฆืŸ ืื•ืŸ ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืงืึทื ืคื™ื’ื™ืขืจ ืคื™ืœืข ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ื ืึธื•ื“ื– ืกื™ื™ืžืึทืœื˜ื™ื™ื ื™ืึทืกืœื™ (ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคืึทืœ, ืงื ื•ื™ืœ ื™ื ืกื˜ืึทื ืกื™ื–).

ืื•ื™ื‘ืŸ ืžื™ืจ ื’ืขืงื•ืงื˜ ืื•ื™ืฃ ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืคื™ืœืข ื•ื•ืขื’ืŸ ืฆื• ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ืึท ืงื ื•ื™ืœ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื ื™ืฆืŸ Ansible. ืึทืžืึธืœ ืื™ืจ ืคื™ืœืŸ ื’ืจื™ื™ื˜ ืฆื• ืžืึทืš ืื•ื™ืฃ, ื•ื™ืกืคืึธืจืฉืŸ ื‘ืขืกื˜ืขืจ ืคึผืจืึทืงื˜ืึทืกืึทื– ืื•ื™ืฃ ืฉืจื™ื™ื‘ืŸ ืคึผืœื™ื™ึทื‘ืึธืึธืงืก. ืื™ืจ ืงืขืŸ ื’ืขืคึฟื™ื ืขืŸ ืขืก ื’ืจื™ื ื’ืขืจ ืฆื• ืคื™ืจืŸ ื“ื™ื™ืŸ ื˜ืึธืคึผืึธืœืึธื’ื™ ื ื™ืฆืŸ group_vars ะธ host_vars.

ื–ื™ื™ืขืจ ื‘ืึทืœื“ ืžื™ืจ ื•ื•ืขื˜ ื–ืึธื’ืŸ ืื™ืจ ื•ื•ื™ ืฆื• ืคึผืขืจืžืึทื ืึทื ื˜ืœื™ ื•ื™ืกืžืขืงืŸ (ืึทืจื•ื™ืกืฉื™ืงืŸ) ื™ื ืกื˜ืึทื ืกื™ื– ืคื•ืŸ ื“ื™ ื˜ืึธืคึผืึธืœืึธื’ื™, ื‘ืึธืึธื˜ืกื˜ืจืึทืคึผ ื•ื•ืกื”ืึทืจื“, ืคื™ืจืŸ ืึธื˜ืึทืžืึทื˜ื™ืง ืคืึทื™ืœืึธื•ื•ืขืจ ืžืึธื“ืข, ืงืึทื ืคื™ื’ื™ืขืจ ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ ืื•ืŸ ืœืึทื˜ืข ื“ื™ ืงื ื•ื™ืœ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ. ืื™ืŸ ื“ืขืจ ื“ืขืจื•ื•ื™ื™ืœ, ืื™ืจ ืงืขื ืขืŸ ืœืขืจื ืขืŸ ืื•ื™ืฃ ื“ื™ื™ืŸ ืื™ื™ื’ืŸ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืื•ืŸ ืขืงืกืคึผืขืจื™ืžืขื ื˜ ืžื™ื˜ ื˜ืฉืึทื ื’ื™ื ื’ ืงื ื•ื™ืœ ืคึผืึทืจืึทืžืขื˜ืขืจืก.

ืื•ื™ื‘ ืขืคึผืขืก ื˜ื•ื˜ ื ื™ืฉื˜ ืึทืจื‘ืขื˜ืŸ, ื–ื™ื™ืŸ ื–ื™ื›ืขืจ ืฆื• ืœืื– ืžื™ืจ ื•ื•ื™ืกืŸ ืื•ื ื“ื– ื•ื•ืขื’ืŸ ื“ืขื ืคึผืจืึธื‘ืœืขื. ืžื™ืจ ื•ื•ืขืœืŸ ืกืึธืจื˜ ืึทืœืฅ ืื•ื™ืก ื’ืขืฉื•ื•ื™ื ื“!

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

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’