เบ™เบณเปƒเบŠเป‰เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปƒเบชเปˆเบ•เบญเบเบ•เบฐเบเบญเบ™ Tarantool เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ เปเบฅเบฐเป€เบ›เบฑเบ™เบ—เบณเบกเบฐเบŠเบฒเบ” (เบชเปˆเบงเบ™เบ—เบต 1)

เบ™เบณเปƒเบŠเป‰เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปƒเบชเปˆเบ•เบญเบเบ•เบฐเบเบญเบ™ Tarantool เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ เปเบฅเบฐเป€เบ›เบฑเบ™เบ—เบณเบกเบฐเบŠเบฒเบ” (เบชเปˆเบงเบ™เบ—เบต 1)

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เปเบฅเป‰เบง เบ–เบฑเบ‡เป€เบเบฑเบšเบกเป‰เบฝเบ™, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบžเบทเปˆเบญเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปเบˆเบเบขเบฒเบเปเบฅเบฐเบซเบธเป‰เบกเบซเปเปˆเปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ. เบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเปเบกเปˆเบ™เบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบ™เบณเปƒเบŠเป‰เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰ เปเบฅเบฐเบˆเบฑเบ”เบเบฒเบ™เบžเบงเบเบกเบฑเบ™. เบšเปเปˆเบ•เป‰เบญเบ‡เป€เบ›เบฑเบ™เบซเปˆเบงเบ‡, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบกเบฑเบ™เบ—เบฑเบ‡เปเบปเบ”เปเบฅเป‰เบง! เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบปเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบฎเปˆเบงเบกเบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš Tarantool Cartridge เปเบฅเบฐเบ‚เบฝเบ™ เบšเบปเบ”เบšเบฒเบ” ansible, เป€เบŠเบดเปˆเบ‡เบˆเบฐเปเบˆเบเบขเบฒเบเปเบžเบฑเบเป€เบเบฑเบ”เปƒเบซเป‰เบเบฑเบšเป€เบŠเบตเบšเป€เบงเบต, เป€เบ›เบตเบ”เบ•เบปเบงเบ•เบปเบงเบขเปˆเบฒเบ‡, เป‚เบฎเบกเบžเบงเบเบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบเบธเปˆเบก, เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”, bootstrap vshard, เป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เบฅเบปเป‰เบกเป€เบซเบฅเบงเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปเบฅเบฐเปเบเป‰เป„เบ‚เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เบเบธเปˆเบก.

เบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆ? เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบฐเบฅเบธเบ™เบฒ, เบžเบฒเบเปƒเบ•เป‰เบเบฒเบ™เบ•เบฑเบ”, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเบญเบเบ—เปˆเบฒเบ™เปเบฅเบฐเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบซเบฑเบ™เบ—เบธเบเบขเปˆเบฒเบ‡.

เปƒเบซเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบ•เบปเบงเบขเปˆเบฒเบ‡

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบšเบดเปˆเบ‡เบžเบฝเบ‡เปเบ•เปˆเบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบ‚เบญเบ‡เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบ„เบณเบญเบฐเบ—เบดเบšเบฒเบเบ—เบตเปˆเบชเบปเบกเบšเบนเบ™เบ‚เบญเบ‡เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ—เบฑเบ‡เปเบปเบ”เบ‚เบญเบ‡เบกเบฑเบ™ เปเบฅเบฐเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบ™ เป€เบญเบเบฐเบชเบฒเบ™. เปเบ•เปˆเบกเบฑเบ™เบ”เบตเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเบ„เบฑเป‰เบ‡เบ”เบฝเบงเบเปˆเบงเบฒเบ—เบตเปˆเบˆเบฐเป€เบซเบฑเบ™เบกเบฑเบ™เบฎเป‰เบญเบเป€เบ—เบทเปˆเบญ, เบชเบฐเบ™เบฑเป‰เบ™เปƒเบซเป‰เปƒเบŠเป‰เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ.

