
Kami telah menghadirkan
Tarantool Cartridge yang memungkinkan Anda untuk mengembangkan dan mengemas aplikasi yang didistribusikan. Sekarang mari kita belajar bagaimana menggunakan dan mengendalikan aplikasi ini. Jangan panik, semuanya terkendali! Kami telah menggabungkan semua praktik terbaik dari bekerja dengan Tarantool Cartridge dan menulis
peran Ansible , yang akan menyebarkan paket ke server, memulai dan menggabungkan instance ke dalam set replika, mengkonfigurasi otorisasi, vshard bootstrap, mengaktifkan failover otomatis dan konfigurasi tambalan cluster.
Menarik, ya? Menyelam, periksa detail di bawah luka.
Mulai dengan sampel
Biarkan kami memandu Anda hanya melalui beberapa fungsi peran. Anda selalu dapat menemukan deskripsi lengkap dari semua fitur dan parameter input dalam
dokumentasi . Namun, mencoba sekali lebih baik daripada melihatnya ratusan kali, jadi mari kita gunakan aplikasi kecil.
Tarantool Cartridge memiliki
tutorial untuk membuat aplikasi Cartridge kecil yang menyimpan informasi tentang pelanggan bank dan akun mereka, serta menyediakan API untuk manajemen data melalui HTTP. Untuk tujuan ini, aplikasi menjelaskan dua peran yang memungkinkan yang dapat ditetapkan untuk instance:
api
dan
storage
.
Cartridge sendiri tidak mengatakan apa-apa tentang cara memulai proses - hanya memberikan kesempatan untuk mengkonfigurasi instance yang sedang berjalan. Jadi, sisanya terserah kepada pengguna: mendistribusikan file konfigurasi, menjalankan layanan, dan mengkonfigurasi topologi. Tetapi kita tidak akan melakukan semua itu - Ansible akan melakukannya untuk kita.
Mulai beraksi
Pertama, mari kita gunakan aplikasi kita di dua mesin virtual dan buat topologi sederhana:
- Set replika
app-1
akan mewakili peran api
yang berisi peran vshard-router
. Hanya akan ada satu contoh. - Set replika
storage-1
akan mewakili peran storage
(termasuk peran vshard-storage
) - di sini kita akan menambahkan dua instance dari mesin yang berbeda.

