Π›Π΅Π³ΠΊΠΎ ΠΈ Π½Π΅ΠΏΡ€ΠΈΠ½ΡƒΠΆΠ΄Π΅Π½Π½ΠΎ Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ прилоТСния Π½Π° Tarantool Cartridge (Ρ‡Π°ΡΡ‚ΡŒ 1)

Π›Π΅Π³ΠΊΠΎ ΠΈ Π½Π΅ΠΏΡ€ΠΈΠ½ΡƒΠΆΠ΄Π΅Π½Π½ΠΎ Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ прилоТСния Π½Π° Tarantool Cartridge (Ρ‡Π°ΡΡ‚ΡŒ 1)

ΠœΡ‹ ΡƒΠΆΠ΅ рассказывали ΠΏΡ€ΠΎ Tarantool Cartridge, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ распрСдСлСнныС прилоТСния ΠΈ ΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…. ΠžΡΡ‚Π°Π»ΠΎΡΡŒ всСго Π½ΠΈΡ‡Π΅Π³ΠΎ: Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ эти прилоТСния ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠΌΠΈ. НС Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡ‚Π΅ΡΡŒ, ΠΌΡ‹ всё прСдусмотрСли! ΠœΡ‹ собрали вмСстС всС best practices ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с Tarantool Cartridge ΠΈ написали ansible-Ρ€ΠΎΠ»ΡŒ, которая Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ Π½Π° сСрвСры, стартанСт инстансы, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ ΠΈΡ… Π² кластСр, настроит Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ, забутстрапит vshard, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ автоматичСский failover ΠΈ ΠΏΡ€ΠΎΠΏΠ°Ρ‚Ρ‡ΠΈΡ‚ кластСрный ΠΊΠΎΠ½Ρ„ΠΈΠ³.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ? Π’ΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΡˆΡƒ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚, всё расскаТСм ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ.

НачнСм с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°

ΠœΡ‹ рассмотрим Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ нашСй Ρ€ΠΎΠ»ΠΈ. ПолноС описаниС всСх Π΅Π΅ возмоТностСй ΠΈ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²Ρ‹ всСгда ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Но Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Π΅ΠΌ сто Ρ€Π°Π· ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ нСбольшоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π£ Tarantool Cartridge Π΅ΡΡ‚ΡŒ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΏΠΎ созданию нСбольшого Cartridge-прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°Ρ… Π±Π°Π½ΠΊΠ° ΠΈ ΠΈΡ… счСтах, Π° Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт API для управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‡Π΅Ρ€Π΅Π· HTTP. Для этого Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Π²Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ€ΠΎΠ»ΠΈ: api ΠΈ storage, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒΡΡ инстансам.

Π‘Π°ΠΌ Cartridge Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ процСссы, ΠΎΠ½ лишь прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ для настройки ΡƒΠΆΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… инстансов. ΠžΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ сам: Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сСрвисы ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡŽ. Но ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ всСм этим Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ, Π·Π° нас это сдСлаСт Ansible.

ΠžΡ‚ слов ΠΊ Π΄Π΅Π»Ρƒ

Π˜Ρ‚Π°ΠΊ, Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π΄Π²Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΊΠΈ ΠΈ настроим ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡŽ:

  • PСпликасСт app-1 Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ€ΠΎΠ»ΡŒ api, которая Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Ρ€ΠΎΠ»ΡŒ vshard-router. Π—Π΄Π΅ΡΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ инстанс.
  • РСпликасСт storage-1 Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Ρ€ΠΎΠ»ΡŒ storage (ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ vshard-storage), сюда Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΄Π²Π° инстанса с Ρ€Π°Π·Π½Ρ‹Ρ… машин.

Π›Π΅Π³ΠΊΠΎ ΠΈ Π½Π΅ΠΏΡ€ΠΈΠ½ΡƒΠΆΠ΄Π΅Π½Π½ΠΎ Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ прилоТСния Π½Π° Tarantool Cartridge (Ρ‡Π°ΡΡ‚ΡŒ 1)

Для запуска ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½Π°ΠΌ понадобятся Vagrant ΠΈ 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