Tarantool Cartridge เบกเบต เบเบฒเบ™เบชเบญเบ™ เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Cartridge เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบ—เบตเปˆเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบฅเบนเบเบ„เป‰เบฒเบ—เบฐเบ™เบฒเบ„เบฒเบ™เปเบฅเบฐเบšเบฑเบ™เบŠเบตเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ, เปเบฅเบฐเบเบฑเบ‡เบชเบฐเบซเบ™เบญเบ‡ API เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบœเปˆเบฒเบ™ HTTP. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เป€เบญเบเบฐเบชเบฒเบ™เบŠเป‰เบญเบ™เบ—เป‰เบฒเบเบญเบฐเบ—เบดเบšเบฒเบเบชเบญเบ‡เบšเบปเบ”เบšเบฒเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰: api ะธ storage, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเบกเบญเบšเบซเบกเบฒเบเปƒเบซเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡.

Cartridge เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เบšเปเปˆเป„เบ”เป‰เป€เบงเบปเป‰เบฒเบซเบเบฑเบ‡เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบ‚เบฐเบšเบงเบ™เบเบฒเบ™, เบกเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบฐเบซเบ™เบญเบ‡เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบเปเบฒเบซเบ™เบปเบ”เบ„เปˆเบฒเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเปเบฅเปˆเบ™เปเบฅเป‰เบง. เบœเบนเป‰เปƒเบŠเป‰เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡: เบˆเบฑเบ”เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เปเบฅเบฐ configure topology. เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเป€เบฎเบฑเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰; Ansible เบˆเบฐเป€เบฎเบฑเบ”เป€เบžเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒ.

เบˆเบฒเบเบ„เปเบฒเป€เบงเบปเป‰เบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เบเบฐเบ—เปเบฒ

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบซเป‰เปƒเบŠเป‰เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบšเบชเบญเบ‡เป€เบ„เบทเปˆเบญเบ‡ virtual เปเบฅเบฐเบ•เบฑเป‰เบ‡เบ„เปˆเบฒ topology เบ‡เปˆเบฒเบเป†:

  • เบŠเบธเบ”เบˆเบณเบฅเบญเบ‡ app-1 เบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ” api, เป€เบŠเบดเปˆเบ‡เบ›เบฐเบเบญเบšเบกเบตเบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ” vshard-router. เบˆเบฐเบกเบตเบ•เบปเบงเบขเปˆเบฒเบ‡เบ”เบฝเบงเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰.
  • เบŠเบธเบ”เบˆเบณเบฅเบญเบ‡ storage-1 เบ›เบฐเบ•เบดเบšเบฑเบ”เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ” storage (เปเบฅเบฐเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™ vshard-storage), เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบžเบตเปˆเบกเบชเบญเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เบ™เบณเปƒเบŠเป‰เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปƒเบชเปˆเบ•เบญเบเบ•เบฐเบเบญเบ™ Tarantool เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ เปเบฅเบฐเป€เบ›เบฑเบ™เบ—เบณเบกเบฐเบŠเบฒเบ” (เบชเปˆเบงเบ™เบ—เบต 1)

เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™ เบงเบตเบŠเบฒ ะธ เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆ (เป€เบงเบตเบŠเบฑเบ™ 2.8 เบซเบผเบทเบชเบนเบ‡เบเบงเปˆเบฒ).

เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™ Ansible Galaxy. เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ—เบตเปˆเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปเบšเปˆเบ‡เบ›เบฑเบ™เบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบ—เบตเปˆเบเบฝเบกเบžเป‰เบญเบก.

เปƒเบซเป‰ clone repository เบ”เป‰เบงเบเบ•เบปเบงเบขเปˆเบฒเบ‡:

$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git
$ cd deploy-tarantool-cartridge-app && git checkout 1.0.0

เบžเบงเบเป€เบฎเบปเบฒเบเบปเบเป€เบ„เบทเปˆเบญเบ‡ virtual:

$ vagrant up

เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Tarantool Cartridge เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ” ansible:

$ ansible-galaxy install tarantool.cartridge,1.0.1

เป€เบ›เบตเบ”เบ•เบปเบงเบšเบปเบ”เบšเบฒเบ”เบ—เบตเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡:

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