Untuk menjalankan sampel, kita akan membutuhkan
Vagrant dan
Ansible (versi 2.8 atau lebih tinggi).
Peran itu sendiri disimpan di
Ansible Galaxy - repositori yang memungkinkan Anda berbagi pekerjaan dan menggunakan peran yang sudah jadi.
Sekarang klon repositori sampel:
$ git clone https://github.com/dokshina/deploy-tarantool-cartridge-app.git $ cd deploy-tarantool-cartridge-app && git checkout 1.0.0
Kemudian gunakan mesin virtual:
$ vagrant up
Setelah itu, instal peran Tarantool Cartridge Ansible:
$ ansible-galaxy install tarantool.cartridge,1.0.1
Dan mulai peran yang diinstal:
$ ansible-playbook -i hosts.yml playbook.yml
Sekarang tunggu sampai proses playbook selesai, buka
http: // localhost: 8181 / admin / cluster / dashboard dan nikmati hasilnya:
Anda dapat mengunggah data sekarang. Luar biasa, bukan?
Sekarang mari kita mencari cara untuk bekerja dengannya, dan kita juga bisa menambahkan set replika lain ke topologi.
Lebih detail
Jadi, apa yang terjadi?
Kami menjalankan dua mesin virtual dan menjalankan dan meluncurkan buku pedoman yang memungkinkan yang mengonfigurasi kluster kami. Sekarang mari kita lihat ke dalam file
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
Tidak ada yang menarik terjadi di sini; mari kita luncurkan peran
tarantool.cartridge
disebut
tarantool.cartridge
.
Hal yang paling penting (yaitu, konfigurasi cluster) ada di file inventaris
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:
Yang perlu kita lakukan adalah mempelajari cara mengelola instance dan set replika dengan memodifikasi file ini. Nanti, kami akan menambahkan bagian baru untuk itu. Untuk menghindari kebingungan saat menambahkan bagian, lihat versi final file ini, atau
hosts.updated.yml
, yang terletak di repositori sampel.
Mengelola instance
Dalam istilah Ansible, setiap instance adalah host (jangan dikacaukan dengan server fisik), mis. Simpul infrastruktur yang akan dikelola oleh Ansible. Untuk setiap host, kita dapat menentukan parameter koneksi (seperti
ansible_host
dan
ansible_user
) dan konfigurasi instance. Deskripsi contoh ada di bagian
hosts
.
Mari kita lihat konfigurasi instance
storage-1
:
all: vars: ... # INSTANCES hosts: storage-1: config: advertise_uri: '172.19.0.2:3301' http_port: 8181 ...
Dalam variabel
config
, kami menentukan parameter instance:
advertise URI
dan
HTTP port
.
Di bawah ini adalah parameter dari instance
app-1
dan
storage-1-replica
.
Kami harus menyediakan parameter koneksi Ansible untuk setiap instance. Tampaknya masuk akal untuk mengelompokkan instance oleh mesin virtual. Untuk tujuan ini, instance dikelompokkan bersama di bawah
host1
dan
host2
, dan setiap grup di bagian
vars
berisi nilai parameter
ansible_user
dan
ansible_user
untuk satu mesin virtual. Dan bagian
hosts
berisi host (atau instance) yang termasuk dalam grup ini:
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:
Mari kita mulai mengedit
hosts.yml
. Sekarang kita menambahkan dua contoh lagi:
storage-2-replica
pada mesin virtual pertama dan
storage-2
pada yang kedua:
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: # <== ...
Mulai playbook Ansible:
$ ansible-playbook -i hosts.yml \ --limit storage-2,storage-2-replica \ playbook.yml
Perhatikan opsi
--limit
. Karena setiap instance cluster adalah host dalam hal Ansible, kami dapat secara eksplisit menentukan instance mana yang harus dikonfigurasikan saat menjalankan playbook.
Jadi kita kembali ke UI web di
http: // localhost: 8181 / admin / cluster / dashboard dan lihat contoh baru kami:
Selanjutnya, mari kita menguasai manajemen topologi.
Mengelola topologi
Biarkan kami mengelompokkan instance baru kami ke dalam set replika
storage-2
, menambahkan grup baru
replicaset_storage_2
, dan menjelaskan parameter set replika dalam variabel seperti yang kami lakukan untuk
replicaset_storage_1
. Di bagian
hosts
, kami menentukan instance mana yang harus dimasukkan dalam grup ini (yaitu set replika kami):
--- 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:
Lalu kami menjalankan lagi buku pedoman:
$ ansible-playbook -i hosts.yml \ --limit replicaset_storage_2 \ --tags cartridge-replicasets \ playbook.yml
Kali ini kami memberikan nama grup yang sesuai dengan set replika kami di parameter
--limit
.
Mari kita lihat opsi
tags
.
Peran kami berturut-turut menjalankan berbagai tugas yang ditandai dengan tag berikut:
cartridge-instances
: manajemen instance (konfigurasi, keanggotaan);cartridge-replicasets
: manajemen topologi (manajemen set replika dan penghapusan permanen (mengeluarkan) instance dari cluster);cartridge-config
: kontrol parameter cluster lainnya (bootstrap vshard, failover otomatis, parameter otorisasi, dan konfigurasi aplikasi).
Kami dapat secara eksplisit menentukan bagian mana dari pekerjaan yang ingin kami lakukan - dan peran akan melewati sisa tugas. Dalam hal ini, kami hanya ingin bekerja dengan topologi, jadi kami menentukan
cartridge-replicasets
.
Mari kita evaluasi hasil dari upaya kita. Temukan set replika baru di
http: // localhost: 8181 / admin / cluster / dashboard .
Yay
Coba ubah konfigurasi instans dan set replika dan lihat bagaimana topologi klaster berubah. Anda dapat mencoba berbagai kasus penggunaan, seperti
pembaruan bergulir atau peningkatan
memtx_memory
. Peran akan mencoba melakukan ini tanpa memulai ulang instance untuk mengurangi kemungkinan downtime aplikasi Anda.
Jangan lupa menjalankan
vagrant halt
untuk menghentikan mesin virtual ketika Anda selesai menggunakannya.
Apa yang ada di dalam?
Di sini saya akan bercerita lebih banyak tentang apa yang terjadi di bawah tenda peran Ansible selama pengujian kami.
Mari pertimbangkan langkah-langkah penerapan aplikasi Cartridge.
Menginstal paket dan memulai instance
Hal pertama yang harus dilakukan adalah mengirimkan paket ke server dan menginstalnya. Sekarang perannya dapat bekerja dengan paket RPM dan paket DEB.
Selanjutnya, kami meluncurkan instance. Ini sangat sederhana: setiap contoh adalah layanan
systemd
terpisah. Sebagai contoh:
$ systemctl start myapp@storage-1
Perintah ini meluncurkan instance
storage-1
dari
myapp
aplikasi. Instance yang sedang berjalan mencari
konfigurasinya di
/etc/tarantool/conf.d/
. Anda dapat melihat log contoh menggunakan
journald
.
File Unit
/etc/systemd/systemd/myapp@.sevice
untuk layanan systemd dikirimkan bersama paket.
Ansible memiliki modul bawaan untuk menginstal paket dan mengelola layanan systemd, jadi kami tidak menemukan sesuatu yang baru di sini.
Mengkonfigurasi topologi klaster
Hal paling menyenangkan terjadi di sini. Saya yakin Anda akan setuju bahwa aneh untuk repot dengan peran khusus yang mungkin untuk menginstal paket dan menjalankan layanan
systemd
.
Anda dapat mengkonfigurasi kluster secara manual:
- Opsi pertama adalah membuka UI Web dan mengklik tombol. Ini sangat cocok untuk memulai satu kali beberapa kali.
- Opsi kedua adalah menggunakan GraphQL API. Di sini Anda sudah dapat mengotomatisasi sesuatu, misalnya, menulis skrip dengan Python.
- Pilihan ketiga adalah untuk yang berani: pergi ke server, hubungkan ke salah satu contoh dengan bantuan
tarantoolctl connect
dan melakukan semua tindakan yang diperlukan dengan modul Lua cartridge
.
Tugas utama penemuan kami adalah melakukan bagian tersulit dari pekerjaan ini untuk Anda.
Ansible memungkinkan Anda untuk menulis modul Anda sendiri dan menggunakannya dalam peran Anda. Peran kami menggunakan modul ini untuk mengelola berbagai komponen kluster.
Bagaimana cara kerjanya? Anda menggambarkan keadaan yang diinginkan dari cluster dalam konfigurasi deklaratif, dan peran memberikan masing-masing modul bagian konfigurasi sendiri sebagai input. Modul menerima status cluster saat ini dan membandingkannya dengan input. Kemudian kode untuk negara cluster yang diperlukan diluncurkan menggunakan soket dari salah satu instance.
Hasil
Hari ini kami telah menunjukkan kepada Anda cara menggunakan aplikasi Tarantool Cartridge Anda dan mengonfigurasi topologi sederhana. Untuk melakukan ini, kami menggunakan Ansible, alat yang ampuh yang mudah digunakan dan memungkinkan Anda untuk mengonfigurasi beberapa node infrastruktur secara bersamaan (dalam kasus kami, instance cluster).
Di atas kami membahas salah satu dari banyak cara untuk menggambarkan konfigurasi cluster dengan menggunakan Ansible. Setelah Anda merasa siap untuk lebih banyak, pelajari
praktik terbaik untuk menulis buku pedoman. Anda mungkin lebih mudah mengelola topologi dengan
group_vars
dan
host_vars
.
Segera, kami akan memberi tahu Anda cara menghapus (mengeluarkan) instance dari topologi secara permanen, bootstrap vshard, mengelola failover otomatis, mengkonfigurasi otorisasi, dan konfigurasi patch cluster. Sementara itu, Anda dapat meninjau sendiri
dokumentasi dan mencoba mengubah pengaturan cluster.
Jika terjadi kesalahan, pastikan untuk
memberi tahu kami tentang masalahnya. Kami akan melakukan yang terbaik untuk menyelesaikan masalah apa pun!