ЛСсно ΠΈ СстСствСно Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π½Π° прилоТСния Π½Π° Tarantool Cartridge (част 1)

ЛСсно ΠΈ СстСствСно Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π½Π° прилоТСния Π½Π° Tarantool Cartridge (част 1)

Π’Π΅Ρ‡Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ…ΠΌΠ΅ Π·Π° Tarantool касСта, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚Π΅ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ прилоТСния ΠΈ Π΄Π° Π³ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ€Π°Ρ‚Π΅. НС Π΅ останало Π½ΠΈΡ‰ΠΎ: Π½Π°ΡƒΡ‡Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ Π΄Π° внСдряватС ΠΈ управляватС Ρ‚Π΅Π·ΠΈ прилоТСния. НС сС притСснявайтС, помислили смС Π·Π° всичко! Π‘ΡŠΠ±Ρ€Π°Ρ…ΠΌΠ΅ всички Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Tarantool Cartridge ΠΈ написахмС ansible-роля, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Ρ€Π°Π·Π»ΠΎΠΆΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π½Π° ΡΡŠΡ€Π²ΡŠΡ€ΠΈ, Ρ‰Π΅ стартира СкзСмпляритС, Ρ‰Π΅ Π³ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π° Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€, Ρ‰Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° оторизация, bootstrap vshard, Ρ‰Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅Π½ ΠΎΡ‚ΠΊΠ°Π· ΠΈ Ρ‰Π΅ Π·Π°ΠΊΡŠΡ€ΠΏΠΈ конфигурацията Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ? Π’ΠΎΠ³Π°Π²Π° ΠΏΠΈΡ‚Π°ΠΌ ΠΏΠΎΠ΄ Ρ€Π°Π·Ρ€Π΅Π·Π°, Ρ‰Π΅ ΠΊΠ°ΠΆΠ΅ΠΌ ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ всичко.

Π”Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Π©Π΅ ΠΏΠΎΠΊΡ€ΠΈΠ΅ΠΌ само част ΠΎΡ‚ функционалността Π½Π° Π½Π°ΡˆΠ°Ρ‚Π° роля. Π’ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ пълно описаниС Π½Π° всички Π½Π΅Π³ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π²Ρ…ΠΎΠ΄Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² докумСнтация. Но Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° ΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅ вСднъТ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ сто ΠΏΡŠΡ‚ΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½Π΅ΠΊΠ° Π²Π½Π΅Π΄Ρ€ΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Tarantool Cartridge ΠΈΠΌΠ° ΡƒΡ€ΠΎΠΊ Π·Π° създаванС Π½Π° ΠΌΠ°Π»ΠΊΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Cartridge, ΠΊΠΎΠ΅Ρ‚ΠΎ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° информация Π·Π° Π±Π°Π½ΠΊΠΎΠ²ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ ΠΈ Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ смСтки, Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° прСдоставя API Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ Ρ‡Ρ€Π΅Π· HTTP. Π—Π° Ρ†Π΅Π»Ρ‚Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ описва Π΄Π²Π΅ възмоТни Ρ€ΠΎΠ»ΠΈ: api ΠΈ storageΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ присвоСни Π½Π° инстанции.

Π‘Π°ΠΌΠ°Ρ‚Π° касСта Π½Π΅ ΠΊΠ°Π·Π²Π° Π½ΠΈΡ‰ΠΎ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° стартиратС процСси, тя само прСдоставя Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π²Π΅Ρ‡Π΅ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ СкзСмпляри. ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡΡ‚ трябва сам Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ останалото: Π΄Π° Ρ€Π°Π·Π»ΠΎΠΆΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π΄Π° стартира услугитС ΠΈ Π΄Π° настрои топологията. Но Π½ΠΈΠ΅ няма Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ всичко Ρ‚ΠΎΠ²Π°, Ansible Ρ‰Π΅ Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈ вмСсто нас.

ΠžΡ‚ Π΄ΡƒΠΌΠΈ към Π΄Π΅Π»Π°

И Ρ‚Π°ΠΊΠ°, Π½Π΅ΠΊΠ° Π²Π½Π΅Π΄Ρ€ΠΈΠΌ Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π΄Π²Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини ΠΈ Π΄Π° настроим проста топология:

  • Набор ΠΎΡ‚ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ app-1 Ρ‰Π΅ ΠΈΠ³Ρ€Π°Π΅ ролята apiΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π° ролята vshard-router. Π’ΡƒΠΊ Ρ‰Π΅ ΠΈΠΌΠ° само Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.
  • replicaset storage-1 изпълнява ролята storage (ΠΈ Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ vshard-storage), Ρ‚ΡƒΠΊ добавямС Π΄Π²Π° СкзСмпляра ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ машини.

ЛСсно ΠΈ СстСствСно Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π½Π° прилоТСния Π½Π° Tarantool Cartridge (част 1)