เบžเบงเบเป€เบฎเบปเบฒเบฅเปเบ–เป‰เบฒ playbook เบชเปเบฒเป€เบฅเบฑเบ”เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เป„เบ›เบ—เบตเปˆ http://localhost:8181/admin/cluster/dashboard เปเบฅเบฐโ€‹เบกเบตโ€‹เบ„เบงเบฒเบกโ€‹เบชเบธเบโ€‹เบœเบปเบ™โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹:

เบ™เบณเปƒเบŠเป‰เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปƒเบชเปˆเบ•เบญเบเบ•เบฐเบเบญเบ™ Tarantool เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ เปเบฅเบฐเป€เบ›เบฑเบ™เบ—เบณเบกเบฐเบŠเบฒเบ” (เบชเปˆเบงเบ™เบ—เบต 1)

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเบฑเบšเป‚เบซเบฅเบ”เบ‚เปเป‰เบกเบนเบ™. เป€เบขเบฑเบ™, เบชเบดเบ”?

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ„เบดเบ”เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบชเบดเปˆเบ‡เบ™เบตเป‰, เปเบฅเบฐเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เป€เบžเบตเปˆเบกเบŠเบธเบ” replica เบญเบทเปˆเบ™เปƒเบซเป‰เบเบฑเบš topology.

เปƒเบซเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆเบˆเบฐเบ„เบดเบ”เบญเบญเบ

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™?

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ•เบฑเป‰เบ‡เบชเบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบชเบฐเป€เปเบทเบญเบ™ เปเบฅเบฐเป€เบ›เบตเบ”เป‚เบ•เบ›เบถเป‰เบกเบซเบผเบดเป‰เบ™เบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ™เบณเปƒเบŠเป‰เป„เบ”เป‰เบ—เบตเปˆเบเบณเบ™เบปเบ”เบ„เปˆเบฒเบเบธเปˆเบกเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เป„เบŸเบฅเปŒ 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:

เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบฎเบฝเบ™เบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™ instances เปเบฅเบฐ replicasets เป‚เบ”เบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ™เบตเป‰. เบ•เปเปˆเป„เบ›เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบžเบตเปˆเบกเบžเบฒเบเบชเปˆเบงเบ™เปƒเบซเบกเปˆเปƒเบชเปˆเบกเบฑเบ™. เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบชเบฑเบšเบชเบปเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบžเบงเบเบกเบฑเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบชเบฐเบšเบฑเบšเบชเบธเบ”เบ—เป‰เบฒเบเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ™เบตเป‰, hosts.updated.yml, เป€เบŠเบดเปˆเบ‡เบขเบนเปˆเปƒเบ™ repository เบ•เบปเบงเบขเปˆเบฒเบ‡.

เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡

เปƒเบ™เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚ Ansible, เปเบ•เปˆเบฅเบฐเบ•เบปเบงเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เป‚เบฎเบ” (เบšเปเปˆเบ„เบงเบ™เบชเบฑเบšเบชเบปเบ™เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบฎเบฒเบ”เปเบง), i.e. เบ‚เปเป‰เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบตเปˆ 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 เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ•เบปเบงเบขเปˆเบฒเบ‡. เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบชเบปเบกเป€เบซเบ”เบชเบปเบกเบœเบปเบ™เบ—เบตเปˆเบˆเบฐเบˆเบฑเบ”เบเบธเปˆเบกเบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบเบธเปˆเบกเป€เบ„เบทเปˆเบญเบ‡ virtual. เบชเปเบฒเบฅเบฑเบšเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ™เบตเป‰, เบ•เบปเบงเบขเปˆเบฒเบ‡เบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเป€เบ›เบฑเบ™เบเบธเปˆเบก host1 ะธ host2, เปเบฅเบฐเปƒเบ™เปเบ•เปˆเบฅเบฐเบเบธเปˆเบกเบขเบนเปˆเปƒเบ™เบžเบฒเบ vars เบ„เปˆเบฒเปเบกเปˆเบ™เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™ ansible_host ะธ ansible_user เบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเปˆเบญเบ‡ virtual เบซเบ™เบถเปˆเบ‡. เปเบฅเบฐเปƒเบ™เบžเบฒเบ hosts โ€” hosts (aka instances) เบ—เบตเปˆโ€‹เบฅเบงเบกโ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบเบธเปˆเบกโ€‹เบ™เบตเป‰โ€‹:

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 เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡ virtual เบ—เปเบฒเบญเบดเบ”เปเบฅเบฐ 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. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเปเบ•เปˆเบฅเบฐ instance cluster เป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒเบžเบฒเบšเปƒเบ™เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚ Ansible, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบฅเบฐเบšเบธเบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒ instances เปƒเบ”เบ„เบงเบ™เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ” playbook.