УстанавливаСм ansible-Ρ€ΠΎΠ»ΡŒ Tarantool Cartridge:

$ 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.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.

Всё самоС Π²Π°ΠΆΠ½ΠΎΠ΅ (Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, конфигурация кластСра) находится Π² inventory-Ρ„Π°ΠΉΠ»Π΅ 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-ΠΏΠ»Π΅ΠΉΠ±ΡƒΠΊ:

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

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΡ†ΠΈΡŽ --limit. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ инстанс кластСра являСтся хостом Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… Ansible, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ инстансы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ настроСны ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΠ»Π΅ΠΉΠ±ΡƒΠΊΠ°.

Π‘Π½ΠΎΠ²Π° Π·Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π² Web UI 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: ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ инстансами (настройка, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ membership);
  • cartridge-replicasets: ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ (ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСпликасСтами ΠΈ Π±Π΅Π·Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ (expel) инстансов ΠΈΠ· кластСра);
  • cartridge-config: ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ кластСра (vshard bootstrapping, Ρ€Π΅ΠΆΠΈΠΌ автоматичСского failover-Π°, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ конфигурация прилоТСния).

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚ΠΎΠ³Π΄Π° Ρ€ΠΎΠ»ΡŒ пропустит Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. Π’ нашСм случаС ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ, поэтому ΡƒΠΊΠ°Π·Π°Π»ΠΈ cartridge-replicasets.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΡ†Π΅Π½ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π°ΡˆΠΈΡ… стараний. Находим Π½ΠΎΠ²Ρ‹ΠΉ рСпликасСт Π½Π° http://localhost:8181/admin/cluster/dashboard.

Π›Π΅Π³ΠΊΠΎ ΠΈ Π½Π΅ΠΏΡ€ΠΈΠ½ΡƒΠΆΠ΄Π΅Π½Π½ΠΎ Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ прилоТСния Π½Π° Tarantool Cartridge (Ρ‡Π°ΡΡ‚ΡŒ 1)

Π£Ρ€Π°!

ΠŸΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ с ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ инстансов ΠΈ рСпликасСтов ΠΈ посмотритС, ΠΊΠ°ΠΊ мСняСтся топология кластСра. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ эксплуатационныС сцСнарии, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, rolling update ΠΈΠ»ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ memtx_memory. Роль попытаСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π±Π΅Π· рСстарта инстанса, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ Π΄Π°ΡƒΠ½Ρ‚Π°ΠΉΠΌ вашСго прилоТСния.

НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ vagrant halt, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚Π΅ с Π½ΠΈΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

А Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ?

Π—Π΄Π΅ΡΡŒ я расскаТу ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ происходило ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ ansible-Ρ€ΠΎΠ»ΠΈ Π²ΠΎ врСмя Π½Π°ΡˆΠΈΡ… экспСримСнтов.

Рассмотрим ΠΏΠΎ шагам Π΄Π΅ΠΏΠ»ΠΎΠΉ Cartridge-прилоТСния.

Установка ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ старт инстансов

Π‘Π½Π°Ρ‡Π°Π»Π° Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ Π½Π° сСрвСр ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ. БСйчас Ρ€ΠΎΠ»ΡŒ ΡƒΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с RPM- ΠΈ DEB-ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ.

Π”Π°Π»ΡŒΡˆΠ΅ запускаСм инстансы. Π’ΡƒΡ‚ всё ΠΎΡ‡Π΅Π½ΡŒ просто: ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ инстанс β€” это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ systemd-сСрвис. Π Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

$ systemctl start myapp@storage-1

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° запустит инстанс storage-1 прилоТСния myapp. Π—Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΉ инстанс Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ свою ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π² /etc/tarantool/conf.d/. Π›ΠΎΠ³ΠΈ инстанса ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ journald.

Unit-Ρ„Π°ΠΉΠ» /etc/systemd/system/[email protected] для systemd-сСрвиса Π±ΡƒΠ΄Π΅Ρ‚ доставлСн вмСстС с ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ.