Π—Π° Π΄Π° стартирамС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° скитник ΠΈ Ansible (вСрсия 2.8 ΠΈΠ»ΠΈ ΠΏΠΎ-Π½ΠΎΠ²Π°).

Π‘Π°ΠΌΠ°Ρ‚Π° роля Π΅ Ansible Galaxy. Π’ΠΎΠ²Π° Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° сподСлятС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΈ Ρ€ΠΎΠ»ΠΈ.

ΠšΠ»ΠΎΠ½ΠΈΡ€Π°ΠΉΡ‚Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

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

НиС създавамС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини:

$ vagrant up

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° Tarantool Cartridge ansible роля:

$ ansible-galaxy install tarantool.cartridge,1.0.1

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ инсталираната роля:

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

ΠžΡ‡Π°ΠΊΠ²Π°ΠΌΠ΅ края Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠ½ΠΈΠ³Π°Ρ‚Π°, ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° http://localhost:8181/admin/cluster/dashboard ΠΈ сС насладСтС Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π°:

ЛСсно ΠΈ СстСствСно Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π½Π° прилоТСния Π½Π° Tarantool Cartridge (част 1)

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Π»Π΅Π΅Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ. Π“ΠΎΡ‚ΠΈΠ½ΠΎ, Π½Π°Π»ΠΈ?

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ с Ρ‚ΠΎΠ²Π° ΠΈ Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΄Ρ€ΡƒΠ³ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ към топологията.

Π—Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅ Π΄Π° Ρ€Π°Π·Π±ΠΈΡ€Π°ΠΌΠ΅

И ΠΊΠ°ΠΊΠ²ΠΎ стана?

ИмамС Π΄Π²Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ с ansible playbook, ΠΊΠΎΠΉΡ‚ΠΎ настрои нашия ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€. НСка Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ„Π°ΠΉΠ»Π° 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

Π’ΡƒΠΊ Π½Π΅ сС случва Π½ΠΈΡ‰ΠΎ интСрСсно, Π·Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅ ansible-ролята, която сС Π½Π°Ρ€ΠΈΡ‡Π° 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:

$ 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Π·Π° Π΄Π° спрСтС VM, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ с тях.

И ΠΊΠ°ΠΊΠ²ΠΎ сС ΠΊΡ€ΠΈΠ΅ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠ°ΠΊΠ°?

Π’ΡƒΠΊ Ρ‰Π΅ говоря ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ сС случи ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠ°ΠΊΠ° Π½Π° анзибъла ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ СкспСримСнти.

НСка Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ внСдряванСто Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Cartridge ΡΡ‚ΡŠΠΏΠΊΠ° ΠΏΠΎ ΡΡ‚ΡŠΠΏΠΊΠ°.

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ стартиранС Π½Π° инстанции

ΠŸΡŠΡ€Π²ΠΎ трябва Π΄Π° доставитС ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΈ Π΄Π° Π³ΠΎ инсталиратС. Π‘Π΅Π³Π° ролята ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ с RPM ΠΈ DEB ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° стартирамС СкзСмпляритС. Π’ΡƒΠΊ всичко Π΅ ΠΌΠ½ΠΎΠ³ΠΎ просто: всСки СкзСмпляр Π΅ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ systemd-обслуТванС. Говоря Π·Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

$ systemctl start myapp@storage-1

Π’Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ‰Π΅ стартира СкзСмпляра storage-1 прилоТСния myapp. Бтартираният СкзСмпляр Ρ‰Π΅ Ρ‚ΡŠΡ€ΡΠΈ своя конфигурация Π² /etc/tarantool/conf.d/. РСгистрационнитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° СкзСмпляритС ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС видят с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° journald.

Π•Π΄ΠΈΠ½ΠΈΡ‡Π΅Π½ Ρ„Π°ΠΉΠ» /etc/systemd/system/[email protected] Π·Π° систСмна услуга Ρ‰Π΅ бъдС доставСна с ΠΏΠ°ΠΊΠ΅Ρ‚Π°.

Ansible ΠΈΠΌΠ° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π·Π° инсталиранС Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° systemd услуги, Π½ΠΈΠ΅ Π½Π΅ смС измислили Π½ΠΈΡ‰ΠΎ Π½ΠΎΠ²ΠΎ Ρ‚ΡƒΠΊ.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° топологията Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°