เบเบฑเบšเป„เบ›เบ—เบตเปˆ Web UI http://localhost:8181/admin/cluster/dashboard เปเบฅเบฐเป€เบšเบดเปˆเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เปƒเบซเบกเปˆเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

เบ™เบณเปƒเบŠเป‰เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปƒเบชเปˆเบ•เบญเบเบ•เบฐเบเบญเบ™ Tarantool เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ เปเบฅเบฐเป€เบ›เบฑเบ™เบ—เบณเบกเบฐเบŠเบฒเบ” (เบชเปˆเบงเบ™เบ—เบต 1)

เบšเปเปˆเปƒเบซเป‰เบขเบธเบ”เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™เปเบฅเบฐเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡ topology เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš.

เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™ Topology

เปƒเบซเป‰เบฅเบงเบกเบ•เบปเบงเบขเปˆเบฒเบ‡เปƒเบซเบกเปˆเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบŠเบธเบ” replica storage-2. เบกเบฒเป€เบžเบตเปˆเบกเบเบธเปˆเบกเปƒเปเปˆ replicaset_storage_2 เปเบฅเบฐเบญเบฐเบ—เบดเบšเบฒเบเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ replicaset เปƒเบ™เบ•เบปเบงเปเบ›เบ‚เบญเบ‡เบกเบฑเบ™เป‚เบ”เบเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบเบฑเบš replicaset_storage_1. เปƒเบ™เบžเบฒเบ hosts เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบŠเบตเป‰เบšเบญเบเบงเปˆเบฒเบ•เบปเบงเบขเปˆเบฒเบ‡เปƒเบ”เบˆเบฐเบ–เบทเบเบฅเบงเบกเบขเบนเปˆเปƒเบ™เบเบธเปˆเบกเบ™เบตเป‰ (เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบŠเบธเบ” replica เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ):

---
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 เป€เบงเบฅเบฒเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบœเปˆเบฒเบ™เบŠเบทเปˆเบ‚เบญเบ‡เบเบธเปˆเบกเบ—เบตเปˆเบเบปเบ‡เบเบฑเบš replicaset เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เปƒเบซเป‰เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ—เบฒเบ‡เป€เบฅเบทเบญเบ tags.

เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบงเบฝเบเบ‡เบฒเบ™เบ•เปˆเบฒเบ‡เป†เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš, เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบซเบกเบฒเบเบ”เป‰เบงเบเปเบ—เบฑเบเบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • cartridge-instances: เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡ (เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบชเบฐเบกเบฒเบŠเบดเบ);
  • cartridge-replicasets: เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™ topology (เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™ replicaset เปเบฅเบฐเบเบฒเบ™เป‚เบเบเบเป‰เบฒเบเบ–เบฒเบงเบญเบ™ (expel) เบ‚เบญเบ‡ instances เบˆเบฒเบ cluster);
  • cartridge-config: เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ‚เบญเบ‡เบเบธเปˆเบกเบญเบทเปˆเบ™เป† (vshard bootstrapping, เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบฅเบปเป‰เบกเป€เบซเบผเบงเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปเบฅเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ).

เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบฅเบฐเบšเบธเป„เบ”เป‰เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบชเปˆเบงเบ™เปƒเบ”เบ‚เบญเบ‡เบงเบฝเบเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบˆเบฐเบ‚เป‰เบฒเบกเบงเบฝเบเบ‡เบฒเบ™เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญ. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบžเบฝเบ‡เปเบ•เปˆเบเบฑเบš topology, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบ™เบปเบ” cartridge-replicasets.

