Π›Π°ΠΊΠΎ ΠΈ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ Π½Π° Π’Π°Ρ€Π°Π½Ρ‚ΠΎΠΎΠ» Π¦Π°Ρ€Ρ‚Ρ€ΠΈΠ΄Π³Π΅ (1. Π΄Π΅ΠΎ)

Π›Π°ΠΊΠΎ ΠΈ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ Π½Π° Π’Π°Ρ€Π°Π½Ρ‚ΠΎΠΎΠ» Π¦Π°Ρ€Ρ‚Ρ€ΠΈΠ΄Π³Π΅ (1. Π΄Π΅ΠΎ)

Π’Π΅Ρ› смо Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ Π’Π°Ρ€Π°Π½Ρ‚ΠΎΠΎΠ» Π¦Π°Ρ€Ρ‚Ρ€ΠΈΠ΄Π³Π΅, ΡˆΡ‚ΠΎ Π²Π°ΠΌ ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° Π΄Π° Ρ€Π°Π·Π²ΠΈΡ˜Π΅Ρ‚Π΅ дистрибуиранС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ ΠΈ ΠΏΠ°ΠΊΡƒΡ˜Π΅Ρ‚Π΅ ΠΈΡ…. Π‘Π²Π΅ ΡˆΡ‚ΠΎ јС прСостало јС Π΄Π° Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΎΠ²Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ ΠΈ ΡƒΠΏΡ€Π°Π²Ρ™Π°Ρ‚Π΅ њима. НС Π±Ρ€ΠΈΠ½ΠΈΡ‚Π΅, свС смо ΠΏΠΎΠΊΡ€ΠΈΠ»ΠΈ! Баставили смо свС Π½Π°Ρ˜Π±ΠΎΡ™Π΅ праксС Π·Π° Ρ€Π°Π΄ са Π’Π°Ρ€Π°Π½Ρ‚ΠΎΠΎΠ» Π¦Π°Ρ€Ρ‚Ρ€ΠΈΠ΄Π³Π΅-ΠΎΠΌ ΠΈ писали ансиблС-Ρ€ΠΎΠ»Π΅, који Ρ›Π΅ дистрибуирати ΠΏΠ°ΠΊΠ΅Ρ‚ сСрвСрима, ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°Ρ‚ΠΈ инстанцС, ΡƒΡ˜Π΅Π΄ΠΈΠ½ΠΈΡ‚ΠΈ ΠΈΡ… Ρƒ кластСр, конфигурисати Π°ΡƒΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡ˜Ρƒ, боотстрап всхард, ΠΎΠΌΠΎΠ³ΡƒΡ›ΠΈΡ‚ΠΈ аутоматско ΠΏΡ€Π΅Π±Π°Ρ†ΠΈΠ²Π°ΡšΠ΅ Π½Π° Π³Ρ€Π΅ΡˆΠΊΡƒ ΠΈ Π·Π°ΠΊΡ€ΠΏΠΈΡ‚ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ кластСра.

Π—Π°Π½ΠΈΠΌΡ™ΠΈΠ²ΠΎ? Онда, ΠΌΠΎΠ»ΠΈΠΌ вас, испод Ρ€Π΅Π·Π°, свС Ρ›Π΅ΠΌΠΎ Π²Π°ΠΌ Ρ€Π΅Ρ›ΠΈ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΠΈ.

ΠŸΠΎΡ‡Π½ΠΈΠΌΠΎ са ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ

ΠŸΠΎΠ³Π»Π΅Π΄Π°Ρ›Π΅ΠΌΠΎ само Π΄Π΅ΠΎ функционалности нашС ΡƒΠ»ΠΎΠ³Π΅. Π£Π²Π΅ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ½Π°Ρ›ΠΈ ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚Π°Π½ опис свих ΡšΠ΅Π³ΠΎΠ²ΠΈΡ… могућности ΠΈ ΡƒΠ»Π°Π·Π½ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°. Али Π±ΠΎΡ™Π΅ јС ΠΏΠΎΠΊΡƒΡˆΠ°Ρ‚ΠΈ јСдном Π½Π΅Π³ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΠΈ сто ΠΏΡƒΡ‚Π°, ΠΏΠ° Ρ…Π°Ρ˜Π΄Π΅ Π΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΌΠ°Π»Ρƒ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ.