И Ρ‚ΡƒΠΊ Π·Π°ΠΏΠΎΡ‡Π²Π° Π½Π°ΠΉ-интСрСсното. Π‘ΡŠΠ³Π»Π°ΡΠ΅Ρ‚Π΅ сС, Π±ΠΈ Π±ΠΈΠ»ΠΎ странно Π΄Π° сС Π·Π°Π½ΠΈΠΌΠ°Π²Π°Ρ‚Π΅ със спСциална ansible-роля Π·Π° инсталиранС Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΈ стартиранС systemd-услуги.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° настроитС ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Ρ€ΡŠΡ‡Π½ΠΎ:

  • ΠŸΡŠΡ€Π²Π°Ρ‚Π° опция: ΠΎΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ ΡƒΠ΅Π± потрСбитСлския интСрфСйс ΠΈ Ρ‰Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ Π²ΡŠΡ€Ρ…Ρƒ Π±ΡƒΡ‚ΠΎΠ½ΠΈΡ‚Π΅. Π—Π° Π΅Π΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ стартиранС Π½Π° няколко инстанции Π΅ доста подходящо.
  • Π’Ρ‚ΠΎΡ€ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ GraphQl API. Π’ΡƒΠΊ Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ Π½Π΅Ρ‰ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ скрипт Π½Π° Python.
  • ВрСтият Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ (Π·Π° силнитС ΠΏΠΎ Π΄ΡƒΡ…): ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°, ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ сС с Π΅Π΄ΠΈΠ½ ΠΎΡ‚ СкзСмпляритС, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ tarantoolctl connect ΠΈ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ΅Ρ‚Π΅ всички Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ†ΠΈΠΈ с ΠΌΠΎΠ΄ΡƒΠ»Π° Lua cartridge.

ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π° Π½Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ΠΈΠ΅ Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ Ρ‚ΠΎΠ²Π°, Π½Π°ΠΉ-Ρ‚Ρ€ΡƒΠ΄Π½Π°Ρ‚Π° част ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π·Π° вас.

Ansible Π²ΠΈ позволява Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ свой собствСн ΠΌΠΎΠ΄ΡƒΠ» ΠΈ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π² роля. ΠΠ°ΡˆΠ°Ρ‚Π° роля ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ‚Π΅Π·ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°.

Как Ρ€Π°Π±ΠΎΡ‚ΠΈ? Π’ΠΈΠ΅ описватС ΠΆΠ΅Π»Π°Π½ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π² Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Π° конфигурация ΠΈ ролята Π΄Π°Π²Π° Π½Π° всСки ΠΌΠΎΠ΄ΡƒΠ» Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Π° сСкция ΠΊΠ°Ρ‚ΠΎ Π²Ρ…ΠΎΠ΄. ΠœΠΎΠ΄ΡƒΠ»ΡŠΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° ΠΈ Π³ΠΎ сравнява с Π²Ρ…ΠΎΠ΄Π°. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΏΡ€Π΅Π· сокСта Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΡ‚ СкзСмпляритС сС изпълнява ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅ΠΆΠ΄Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π² ΠΆΠ΅Π»Π°Π½ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅.

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΎΡ‚

ДнСс ΠΊΠ°Π·Π°Ρ…ΠΌΠ΅ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ…ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅ Π²Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Tarantool Cartridge ΠΈ Π΄Π° настроитС проста топология. Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ Ansible, ΠΌΠΎΡ‰Π΅Π½ инструмСнт, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ лСсСн Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ ΠΈ Π²ΠΈ позволява Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ инфраструктурни възли (Π² нашия случай Ρ‚ΠΎΠ²Π° са СкзСмпляри Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€).

По-Π³ΠΎΡ€Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ…ΠΌΠ΅ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΎΡ‚ΠΎ Π½Π°Ρ‡ΠΈΠ½ΠΈ Π·Π° описаниС Π½Π° конфигурацията Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ansible. Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅, Ρ‡Π΅ стС Π³ΠΎΡ‚ΠΎΠ²ΠΈ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅ Π½Π°ΠΏΡ€Π΅Π΄, Π½Π°ΡƒΡ‡Π΅Ρ‚Π΅ сС Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Π·Π° писанС Π½Π° ΠΊΠ½ΠΈΠ³ΠΈ-ΠΈΠ³Ρ€ΠΈ. МоТС Π΄Π° Π²ΠΈ Π΅ ΠΏΠΎ-ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° управляватС топологията с group_vars ΠΈ host_vars.

БъвсСм скоро Ρ‰Π΅ Π²ΠΈ ΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅Ρ‚Π΅ Π·Π°Π²ΠΈΠ½Π°Π³ΠΈ (ΠΈΠ·Π³ΠΎΠ½ΠΈΡ‚Π΅) СкзСмпляри ΠΎΡ‚ топологията, Π΄Π° стартиратС vshard, Π΄Π° управляватС Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ Π½Π° ΠΎΡ‚ΠΊΠ°Π·, Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ оторизация ΠΈ Π΄Π° ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ‚Π΅ конфигурацията Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°. ΠœΠ΅ΠΆΠ΄ΡƒΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡƒΡ‡ΠΈΡ‚Π΅ сами докумСнтация ΠΈ СкспСримСнтирайтС с промяна Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°.

Ако Π½Π΅Ρ‰ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ, Π±ΡŠΠ΄Π΅Ρ‚Π΅ сигурни ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°ΠΌ Π½ΠΈ Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π©Π΅ Π³ΠΎ Ρ€Π°Π·Π±ΠΈΠ΅ΠΌ Π±ΡŠΡ€Π·ΠΎ!

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€