เดŸเดพเดฐเดจเตเดฑเต‚เตพ เด•เดพเดŸเตเดฐเดฟเดกเตเดœเดฟเดฒเต‡เด•เตเด•เต เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเดฒเตเด‚ เดธเตเดตเดพเดญเดพเดตเดฟเด•เดฎเดพเดฏเตเด‚ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเด• (เดญเดพเด—เด‚ 1)

เดŸเดพเดฐเดจเตเดฑเต‚เตพ เด•เดพเดŸเตเดฐเดฟเดกเตเดœเดฟเดฒเต‡เด•เตเด•เต เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเดฒเตเด‚ เดธเตเดตเดพเดญเดพเดตเดฟเด•เดฎเดพเดฏเตเด‚ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเด• (เดญเดพเด—เด‚ 1)

เดžเด™เตเด™เตพ เด‡เดคเดฟเดจเด•เด‚ เดธเด‚เดธเดพเดฐเดฟเดšเตเดšเต เดŸเดพเดฐเดจเตเดฑเต‚เตพ เด•เดพเดŸเตเดฐเดฟเดกเตเดœเต, เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เดพเดจเตเด‚ เด…เดต เดชเดพเด•เตเด•เต‡เดœเตเดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด‡เดคเต เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เดˆ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดŽเด™เตเด™เดจเต† เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเตเด‚ เด…เดต เดŽเด™เตเด™เดจเต† เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเดพเดฎเต†เดจเตเดจเตเด‚ เดชเด เดฟเด•เตเด•เตเด• เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เด…เดตเดถเต‡เดทเดฟเด•เตเด•เตเดจเตเดจเดคเต. เดตเดฟเดทเดฎเดฟเด•เตเด•เต‡เดฃเตเดŸ, เดžเด™เตเด™เตพ เดŽเดฒเตเดฒเดพเด‚ เด•เดตเตผ เดšเต†เดฏเตเดคเต! เดŸเดพเดฐเดจเตเดฑเต‚เตพ เด•เดพเดŸเตเดฐเดฟเดกเตเดœเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดŽเดฒเตเดฒเดพ เดฎเดฟเด•เดšเตเดš เดธเดฎเตเดชเตเดฐเดฆเดพเดฏเด™เตเด™เดณเตเด‚ เดžเด™เตเด™เตพ เด’เดฐเตเดฎเดฟเดšเตเดšเตเด•เต‚เดŸเตเดŸเดฟ เดŽเดดเตเดคเดฟ เด…เตปเดธเดฟเดฌเดฟเตพ-เดฑเต‹เตพ, เด‡เดคเต เดธเต†เตผเดตเดฑเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดชเดพเด•เตเด•เต‡เดœเต เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดฏเตเด‚, เด‡เตปเดธเตเดฑเตเดฑเตปเดธเตเด•เตพ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด‚, เด…เดตเดฏเต† เด’เดฐเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเด•เตเด•เตเด‚, เด…เด‚เด—เต€เด•เดพเดฐเด‚ เด•เตเดฐเดฎเต€เด•เดฐเดฟเด•เตเด•เตเด‚, เดฌเต‚เดŸเตเดŸเตเดธเตเดŸเตเดฐเดพเดชเตเดชเต vshard, เด“เดŸเตเดŸเต‹เดฎเดพเดฑเตเดฑเดฟเด•เต เดชเดฐเดพเดœเดฏเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เตเด•เดฏเตเด‚ เด•เตเดฒเดธเตเดฑเตเดฑเตผ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดชเดพเดšเตเดšเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚.

เดฐเดธเด•เดฐเดฎเดพเดฃเต‹? เด…เดชเตเดชเต‹เตพ เดžเดพเตป เดตเต†เดŸเตเดŸเดฟเดจเต เดคเดพเดดเต† เดšเต‹เดฆเดฟเด•เตเด•เตเดจเตเดจเต, เดžเด™เตเด™เตพ เดŽเดฒเตเดฒเดพเด‚ เดชเดฑเดžเตเดžเต เด•เดพเดฃเดฟเด•เตเด•เตเด‚.

เดจเดฎเตเด•เตเด•เต เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เด†เดฐเด‚เดญเดฟเด•เตเด•เดพเด‚