Π’ Ansible ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ встроСнныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ для установки ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ управлСния systemd-сСрвисами, Ρ‚ΡƒΡ‚ ΠΌΡ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π½Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π΅Π»ΠΈ.

Настройка Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ кластСра

А Π²ΠΎΡ‚ здСсь начинаСтся самоС интСрСсноС. Π‘ΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, Π±Ρ‹Π»ΠΎ Π±Ρ‹ странно Π·Π°ΠΌΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ со ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ansible-Ρ€ΠΎΠ»ΡŒΡŽ для установки ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ запуска systemd-сСрвисов.

ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ кластСр ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ:

  • ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Web UI ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Π½Π° ΠΊΠ½ΠΎΠΏΠΎΡ‡ΠΊΠΈ. Для Ρ€Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ старта Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… инстансов Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚.
  • Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ GraphQl API. Π’ΡƒΡ‚ ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ скрипт Π½Π° Python.
  • Π’Ρ€Π΅Ρ‚ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ (для ΡΠΈΠ»ΡŒΠ½Ρ‹Ρ… Π΄ΡƒΡ…ΠΎΠΌ): Π·Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π½Π° сСрвСр, коннСктимся ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· инстансов ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ tarantoolctl connect ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ манипуляции с Lua-ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ cartridge.

Основная Π·Π°Π΄Π°Ρ‡Π° нашСго изобрСтСния β€” ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π·Π° вас ΠΈΠΌΠ΅Π½Π½ΠΎ эту, ΡΠ°ΠΌΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Ansible позволяСт Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Ρ€ΠΎΠ»ΠΈ. Наша Ρ€ΠΎΠ»ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ для управлСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ кластСра.

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚? Π’Ρ‹ описываСтС ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ состояниС кластСра Π² Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³Π΅, Π° Ρ€ΠΎΠ»ΡŒ ΠΏΠΎΠ΄Π°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ Π΅Π³ΠΎ ΡΠ΅ΠΊΡ†ΠΈΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. ΠœΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС кластСра ΠΈ сравниваСт Π΅Π³ΠΎ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡˆΠ»ΠΎ Π½Π° Π²Ρ…ΠΎΠ΄. Π”Π°Π»Π΅Π΅ Ρ‡Π΅Ρ€Π΅Π· сокСт ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· инстансов запускаСтся ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ кластСр ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ.

Π˜Ρ‚ΠΎΠ³ΠΈ

БСгодня ΠΌΡ‹ рассказали ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ, ΠΊΠ°ΠΊ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Tarantool Cartridge ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡŽ. Для этого ΠΌΡ‹ использовали Ansible β€” ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отличаСтся простотой Π² использовании ΠΈ позволяСт ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ мноТСство ΡƒΠ·Π»ΠΎΠ² инфраструктуры (Π² нашСм случаС это инстансы кластСра).

Π’Ρ‹ΡˆΠ΅ ΠΌΡ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· мноТСства способов описания ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ кластСра срСдствами Ansible. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΈΠ΄Ρ‚ΠΈ дальшС, ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ best practices ΠΏΠΎ написанию ΠΏΠ»Π΅ΠΉΠ±ΡƒΠΊΠΎΠ². Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ group_vars ΠΈ host_vars.

ΠžΡ‡Π΅Π½ΡŒ скоро ΠΌΡ‹ расскаТСм, ΠΊΠ°ΠΊ Π±Π΅Π·Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π½ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ (expel) инстансы ΠΈΠ· Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π±ΡƒΡ‚ΡΡ‚Ρ€Π°ΠΏΠΈΡ‚ΡŒ vshard, ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ автоматичСского failover-Π°, Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ ΠΏΠ°Ρ‚Ρ‡ΠΈΡ‚ΡŒ кластСрный ΠΊΠΎΠ½Ρ„ΠΈΠ³. А ΠΏΠΎΠΊΠ° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΈ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² кластСра.

Если Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ сообщитС Π½Π°ΠΌ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅. ΠœΡ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ всё Ρ€Π°Π·Ρ€ΡƒΠ»ΠΈΠΌ!

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