ΠΡ ΡΠΆΠ΅ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π»ΠΈ ΠΏΡΠΎ
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ? Π’ΠΎΠ³Π΄Π° ΠΏΡΠΎΡΡ ΠΏΠΎΠ΄ ΠΊΠ°Ρ, Π²ΡΡ ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅ΠΌ ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ.
ΠΠ°ΡΠ½Π΅ΠΌ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°
ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ Π½Π°ΡΠ΅ΠΉ ΡΠΎΠ»ΠΈ. ΠΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
Π΅Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΈ Π²Ρ
ΠΎΠ΄Π½ΡΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π²Ρ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ Π²
Π£ Tarantool Cartridge Π΅ΡΡΡ api
ΠΈ storage
, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π½Π°Π·Π½Π°ΡΠ°ΡΡΡΡ ΠΈΠ½ΡΡΠ°Π½ΡΠ°ΠΌ.
Π‘Π°ΠΌ Cartridge Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ, ΠΎΠ½ Π»ΠΈΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠΆΠ΅ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ ΠΈΠ½ΡΡΠ°Π½ΡΠΎΠ². ΠΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΌ: ΡΠ°Π·Π»ΠΎΠΆΠΈΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ΅ΡΠ²ΠΈΡΡ ΠΈ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ. ΠΠΎ ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π²ΡΠ΅ΠΌ ΡΡΠΈΠΌ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ, Π·Π° Π½Π°Ρ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π΅Ρ Ansible.
ΠΡ ΡΠ»ΠΎΠ² ΠΊ Π΄Π΅Π»Ρ
ΠΡΠ°ΠΊ, Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π΄Π²Π΅ Π²ΠΈΡΡΡΠ°Π»ΠΊΠΈ ΠΈ Π½Π°ΡΡΡΠΎΠΈΠΌ ΠΏΡΠΎΡΡΡΡ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ:
- PΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠ΅Ρ
app-1
Π±ΡΠ΄Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠΎΠ»Ρapi
, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΡΠΎΠ»Ρvshard-router
. ΠΠ΄Π΅ΡΡ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ½ΡΡΠ°Π½Ρ. - Π Π΅ΠΏΠ»ΠΈΠΊΠ°ΡΠ΅Ρ
storage-1
ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΠΎΠ»Ρstorage
(ΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎvshard-storage
), ΡΡΠ΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΄Π²Π° ΠΈΠ½ΡΡΠ°Π½ΡΠ° Ρ ΡΠ°Π·Π½ΡΡ ΠΌΠ°ΡΠΈΠ½.
ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ
Π‘Π°ΠΌΠ° ΡΠΎΠ»Ρ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π²
Π‘ΠΊΠ»ΠΎΠ½ΠΈΡΡΠ΅ΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ:
$ 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/[email protected]
Π΄Π»Ρ 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