เดžเด™เตเด™เดณเตเดŸเต† เดฑเต‹เดณเดฟเดจเตเดฑเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเตเดฑเต† เด’เดฐเต เดญเดพเด—เด‚ เดฎเดพเดคเตเดฐเดฎเต‡ เดžเด™เตเด™เตพ เดจเต‹เด•เตเด•เต‚. เด…เดคเดฟเดจเตเดฑเต† เดŽเดฒเตเดฒเดพ เด•เดดเดฟเดตเตเด•เดณเตเดŸเต†เดฏเตเด‚ เด‡เตปเดชเตเดŸเตเดŸเต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เดตเดฟเดตเดฐเดฃเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดฒเตเดฒเดพเดฏเตเดชเตเดชเต‹เดดเตเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดพเดจเดพเด•เตเด‚ เดชเตเดฐเดฎเดพเดฃเต€เด•เดฐเดฃเด‚. เดŽเดจเตเดจเดพเตฝ เดจเต‚เดฑเต เดคเดตเดฃ เด•เดพเดฃเตเดจเตเดจเดคเดฟเดจเต‡เด•เตเด•เดพเตพ เด’เดฐเดฟเด•เตเด•เตฝ เดถเตเดฐเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต, เด…เดคเดฟเดจเดพเตฝ เดจเดฎเตเด•เตเด•เต เด’เดฐเต เดšเต†เดฑเดฟเดฏ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เดพเด‚.

Tarantool Cartridge เด‰เดฃเตเดŸเต เดŸเตเดฏเต‚เดŸเตเดŸเต‹เดฑเดฟเดฏเตฝ เดฌเดพเด™เตเด•เต เด•เตเดฒเดฏเดจเตเดฑเตเด•เดณเต†เดฏเตเด‚ เด…เดตเดฐเตเดŸเต† เด…เด•เตเด•เต—เดฃเตเดŸเตเด•เดณเต†เดฏเตเด‚ เด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดตเดฟเดตเดฐเด™เตเด™เตพ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดšเต†เดฑเดฟเดฏ เด•เดพเดŸเตเดฐเดฟเดกเตเดœเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป, เด•เต‚เดŸเดพเดคเต† HTTP เดตเดดเดฟ เดกเดพเดฑเตเดฑ เดฎเดพเดจเต‡เดœเตเดฎเต†เดจเตเดฑเดฟเดจเดพเดฏเดฟ เด’เดฐเต API เดจเตฝเด•เตเดจเตเดจเต. เด‡เดคเต เดจเต‡เดŸเตเดจเตเดจเดคเดฟเดจเต, เด…เดจเตเดฌเดจเตเดงเด‚ เดธเดพเดงเตเดฏเดฎเดพเดฏ เดฐเดฃเตเดŸเต เดฑเต‹เดณเตเด•เตพ เดตเดฟเดตเดฐเดฟเด•เตเด•เตเดจเตเดจเต: api ะธ storage, เด‡เดคเต เดธเดจเตเดฆเตผเดญเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เดจเดฟเดฏเต‹เด—เดฟเด•เตเด•เดพเดตเตเดจเตเดจเดคเดพเดฃเต.

เดชเตเดฐเต‹เดธเดธเตเด•เตพ เดŽเด™เตเด™เดจเต† เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เดฃเด‚ เดŽเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด•เดพเดŸเตเดฐเดฟเดกเตเดœเต เดคเดจเตเดจเต† เด’เดจเตเดจเตเด‚ เดชเดฑเดฏเตเดจเตเดจเดฟเดฒเตเดฒ, เด‡เดคเดฟเดจเด•เด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เดธเด‚เดญเดตเด™เตเด™เตพ เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเดพเดจเตเดณเตเดณ เด•เดดเดฟเดตเต เดฎเดพเดคเตเดฐเดฎเต‡ เด‡เดคเต เดจเตฝเด•เตเดจเตเดจเตเดณเตเดณเต‚. เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เดฌเดพเด•เตเด•เดฟเดฏเตเดณเตเดณเดต เดธเตเดตเดฏเด‚ เดšเต†เดฏเตเดฏเดฃเด‚: เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเดฒเตเด•เตพ เด•เตเดฐเดฎเต€เด•เดฐเดฟเด•เตเด•เตเด•, เดธเต‡เดตเดจเด™เตเด™เตพ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด•, เดŸเต‹เดชเตเดชเต‹เดณเดœเดฟ เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเด•. เดŽเดจเตเดจเดพเตฝ เดžเด™เตเด™เตพ เด‡เดคเต†เดฒเตเดฒเดพเด‚ เดšเต†เดฏเตเดฏเดฟเดฒเตเดฒ; เด…เตปเดธเดฟเดฌเดฟเตพ เดจเดฎเตเด•เตเด•เต เดตเต‡เดฃเตเดŸเดฟ เดšเต†เดฏเตเดฏเตเด‚.

เดตเดพเด•เตเด•เตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเตเดฐเดตเตƒเดคเตเดคเดฟเด•เดณเดฟเดฒเต‡เด•เตเด•เต

