ΠΠ΅ΡΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΡ
ΠΌΠ΅ Π·Π°
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ? Π’ΠΎΠ³Π°Π²Π° ΠΏΠΈΡΠ°ΠΌ ΠΏΠΎΠ΄ ΡΠ°Π·ΡΠ΅Π·Π°, ΡΠ΅ ΠΊΠ°ΠΆΠ΅ΠΌ ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π²ΡΠΈΡΠΊΠΎ.
ΠΠ° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Ρ Π΅Π΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ
Π©Π΅ ΠΏΠΎΠΊΡΠΈΠ΅ΠΌ ΡΠ°ΠΌΠΎ ΡΠ°ΡΡ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° Π½Π° Π½Π°ΡΠ°ΡΠ° ΡΠΎΠ»Ρ. ΠΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΏΡΠ»Π½ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ Π½Π΅Π³ΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Π²Ρ
ΠΎΠ΄Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π²
Tarantool Cartridge ΠΈΠΌΠ° api
ΠΈ storage
ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈ Π½Π° ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠΈ.
Π‘Π°ΠΌΠ°ΡΠ° ΠΊΠ°ΡΠ΅ΡΠ° Π½Π΅ ΠΊΠ°Π·Π²Π° Π½ΠΈΡΠΎ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ, ΡΡ ΡΠ°ΠΌΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π²Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΈ. ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ ΡΡΡΠ±Π²Π° ΡΠ°ΠΌ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΎΡΡΠ°Π½Π°Π»ΠΎΡΠΎ: Π΄Π° ΡΠ°Π·Π»ΠΎΠΆΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ° ΡΡΠ»ΡΠ³ΠΈΡΠ΅ ΠΈ Π΄Π° Π½Π°ΡΡΡΠΎΠΈ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡΡΠ°. ΠΠΎ Π½ΠΈΠ΅ Π½ΡΠΌΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π°, Ansible ΡΠ΅ Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈ Π²ΠΌΠ΅ΡΡΠΎ Π½Π°Ρ.
ΠΡ Π΄ΡΠΌΠΈ ΠΊΡΠΌ Π΄Π΅Π»Π°
Π ΡΠ°ΠΊΠ°, Π½Π΅ΠΊΠ° Π²Π½Π΅Π΄ΡΠΈΠΌ Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π΄Π²Π΅ Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ ΠΈ Π΄Π° Π½Π°ΡΡΡΠΎΠΈΠΌ ΠΏΡΠΎΡΡΠ° ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ:
- ΠΠ°Π±ΠΎΡ ΠΎΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ
app-1
ΡΠ΅ ΠΈΠ³ΡΠ°Π΅ ΡΠΎΠ»ΡΡΠ°api
ΠΊΠΎΠ΅ΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π° ΡΠΎΠ»ΡΡΠ°vshard-router
. Π’ΡΠΊ ΡΠ΅ ΠΈΠΌΠ° ΡΠ°ΠΌΠΎ Π΅Π΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ. - replicaset
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
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° Tarantool Cartridge ansible ΡΠΎΠ»Ρ:
$ ansible-galaxy install tarantool.cartridge,1.0.1
Π‘ΡΠ°ΡΡΠΈΡΠ°ΠΉΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π°ΡΠ° ΡΠΎΠ»Ρ:
$ ansible-playbook -i hosts.yml playbook.yml
ΠΡΠ°ΠΊΠ²Π°ΠΌΠ΅ ΠΊΡΠ°Ρ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠ½ΠΈΠ³Π°ΡΠ°, ΠΎΡΠΈΠ΄Π΅ΡΠ΅ Π½Π°
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·Π»Π΅Π΅ΡΠ΅ Π΄Π°Π½Π½ΠΈ. ΠΠΎΡΠΈΠ½ΠΎ, Π½Π°Π»ΠΈ?
Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° ΡΠ°Π±ΠΎΡΠΈΠΌ Ρ ΡΠΎΠ²Π° ΠΈ Π² ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΄ΡΡΠ³ Π½Π°Π±ΠΎΡ ΠΎΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ ΠΊΡΠΌ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡΡΠ°.
ΠΠ°ΠΏΠΎΡΠ²Π°ΠΌΠ΅ Π΄Π° ΡΠ°Π·Π±ΠΈΡΠ°ΠΌΠ΅
Π ΠΊΠ°ΠΊΠ²ΠΎ ΡΡΠ°Π½Π°?
ΠΠΌΠ°ΠΌΠ΅ Π΄Π²Π΅ Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ ΠΈ ΡΠ°Π±ΠΎΡΠΈΠΌ Ρ 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, ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΡΠΈΡΠ½ΠΎ Π΄Π° ΠΏΠΎΡΠΎΡΠΈΠΌ ΠΊΠΎΠΈ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΌΠ΅ ΠΊΠ½ΠΈΠ³Π°ΡΠ° Π·Π° ΠΈΠ³ΡΠ°.
ΠΠ°Π·Π°Π΄ ΠΊΡΠΌ ΡΠ΅Π± ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
ΠΡΠΌΠ° Π΄Π° ΠΏΠΎΡΠΈΠ²Π°ΠΌΠ΅ Π½Π° Π»Π°Π²ΡΠΈΡΠ΅ ΡΠΈ ΠΈ ΡΠ΅ ΠΎΠ²Π»Π°Π΄Π΅Π΅ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡΡΠ°.
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡΡΠ°
ΠΠ΅ΠΊΠ° ΠΎΠ±Π΅Π΄ΠΈΠ½ΠΈΠΌ Π½Π°ΡΠΈΡΠ΅ Π½ΠΎΠ²ΠΈ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΈ Π² Π½Π°Π±ΠΎΡ ΠΎΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ 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
.
ΠΠ΅ΠΊΠ° Π΄Π° ΠΎΡΠ΅Π½ΠΈΠΌ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΎΡ Π½Π°ΡΠΈΡΠ΅ ΡΡΠΈΠ»ΠΈΡ. ΠΠ°ΠΌΠΈΡΠ°Π½Π΅ Π½Π° Π½ΠΎΠ² ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°Ρ
Π£ΡΠ°!
ΠΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠ°ΠΉΡΠ΅ Ρ ΠΏΡΠ΅ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π²Π°ΡΠΈΡΠ΅ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΈ ΠΈ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈ ΠΈ Π²ΠΈΠΆΡΠ΅ ΠΊΠ°ΠΊ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Ρ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ°. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΠΏΠΈΡΠ°ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΈ, Π½Π°ΠΏΡ. 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
ΠΈ ΠΈΠ·Π²ΡΡΡΠ΅ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΈΠΈ Ρ ΠΌΠΎΠ΄ΡΠ»Π° Luacartridge
.
ΠΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° Π½Π° Π½Π°ΡΠ΅ΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠΎΠ²Π°, Π½Π°ΠΉ-ΡΡΡΠ΄Π½Π°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π·Π° Π²Π°Ρ.
Ansible Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΠΌΠΎΠ΄ΡΠ» ΠΈ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π² ΡΠΎΠ»Ρ. ΠΠ°ΡΠ°ΡΠ° ΡΠΎΠ»Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅Π·ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ°.
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ? ΠΠΈΠ΅ ΠΎΠΏΠΈΡΠ²Π°ΡΠ΅ ΠΆΠ΅Π»Π°Π½ΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° Π² Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈ ΡΠΎΠ»ΡΡΠ° Π΄Π°Π²Π° Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΌΠΎΠ΄ΡΠ» Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½Π° ΡΠ΅ΠΊΡΠΈΡ ΠΊΠ°ΡΠΎ Π²Ρ ΠΎΠ΄. ΠΠΎΠ΄ΡΠ»ΡΡ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΡΠ΅ΠΊΡΡΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΈ Π³ΠΎ ΡΡΠ°Π²Π½ΡΠ²Π° Ρ Π²Ρ ΠΎΠ΄Π°. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΡΠ΅Π· ΡΠΎΠΊΠ΅ΡΠ° Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΡ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΈΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠΈΠ²Π΅ΠΆΠ΄Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° Π² ΠΆΠ΅Π»Π°Π½ΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅.
Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΎΡ
ΠΠ½Π΅Ρ ΠΊΠ°Π·Π°Ρ ΠΌΠ΅ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅ Π²Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Tarantool Cartridge ΠΈ Π΄Π° Π½Π°ΡΡΡΠΎΠΈΡΠ΅ ΠΏΡΠΎΡΡΠ° ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ. ΠΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΠΎΠ²Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΌΠ΅ Ansible, ΠΌΠΎΡΠ΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠΎΠΉΡΠΎ Π΅ Π»Π΅ΡΠ΅Π½ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ ΠΈ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΠΈ Π²ΡΠ·Π»ΠΈ (Π² Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΠΎΠ²Π° ΡΠ° Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΈ Π½Π° ΠΊΠ»ΡΡΡΠ΅Ρ).
ΠΠΎ-Π³ΠΎΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°Ρ
ΠΌΠ΅ Π΅Π΄ΠΈΠ½ ΠΎΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠΎ Π½Π°ΡΠΈΠ½ΠΈ Π·Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Ansible. Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅, ΡΠ΅ ΡΡΠ΅ Π³ΠΎΡΠΎΠ²ΠΈ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅ Π½Π°ΠΏΡΠ΅Π΄, Π½Π°ΡΡΠ΅ΡΠ΅ ΡΠ΅ group_vars
ΠΈ host_vars
.
Π‘ΡΠ²ΡΠ΅ΠΌ ΡΠΊΠΎΡΠΎ ΡΠ΅ Π²ΠΈ ΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° ΠΏΡΠ΅ΠΌΠ°Ρ
Π½Π΅ΡΠ΅ Π·Π°Π²ΠΈΠ½Π°Π³ΠΈ (ΠΈΠ·Π³ΠΎΠ½ΠΈΡΠ΅) Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΈ ΠΎΡ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡΡΠ°, Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ vshard, Π΄Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΎΡΠΊΠ°Π·, Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ ΠΎΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΠΈ Π΄Π° ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ°. ΠΠ΅ΠΆΠ΄ΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠΈΡΠ΅ ΡΠ°ΠΌΠΈ
ΠΠΊΠΎ Π½Π΅ΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ, Π±ΡΠ΄Π΅ΡΠ΅ ΡΠΈΠ³ΡΡΠ½ΠΈ
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com