์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ด์ผ๊ธฐํ์ต๋๋ค.
ํฅ๋ฏธ๋ก์ด? ๊ทธ๋ฐ ๋ค์ ์ปท ์๋์ ๋ฌผ์ด ๋ณด๋ฉด ๋ชจ๋ ๊ฒ์ ๋งํ๊ณ ๋ณด์ฌ์ค ๊ฒ์ ๋๋ค.
์๋ถํฐ ์์ํด ๋ณด๊ฒ ์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ญํ ์ ๊ธฐ๋ฅ ์ค ์ผ๋ถ๋ง ๋ค๋ฃฐ ๊ฒ์
๋๋ค. ๋ชจ๋ ๊ธฐ๋ฅ๊ณผ ์
๋ ฅ ๋งค๊ฐ๋ณ์์ ๋ํ ์ ์ฒด ์ค๋ช
์ ์ธ์ ๋ ์ง ๋ค์์์ ํ์ธํ ์ ์์ต๋๋ค.
Tarantool ์นดํธ๋ฆฌ์ง์๋ api
ะธ storage
์ธ์คํด์ค์ ํ ๋นํ ์ ์์ต๋๋ค.
์นดํธ๋ฆฌ์ง ์์ฒด๋ ํ๋ก์ธ์ค๋ฅผ ์์ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์๋ฌด ๋ง๋ ํ์ง ์์ผ๋ฉฐ ์ด๋ฏธ ์คํ ์ค์ธ ์ธ์คํด์ค๋ฅผ ๊ตฌ์ฑํ๋ ๊ธฐ๋ฅ๋ง ์ ๊ณตํฉ๋๋ค. ๊ตฌ์ฑ ํ์ผ ๋ถํด, ์๋น์ค ์์, ํ ํด๋ก์ง ์ค์ ๋ฑ ๋๋จธ์ง ์์ ์ ์ฌ์ฉ์๊ฐ ์ง์ ์ํํด์ผ ํฉ๋๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๋ ์ด ๋ชจ๋ ์์ ์ ์ํํ์ง ์์ ๊ฒ์ด๋ฉฐ Ansible์ด ์ฐ๋ฆฌ๋ฅผ ์ํด ์ด๋ฅผ ์ํํ ๊ฒ์ ๋๋ค.
์ฆ์์์ ํ๋์ผ๋ก
์ด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ๊ฐ์ ๊ฐ์ ๋จธ์ ์ ๋ฐฐํฌํ๊ณ ๊ฐ๋จํ ํ ํด๋ก์ง๋ฅผ ์ค์ ํด ๋ณด๊ฒ ์ต๋๋ค.
- ๋ณต์ ๋ณธ
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
Tarantool Cartridge ansible ์ญํ ์ ์ค์นํฉ๋๋ค.
$ ansible-galaxy install tarantool.cartridge,1.0.1
์ค์น๋ ์ญํ ์ ์คํํฉ๋๋ค.
$ ansible-playbook -i hosts.yml playbook.yml
ํ๋ ์ด๋ถ ์คํ์ด ๋๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค.
๋ฐ์ดํฐ๋ฅผ ์์๋ถ์ ์ ์์ต๋๋ค. ๋ฉ์ง์ฃ ?
์ด์ ์ด ์์ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ณ ๋์์ ํ ํด๋ก์ง์ ๋ค๋ฅธ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์ถ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ดํดํ๊ธฐ ์์ํฉ๋๋ค
๊ทธ๋์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์?
์ฐ๋ฆฌ๋ ๋ ๊ฐ์ VM์ ์ค๋นํ๊ณ ํด๋ฌ์คํฐ๋ฅผ ์ค์ ํ๋ 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-role์ ์์ํฉ๋๋ค. 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 ์ฉ์ด๋ก ํธ์คํธ์ด๋ฏ๋ก ํ๋ ์ด๋ถ์ ์คํํ ๋ ๊ตฌ์ฑํด์ผ ํ๋ ์ธ์คํด์ค๋ฅผ ๋ช
์์ ์ผ๋ก ์ง์ ํ ์ ์์ต๋๋ค.
์น 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
: ์ธ์คํด์ค ๊ด๋ฆฌ(๊ตฌ์ฑ, ํ์๊ฐ์ );cartridge-replicasets
: ํ ํด๋ก์ง ๊ด๋ฆฌ(๋ณต์ ๋ณธ ๊ด๋ฆฌ ๋ฐ ํด๋ฌ์คํฐ์์ ์ธ์คํด์ค ์๊ตฌ ์ ๊ฑฐ(์ถ๋ฐฉ))cartridge-config
: ๊ธฐํ ํด๋ฌ์คํฐ ๋งค๊ฐ๋ณ์(vshard ๋ถํธ์คํธ๋ํ, ์๋ ์ฅ์ ์กฐ์น ๋ชจ๋, ์ธ์ฆ ๋งค๊ฐ๋ณ์ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ฑ)๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
์ํํ๋ ค๋ ์์
๋ถ๋ถ์ ๋ช
์์ ์ผ๋ก ์ง์ ํ ์ ์์ผ๋ฉฐ, ๊ทธ๋ฌ๋ฉด ํด๋น ์ญํ ์ ๋๋จธ์ง ์์
์ ๊ฑด๋๋๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ์๋ ํ ํด๋ก์ง๋ก๋ง ์์
ํ๊ธฐ๋ฅผ ์ํ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด ์ง์ ํ์ต๋๋ค. cartridge-replicasets
.
์ฐ๋ฆฌ์ ๋
ธ๋ ฅ์ ๊ฒฐ๊ณผ๋ฅผ ํ๊ฐํด ๋ด
์๋ค. ์๋ก์ด ๋ณต์ ์ธํธ ์ฐพ๊ธฐ
๋ง์ธ!
์ธ์คํด์ค์ ๋ณต์ ๋ณธ ์ธํธ๋ฅผ ์ฌ๊ตฌ์ฑํ์ฌ ์คํํ๊ณ ํด๋ฌ์คํฐ ํ ํด๋ก์ง๊ฐ ์ด๋ป๊ฒ ๋ณ๊ฒฝ๋๋์ง ํ์ธํ์ธ์. ์๋ฅผ ๋ค์ด, ๋ค์ํ ์ด์ ์๋๋ฆฌ์ค๋ฅผ ์๋ํด ๋ณผ ์ ์์ต๋๋ค. memtx_memory
. ํด๋น ์ญํ ์ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ ์ค์ง ์๊ฐ์ ์ค์ด๊ธฐ ์ํด ์ธ์คํด์ค๋ฅผ ๋ค์ ์์ํ์ง ์๊ณ ์ด ์์
์ ์ํํ๋ ค๊ณ ํฉ๋๋ค.
๋ฌ๋ฆฌ๋ ๊ฒ์ ์์ง ๋ง์ธ์ vagrant halt
์์
์ด ๋๋๋ฉด VM์ ์ค์งํฉ๋๋ค.
ํ๋ ์๋์๋ ๋ฌด์์ด ์์ต๋๊น?
์ฌ๊ธฐ์๋ ์คํ ์ค ansible ์ญํ ๋ด๋ถ์์ ๋ฐ์ํ ์ผ์ ๋ํด ์์ธํ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
์นดํธ๋ฆฌ์ง ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ๋ฅผ ๋จ๊ณ๋ณ๋ก ์ดํด๋ณด๊ฒ ์ต๋๋ค.
ํจํค์ง ์ค์น ๋ฐ ์ธ์คํด์ค ์์
๋จผ์ ํจํค์ง๋ฅผ ์๋ฒ์ ์ ๋ฌํ๊ณ ์ค์นํด์ผ ํฉ๋๋ค. ์ด์ ํด๋น ์ญํ ์ RPM ๋ฐ DEB ํจํค์ง์ ํจ๊ป ์๋ํ ์ ์์ต๋๋ค.
๋ค์์ผ๋ก ์ธ์คํด์ค๋ฅผ ์์ํฉ๋๋ค. ์ฌ๊ธฐ์์๋ ๋ชจ๋ ๊ฒ์ด ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ๊ฐ ์ธ์คํด์ค๋ ๋ณ๋์
๋๋ค. systemd
-์๋น์ค. ๋๋ ์์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค.
$ systemctl start myapp@storage-1
์ด ๋ช
๋ น์ ์ธ์คํด์ค๋ฅผ ์์ํฉ๋๋ค storage-1
์ ํ ๋ฆฌ์ผ์ด์
myapp
. ์์๋ ์ธ์คํด์ค๋ ํด๋น ์ธ์คํด์ค๋ฅผ ์ฐพ์ต๋๋ค. /etc/tarantool/conf.d/
. ์ธ์คํด์ค ๋ก๊ทธ๋ ๋ค์์ ์ฌ์ฉํ์ฌ ๋ณผ ์ ์์ต๋๋ค. journald
.
์ ๋ ํ์ผ /etc/systemd/system/[email protected]
์์คํ
์๋น์ค์ ๊ฒฝ์ฐ ํจํค์ง์ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค.
Ansible์๋ ํจํค์ง ์ค์น ๋ฐ ์์คํ ์๋น์ค ๊ด๋ฆฌ๋ฅผ ์ํ ๋ด์ฅ ๋ชจ๋์ด ์์ง๋ง ์ฌ๊ธฐ์๋ ์๋ก์ด ๊ฒ์ ๋ฐ๋ช ํ์ง ์์์ต๋๋ค.
ํด๋ฌ์คํฐ ํ ํด๋ก์ง ๊ตฌ์ฑ
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ๊ฐ์ฅ ํฅ๋ฏธ๋ก์ด ์ผ์ด ์์๋ฉ๋๋ค. ๋์ํฉ๋๋ค. ํจํค์ง๋ฅผ ์ค์นํ๊ณ ์คํํ๊ธฐ ์ํด ํน๋ณํ ansible ์ญํ ์ ์ฌ์ฉํ๋ ๊ฒ์ ์ด์ํ ๊ฒ์
๋๋ค. systemd
-์๋น์ค.
ํด๋ฌ์คํฐ๋ฅผ ์๋์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
- ์ฒซ ๋ฒ์งธ ์ต์ : ์น UI๋ฅผ ์ด๊ณ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค. ์ฌ๋ฌ ์ธ์คํด์ค๋ฅผ ํ ๋ฒ ์์ํ๋ ๊ฒฝ์ฐ ๋งค์ฐ ์ ํฉํฉ๋๋ค.
- ๋ ๋ฒ์งธ ์ต์ : GraphQl API๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์์๋ Python์ผ๋ก ์คํฌ๋ฆฝํธ ์์ฑ๊ณผ ๊ฐ์ ์์ ์ ์ด๋ฏธ ์๋ํํ ์ ์์ต๋๋ค.
- ์ธ ๋ฒ์งธ ์ต์
(์ ์ ์ด ๊ฐํ ๊ฒฝ์ฐ): ์๋ฒ๋ก ์ด๋ํ์ฌ ๋ค์์ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค ์ค ํ๋์ ์ฐ๊ฒฐํฉ๋๋ค.
tarantoolctl connect
Lua ๋ชจ๋์ ์ฌ์ฉํ์ฌ ํ์ํ ๋ชจ๋ ์กฐ์์ ์ํํฉ๋๋ค.cartridge
.
์ฐ๋ฆฌ ๋ฐ๋ช ํ์ ์ฃผ์ ์๋ฌด๋ ๊ทํ์๊ฒ ๊ฐ์ฅ ์ด๋ ค์ด ์์ ์ธ ์ด ์์ ์ ์ํํ๋ ๊ฒ์ ๋๋ค.
Ansible์ ์ฌ์ฉํ๋ฉด ์์ ๋ง์ ๋ชจ๋์ ์์ฑํ๊ณ ์ด๋ฅผ ์ญํ ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ ์ญํ ์ ์ด๋ฌํ ๋ชจ๋์ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ์ ๋ค์ํ ๊ตฌ์ฑ ์์๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
์ด๋ป๊ฒ ์๋ํ๋์? ์ ์ธ์ ๊ตฌ์ฑ์์ ์ํ๋ ํด๋ฌ์คํฐ ์ํ๋ฅผ ์ค๋ช ํ๊ณ ์ญํ ์ ๊ฐ ๋ชจ๋์ ๊ตฌ์ฑ ์น์ ์ ์ ๋ ฅ์ผ๋ก ์ ๊ณตํฉ๋๋ค. ๋ชจ๋์ ํด๋ฌ์คํฐ์ ํ์ฌ ์ํ๋ฅผ ์์ ํ๊ณ ์ด๋ฅผ ์ ๋ ฅ๊ณผ ๋น๊ตํฉ๋๋ค. ๋ํ ์ธ์คํด์ค ์ค ํ๋์ ์์ผ์ ํตํด ์ฝ๋๊ฐ ์คํ๋์ด ํด๋ฌ์คํฐ๋ฅผ ์ํ๋ ์ํ๋ก ๋ง๋ญ๋๋ค.
๊ฒฐ๊ณผ
์ค๋ ์ฐ๋ฆฌ๋ Tarantool Cartridge์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๊ณ ๊ฐ๋จํ ํ ํด๋ก์ง๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๊ณ ๋ณด์ฌ์ฃผ์์ต๋๋ค. ์ด๋ฅผ ์ํด ์ฐ๋ฆฌ๋ ์ฌ์ฉํ๊ธฐ ์ฝ๊ณ ๋ง์ ์ธํ๋ผ ๋ ธ๋(์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ํด๋ฌ์คํฐ ์ธ์คํด์ค)๋ฅผ ๋์์ ๊ตฌ์ฑํ ์ ์๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ธ Ansible์ ์ฌ์ฉํ์ต๋๋ค.
์์์๋ Ansible์ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ ๊ตฌ์ฑ์ ์ค๋ช
ํ๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ ์ค ํ๋๋ฅผ ๋ค๋ฃจ์์ต๋๋ค. ๋ค์ ๋จ๊ณ๋ก ๋์๊ฐ ์ค๋น๊ฐ ๋์์์ ํ์ธํ ํ์๋ ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์. group_vars
ะธ host_vars
.
๊ณง ํ ํด๋ก์ง์์ ์ธ์คํด์ค๋ฅผ ์๊ตฌ์ ์ผ๋ก ์ ๊ฑฐ(์ถ์ถ)ํ๊ณ , vshard๋ฅผ ๋ถํธ์คํธ๋ฉํ๊ณ , ์๋ ์ฅ์ ์กฐ์น ๋ชจ๋๋ฅผ ๊ด๋ฆฌํ๊ณ , ์ธ์ฆ์ ๊ตฌ์ฑํ๊ณ , ํด๋ฌ์คํฐ ๊ตฌ์ฑ์ ํจ์นํ๋ ๋ฐฉ๋ฒ์ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค. ๊ทธ๋์ ํผ์ ๊ณต๋ถํ ์ ์์ด์
๋ญ๊ฐ ์๋๋ฉด ๊ผญ ํด๋ณด์ธ์
์ถ์ฒ : habr.com