Π’Π°Ρ€Π°Π½Ρ‚ΠΎΠΎΠ» Π¦Π°Ρ€Ρ‚Ρ€ΠΈΠ΄Π³Π΅ ΠΈΠΌΠ° ΠŸΡ€ΠΈΡ€ΡƒΡ‡Π½ΠΈΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΌΠ°Π»Ρƒ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ Π¦Π°Ρ€Ρ‚Ρ€ΠΈΠ΄Π³Π΅ која Ρ‡ΡƒΠ²Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π΅ ΠΎ ΠΊΠ»ΠΈΡ˜Π΅Π½Ρ‚ΠΈΠΌΠ° Π±Π°Π½ΠΊΠ΅ ΠΈ ΡšΠΈΡ…ΠΎΠ²ΠΈΠΌ Ρ€Π°Ρ‡ΡƒΠ½ΠΈΠΌΠ°, Π° Ρ‚Π°ΠΊΠΎΡ’Π΅ ΠΎΠ±Π΅Π·Π±Π΅Ρ’ΡƒΡ˜Π΅ АПИ Π·Π° ΡƒΠΏΡ€Π°Π²Ρ™Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ†ΠΈΠΌΠ° ΠΏΡ€Π΅ΠΊΠΎ Π₯ВВП-Π°. Π”Π° Π±ΠΈ сС Ρ‚ΠΎ постигло, Π΄ΠΎΠ΄Π°Ρ‚Π°ΠΊ ΠΎΠΏΠΈΡΡƒΡ˜Π΅ Π΄Π²Π΅ ΠΌΠΎΠ³ΡƒΡ›Π΅ ΡƒΠ»ΠΎΠ³Π΅: api ΠΈ storage, који сС ΠΌΠΎΠΆΠ΅ Π΄ΠΎΠ΄Π΅Π»ΠΈΡ‚ΠΈ инстанцама.

Π‘Π°ΠΌ ΠΊΠ΅Ρ€Ρ‚Ρ€ΠΈΡŸ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈ Π½ΠΈΡˆΡ‚Π° ΠΎ Ρ‚ΠΎΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½Π΅ процСсС, Π²Π΅Ρ› само ΠΏΡ€ΡƒΠΆΠ° могућност ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡΠ°ΡšΠ° Π²Π΅Ρ› ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈΡ… инстанци. ΠžΡΡ‚Π°Π»ΠΎ корисник ΠΌΠΎΡ€Π° Π΄Π° ΡƒΡ€Π°Π΄ΠΈ сам: ΡƒΡ€Π΅Π΄ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅, ΠΏΠΎΠΊΡ€Π΅Π½Π΅ услугС ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡˆΠ΅ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ˜Ρƒ. Али Π½Π΅Ρ›Π΅ΠΌΠΎ ΡƒΡ‡ΠΈΠ½ΠΈΡ‚ΠΈ свС ΠΎΠ²ΠΎ; АнсиблС Ρ›Π΅ Ρ‚ΠΎ ΡƒΡ‡ΠΈΠ½ΠΈΡ‚ΠΈ Π·Π° нас.

Од Ρ€Π΅Ρ‡ΠΈ Π΄ΠΎ Π΄Π΅Π»Π°

