
ΠΡ ΡΠΆΠ΅ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π»ΠΈ ΠΏΡΠΎ , ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ ΠΈΡ . ΠΡΡΠ°Π»ΠΎΡΡ Π²ΡΠ΅Π³ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ: Π½Π°ΡΡΠΈΡΡΡΡ Π΄Π΅ΠΏΠ»ΠΎΠΈΡΡ ΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΈΠΌΠΈ. ΠΠ΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡΠ΅ΡΡ, ΠΌΡ Π²ΡΡ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ! ΠΡ ΡΠΎΠ±ΡΠ°Π»ΠΈ Π²ΠΌΠ΅ΡΡΠ΅ Π²ΡΠ΅ best practices ΠΏΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ Tarantool Cartridge ΠΈ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ , ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°Π·Π»ΠΎΠΆΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΡ, ΡΡΠ°ΡΡΠ°Π½Π΅Ρ ΠΈΠ½ΡΡΠ°Π½ΡΡ, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡ ΠΈΡ Π² ΠΊΠ»Π°ΡΡΠ΅Ρ, Π½Π°ΡΡΡΠΎΠΈΡ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ, Π·Π°Π±ΡΡΡΡΡΠ°ΠΏΠΈΡ vshard, Π²ΠΊΠ»ΡΡΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ failover ΠΈ ΠΏΡΠΎΠΏΠ°ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠΈΠ³.
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ? Π’ΠΎΠ³Π΄Π° ΠΏΡΠΎΡΡ ΠΏΠΎΠ΄ ΠΊΠ°Ρ, Π²ΡΡ ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅ΠΌ ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ.
ΠΠ°ΡΠ½Π΅ΠΌ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°
ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ Π½Π°ΡΠ΅ΠΉ ΡΠΎΠ»ΠΈ. ΠΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π²ΡΠ΅Ρ Π΅Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΈ Π²Ρ ΠΎΠ΄Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π²Ρ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ Π² . ΠΠΎ Π»ΡΡΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ, ΡΠ΅ΠΌ ΡΡΠΎ ΡΠ°Π· ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π°Π²Π°ΠΉΡΠ΅ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
Π£ Tarantool Cartridge Π΅ΡΡΡ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ Cartridge-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Ρ
ΡΠ°Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°Ρ
Π±Π°Π½ΠΊΠ° ΠΈ ΠΈΡ
ΡΡΠ΅ΡΠ°Ρ
, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ API Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΠΌΠΈ ΡΠ΅ΡΠ΅Π· HTTP. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π΄Π²Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΠΎΠ»ΠΈ: api ΠΈ storage, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π½Π°Π·Π½Π°ΡΠ°ΡΡΡΡ ΠΈΠ½ΡΡΠ°Π½ΡΠ°ΠΌ.
Π‘Π°ΠΌ Cartridge Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ, ΠΎΠ½ Π»ΠΈΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠΆΠ΅ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ ΠΈΠ½ΡΡΠ°Π½ΡΠΎΠ². ΠΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΌ: ΡΠ°Π·Π»ΠΎΠΆΠΈΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ΅ΡΠ²ΠΈΡΡ ΠΈ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ. ΠΠΎ ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π²ΡΠ΅ΠΌ ΡΡΠΈΠΌ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ, Π·Π° Π½Π°Ρ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π΅Ρ Ansible.
ΠΡ ΡΠ»ΠΎΠ² ΠΊ Π΄Π΅Π»Ρ
ΠΡΠ°ΠΊ, Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π΄Π²Π΅ Π²ΠΈΡΡΡΠ°Π»ΠΊΠΈ ΠΈ Π½Π°ΡΡΡΠΎΠΈΠΌ ΠΏΡΠΎΡΡΡΡ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ:
- PΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠ΅Ρ
app-1Π±ΡΠ΄Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠΎΠ»Ρapi, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΡΠΎΠ»Ρvshard-router. ΠΠ΄Π΅ΡΡ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ½ΡΡΠ°Π½Ρ. - Π Π΅ΠΏΠ»ΠΈΠΊΠ°ΡΠ΅Ρ
storage-1ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΠΎΠ»Ρstorage(ΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎvshard-storage), ΡΡΠ΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΄Π²Π° ΠΈΠ½ΡΡΠ°Π½ΡΠ° Ρ ΡΠ°Π·Π½ΡΡ ΠΌΠ°ΡΠΈΠ½.

ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ ΠΈ (Π²Π΅ΡΡΠΈΠΈ 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-ΡΠΎΠ»Ρ Tarantool Cartridge:
$ ansible-galaxy install tarantool.cartridge,1.0.1ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ ΡΠΎΠ»Ρ:
$ ansible-playbook -i hosts.yml playbook.ymlΠΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΡ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠ»Π΅ΠΉΠ±ΡΠΊΠ°, ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ Π½Π° ΠΈ Π½Π°ΡΠ»Π°ΠΆΠ΄Π°Π΅ΠΌΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ:

ΠΠΎΠΆΠ½ΠΎ Π»ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅. ΠΡΡΡΠΎ, ΠΏΡΠ°Π²Π΄Π°?
Π ΡΠ΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌΡΡ, ΠΊΠ°ΠΊ Ρ ΡΡΠΈΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΠΈ Π·Π°ΠΎΠ΄Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠ΅Ρ Π² ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ.
ΠΠ°ΡΠΈΠ½Π°Π΅ΠΌ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ
ΠΡΠ°ΠΊ, ΡΡΠΎ ΠΆΠ΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ?
ΠΡ ΠΏΠΎΠ΄Π½ΡΠ»ΠΈ Π΄Π²Π΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ ΠΈ Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ 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.
ΠΡΡ ΡΠ°ΠΌΠΎΠ΅ Π²Π°ΠΆΠ½ΠΎΠ΅ (Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°) Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² -ΡΠ°ΠΉΠ»Π΅ 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 ΠΈ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌ Π½Π°ΡΠΈ Π½ΠΎΠ²ΡΠ΅ ΠΈΠ½ΡΡΠ°Π½ΡΡ:

ΠΠ΅ Π±ΡΠ΄Π΅ΠΌ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π½Π° Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΠΎΠΌ ΠΈ ΠΎΡΠ²ΠΎΠΈΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ.
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ
ΠΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΠΌ Π½Π°ΡΠΈ Π½ΠΎΠ²ΡΠ΅ ΠΈΠ½ΡΡΠ°Π½ΡΡ Π² ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠ΅Ρ 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.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΎΡΠ΅Π½ΠΈΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π°ΡΠΈΡ ΡΡΠ°ΡΠ°Π½ΠΈΠΉ. ΠΠ°Ρ ΠΎΠ΄ΠΈΠΌ Π½ΠΎΠ²ΡΠΉ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠ΅Ρ Π½Π° .

Π£ΡΠ°!
ΠΠΎΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΡΠΉΡΠ΅ Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈΠ½ΡΡΠ°Π½ΡΠΎΠ² ΠΈ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠ΅ΡΠΎΠ² ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅, ΠΊΠ°ΠΊ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ»ΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ 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/myapp@.sevice Π΄Π»Ρ systemd-ΡΠ΅ΡΠ²ΠΈΡΠ° Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ.
Π Ansible ΠΈΠΌΠ΅ΡΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ systemd-ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ, ΡΡΡ ΠΌΡ Π½ΠΈΡΠ΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π½Π΅ ΠΈΠ·ΠΎΠ±ΡΠ΅Π»ΠΈ.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°
Π Π²ΠΎΡ Π·Π΄Π΅ΡΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΡΠ°ΠΌΠΎΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅. Π‘ΠΎΠ³Π»Π°ΡΠΈΡΠ΅ΡΡ, Π±ΡΠ»ΠΎ Π±Ρ ΡΡΡΠ°Π½Π½ΠΎ Π·Π°ΠΌΠΎΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ ΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ansible-ΡΠΎΠ»ΡΡ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΈ Π·Π°ΠΏΡΡΠΊΠ° systemd-ΡΠ΅ΡΠ²ΠΈΡΠΎΠ².
ΠΠ°ΡΡΡΠΎΠΈΡΡ ΠΊΠ»Π°ΡΡΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΡΠ½ΡΡ:
- ΠΠ΅ΡΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ: ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌ Web UI ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Π½Π° ΠΊΠ½ΠΎΠΏΠΎΡΠΊΠΈ. ΠΠ»Ρ ΡΠ°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠ° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΠ½ΡΡΠ°Π½ΡΠΎΠ² Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ.
- ΠΡΠΎΡΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ: ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ GraphQl API. Π’ΡΡ ΡΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΊΡΠΈΠΏΡ Π½Π° Python.
- Π’ΡΠ΅ΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ (Π΄Π»Ρ ΡΠΈΠ»ΡΠ½ΡΡ
Π΄ΡΡ
ΠΎΠΌ): Π·Π°Ρ
ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ, ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΈΠΌΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· ΠΈΠ½ΡΡΠ°Π½ΡΠΎΠ² ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ
tarantoolctl connectΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΈ Ρ Lua-ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌcartridge.
ΠΡΠ½ΠΎΠ²Π½Π°Ρ Π·Π°Π΄Π°ΡΠ° Π½Π°ΡΠ΅Π³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ΅ΡΠ΅Π½ΠΈΡ β ΡΠ΄Π΅Π»Π°ΡΡ Π·Π° Π²Π°Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΡ, ΡΠ°ΠΌΡΡ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠ°ΡΡΡ ΡΠ°Π±ΠΎΡΡ.
Ansible ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² ΡΠΎΠ»ΠΈ. ΠΠ°ΡΠ° ΡΠΎΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ°ΠΊΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°.
ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ? ΠΡ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΠ΅ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π² Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠΈΠ³Π΅, Π° ΡΠΎΠ»Ρ ΠΏΠΎΠ΄Π°Π΅Ρ Π½Π° Π²Ρ ΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π΅Π³ΠΎ ΡΠ΅ΠΊΡΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΠΎΠ΄ΡΠ»Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ Π΅Π³ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΡΠΈΡΠ»ΠΎ Π½Π° Π²Ρ ΠΎΠ΄. ΠΠ°Π»Π΅Π΅ ΡΠ΅ΡΠ΅Π· ΡΠΎΠΊΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΈΠ½ΡΡΠ°Π½ΡΠΎΠ² Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅Ρ ΠΊ Π½ΡΠΆΠ½ΠΎΠΌΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ.
ΠΡΠΎΠ³ΠΈ
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΌΡ ΡΠ°ΡΡΠΊΠ°Π·Π°Π»ΠΈ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ, ΠΊΠ°ΠΊ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΡΡ Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Tarantool Cartridge ΠΈ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΡΠΎΡΡΡΡ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Ansible β ΠΌΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΏΡΠΎΡΡΠΎΡΠΎΠΉ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ·Π»ΠΎΠ² ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ (Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ ΠΈΠ½ΡΡΠ°Π½ΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°).
ΠΡΡΠ΅ ΠΌΡ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈΡΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Ansible. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ ΠΏΠΎΠΉΠΌΠ΅ΡΠ΅, ΡΡΠΎ Π³ΠΎΡΠΎΠ²Ρ ΠΈΠ΄ΡΠΈ Π΄Π°Π»ΡΡΠ΅, ΠΈΠ·ΡΡΠΈΡΠ΅ ΠΏΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΠ»Π΅ΠΉΠ±ΡΠΊΠΎΠ². ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ΄ΠΎΠ±Π½Π΅Π΅ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ group_vars ΠΈ host_vars.
ΠΡΠ΅Π½Ρ ΡΠΊΠΎΡΠΎ ΠΌΡ ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ Π±Π΅Π·Π²ΠΎΠ·Π²ΡΠ°ΡΠ½ΠΎ ΡΠ΄Π°Π»ΡΡΡ (expel) ΠΈΠ½ΡΡΠ°Π½ΡΡ ΠΈΠ· ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π±ΡΡΡΡΡΠ°ΠΏΠΈΡΡ vshard, ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ΅ΠΆΠΈΠΌΠΎΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ failover-Π°, Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΏΠ°ΡΡΠΈΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠΈΠ³. Π ΠΏΠΎΠΊΠ° Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ·ΡΡΠ°ΡΡ ΠΈ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΊΠ»Π°ΡΡΠ΅ΡΠ°.
ΠΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΠΌ ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅. ΠΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎ Π²ΡΡ ΡΠ°Π·ΡΡΠ»ΠΈΠΌ!
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com