เด…เดคเดฟเดจเดพเตฝ, เดฐเดฃเตเดŸเต เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เดจเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดžเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดตเดฟเดจเตเดฏเดธเดฟเดšเตเดšเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดŸเต‹เดชเตเดชเต‹เดณเดœเดฟ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เดพเด‚:

  • เดชเด•เตผเดชเตเดชเต app-1 เดชเด™เตเด•เต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเด‚ api, เด‡เดคเดฟเตฝ เดตเต‡เดทเด‚ เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจเต vshard-router. เด‡เดตเดฟเดŸเต† เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดฎเดพเดคเตเดฐเดฎเต‡ เด‰เดฃเตเดŸเดพเด•เต‚.
  • เดชเด•เตผเดชเตเดชเต storage-1 เดชเด™เตเด•เต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต storage (เด…เดคเต‡ เดธเดฎเดฏเด‚ vshard-storage), เด‡เดตเดฟเดŸเต† เดžเด™เตเด™เตพ เดตเตเดฏเดคเตเดฏเดธเตเดค เดฎเต†เดทเต€เดจเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดฐเดฃเตเดŸเต เดธเดจเตเดฆเตผเดญเด™เตเด™เตพ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต.

เดŸเดพเดฐเดจเตเดฑเต‚เตพ เด•เดพเดŸเตเดฐเดฟเดกเตเดœเดฟเดฒเต‡เด•เตเด•เต เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเดฒเตเด‚ เดธเตเดตเดพเดญเดพเดตเดฟเด•เดฎเดพเดฏเตเด‚ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเด• (เดญเดพเด—เด‚ 1)