เปƒเบซเป‰เบ›เบฐเป€เบกเบตเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบŠเบญเบโ€‹เบซเบฒ replicaset เปƒเบซเบกเปˆโ€‹เปƒเบ™ http://localhost:8181/admin/cluster/dashboard.

เบ™เบณเปƒเบŠเป‰เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปƒเบชเปˆเบ•เบญเบเบ•เบฐเบเบญเบ™ Tarantool เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ เปเบฅเบฐเป€เบ›เบฑเบ™เบ—เบณเบกเบฐเบŠเบฒเบ” (เบชเปˆเบงเบ™เบ—เบต 1)

เบฎเบท!

เบ—เบปเบ”เบฅเบญเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡ เปเบฅเบฐเบŠเบธเบ”เปเบšเบšเบˆเบณเบฅเบญเบ‡ เปเบฅเบฐเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบเบธเปˆเบก topology เบ›เปˆเบฝเบ™เปเบ›เบ‡เปเบ™เบงเปƒเบ”. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบญเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เป€เบŠเบฑเปˆเบ™:. เบเบฒเบ™โ€‹เบ›เบฑเบšโ€‹เบ›เบธเบ‡โ€‹เบกเป‰เบงเบ™โ€‹ เบซเบผเบทเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™ memtx_memory. เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ›เบดเบ”เป€เบ›เบตเบ”เบ•เบปเบงเบขเปˆเบฒเบ‡เบ„เบทเบ™เปƒเบซเบกเปˆเป€เบžเบทเปˆเบญเบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เบขเบธเบ”เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™.

เบขเปˆเบฒเบฅเบทเบกเปเบฅเปˆเบ™ vagrant haltเป€เบžเบทเปˆเบญเบขเบธเบ”เป€เบ„เบทเปˆเบญเบ‡ virtual เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบžเบงเบเบกเบฑเบ™เปเบฅเป‰เบง.

เบกเบตเบซเบเบฑเบ‡เบขเบนเปˆเบžเบฒเบเปƒเบ•เป‰เบœเป‰เบฒเบญเป‰เบญเบก?

เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบšเบญเบเบ—เปˆเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบžเบฒเบเปƒเบ•เป‰ hood เบ‚เบญเบ‡เบšเบปเบ”เบšเบฒเบ” ansible เปƒเบ™เป„เบฅเบเบฐเบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เบฅเบญเบ‡เป€เบšเบดเปˆเบ‡เบเบฒเบ™เบ™เบณเป„เบ›เปƒเบŠเป‰เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเปˆเบ™ Cartridge เป‚เบ”เบเบ‚เบฑเป‰เบ™เบ•เบญเบ™.

เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบžเบฑเบเป€เบเบฑเบ”เปเบฅเบฐเบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™

เบ—เปเบฒเบญเบดเบ”เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเบปเปˆเบ‡เบŠเบธเบ”เปƒเบซเป‰เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบฅเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบกเบฑเบ™. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบšเบปเบ”เบšเบฒเบ”เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบŠเบธเบ” RPM เปเบฅเบฐ DEB.

เบ•เปเปˆเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เบ•เบปเบงเบ•เบปเบงเบขเปˆเบฒเบ‡. เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบซเบผเบฒเบเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰: เปเบ•เปˆเบฅเบฐเบ•เบปเบงเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ systemd- เบเบฒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เบเบฒเบ™โ€‹. เบ‚เป‰เบญเบเบˆเบฐเบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡เปƒเบซเป‰เป€เบˆเบปเป‰เบฒ:

$ systemctl start myapp@storage-1

เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เบตเป‰เบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบงเบ•เบปเบงเบขเปˆเบฒเบ‡ storage-1 apps myapp. เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเป€เบ›เบตเบ”เบ•เบปเบงเบˆเบฐเบŠเบญเบเบซเบฒเบ‚เบญเบ‡เบกเบฑเบ™ เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ ะฒ /etc/tarantool/conf.d/. เบšเบฑเบ™เบ—เบถเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เป„เบ”เป‰เป‚เบ”เบเปƒเบŠเป‰ journald.