Π”Π°ΠΊΠ»Π΅, Ρ…Π°Ρ˜Π΄Π΅ Π΄Π° поставимо Π½Π°ΡˆΡƒ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ Π½Π° Π΄Π²Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π΅ машинС ΠΈ поставимо Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½Ρƒ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ˜Ρƒ:

  • РСплицасСт app-1 ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Ρ›Π΅ ΡƒΠ»ΠΎΠ³Ρƒ api, ΡˆΡ‚ΠΎ ΡƒΠΊΡ™ΡƒΡ‡ΡƒΡ˜Π΅ ΡƒΠ»ΠΎΠ³Ρƒ vshard-router. ОвдС Ρ›Π΅ Π±ΠΈΡ‚ΠΈ само јСдан ΠΏΡ€ΠΈΠΌΠ΅Ρ€.
  • РСплицасСт storage-1 ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π° ΡƒΠ»ΠΎΠ³Ρƒ storage (ΠΈ Ρƒ исто Π²Ρ€Π΅ΠΌΠ΅ vshard-storage), ΠΎΠ²Π΄Π΅ Ρ›Π΅ΠΌΠΎ Π΄ΠΎΠ΄Π°Ρ‚ΠΈ Π΄Π²Π΅ инстанцС са Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΡ… машина.

Π›Π°ΠΊΠΎ ΠΈ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ Π½Π° Π’Π°Ρ€Π°Π½Ρ‚ΠΎΠΎΠ» Π¦Π°Ρ€Ρ‚Ρ€ΠΈΠ΄Π³Π΅ (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

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ансиблС ΡƒΠ»ΠΎΠ³Ρƒ Π’Π°Ρ€Π°Π½Ρ‚ΠΎΠΎΠ» Π¦Π°Ρ€Ρ‚Ρ€ΠΈΠ΄Π³Π΅-Π°:

$ ansible-galaxy install tarantool.cartridge,1.0.1

ΠŸΠΎΠΊΡ€Π΅Π½ΠΈΡ‚Π΅ инсталирану ΡƒΠ»ΠΎΠ³Ρƒ:

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

Π§Π΅ΠΊΠ°ΠΌΠΎ Π΄Π° сС књига Π·Π° ΠΈΠ³Ρ€Ρƒ Π·Π°Π²Ρ€ΡˆΠΈ ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π°ΡšΠ΅, ΠΈΠ΄ΠΈ Π½Π° http://localhost:8181/admin/cluster/dashboard ΠΈ ΡƒΠΆΠΈΠ²Π°Ρ˜Ρ‚Π΅ Ρƒ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Ρƒ:

Π›Π°ΠΊΠΎ ΠΈ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ Π½Π° Π’Π°Ρ€Π°Π½Ρ‚ΠΎΠΎΠ» Π¦Π°Ρ€Ρ‚Ρ€ΠΈΠ΄Π³Π΅ (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_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. ΠŸΠΎΡˆΡ‚ΠΎ јС свака инстанца кластСра Π΄ΠΎΠΌΠ°Ρ›ΠΈΠ½ Ρƒ АнсиблС Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΠΌΠ°, ΠΌΠΎΠΆΠ΅ΠΌΠΎ Сксплицитно навСсти којС инстанцС Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡˆΡƒ ΠΏΡ€ΠΈΠ»ΠΈΠΊΠΎΠΌ ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π°ΡšΠ° ΠΏΠ»Π°ΠΈΠ±ΠΎΠΎΠΊ-Π°.

Π’Ρ€Π°Ρ›Π°ΠΌΠΎ сС Π½Π° Π²Π΅Π± кориснички ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ http://localhost:8181/admin/cluster/dashboard ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄Π°Ρ˜Ρ‚Π΅ нашС Π½ΠΎΠ²Π΅ инстанцС:

Π›Π°ΠΊΠΎ ΠΈ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ Π½Π° Π’Π°Ρ€Π°Π½Ρ‚ΠΎΠΎΠ» Π¦Π°Ρ€Ρ‚Ρ€ΠΈΠ΄Π³Π΅ (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: ΡƒΠΏΡ€Π°Π²Ρ™Π°ΡšΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠΌΠ° кластСра (всхард боотстраппинг, аутоматски Ρ€Π΅ΠΆΠΈΠΌ прСласка Π½Π° Π³Ρ€Π΅ΡˆΠΊΡƒ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π°ΡƒΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡ˜Π΅ ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅).

МоТСмо Сксплицитно навСсти који Π΄Π΅ΠΎ посла ΠΆΠ΅Π»ΠΈΠΌΠΎ Π΄Π° ΡƒΡ€Π°Π΄ΠΈΠΌΠΎ, Ρ‚Π°Π΄Π° Ρ›Π΅ ΡƒΠ»ΠΎΠ³Π° прСскочити осталС Π·Π°Π΄Π°Ρ‚ΠΊΠ΅. Π£ нашСм ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ ΠΆΠ΅Π»ΠΈΠΌΠΎ Π΄Π° Ρ€Π°Π΄ΠΈΠΌΠΎ само са Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ˜ΠΎΠΌ, ΠΏΠ° смо ΠΏΡ€Π΅Ρ†ΠΈΠ·ΠΈΡ€Π°Π»ΠΈ cartridge-replicasets.

Π₯ајдС Π΄Π° ΠΏΡ€ΠΎΡ†Π΅Π½ΠΈΠΌΠΎ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π°ΡˆΠΈΡ… Π½Π°ΠΏΠΎΡ€Π°. ΠŸΡ€ΠΎΠ½Π°ΡˆΠ»ΠΈ смо Π½ΠΎΠ²Ρƒ Ρ€Π΅ΠΏΠ»ΠΈΠΊΡƒ http://localhost:8181/admin/cluster/dashboard.

Π›Π°ΠΊΠΎ ΠΈ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ Π½Π° Π’Π°Ρ€Π°Π½Ρ‚ΠΎΠΎΠ» Π¦Π°Ρ€Ρ‚Ρ€ΠΈΠ΄Π³Π΅ (1. Π΄Π΅ΠΎ)

Π£Ρ€Π°!

Π•ΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡˆΠΈΡ‚Π΅ са ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΎΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ инстанци ΠΈ скупова Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° ΠΈ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠΎ сС мСња Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ˜Π° кластСра. ΠœΠΎΠΆΠ΅Ρ‚Π΅ испробати Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π΅ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡ˜Π΅, Π½ΠΏΡ€. Ρ€ΠΎΠ»Π»ΠΈΠ½Π³ ΡƒΠΏΠ΄Π°Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ›Π°Ρ‚ΠΈ memtx_memory. Π£Π»ΠΎΠ³Π° Ρ›Π΅ ΠΏΠΎΠΊΡƒΡˆΠ°Ρ‚ΠΈ Π΄Π° Ρ‚ΠΎ ΡƒΡ€Π°Π΄ΠΈ Π±Π΅Π· ΠΏΠΎΠ½ΠΎΠ²Π½ΠΎΠ³ ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ° инстанцС ΠΊΠ°ΠΊΠΎ Π±ΠΈ смањила ΠΌΠΎΠ³ΡƒΡ›Π΅ Π·Π°ΡΡ‚ΠΎΡ˜Π΅ вашС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅.

НС Π·Π°Π±ΠΎΡ€Π°Π²ΠΈ Π΄Π° Ρ‚Ρ€Ρ‡ΠΈΡˆ vagrant haltΠ΄Π° зауставитС Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π΅ машинС ΠΊΠ°Π΄Π° Π·Π°Π²Ρ€ΡˆΠΈΡ‚Π΅ са Ρ€Π°Π΄ΠΎΠΌ са њима.

А ΡˆΡ‚Π° јС испод Ρ…Π°ΡƒΠ±Π΅?

ОвдС Ρ›Ρƒ Π²Π°ΠΌ Ρ€Π΅Ρ›ΠΈ вишС ΠΎ Ρ‚ΠΎΠΌΠ΅ ΡˆΡ‚Π° сС дСшавало испод Ρ…Π°ΡƒΠ±Π΅ ансиблС ΡƒΠ»ΠΎΠ³Π΅ Ρ‚ΠΎΠΊΠΎΠΌ Π½Π°ΡˆΠΈΡ… СкспСримСната.

ПоглСдајмо ΠΊΠΎΡ€Π°ΠΊ ΠΏΠΎ ΠΊΠΎΡ€Π°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½Ρƒ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ Π¦Π°Ρ€Ρ‚Ρ€ΠΈΠ΄Π³Π΅.

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

ΠŸΡ€Π²ΠΎ ΠΌΠΎΡ€Π°Ρ‚Π΅ испоручити ΠΏΠ°ΠΊΠ΅Ρ‚ Π½Π° сСрвСр ΠΈ инсталирати Π³Π°. Π’Ρ€Π΅Π½ΡƒΡ‚Π½ΠΎ ΡƒΠ»ΠΎΠ³Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π΄ΠΈ са РПМ ΠΈ Π”Π•Π‘ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΠΌΠ°.

Π—Π°Ρ‚ΠΈΠΌ ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ΠΌΠΎ инстанцС. ОвдС јС свС Π²Ρ€Π»ΠΎ Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΎ: свака инстанца јС засСбна systemd-сСрвис. Π΄Π°Ρ›Ρƒ Π²Π°ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

$ systemctl start myapp@storage-1

Ова ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ›Π΅ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ инстанцу storage-1 Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ myapp. ΠŸΠΎΠΊΡ€Π΅Π½ΡƒΡ‚Π° инстанца Ρ›Π΅ Ρ‚Ρ€Π°ΠΆΠΈΡ‚ΠΈ својС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ Π² /etc/tarantool/conf.d/. Π”Π½Π΅Π²Π½ΠΈΡ†ΠΈ инстанци сС ΠΌΠΎΠ³Ρƒ ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°Ρ‚ΠΈ ΠΏΠΎΠΌΠΎΡ›Ρƒ journald.

ΠˆΠ΅Π΄ΠΈΠ½ΠΈΡ‡Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° /etc/systemd/system/[email protected] Π·Π° систСмску услугу Π±ΠΈΡ›Π΅ испоручСн зајСдно са ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ.

АнсиблС ΠΈΠΌΠ° ΡƒΠ³Ρ€Π°Ρ’Π΅Π½Π΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ Π·Π° ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ ΡƒΠΏΡ€Π°Π²Ρ™Π°ΡšΠ΅ систСмским услугама; ΠΎΠ²Π΄Π΅ нисмо измислили Π½ΠΈΡˆΡ‚Π° Π½ΠΎΠ²ΠΎ.

ΠŸΠΎΡΡ‚Π°Π²Ρ™Π°ΡšΠ΅ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ˜Π΅ кластСра

ОвдС Π·Π°Π±Π°Π²Π° ΠΏΠΎΡ‡ΠΈΡšΠ΅. Π‘Π»Π°ΠΆΠ΅ΠΌ сС, Π±ΠΈΠ»ΠΎ Π±ΠΈ Ρ‡ΡƒΠ΄Π½ΠΎ Π·Π°ΠΌΠ°Ρ€Π°Ρ‚ΠΈ сС посСбном ΡƒΠ»ΠΎΠ³ΠΎΠΌ АнсиблС Π·Π° ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ systemd-услугС.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Ρ€ΡƒΡ‡Π½ΠΎ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡˆΠ΅Ρ‚Π΅ кластСр:

  • ΠŸΡ€Π²Π° ΠΎΠΏΡ†ΠΈΡ˜Π°: ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ Π²Π΅Π± кориснички ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ ΠΈ ΠΊΠ»ΠΈΠΊΠ½ΠΈΡ‚Π΅ Π½Π° Π΄ΡƒΠ³ΠΌΠ°Π΄. ΠŸΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ јС ΠΏΠΎΠ³ΠΎΠ΄Π°Π½ Π·Π° Ρ˜Π΅Π΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ инстанци.
  • Π”Ρ€ΡƒΠ³Π° ΠΎΠΏΡ†ΠΈΡ˜Π°: ΠΌΠΎΠΆΠ΅Ρ‚Π΅ користити Π“Ρ€Π°ΠΏΡ…ΠšΠ» АПИ. ОвдС Π²Π΅Ρ› ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ΡˆΡ‚ΠΎ Π°ΡƒΡ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΎΠ²Π°Ρ‚ΠΈ, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, написати скрипту Ρƒ ΠŸΠ°Ρ˜Ρ‚ΠΎΠ½Ρƒ.
  • Π’Ρ€Π΅Ρ›Π° ΠΎΠΏΡ†ΠΈΡ˜Π° (Π·Π° јакС Π²ΠΎΡ™Π΅): ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π° сСрвСр, ΠΏΠΎΠ²Π΅ΠΆΠΈΡ‚Π΅ сС Π½Π° Ρ˜Π΅Π΄Π½Ρƒ ΠΎΠ΄ инстанци користСћи tarantoolctl connect ΠΈ ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅ свС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π΅ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ†ΠΈΡ˜Π΅ са Π›ΡƒΠ° ΠΌΠΎΠ΄ΡƒΠ»ΠΎΠΌ cartridge.

Π“Π»Π°Π²Π½ΠΈ Π·Π°Π΄Π°Ρ‚Π°ΠΊ нашСг проналаска јС Π΄Π° ΡƒΡ€Π°Π΄ΠΈΠΌΠΎ ΡƒΠΏΡ€Π°Π²ΠΎ овај, Π½Π°Ρ˜Ρ‚Π΅ΠΆΠΈ Π΄Π΅ΠΎ посла Π·Π° вас.

АнсиблС Π²Π°ΠΌ ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ сопствСни ΠΌΠΎΠ΄ΡƒΠ» ΠΈ користитС Π³Π° Ρƒ ΡƒΠ»ΠΎΠ·ΠΈ. Наша ΡƒΠ»ΠΎΠ³Π° користи Ρ‚Π°ΠΊΠ²Π΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ Π·Π° ΡƒΠΏΡ€Π°Π²Ρ™Π°ΡšΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠ° кластСра.

Како Ρ‚ΠΎ Ρ€Π°Π΄ΠΈ? Π’ΠΈ ΠΎΠΏΠΈΡΡƒΡ˜Π΅Ρ‚Π΅ ΠΆΠ΅Ρ™Π΅Π½ΠΎ ΡΡ‚Π°ΡšΠ΅ кластСра Ρƒ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΡ˜ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜ΠΈ, Π° ΡƒΠ»ΠΎΠ³Π° дајС сваком ΠΌΠΎΠ΄ΡƒΠ»Ρƒ свој ΠΎΠ΄Π΅Ρ™Π°ΠΊ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ ΠΊΠ°ΠΎ ΡƒΠ»Π°Π·. ΠœΠΎΠ΄ΡƒΠ» ΠΏΡ€ΠΈΠΌΠ° Ρ‚Ρ€Π΅Π½ΡƒΡ‚Π½ΠΎ ΡΡ‚Π°ΡšΠ΅ кластСра ΠΈ ΡƒΠΏΠΎΡ€Π΅Ρ’ΡƒΡ˜Π΅ Π³Π° са ΠΎΠ½ΠΈΠΌ ΡˆΡ‚ΠΎ јС ΠΏΡ€ΠΈΠΌΡ™Π΅Π½ΠΎ ΠΊΠ°ΠΎ ΡƒΠ»Π°Π·. Π—Π°Ρ‚ΠΈΠΌ сС ΠΊΡ€ΠΎΠ· сокСт јСднС ΠΎΠ΄ инстанци ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ ΠΊΠΎΠ΄, који Π΄ΠΎΠ²ΠΎΠ΄ΠΈ кластСр Ρƒ ΠΆΠ΅Ρ™Π΅Π½ΠΎ ΡΡ‚Π°ΡšΠ΅.

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

Данас смо Ρ€Π΅ΠΊΠ»ΠΈ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ ΡΠ²ΠΎΡ˜Ρƒ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ Π½Π° Π’Π°Ρ€Π°Π½Ρ‚ΠΎΠΎΠ» Π¦Π°Ρ€Ρ‚Ρ€ΠΈΠ΄Π³Π΅ ΠΈ поставитС Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½Ρƒ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ˜Ρƒ. Π”Π° бисмо Ρ‚ΠΎ ΡƒΡ€Π°Π΄ΠΈΠ»ΠΈ, користили смо АнсиблС - ΠΌΠΎΡ›Π°Π½ Π°Π»Π°Ρ‚ који јС Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π°Π½ Π·Π° ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ ΠΈ који Π²Π°ΠΌ ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° Π΄Π° истоврСмСно ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡˆΠ΅Ρ‚Π΅ ΠΌΠ½ΠΎΠ³Π΅ инфраструктурнС Ρ‡Π²ΠΎΡ€ΠΎΠ²Π΅ (Ρƒ нашСм ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ, инстанцС кластСра).

Изнад смо ΠΏΠΎΠ³Π»Π΅Π΄Π°Π»ΠΈ јСдан ΠΎΠ΄ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π½Π°Ρ‡ΠΈΠ½Π° Π΄Π° опишСмо ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ кластСра користСћи АнсиблС. Када осСтитС Π΄Π° стС спрСмни Π΄Π° ΠΊΡ€Π΅Π½Π΅Ρ‚Π΅ Π΄Π°Ρ™Π΅, истраТитС Π½Π°Ρ˜Π±ΠΎΡ™Π΅ праксС ΠΎ ΠΏΠΈΡΠ°ΡšΡƒ ΠΈΠ³Ρ€Π°ΠΎΠ½ΠΈΡ†Π°. МоТда Ρ›Π΅ Π²Π°ΠΌ Π±ΠΈΡ‚ΠΈ лакшС ΡƒΠΏΡ€Π°Π²Ρ™Π°Ρ‚ΠΈ својом Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ˜ΠΎΠΌ користСћи group_vars ΠΈ host_vars.

Ускоро Ρ›Π΅ΠΌΠΎ Π²Π°ΠΌ Ρ€Π΅Ρ›ΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π° Ρ‚Ρ€Π°Ρ˜Π½ΠΎ ΠΈΠ·Π±Ρ€ΠΈΡˆΠ΅Ρ‚Π΅ (ΠΈΠ·Π±Π°Ρ†ΠΈΡ‚Π΅) инстанцС ΠΈΠ· Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ˜Π΅, ΠΏΠΎΠΊΡ€Π΅Π½Π΅Ρ‚Π΅ всхард, ΡƒΠΏΡ€Π°Π²Ρ™Π°Ρ‚Π΅ аутоматским Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ прСласка Π½Π° Π³Ρ€Π΅ΡˆΠΊΡƒ, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡˆΠ΅Ρ‚Π΅ Π°ΡƒΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡ˜Ρƒ ΠΈ Π·Π°ΠΊΡ€ΠΏΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ кластСра. Π£ ΠΌΠ΅Ρ’ΡƒΠ²Ρ€Π΅ΠΌΠ΅Π½Ρƒ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сами Π΄Π° ΡƒΡ‡ΠΈΡ‚Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° ΠΈ СкспСримСнтисати са ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€Π° кластСра.

Ако Π½Π΅ΡˆΡ‚ΠΎ Π½Π΅ Ρ€Π°Π΄ΠΈ, ΠΎΠ±Π°Π²Π΅Π·Π½ΠΎ информисати нас ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Π‘Ρ€Π·ΠΎ Ρ›Π΅ΠΌΠΎ свС срСдити!

Π˜Π·Π²ΠΎΡ€: Π²Π²Π².Ρ…Π°Π±Ρ€.Ρ†ΠΎΠΌ

Π”ΠΎΠ΄Π°Ρ˜ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€