เด‰เดฆเดพเดนเดฐเดฃเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดจเดฎเตเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเดพเดฃเต เดตเดพเด—เตโ€Œเดฑเดจเตเดฑเต ะธ เด…เดธเดพเดงเตเดฏเด‚ (เดชเดคเดฟเดชเตเดชเต 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

Tarantool เด•เดพเดŸเตเดฐเดฟเดกเตเดœเต เด…เตปเดธเดฟเดฌเดฟเตพ เดฑเต‹เตพ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเด•:

$ ansible-galaxy install tarantool.cartridge,1.0.1

เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดค เดฑเต‹เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด•:

$ ansible-playbook -i hosts.yml playbook.yml

เดชเตเดฒเต‡เดฌเตเด•เตเด•เต เดŽเด•เตโ€Œเดธเดฟเด•เตเดฏเต‚เดทเตป เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดžเด™เตเด™เตพ เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด‡เดคเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเด• http://localhost:8181/admin/cluster/dashboard เดซเดฒเด‚ เด†เดธเตเดตเดฆเดฟเด•เตเด•เต‚:

เดŸเดพเดฐเดจเตเดฑเต‚เตพ เด•เดพเดŸเตเดฐเดฟเดกเตเดœเดฟเดฒเต‡เด•เตเด•เต เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเดฒเตเด‚ เดธเตเดตเดพเดญเดพเดตเดฟเด•เดฎเดพเดฏเตเด‚ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเด• (เดญเดพเด—เด‚ 1)

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดกเดพเดฑเตเดฑ เดชเด•เดฐเดพเตป เด•เดดเดฟเดฏเตเด‚. เด•เตŠเดณเตเดณเดพเด‚, เด…เดฒเตเดฒเต‡?

เด‡เดคเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŽเด™เตเด™เดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเต เด‡เดชเตเดชเต‹เตพ เดจเดฎเตเด•เตเด•เต เด•เดฃเตเดŸเต†เดคเตเดคเดพเด‚, เด…เดคเต‡ เดธเดฎเดฏเด‚ เดŸเต‹เดชเตเดชเต‹เดณเดœเดฟเดฏเดฟเตฝ เดฎเดฑเตเดฑเตŠเดฐเต เดชเด•เตผเดชเตเดชเต เดšเต‡เตผเด•เตเด•เตเด•.

เดจเดฎเตเด•เตเด•เต เด…เดคเต เด•เดฃเตเดŸเตเดชเดฟเดŸเดฟเด•เตเด•เดพเตป เดคเตเดŸเด™เตเด™เดพเด‚

เด…เดคเตเด•เต†เดพเดฃเตเดŸเต เดŽเดจเตเดคเต เดธเด‚เดญเดตเดฟเดšเตเดšเต?

เดžเด™เตเด™เตพ เดฐเดฃเตเดŸเต เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เดจเตเด•เตพ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดžเด™เตเด™เดณเตเดŸเต† เด•เตเดฒเดธเตเดฑเตเดฑเตผ เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดค เด’เดฐเต เด…เตปเดธเดฟเดฌเดฟเตพ เดชเตเดฒเต‡เดฌเตเด•เตเด•เต เดชเตเดฑเดคเตเดคเดฟเดฑเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต. เดซเดฏเดฒเดฟเดจเตเดฑเต† เด‰เดณเตเดณเดŸเด•เตเด•เด‚ เดจเต‹เด•เตเด•เดพเด‚ 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.

เด“เดฐเต‹ เดธเด‚เดญเดตเดคเตเดคเดฟเดจเตเด‚ เดžเด™เตเด™เตพ เด…เตปเดธเดฟเดฌเดฟเดณเดฟเดจเต‹เดŸเต เด•เดฃเด•เตเดทเตป เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดชเดฑเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เตป เด—เตเดฐเต‚เดชเตเดชเตเด•เดณเดพเดฏเดฟ เด—เตเดฐเต‚เดชเตเดชเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดฏเตเด•เตเดคเดฟเดธเดนเดฎเดพเดฃเต†เดจเตเดจเต เดคเต‹เดจเตเดจเตเดจเตเดจเต. เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เด—เตเดฐเต‚เดชเตเดชเตเด•เดณเดพเดฏเดฟ เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. 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. เด“เดฐเต‹ เด•เตเดฒเดธเตเดฑเตเดฑเตผ เด‡เตปเดธเตโ€Œเดฑเตเดฑเตปเดธเตเด‚ เด…เตปเดธเดฟเดฌเดฟเตพ เดชเดฆเด™เตเด™เดณเดฟเตฝ เด’เดฐเต เดนเต‹เดธเตเดฑเตเดฑเต เด†เดฏเดคเดฟเดจเดพเตฝ, เดชเตเดฒเต‡เดฌเตเด•เตเด•เต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดเดคเตŠเด•เตเด•เต† เดธเดจเตเดฆเตผเดญเด™เตเด™เดณเดพเดฃเต เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเต†เดจเตเดจเต เดจเดฎเตเด•เตเด•เต เดตเตเดฏเด•เตเดคเดฎเดพเดฏเดฟ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚.

เดตเต†เดฌเต เดฏเตเดเดฏเดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เตเด• http://localhost:8181/admin/cluster/dashboard เดžเด™เตเด™เดณเตเดŸเต† เดชเตเดคเดฟเดฏ เดธเด‚เดญเดตเด™เตเด™เตพ เด•เดพเดฃเตเด•:

เดŸเดพเดฐเดจเตเดฑเต‚เตพ เด•เดพเดŸเตเดฐเดฟเดกเตเดœเดฟเดฒเต‡เด•เตเด•เต เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเดฒเตเด‚ เดธเตเดตเดพเดญเดพเดตเดฟเด•เดฎเดพเดฏเตเด‚ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเด• (เดญเดพเด—เด‚ 1)

เดžเด™เตเด™เดณเตเดŸเต† เดจเต‡เดŸเตเดŸเด™เตเด™เดณเดฟเตฝ เดžเด™เตเด™เตพ เดตเดฟเดถเตเดฐเดฎเดฟเด•เตเด•เดฟเดฒเตเดฒ, เด•เต‚เดŸเดพเดคเต† เดŸเต‹เดชเตเดชเต‹เดณเดœเดฟ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเดคเตเดคเดฟเตฝ เดตเตˆเดฆเด—เตเดฆเตเดงเตเดฏเด‚ เดจเต‡เดŸเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚.

เดŸเต‹เดชเตเดชเต‹เดณเดœเดฟ เดฎเดพเดจเต‡เดœเตเดฎเต†เดจเตเดฑเต

เดจเดฎเตเด•เตเด•เต เดจเดฎเตเดฎเตเดŸเต† เดชเตเดคเดฟเดฏ เดธเด‚เดญเดตเด™เตเด™เตพ เด’เดฐเต เดชเด•เตผเดชเตเดชเดฟเดฒเต‡เด•เตเด•เต เดฒเดฏเดฟเดชเตเดชเดฟเด•เตเด•เดพเด‚ 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.

เดจเดฎเตเดฎเตเดŸเต† เดชเตเดฐเดฏเดคเตเดจเดคเตเดคเดฟเดจเตเดฑเต† เดซเดฒเด‚ เดจเดฎเตเด•เตเด•เต เดตเดฟเดฒเดฏเดฟเดฐเตเดคเตเดคเดพเด‚. เด’เดฐเต เดชเตเดคเดฟเดฏ เดชเด•เตผเดชเตเดชเต เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจเต http://localhost:8181/admin/cluster/dashboard.

เดŸเดพเดฐเดจเตเดฑเต‚เตพ เด•เดพเดŸเตเดฐเดฟเดกเตเดœเดฟเดฒเต‡เด•เตเด•เต เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเดฒเตเด‚ เดธเตเดตเดพเดญเดพเดตเดฟเด•เดฎเดพเดฏเตเด‚ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเด• (เดญเดพเด—เด‚ 1)

เด•เต†เดพเดณเตเดณเดพเด‚!

เด‡เตปเดธเตเดฑเตเดฑเตปเดธเตเด•เดณเตเด‚ เดฑเต†เดชเตเดฒเดฟเด•เตเด•เต‡เดฑเตเดฑเตเด•เดณเตเด‚ เดชเตเดจเดƒเด•เตเดฐเดฎเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดชเดฐเต€เด•เตเดทเดฟเดšเตเดšเต เด•เตเดฒเดธเตเดฑเตเดฑเตผ เดŸเต‹เดชเตเดชเต‹เดณเดœเดฟ เดŽเด™เตเด™เดจเต† เดฎเดพเดฑเตเดจเตเดจเตเดตเต†เดจเตเดจเต เด•เดพเดฃเตเด•. เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดตเตเดฏเดคเตเดฏเดธเตเดค เดชเตเดฐเดตเตผเดคเตเดคเดจ เดธเดพเดนเดšเดฐเตเดฏเด™เตเด™เตพ เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เดพเด‚, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดฑเต‹เดณเดฟเด‚เด—เต เด…เดชเตเดกเต‡เดฑเตเดฑเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดตเตผเดฆเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเด• memtx_memory. เดจเดฟเด™เตเด™เดณเตเดŸเต† เด…เดชเต‡เด•เตเดทเดฏเตเดŸเต† เดธเดพเดงเตเดฏเดฎเดพเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจเดฐเดนเดฟเดคเดฎเดพเดฏ เดธเดฎเดฏเด‚ เด•เตเดฑเดฏเตเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เด‰เดฆเดพเดนเดฐเดฃเด‚ เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เดพเดคเต† เดคเดจเตเดจเต† เดฑเต‹เตพ เด‡เดคเต เดšเต†เดฏเตเดฏเดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เตเด‚.

เด“เดŸเดพเตป เดฎเดฑเด•เตเด•เดฐเตเดคเต vagrant haltเดจเดฟเด™เตเด™เตพ เด…เดต เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เตเดฎเตเดชเต‹เตพ VM-เด•เตพ เดจเดฟเตผเดคเตเดคเดพเตป.

เดชเดฟเดจเตเดจเต† เดŽเดจเตเดคเดพเดฃเตเดณเตเดณเดคเต?

เดžเด™เตเด™เดณเตเดŸเต† เดชเดฐเต€เด•เตเดทเดฃเด™เตเด™เตพเด•เตเด•เดฟเดŸเดฏเดฟเตฝ เด…เตปเดธเดฟเดฌเดฟเตพ เดฑเต‹เดณเดฟเดจเต เด•เต€เดดเดฟเตฝ เดŽเดจเตเดคเดพเดฃเต เดธเด‚เดญเดตเดฟเดšเตเดšเดคเต†เดจเตเดจเต เดžเดพเตป เด‡เดตเดฟเดŸเต† เด•เต‚เดŸเตเดคเตฝ เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเด‚.

เด•เดพเดŸเตเดฐเดฟเดกเตเดœเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เด˜เดŸเตเดŸเด‚ เด˜เดŸเตเดŸเดฎเดพเดฏเดฟ เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเดจเตเดจเดคเต เดจเต‹เด•เตเด•เดพเด‚.

เดชเดพเด•เตเด•เต‡เดœเต เด‡เตปเดธเตเดฑเตเดฑเดพเดณเตเดšเต†เดฏเตเดฏเดฒเตเด‚ เด†เดฐเด‚เดญ เดธเด‚เดญเดตเด™เตเด™เดณเตเด‚

เด†เดฆเตเดฏเด‚ เดจเดฟเด™เตเด™เตพ เดชเดพเด•เตเด•เต‡เดœเต เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เดŽเดคเตเดคเดฟเดšเตเดšเต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเดฃเด‚. เด‡เดชเตเดชเต‹เตพ เดฑเต‹เดณเดฟเดจเต RPM, DEB เดชเดพเด•เตเด•เต‡เดœเตเด•เตพเด•เตเด•เตŠเดชเตเดชเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเดจเดพเด•เตเด‚.

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เดžเด™เตเด™เตพ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดตเดฟเดŸเต† เดŽเดฒเตเดฒเดพเด‚ เดตเดณเดฐเต† เดฒเดณเดฟเดคเดฎเดพเดฃเต: เด“เดฐเต‹ เดธเด‚เดญเดตเดตเตเด‚ เดชเตเดฐเดคเตเดฏเต‡เด•เดฎเดพเดฃเต systemd- เดธเต‡เดตเดจเด‚. เดžเดพเตป เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดคเดฐเดพเด‚:

$ systemctl start myapp@storage-1

เดˆ เด•เดฎเดพเตปเดกเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด‚ storage-1 เด…เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ myapp. เดธเดฎเดพเดฐเด‚เดญเดฟเดšเตเดš เด‰เดฆเดพเดนเดฐเดฃเด‚ เด…เดคเดฟเดจเตเดตเต‡เดฃเตเดŸเดฟ เดจเต‹เด•เตเด•เตเด‚ เด•เต‡เดพเตบเดซเดฟเด—เดฑเต‡เดทเตป ะฒ /etc/tarantool/conf.d/. เด‰เดฆเดพเดนเดฐเดฃ เดฐเต‡เด–เด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚ journald.

เดฏเต‚เดฃเดฟเดฑเตเดฑเต เดซเดฏเตฝ /etc/systemd/system/[email protected] เด’เดฐเต systemd เดธเต‡เดตเดจเด‚ เดชเดพเด•เตเด•เต‡เดœเดฟเดจเตŠเดชเตเดชเด‚ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดฏเตเด‚.

เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ systemd เดธเต‡เดตเดจเด™เตเด™เตพ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดฌเดฟเตฝเดฑเตเดฑเต-เด‡เตป เดฎเตŠเดกเตเดฏเต‚เดณเตเด•เตพ Ansible-เตฝ เด‰เดฃเตเดŸเต, เดžเด™เตเด™เตพ เด‡เดตเดฟเดŸเต† เดชเตเดคเดฟเดฏเดคเดพเดฏเดฟ เด’เดจเตเดจเตเด‚ เด•เดฃเตเดŸเตเดชเดฟเดŸเดฟเดšเตเดšเดฟเดŸเตเดŸเดฟเดฒเตเดฒ.

เด’เดฐเต เด•เตเดฒเดธเตเดฑเตเดฑเตผ เดŸเต‹เดชเตเดชเต‹เดณเดœเดฟ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต

เด‡เดตเดฟเดŸเต†เดฏเดพเดฃเต เดตเดฟเดจเต‹เดฆเด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเต. เดธเดฎเตเดฎเดคเดฟเด•เตเด•เตเดจเตเดจเต, เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เด…เตปเดธเดฟเดฌเดฟเตพ เดฑเต‹เดณเดฟเตฝ เดตเดฟเดทเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเต เดตเดฟเดšเดฟเดคเตเดฐเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚ systemd-เดธเต‡เดตเดจเด™เตเด™เดณเต.

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เตเดฒเดธเตเดฑเตเดฑเตผ เดธเตเดตเดฎเต‡เดงเดฏเดพ เด•เตเดฐเดฎเต€เด•เดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚:

  • เด†เดฆเตเดฏ เด“เดชเตเดทเตป: เดตเต†เดฌเต เดฏเตเด เดคเตเดฑเดจเตเดจเต เดฌเดŸเตเดŸเดฃเตเด•เดณเดฟเตฝ เด•เตเดฒเดฟเด•เตเด•เต เดšเต†เดฏเตเดฏเตเด•. เดจเดฟเดฐเดตเดงเดฟ เดธเด‚เดญเดตเด™เตเด™เดณเตเดŸเต† เด’เดฑเตเดฑเดคเตเดคเดตเดฃ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด‡เดคเต เดคเดฟเด•เดšเตเดšเตเด‚ เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฃเต.
  • เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต† เด“เดชเตเดทเตป: เดจเดฟเด™เตเด™เตพเด•เตเด•เต GraphQl API เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚. เด‡เดตเดฟเดŸเต† เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดคเดฟเดจเด•เด‚ เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เด“เดŸเตเดŸเต‹เดฎเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดชเตˆเดคเตเดคเดฃเดฟเตฝ เด’เดฐเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดŽเดดเตเดคเตเด•.
  • เดฎเต‚เดจเตเดจเดพเดฎเดคเตเดคเต† เด“เดชเตโ€Œเดทเตป (เดถเด•เตเดคเดฎเดพเดฏ เด‡เดšเตเด›เดพเดถเด•เตเดคเดฟเดฏเตเดณเตเดณเดตเตผเด•เตเด•เต): เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเด•, เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดฐเต เดธเดจเตเดฆเตผเดญเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เด•เดฃเด•เตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเด• tarantoolctl connect เดฒเตเดตเดพ เดฎเตŠเดกเตเดฏเต‚เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด†เดตเดถเตเดฏเดฎเดพเดฏ เดŽเดฒเตเดฒเดพ เด•เตƒเดคเตเดฐเดฟเดฎเดคเตเดตเด™เตเด™เดณเตเด‚ เดจเดŸเดคเตเดคเตเด• cartridge.

เดžเด™เตเด™เดณเตเดŸเต† เด•เดฃเตเดŸเตเดชเดฟเดŸเตเดคเตเดคเดคเตเดคเดฟเดจเตเดฑเต† เดชเตเดฐเดงเดพเดจ เดฆเตŒเดคเตเดฏเด‚ เด‡เดคเต เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เดšเต†เดฏเตเดฏเตเด• เดŽเดจเตเดจเดคเดพเดฃเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เตเดณเตเดณ เดœเต‹เดฒเดฟเดฏเตเดŸเต† เดเดฑเตเดฑเดตเตเด‚ เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเตเดณเตเดณ เดญเดพเด—เด‚.

เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เดฎเตŠเดกเตเดฏเต‚เตพ เดŽเดดเตเดคเดพเดจเตเด‚ เด’เดฐเต เดฑเต‹เดณเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดจเตเด‚ เด…เตปเดธเดฟเดฌเดฟเตพ เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดจเตเดฑเต† เดตเดฟเดตเดฟเดง เด˜เดŸเด•เด™เตเด™เตพ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเดพเตป เดžเด™เตเด™เดณเตเดŸเต† เดฑเต‹เตพ เดˆ เดฎเตŠเดกเตเดฏเต‚เดณเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต.

เด‡เดคเต เดŽเด™เตเด™เดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต? เด’เดฐเต เดกเดฟเด•เตเดฒเดฑเต‡เดฑเตเดฑเต€เดตเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดจเตเดฑเต† เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เด…เดตเดธเตเดฅ เดจเดฟเด™เตเด™เตพ เดตเดฟเดตเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เดฑเต‹เตพ เด“เดฐเต‹ เดฎเตŠเดกเตเดฏเต‚เดณเดฟเดจเตเด‚ เด…เดคเดฟเดจเตเดฑเต† เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดตเดฟเดญเดพเด—เด‚ เด‡เตปเดชเตเดŸเตเดŸเดพเดฏเดฟ เดจเตฝเด•เตเดจเตเดจเต. เดฎเตŠเดกเตเดฏเต‚เตพ เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดจเตเดฑเต† เดจเดฟเดฒเดตเดฟเดฒเต† เด…เดตเดธเตเดฅ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด‡เตปเดชเตเดŸเตเดŸเดพเดฏเดฟ เดฒเดญเดฟเดšเตเดšเดคเตเดฎเดพเดฏเดฟ เดคเดพเดฐเดคเดฎเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เด’เดฐเต เดธเด‚เดญเดตเดคเตเดคเดฟเดจเตเดฑเต† เดธเต‹เด•เตเด•เดฑเตเดฑเดฟเดฒเต‚เดŸเต† เด’เดฐเต เด•เต‹เดกเต เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดจเต† เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เด…เดตเดธเตเดฅเดฏเดฟเดฒเต‡เด•เตเด•เต เด•เตŠเดฃเตเดŸเตเดตเดฐเตเดจเตเดจเต.

เดซเดฒเด™เตเด™เตพ

เดŸเดพเดฐเดจเตเดฑเต‚เตพ เด•เดพเดŸเตเดฐเดฟเดกเตเดœเดฟเตฝ เดจเดฟเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดŽเด™เตเด™เดจเต† เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเตเด‚ เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดŸเต‹เดชเตเดชเต‹เดณเดœเดฟ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเตเด‚ เด‡เดจเตเดจเต เดžเด™เตเด™เตพ เดชเดฑเดฏเตเด•เดฏเตเด‚ เด•เดพเดฃเดฟเดšเตเดšเตเดคเดฐเดฟเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต. เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดžเด™เตเด™เตพ เด…เตปเดธเดฟเดฌเดฟเตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เด…เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดŽเดณเตเดชเตเดชเดฎเตเดณเตเดณเดคเตเด‚ เดจเดฟเดฐเดตเดงเดฟ เด‡เตปเดซเตเดฐเดพเดธเตเดŸเตเดฐเด•เตเดšเตผ เดจเต‹เดกเตเด•เตพ เด’เดฐเต‡เดธเดฎเดฏเด‚ เด•เตเดฐเดฎเต€เด•เดฐเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเดคเตเดฎเดพเดฏ เด’เดฐเต เดถเด•เตเดคเดฎเดพเดฏ เด‰เดชเด•เดฐเดฃเดฎเดพเดฃเต (เดžเด™เตเด™เดณเตเดŸเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เด‡เดต เด•เตเดฒเดธเตเดฑเตเดฑเตผ เดธเด‚เดญเดตเด™เตเด™เดณเดพเดฃเต).

เดฎเตเด•เดณเดฟเตฝ, เด…เตปเดธเดฟเดฌเดฟเตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด•เตเดฒเดธเตเดฑเตเดฑเตผ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดตเดฟเดตเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดจเดฟเดฐเดตเดงเดฟ เดฎเดพเตผเด—เด™เตเด™เดณเดฟเตฝ เด’เดจเตเดจเต เดžเด™เตเด™เตพ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดคเต. เดจเดฟเด™เตเด™เตพ เดฎเตเดจเตเดจเต‹เดŸเตเดŸเต เดชเต‹เด•เดพเตป เดคเดฏเตเดฏเดพเดฑเดพเดฃเต†เดจเตเดจเต เด…เดฑเดฟเดžเตเดžเตเด•เดดเดฟเดžเตเดžเดพเตฝ, เดชเด เดฟเด•เตเด•เตเด• เดฎเดฟเด•เดšเตเดš เดฐเต€เดคเดฟเด•เตพ เดชเตเดฒเต‡เดฌเตเด•เตเด•เตเด•เตพ เดŽเดดเตเดคเตเดจเตเดจเดคเดฟเตฝ. เดจเดฟเด™เตเด™เดณเตเดŸเต† เดŸเต‹เดชเตเดชเต‹เดณเดœเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต†เดจเตเดจเต เดคเต‹เดจเตเดจเดฟเดฏเต‡เด•เตเด•เดพเด‚ group_vars ะธ host_vars.

เดŸเต‹เดชเตเดชเต‹เดณเดœเดฟ, เดฌเต‚เดŸเตเดŸเตโ€Œเดธเตโ€ŒเดŸเตเดฐเดพเดชเตเดชเต vshard, เด“เดŸเตเดŸเต‹เดฎเดพเดฑเตเดฑเดฟเด•เต เดซเต†เดฏเตโ€Œเดฒเต‹เดตเตผ เดฎเต‹เดกเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เตฝ, เด…เด‚เด—เต€เด•เดพเดฐเด‚ เด•เตเดฐเดฎเต€เด•เดฐเดฟเด•เตเด•เตฝ, เด•เตเดฒเดธเตเดฑเตเดฑเตผ เด•เต‹เตบเดซเดฟเด—เตผ เดชเดพเดšเตเดšเต เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดŽเด™เตเด™เดจเต† เดถเดพเดถเตเดตเดคเดฎเดพเดฏเดฟ เด‡เตปเดธเตเดฑเตเดฑเตปเดธเตเด•เตพ เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตเดฏเดพเดฎเต†เดจเตเดจเตเด‚ (เดชเตเดฑเดจเตเดคเดณเตเดณเดพเดฎเต†เดจเตเดจเตเด‚) เด‰เดŸเตป เดคเดจเตเดจเต† เดžเด™เตเด™เตพ เดจเดฟเด™เตเด™เดณเต‹เดŸเต เดชเดฑเดฏเตเด‚. เด…เดคเดฟเดจเดฟเดŸเดฏเดฟเตฝ เดธเตเดตเดจเตเดคเดฎเดพเดฏเดฟ เดชเด เดฟเด•เตเด•เดพเด‚ เดชเตเดฐเดฎเดพเดฃเต€เด•เดฐเดฃเด‚ เด•เต‚เดŸเดพเดคเต† เด•เตเดฒเดธเตเดฑเตเดฑเตผ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดฎเดพเดฑเตเดฑเดฟเด•เตเด•เตŠเดฃเตเดŸเต เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเด•.

เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด‰เดฑเดชเตเดชเดพเด•เตเด•เตเด• เด…เดฑเดฟเดฏเดฟเด•เตเด•เตเด• เดชเตเดฐเดถเตเดจเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดžเด™เตเด™เดณเต‹เดŸเต. เดžเด™เตเด™เตพ เด…เดคเต เดตเต‡เด—เดคเตเดคเดฟเตฝ เดคเด•เตผเด•เตเด•เตเด‚!

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•