เป„เบŸเบฅเปŒเบซเบปเบงเปœเปˆเบงเบ /etc/systemd/system/[email protected] เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ systemd เบˆเบฐเบ–เบทเบเบˆเบฑเบ”เบชเบปเปˆเบ‡เบžเป‰เบญเบกเบเบฑเบšเบŠเบธเบ”.

Ansible เบกเบตเป‚เบกเบ”เบนเบ™เปƒเบ™เบ•เบปเบงเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบžเบฑเบเป€เบเบฑเบ”เปเบฅเบฐเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบฅเบฐเบšเบปเบš; เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบ›เบฐเบ”เบดเบ”เบชเบดเปˆเบ‡เปƒเบซเบกเปˆเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰.

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ topology เบ‚เบญเบ‡เบเบธเปˆเบก

เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบ„เบงเบฒเบกเบกเปˆเบงเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เบ•เบปเบเบฅเบปเบ‡, เบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เปเบ›เบเบ—เบตเปˆเบˆเบฐเบฅเบปเบšเบเบงเบ™เบเบฑเบšเบšเบปเบ”เบšเบฒเบ” Ansible เบžเบดเป€เบชเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบžเบฑเบเป€เบเบฑเบ”เปเบฅเบฐเบเบฒเบ™เปเบฅเปˆเบ™ systemd-services.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ” configure เบเบธเปˆเบกเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡:

  • เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เปเบฒเบญเบดเบ”: เป€เบ›เบตเบ” Web UI เปเบฅเบฐเบ„เบฅเบดเบเปƒเบชเปˆเบ›เบธเปˆเบกเบ•เปˆเบฒเบ‡เป†. เบกเบฑเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เป€เบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ„เบฑเป‰เบ‡เบ”เบฝเบงเบ‚เบญเบ‡เบซเบผเบฒเบเป†เบ•เบปเบงเบขเปˆเบฒเบ‡.
  • เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเบชเบญเบ‡: เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ GraphQl API. เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡, เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ‚เบฝเบ™ script เปƒเบ™ Python.
  • เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹เบ—เบตโ€‹เบชเบฒเบก (เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบ„เบงเบฒเบกโ€‹เบ•เบฑเป‰เบ‡โ€‹เปƒเบˆโ€‹เบ—เบตเปˆโ€‹เป€เบ‚เบฑเป‰เบกโ€‹เปเบ‚เบ‡โ€‹)โ€‹: เป„เบ›โ€‹เบ—เบตเปˆโ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เปเบกเปˆโ€‹เบ‚เปˆเบฒเบโ€‹, เบเบฒเบ™โ€‹เป€เบŠเบทเปˆเบญเบกโ€‹เบ•เปเปˆโ€‹เบเบฑเบšโ€‹เบซเบ™เบถเปˆเบ‡โ€‹เปƒเบ™โ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹ tarantoolctl connect เปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบซเบกเบนเบ™เปƒเบŠเป‰เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ”เป‰เบงเบเป‚เบกเบ”เบนเบ™ Lua cartridge.

เบงเบฝเบเบ‡เบฒเบ™เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡ invention เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡เบ™เบตเป‰, เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเบ—เบตเปˆเบชเบธเบ”เบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบชเปเบฒเบฅเบฑเบšเบ—เปˆเบฒเบ™.

Ansible เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบ‚เบฝเบ™เป‚เบกเบ”เบนเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡เปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰เบกเบฑเบ™เปƒเบ™เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”. เบšเบปเบ”เบšเบฒเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เป‚เบกเบ”เบนเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบžเบทเปˆเบญเบˆเบฑเบ”เบเบฒเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เบเบธเปˆเบกเบ•เปˆเบฒเบ‡เป†.

เบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”? เบ—เปˆเบฒเบ™เบญเบฐเบ—เบดเบšเบฒเบเบชเบฐเบ–เบฒเบ™เบฐเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡เบเบธเปˆเบกเบขเบนเปˆเปƒเบ™ config เบ›เบฐเบเบฒเบ”, เปเบฅเบฐเบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เปƒเบซเป‰เปเบ•เปˆเบฅเบฐเป‚เบกเบ”เบนเบ™เบ—เบตเปˆเบกเบตเบžเบฒเบเบชเปˆเบงเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เบ•เบปเบ™เป€เบ›เบฑเบ™ input. เป‚เบกเบ”เบนเบ™เป„เบ”เป‰เบฎเบฑเบšเบชเบฐเบ–เบฒเบ™เบฐเบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ‚เบญเบ‡เบเบธเปˆเบก เปเบฅเบฐเบ›เบฝเบšเบ—เบฝเบšเบกเบฑเบ™เบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเป€เบ›เบฑเบ™เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™. เบ•เปเปˆเป„เบ›, เบฅเบฐเบซเบฑเบ”เบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบงเบœเปˆเบฒเบ™เบŠเบฑเบญเบเป€เบเบฑเบ”เบ‚เบญเบ‡เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบŠเบดเปˆเบ‡เบ™เปเบฒเบเบธเปˆเบกเป„เบ›เบชเบนเปˆเบชเบฐเบ–เบฒเบ™เบฐเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™.

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš

เบกเบทเป‰เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบšเบญเบ เปเบฅเบฐเบชเบฐเปเบ”เบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ™เบณเปƒเบŠเป‰เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปƒเบชเปˆ Tarantool Cartridge เปเบฅเบฐเบ•เบฑเป‰เบ‡เบ„เปˆเบฒ topology เบ‡เปˆเบฒเบเป†. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เปƒเบŠเป‰ Ansible - เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบตเปˆเบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เปƒเบŠเป‰เปเบฅเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบฅเบฐเบšเบปเบšเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™ (เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบธเปˆเบก).

เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบšเบดเปˆเบ‡เบซเบ™เบถเปˆเบ‡เปƒเบ™เบซเบผเบฒเบเบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเบญเบฐเบ—เบดเบšเบฒเบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบธเปˆเบกเป‚เบ”เบเปƒเบŠเป‰ Ansible. เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบฎเบนเป‰เบชเบถเบเบงเปˆเบฒเบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเบเป‰เบฒเบงเบ•เปเปˆเป„เบ›, เบ„เบปเป‰เบ™เบซเบฒ เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ” เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ‚เบฝเบ™ playbooksโ€‹. เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบžเบปเบšเบงเปˆเบฒเบกเบฑเบ™เบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™ topology เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป‚เบ”เบเปƒเบŠเป‰ group_vars ะธ host_vars.

เป„เบงเป†เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเบญเบเบ—เปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบฅเบถเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เบ–เบฒเบงเบญเบ™ (เบ‚เบฑเบšเป„เบฅเปˆ) เบญเบญเบเบˆเบฒเบ topology, bootstrap vshard, เบˆเบฑเบ”เบเบฒเบ™เป‚เบซเบกเบ”เบเบฒเบ™เบฅเบปเป‰เบกเป€เบซเบฅเบงเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปเบฅเบฐ patch เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบธเปˆเบก. เปƒเบ™เป€เบงเบฅเบฒเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเบถเบเบชเบฒเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡ เป€เบญเบเบฐเบชเบฒเบ™ เปเบฅเบฐเบ—เบปเบ”เบฅเบญเบ‡เบเบฑเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ‚เบญเบ‡เบเบธเปˆเบก.

เบ–เป‰เบฒเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบšเปเปˆเป„เบ”เป‰เบœเบปเบ™, เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒ เปเบˆเป‰เบ‡ เบžเบงเบเป€เบฎเบปเบฒเบเปˆเบฝเบงเบเบฑเบšเบšเบฑเบ™เบซเบฒ. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบˆเบฑเบ”เบฎเบฝเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบญเบญเบเบขเปˆเบฒเบ‡เป„เบงเบงเบฒ!

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™