
เช เชฎเซ เชชเชนเซเชฒเชพเชฅเซ เช เชตเชฟเชถเซ เชตเชพเชค เชเชฐเซ เชเซ , เชเซ เชคเชฎเชจเซ เชตเชฟเชคเชฐเชฟเชค เชเชชเซเชฒเชฟเชเซเชถเชจเซ เชตเชฟเชเชธเชพเชตเชตเชพ เช เชจเซ เชคเซเชฎเชจเซ เชชเซเชเซเช เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ. เชคเซเชฏเชพเช เชเชเช เชฌเชพเชเซ เชจเชฅเซ: เช เชเชชเซเชฒเชฟเชเซเชถเชจเซเชจเซ เชเซเชตเซ เชฐเซเชคเซ เชเชฎเชพเชตเชตเชพ เช เชจเซ เชธเชเชเชพเชฒเชฟเชค เชเชฐเชตเซ เชคเซ เชถเซเชเซ. เชเชฟเชเชคเชพ เชเชฐเชถเซ เชจเชนเซเช, เช เชฎเซ เชฌเชงเซเช เช เชตเชฟเชเชพเชฐเซเชฏเซเช เชเซ! เช เชฎเซ Tarantool Cartridge เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซเชจเซ เชคเชฎเชพเชฎ เชถเซเชฐเซเชทเซเช เชชเชฆเซเชงเชคเชฟเช เชเชเชธเชพเชฅเซ เชฎเซเชเซ เชเซ เช เชจเซ เชฒเชเซเชฏเซเช เชเซ , เชเซ เชชเซเชเซเชเชจเซ เชธเชฐเซเชตเชฐเซเชธเชฎเชพเช เชตเชฟเชเชเชฟเชค เชเชฐเชถเซ, เชฆเชพเชเชฒเชพเช เชถเชฐเซ เชเชฐเชถเซ, เชคเซเชฎเชจเซ เชเซเชฒเชธเซเชเชฐเชฎเชพเช เชเซเชกเชถเซ, เช เชงเชฟเชเซเชคเชคเชพ เชฐเซเชชเชฐเซเชเชพเชเชเชฟเชค เชเชฐเชถเซ, vshard เชฌเซเชเชธเซเชเซเชฐเซเชช เชเชฐเชถเซ, เชธเซเชตเชเชพเชฒเชฟเชค เชซเซเชฒเชเชตเชฐเชจเซ เชธเชเซเชทเชฎ เชเชฐเชถเซ เช เชจเซ เชเซเชฒเชธเซเชเชฐ เชฐเซเชชเชฐเซเชเชพเชจเซ เชชเซเช เชเชฐเชถเซ.
เชฐเชธเชชเซเชฐเชฆ? เชชเชเซ เชนเซเช เชเช เชนเซเช เชณ เชชเซเชเซเช เชเซเช, เช เชฎเซ เชฌเชงเซเช เชเชนเซเชถเซเช เช เชจเซ เชฌเชคเชพเชตเซเชถเซเช.
เชเชพเชฒเซ เชเช เชเชฆเชพเชนเชฐเชฃเชฅเซ เชถเชฐเซเชเชค เชเชฐเซเช
เช เชฎเซ เช เชฎเชพเชฐเซ เชญเซเชฎเชฟเชเชพเชจเซ เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพเชจเซ เชฎเชพเชคเซเชฐ เชเช เชญเชพเช เชเชตเชฐเซ เชฒเชเชถเซเช. เชคเชฎเซ เชนเชเชฎเซเชถเชพ เชคเซเชจเซ เชคเชฎเชพเชฎ เชธเซเชตเชฟเชงเชพเช เช เชจเซ เชเชจเชชเซเช เชชเชฐเชฟเชฎเชพเชฃเซเชจเซเช เชธเชเชชเซเชฐเซเชฃ เชตเชฐเซเชฃเชจ เชฎเซเชณเชตเซ เชถเชเซ เชเซ . เชชเชฐเชเชคเซ เชธเซ เชตเชเชค เชเซเชตเชพ เชเชฐเชคเชพเช เชเชเชตเชพเชฐ เชชเซเชฐเชฏเชพเชธ เชเชฐเชตเซ เชตเชงเซ เชธเชพเชฐเซเช เชเซ, เชคเซเชฅเซ เชเชพเชฒเซ เชเช เชจเชพเชจเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชเชชเชฏเซเช เชเชฐเซเช.
เชเซเชฐเชจเซเชเซเชฒ เชเชพเชฐเชคเซเชธ เชงเชฐเชพเชตเซ เชเซ เชเช เชจเชพเชจเซ เชเชพเชฐเชคเซเชธ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ เชเซ เชฌเซเชเช เชเซเชฐเชพเชนเชเซ เช
เชจเซ เชคเซเชฎเชจเชพ เชเชพเชคเชพเช เชตเชฟเชถเซเชจเซ เชฎเชพเชนเชฟเชคเซ เชธเชเชเซเชฐเชนเชฟเชค เชเชฐเซ เชเซ, เช
เชจเซ HTTP เชฆเซเชตเชพเชฐเชพ เชกเซเชเชพ เชฎเซเชจเซเช เชเชฐเชตเชพ เชฎเชพเชเซ API เชชเชฃ เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ. เช เชเชฐเชตเชพ เชฎเชพเชเซ, เชเชชเซเชฒเชฟเชเซเชถเชจ เชฌเซ เชธเชเชญเชตเชฟเชค เชญเซเชฎเชฟเชเชพเชเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเซ เชเซ: api ะธ storageเชเซ เชฆเชพเชเชฒเชพเชเชจเซ เชธเซเชเชชเซ เชถเชเชพเชฏ เชเซ.
เชเชพเชฐเชคเซเชธ เชชเซเชคเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเช เชเซเชตเซ เชฐเซเชคเซ เชถเชฐเซ เชเชฐเชตเซ เชคเซ เชตเชฟเชถเซ เชเชถเซเช เชเชนเซเชคเซเช เชจเชฅเซ, เชคเซ เชซเชเซเชค เชชเชนเซเชฒเชพเชฅเซ เชเชพเชฒเซ เชฐเชนเซเชฒเชพ เชเชฆเชพเชนเชฐเชฃเซเชจเซ เชเซเช เชตเชตเชพเชจเซ เชเซเชทเชฎเชคเชพ เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ. เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเช เชฌเชพเชเซเชจเซเช เชเชพเชคเซ เชเชฐเชตเซเช เชเซเชเช: เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชซเชพเชเชฒเซเชจเซ เชตเชฟเชเชเชฟเชค เชเชฐเชตเซ, เชธเซเชตเชพเช เชถเชฐเซ เชเชฐเชตเซ เช เชจเซ เชเซเชชเซเชฒเซเชเซ เชธเซเช เชเชฐเชตเซ. เชชเชฃ เช เชฎเซ เช เชฌเชงเซเช เชจเชนเซเช เชเชฐเซเช, เชเชตเชพเชฌเซเชฌเชฒ เช เชฎเชพเชฐเชพ เชฎเชพเชเซ เชเชฐเชถเซ.
เชถเชฌเซเชฆเซเชฅเซ เชเชพเชฐเซเชฏเซ เชธเซเชงเซ
เชคเซเชฅเซ, เชเชพเชฒเซ เช เชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชฌเซ เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจเซ เชชเชฐ เชเชฎเชพเชตเซเช เช เชจเซ เชเช เชธเชฐเชณ เชเซเชชเซเชฒเซเชเซ เชธเซเช เชเชฐเซเช:
- เชชเซเชฐเชคเชฟเชเซเชคเชฟ
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-galaxy install tarantool.cartridge,1.0.1เชเชจเซเชธเซเชเซเชฒ เชเชฐเซเชฒเซ เชญเซเชฎเชฟเชเชพ เชเชฒเชพเชตเซ:
$ ansible-playbook -i hosts.yml playbook.ymlเช เชฎเซ เชชเซเชฒเซเชฌเซเชเชจเชพ เช เชฎเชฒเชจเชพ เช เชเชคเชจเซ เชฐเชพเชน เชเซเช เชฐเชนเซเชฏเชพ เชเซเช, เชชเชฐ เชเชพเช เช เชจเซ เชชเชฐเชฟเชฃเชพเชฎเชจเซ เชเชจเชเชฆ เชฎเชพเชฃเซ:

เชคเชฎเซ เชกเซเชเชพ เชฐเซเชกเซ เชถเชเซ เชเซ. เชธเชฐเชธ, เชฌเชฐเชพเชฌเชฐ เชจเซ?
เชเชพเชฒเซ เชนเชตเซ เชเชจเซ เชธเชพเชฅเซ เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฎ เชเชฐเชตเซเช เชคเซ เชถเซเชงเซเช, เช เชจเซ เชคเซ เช เชธเชฎเชฏเซ เชเซเชชเซเชฒเซเชเซเชฎเชพเช เชฌเซเชเซ เชชเซเชฐเชคเชฟเชเซเชคเชฟ เชธเซเช เชเชฎเซเชฐเซ.
เชเชชเชฃเซ เชธเชฎเชเชตเชพ เชฎเชพเชเชกเซเช เชเซเช
เชคเซ เชถเซเช เชฅเชฏเซ?
เช
เชฎเซ เชฌเซ VM เชฎเซเชณเชตเซเชฏเชพเช เชเซ เช
เชจเซ เชเช เชเชตเชพเชฌเชฆเชพเชฐ เชชเซเชฒเซเชฌเซเช เชเชฒเชพเชตเซ เชฐเชนเซเชฏเชพ เชเซเช เชเซเชฃเซ เช
เชฎเชพเชฐเซเช เชเซเชฒเชธเซเชเชฐ เชธเซเช เชเชฐเซเชฏเซเช เชเซ. เชเชพเชฒเซ เชซเชพเชเชฒเชจเซ เชธเชพเชฎเชเซเชฐเซ เชเซเชเช 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เช
เชนเซเช เชเชถเซเช เช เชฐเชธเชชเซเชฐเชฆ เชฅเชคเซเช เชจเชฅเซ, เช
เชฎเซ เชเชตเชพเชฌเซ เชญเซเชฎเชฟเชเชพ เชถเชฐเซ เชเชฐเซเช เชเซเช, เชเซเชจเซ เชเชนเซเชตเชพเชฏ เชเซ 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_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 -i hosts.yml
--limit storage-2,storage-2-replica
playbook.ymlเชตเชฟเชเชฒเซเชช เชชเชฐ เชงเซเชฏเชพเชจ เชเชชเซ --limit. เชฆเชฐเซเช เชเซเชฒเชธเซเชเชฐ เชเชจเซเชธเซเชเชจเซเชธ เชเชจเซเชธเชฟเชฌเชฒ เชถเชฐเชคเซเชฎเชพเช เชฏเชเชฎเชพเชจ เชนเซเชตเชพเชฅเซ, เช
เชฎเซ เชธเซเชชเชทเซเชเชชเชฃเซ เชธเซเชชเชทเซเช เชเชฐเซ เชถเชเซเช เชเซเช เชเซ เชชเซเชฒเซเชฌเซเช เชเชฒเชพเชตเชคเซ เชตเชเชคเซ เชเช เชเชเชจเชพเช เชเซเช เชตเชตเซ เชเซเชเช.
เชตเซเชฌ 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 เชจเซ เชชเซเชฐเซเชฃ เชเชฐเซ เชฒเซ เชคเซเชฏเชพเชฐเซ เชคเซเชจเซ เชฐเซเชเชตเชพ เชฎเชพเชเซ.
เชนเซเชก เชนเซเช เชณ เชถเซเช เชเซ?
เช เชฎเชพเชฐเชพ เชชเซเชฐเชฏเซเชเซ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชเชตเชพเชฌเชฆเชพเชฐ เชญเซเชฎเชฟเชเชพเชจเชพ เชนเซเชก เชนเซเช เชณ เชถเซเช เชฅเชฏเซเช เชคเซ เชตเชฟเชถเซ เชนเซเช เช เชนเซเช เชตเชงเซ เชตเชพเชค เชเชฐเซเชถ.
เชเชพเชฒเซ เชเช เชเชพเชฐเซเชเชฟเช เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชคเชฌเชเซเชเชพเชตเชพเชฐ เชเซเช เชตเชตเชพ เชชเชฐ เชเช เชจเชเชฐ เชเชฐเซเช.
เชชเซเชเซเช เชเชจเซเชธเซเชเซเชฒ เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช เช เชจเซ เชฆเชพเชเชฒเชพเช เชถเชฐเซ เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช
เชชเซเชฐเชฅเชฎ เชคเชฎเชพเชฐเซ เชชเซเชเซเชเชจเซ เชธเชฐเซเชตเชฐ เชชเชฐ เชชเชนเซเชเชเชพเชกเชตเชพเชจเซ เช เชจเซ เชคเซเชจเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชนเชตเซ เชญเซเชฎเชฟเชเชพ RPM เช เชจเซ DEB เชชเซเชเซเชเซ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเซ เชถเชเซ เชเซ.
เชเชเชณ, เช
เชฎเซ เชเชฆเชพเชนเชฐเชฃเซ เชถเชฐเซ เชเชฐเซเช เชเซเช. เช
เชนเซเช เชฌเชงเซเช เชเซเชฌ เช เชธเชฐเชณ เชเซ: เชฆเชฐเซเช เชเชฆเชพเชนเชฐเชฃ เช
เชฒเช เชเซ systemd- เชธเซเชตเชพ. เชนเซเช เชเช เชเชฆเชพเชนเชฐเชฃ เชตเชฟเชถเซ เชตเชพเชค เชเชฐเซเช เชเซเช:
$ systemctl start myapp@storage-1เช เชเชฆเซเชถ เชฆเชพเชเชฒเซ เชถเชฐเซ เชเชฐเชถเซ storage-1 เชเชชเซเชฒเชฟเชเซเชถเชจเซเชธ myapp. เชฒเซเชจเซเช เชเชฐเซเชฒ เชฆเชพเชเชฒเซ เชคเซเชจเชพ เชฎเชพเชเซ เชเซเชถเซ ะฒ /etc/tarantool/conf.d/. เชเชจเซเชธเซเชเชจเซเชธ เชฒเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเซเช เชถเชเชพเชฏ เชเซ journald.
เชฏเซเชจเชฟเช เชซเชพเชเชฒ /etc/systemd/system/myapp@.sevice เชเช systemd เชธเซเชตเชพ เชฎเชพเชเซ เชชเซเชเซเช เชธเชพเชฅเซ เชตเชฟเชคเชฐเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ.
Ansible เชชเชพเชธเซ เชชเซเชเซเชเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพ เช เชจเซ เชธเชฟเชธเซเชเชฎd เชธเซเชตเชพเชเชจเซเช เชธเชเชเชพเชฒเชจ เชเชฐเชตเชพ เชฎเชพเชเซ เชฌเชฟเชฒเซเช-เชเชจ เชฎเซเชกเซเชฏเซเชฒเซ เชเซ, เช เชฎเซ เช เชนเซเช เชเชเชเชชเชฃ เชจเชตเซเช เชถเซเชงเซเชฏเซเช เชจเชฅเซ.
เชเซเชฒเชธเซเชเชฐ เชเซเชชเซเชฒเซเชเซ เชฐเซเชชเชฐเซเชเชพเชเชเชฟเชค เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช
เช
เชจเซ เช
เชนเซเช เชธเซเชฅเซ เชฐเชธเชชเซเชฐเชฆ เชถเชฐเซเชเชค เชฅเชพเชฏ เชเซ. เชธเชเชฎเชค เชฅเชพเช, เชชเซเชเซเชเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพ เช
เชจเซ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ เชตเชฟเชถเซเชท เชเชตเชพเชฌเชฆเชพเชฐ เชญเซเชฎเชฟเชเชพเชฅเซ เชชเชฐเซเชถเชพเชจ เชฅเชตเซเช เชตเชฟเชเชฟเชคเซเชฐ เชนเชถเซ systemd-เชธเซเชตเชพเช.
เชคเชฎเซ เชเซเชฒเชธเซเชเชฐเชจเซ เชฎเซเชจเซเชฏเซเช เชฒเซ เชธเซเช เชเชฐเซ เชถเชเซ เชเซ:
- เชชเซเชฐเชฅเชฎ เชตเชฟเชเชฒเซเชช: เชตเซเชฌ UI เชเซเชฒเซ เช เชจเซ เชฌเชเชจเซ เชชเชฐ เชเซเชฒเชฟเช เชเชฐเซ. เชเชฃเชพ เชเชฆเชพเชนเชฐเชฃเซเชจเซ เชเช-เชตเชเชคเชจเซ เชถเชฐเซเชเชค เชฎเชพเชเซ, เชคเซ เชเชเชฆเชฎ เชฏเซเชเซเชฏ เชเซ.
- เชฌเซเชเซ เชตเชฟเชเชฒเซเชช: เชคเชฎเซ GraphQl API เชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซ เชเซ. เช เชนเซเช เชคเชฎเซ เชชเชนเซเชฒเซเชฅเซ เช เชเชเชเช เชธเซเชตเชเชพเชฒเชฟเชค เชเชฐเซ เชถเชเซ เชเซ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชชเชพเชฏเชฅเซเชจเชฎเชพเช เชธเซเชเซเชฐเชฟเชชเซเช เชฒเชเซ.
- เชคเซเชฐเซเชเซ เชตเชฟเชเชฒเซเชช (เชญเชพเชตเชจเชพเชฎเชพเช เชฎเชเชฌเซเชค เชฎเชพเชเซ): เชธเชฐเซเชตเชฐ เชชเชฐ เชเชพเช, เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเช เชเชฆเชพเชนเชฐเชฃ เชธเชพเชฅเซ เชเชจเซเชเซเช เชเชฐเซ
tarantoolctl connectเช เชจเซ เชฒเซเช เชฎเซเชกเซเชฏเซเชฒ เชธเชพเชฅเซ เชคเชฎเชพเชฎ เชเชฐเซเชฐเซ เชฎเซเชจเชฟเชชเซเชฏเซเชฒเซเชถเชจเซเชธ เชเชฐเซcartridge.
เช เชฎเชพเชฐเซ เชถเซเชงเชจเซเช เชฎเซเชเซเชฏ เชเชพเชฐเซเชฏ เช เชเชฐเชตเชพเชจเซเช เชเซ, เชคเชฎเชพเชฐเชพ เชฎเชพเชเซ เชเชพเชฎเชจเซ เชธเซเชฅเซ เชฎเซเชถเซเชเซเชฒ เชญเชพเช.
Ansible เชคเชฎเชจเซ เชคเชฎเชพเชฐเซเช เชชเซเชคเชพเชจเซเช เชฎเซเชกเซเชฏเซเชฒ เชฒเชเชตเชพ เช เชจเซ เชญเซเชฎเชฟเชเชพเชฎเชพเช เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ. เช เชฎเชพเชฐเซ เชญเซเชฎเชฟเชเชพ เชเซเชฒเชธเซเชเชฐเชจเชพ เชตเชฟเชตเชฟเชง เชเชเชเซเชจเซเช เชธเชเชเชพเชฒเชจ เชเชฐเชตเชพ เชฎเชพเชเซ เช เชฎเซเชกเซเชฏเซเชฒเซเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ.
เชคเซ เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฎ เชเชฐเซ เชเซ? เชคเชฎเซ เชเซเชทเชฃเชพเชคเซเชฎเช เชฐเซเชชเชฐเซเชเชพเชฎเชพเช เชเซเชฒเชธเซเชเชฐเชจเซ เชเชเซเชเชฟเชค เชธเซเชฅเชฟเชคเชฟเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเซ เชเซ, เช เชจเซ เชญเซเชฎเชฟเชเชพ เชฆเชฐเซเช เชฎเซเชกเซเชฏเซเชฒเชจเซ เชคเซเชจเชพ เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชตเชฟเชญเชพเชเชจเซ เชเชจเชชเซเช เชคเชฐเซเชเซ เชเชชเซ เชเซ. เชฎเซเชกเซเชฏเซเชฒ เชเซเชฒเชธเซเชเชฐเชจเซ เชตเชฐเซเชคเชฎเชพเชจ เชธเซเชฅเชฟเชคเชฟ เชฎเซเชณเชตเซ เชเซ เช เชจเซ เชคเซเชจเซ เชเชจเชชเซเช เชธเชพเชฅเซ เชธเชฐเชเชพเชตเซ เชเซ. เชเชเชณ, เชเช เชเซเชก เชฆเชพเชเชฒเชพเชเชฎเชพเชเชฅเซ เชเชเชจเชพ เชธเซเชเซเช เชฆเซเชตเชพเชฐเชพ เชเชฒเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชเซ เชเซเชฒเชธเซเชเชฐเชจเซ เชเชเซเชเชฟเชค เชธเซเชฅเชฟเชคเชฟเชฎเชพเช เชฒเชพเชตเซ เชเซ.
เชชเชฐเชฟเชฃเชพเชฎเซ
เชเชเซ เช เชฎเซ เชเชฃเชพเชตเซเชฏเซเช เช เชจเซ เชฌเชคเชพเชตเซเชฏเซเช เชเซ เชคเชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชเซเชฐเชจเซเชเซเชฒ เชเชพเชฐเชเซเชฐเชฟเช เชชเชฐ เชเซเชตเซ เชฐเซเชคเซ เชเซเช เชตเชตเซ เช เชจเซ เชเช เชธเชฐเชณ เชเซเชชเซเชฒเซเชเซ เชเซเชตเซ เชฐเซเชคเซ เชธเซเช เชเชฐเชตเซ. เช เชเชฐเชตเชพ เชฎเชพเชเซ, เช เชฎเซ Ansible เชจเซ เชเชชเชฏเซเช เชเชฐเซเชฏเซ, เชเช เชถเชเซเชคเชฟเชถเชพเชณเซ เชธเชพเชงเชจ เชเซ เชตเชพเชชเชฐเชตเชพ เชฎเชพเชเซ เชธเชฐเชณ เชเซ เช เชจเซ เชคเชฎเชจเซ เชเชเชธเชพเชฅเซ เชเชฃเชพ เชเชจเซเชซเซเชฐเชพเชธเซเชเซเชฐเชเซเชเชฐ เชจเซเชกเซเชธเชจเซ เชเซเช เชตเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ (เช เชฎเชพเชฐเชพ เชเชฟเชธเซเชธเชพเชฎเชพเช, เช เชเซเชฒเชธเซเชเชฐ เชเชฆเชพเชนเชฐเชฃเซ เชเซ).
เชเชชเชฐ, เช
เชฎเซ Ansible เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเซเชฒเชธเซเชเชฐ เชฐเซเชชเชฐเซเชเชพเชเชเชจเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเชตเชพเชจเซ เชเชฃเซ เชฐเซเชคเซเชฎเชพเชเชฅเซ เชเช เชธเชพเชฅเซ เชตเซเชฏเชตเชนเชพเชฐ เชเชฐเซเชฏเซ. เชเชเชตเชพเชฐ เชคเชฎเซ เชเชพเชฃเซ เชเซ เชคเชฎเซ เชเชเชณ เชตเชงเชตเชพ เชฎเชพเชเซ เชคเซเชฏเชพเชฐ เชเซ, เชถเซเชเซ เชชเซเชฒเซเชฌเซเช เชฒเชเชตเชพ เชฎเชพเชเซ. เชธเชพเชฅเซ เชเซเชชเซเชฒเซเชเซเชจเซเช เชธเชเชเชพเชฒเชจ เชเชฐเชตเซเช เชคเชฎเชจเซ เชตเชงเซ เช
เชจเซเชเซเชณ เชฒเชพเชเชถเซ group_vars ะธ host_vars.
เชเซเชฌ เช เชเซเชเช เชธเชฎเชฏเชฎเชพเช เช เชฎเซ เชคเชฎเชจเซ เชเซเชชเซเชฒเซเชเซ, เชฌเซเชเชธเซเชเซเชฐเซเชช vshard, เชเชเซเชฎเซเชเชฟเช เชซเซเชฒเชเชตเชฐ เชฎเซเชกเชจเซ เชฎเซเชจเซเช เชเชฐเชตเชพ, เช เชงเชฟเชเซเชคเชคเชพเชจเซ เชฐเซเชชเชฐเซเชเชพเชเชเชฟเชค เชเชฐเชตเชพ เช เชจเซ เชเซเชฒเชธเซเชเชฐ เชฐเซเชชเชฐเซเชเชพเชจเซ เชชเซเช เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฏเชฎเซ เชงเซเชฐเชฃเซ เชฆเซเชฐ เชเชฐเชตเชพ (เชเชพเชขเซ เชจเชพเชเชตเซ) เชคเซ เชตเชฟเชถเซ เชเชฃเชพเชตเซเชถเซเช. เช เชฆเชฐเชฎเชฟเชฏเชพเชจ, เชคเชฎเซ เชคเชฎเชพเชฐเชพ เชชเซเชคเชพเชจเชพ เชชเชฐ เช เชญเซเชฏเชพเชธ เชเชฐเซ เชถเชเซ เชเซ เช เชจเซ เชเซเชฒเชธเซเชเชฐ เชชเชฐเชฟเชฎเชพเชฃเซ เชฌเชฆเชฒเชตเชพเชจเซ เชชเซเชฐเชฏเซเช เชเชฐเซ.
เชเซ เชเชเชเช เชเชพเชฎ เชเชฐเชคเซเช เชจเชฅเซ, เชคเซ เชเชพเชคเชฐเซ เชเชฐเซ เช เชฎเชจเซ เชธเชฎเชธเซเชฏเชพ เชตเชฟเชถเซ. เช เชฎเซ เชคเซเชจเซ เชเชกเชชเชฅเซ เชคเซเชกเซ เชจเชพเชเซเชถเซเช!
เชธเซเชฐเซเชธ: www.habr.com
