Konsul - Acara Failover
Pada bab ini, kita akan belajar tentang Event Failover di Konsul. Ini akan dilakukan dengan bantuan fungsi berikut -
- Kegagalan Cluster Tunggal
- Pengujian Jepsen
- Kegagalan Beberapa Cluster
- Mengambil foto
Mari kita pahami masing-masing secara rinci.
Kegagalan Cluster Tunggal
Dalam kegagalan cluster tunggal, cluster yang ditempatkan di salah satu pusat data mulai gagal. Dalam setiap skenario kasus, penting untuk memastikan bahwa jika terjadi kegagalan, sistem tidak hanya dapat mencegahnya, tetapi juga memiliki cadangan yang dapat diandalkan. Untuk mencegah acara Consul Failover, kami akan menggunakan sesuatu yang disebut Consul-alerts. Proyek utama dapat ditemukan di -https://github.com/AcalephStorage/consul-alerts.
Consul-alerts adalah daemon yang sangat tersedia untuk mengirim pemberitahuan dan pengingat berdasarkan pemeriksaan Kesehatan Konsul. Proyek ini menjalankan daemon dan API di localhost: 9000 dan menghubungkan ke agen konsul lokal (localhost: 8500) dengan pusat data default (dc1).
Ada dua metode untuk memulai proyek. Metode pertama adalah menginstalnya melaluiGO. Untuk pengguna, yang telah menginstal dan mengkonfigurasi GO, mereka dapat mengikuti langkah-langkah di bawah ini -
$ go get github.com/AcalephStorage/consul-alerts
$ go install
$ consul-alerts start
Perintah terakhir dapat dengan mudah digunakan untuk mengganti port default untuk consul-alert, opsi datacenter, token consul-acl, dll. Perintah juga dapat ditulis seperti yang diberikan di bawah ini -
$ consul-alerts start --alert-addr = localhost:9000 --consul-addr = localhost:8500
--consul-dc = dc1 --consul-acl-token = ""
Metode kedua melibatkan pengguna untuk menggunakan Docker. Kedua metode tersebut sama-sama berguna dalam skenario yang berbeda. Untuk menggunakan Consul-alerts melalui Docker, mari kita tarik image dari Docker Hub dengan menggunakan perintah berikut.
$ docker pull acaleph/consul-alerts
Ke dalam metode Docker, kita dapat mempertimbangkan tiga opsi berikut -
- Menggunakan Agen Konsul yang dibangun di dalam wadah itu sendiri.
- Menggunakan Agen Konsul yang menjalankan Docker Container lain.
- Menggunakan Peringatan Konsul untuk menghubungkan melalui Mesin Virtual Konsul Jarak Jauh.
Sekarang mari kita bahas keduanya secara mendetail.
Menggunakan Agen Konsul yang dibangun di dalam wadah itu sendiri
Mari kita mulai agen konsul menggunakan perintah berikut -
$ docker run -ti \
--rm -p 9000:9000 \
--hostname consul-alerts \
--name consul-alerts \
--entrypoint = /bin/consul \
acaleph/consul-alerts \
agent -data-dir /data -server -bootstrap -client = 0.0.0.0
Di sini, kami mengganti file entrypoint untuk Konsul sebagaimana disebutkan dalam bendera --entrypoint. Bersamaan dengan itu, kami mem-bootstrap klien dengan menyebutkan porta yang digunakan dengan menggunakan-p flag, data directory /data menggunakan flag -data-dir dan klien sebagai 0.0.0.0.
Di jendela terminal baru, mari kita mulai opsi peringatan-konsul.
$ docker exec -ti consul-alerts /bin/consul-alerts start --alertaddr = 0.0.0.0:9000
--log-level = info --watch-events --watch-checks
Di sini, pada langkah-langkah di atas, kami menjalankan peringatan konsul untuk memulai dalam mode interaktif. Port alamat peringatan disebutkan sebagai 9000. Jam tangan ini memeriksa apakah agen konsul diaktifkan atau tidak bersama dengan pemeriksaan konsul.
Kami dapat melihat dengan jelas bahwa peringatan konsul telah dimulai dengan mudah dan telah mendaftarkan pemeriksaan kesehatan baru dengan penambahan agen konsul. Pusat data diambil sebagai dc1, yang dapat diubah menurut pengguna.
Menggunakan Agen Konsul yang menjalankan Container Docker lain
Di sini, Anda dapat menggunakan semua jenis gambar konsul untuk dijalankan di Docker Container. Dengan menggunakan gambar consul-alerts, kita dapat dengan mudah menghubungkan container consul dengan container consul-alert. Ini dilakukan dengan menggunakan--link flag.
Note - Sebelum menggunakan perintah berikut, harap pastikan bahwa wadah konsul sudah berjalan di terminal lain.
$ docker run -ti \
-p 9000:9000 \
--hostname consul-alerts \
--name consul-alerts \
--link consul:consul \
acaleph/consul-alerts start \
--consul-addr=consul:8500 \
--log-level = info --watch-events --watch-checks
Menggunakan Peringatan Konsul untuk menghubungkan melalui Mesin Virtual Konsul Jarak Jauh
Di sini, kita harus menggunakan perintah berikut untuk menggunakan peringatan-Konsul untuk menghubungkan melalui contoh konsul jarak jauh.
$ docker run -ti \
-p 9000:9000 \
--hostname consul-alerts \
--name consul-alerts \
acaleph/consul-alerts start \
--consul-addr = remote-consul-server.domain.tdl:8500 \
--log-level = info --watch-events --watch-checks
Pengujian Jepsen
Jespen adalah alat yang ditulis untuk menguji toleransi parsial dan jaringan di sistem apa pun. Ini menguji sistem dengan membuat beberapa operasi acak pada sistem.Jepsen is written in Clojure. Sayangnya, untuk demo, pengujian Jepsen memerlukan formasi cluster yang sangat besar dengan sistem database dan karenanya berada di luar cakupan untuk dibahas di sini.
Jepsen bekerja dengan menyiapkan penyimpanan data yang diuji pada lima host berbeda. Ini membuat klien, untuk penyimpanan data yang diuji, mengarahkan masing-masing dari lima node untuk mengirim permintaan. Ini juga membuat serangkaian klien khusus yang disebut sebagai "Nemesis", yang mendatangkan malapetaka di kluster seperti, memotong tautan antar node menggunakaniptables. Kemudian ia melanjutkan untuk membuat permintaan secara bersamaan terhadap node yang berbeda sambil mempartisi dan memulihkan jaringan secara bergantian.
Di akhir uji coba, itu menyembuhkan cluster, menunggu cluster untuk pulih dan kemudian memverifikasi apakah status menengah dan akhir dari sistem seperti yang diharapkan. Beberapa kutipan telah diambil dari sini .
Untuk info lebih lanjut tentang Pengujian Jepsen, lihat di sini .
Kegagalan Beberapa Cluster
Selama acara Multiple Cluster Failover, cluster yang disebarkan di beberapa pusat data gagal mendukung layanan yang didukung untuk pelanggan. Konsul memungkinkan kami untuk memastikan bahwa ketika salah satu kondisi tersebut terjadi, Konsul memiliki fitur yang membantu Anda untuk mengaktifkan layanan dalam kondisi seperti itu.
Untuk mewujudkannya, kami akan melihat proyek yang membantu kami mengaktifkan replikasi Konsul dari Satu Cluster ke Beberapa Cluster. Proyek ini memberi kami cara untuk mereplikasi pasangan K / V di beberapa pusat Data Konsul menggunakan daemon replikasi-konsul. Anda dapat melihat proyek Hashicorp ini di -https://github.com/hashicorp/consul-replicate. Beberapa prasyarat untuk mencoba proyek ini meliputi -
- Golang
- Docker
- Consul
- Git
Mari kita mulai dengan perintah berikut -
Note - Sebelum menjalankan perintah berikut, pastikan Anda telah menginstal dan mengkonfigurasi Git dengan benar di mesin Anda.
$ git clone - https://github.com/hashicorp/consul-replicate.git
Outputnya akan seperti yang ditunjukkan pada tangkapan layar berikut.
$ cd consul-replicate
$ make
Outputnya akan seperti yang ditunjukkan pada tangkapan layar berikut.
Jika Anda mengalami masalah dalam membangun biner, Anda juga dapat mencoba menarik image Docker secara manual dengan menggunakan perintah berikut -
$ docker pull library/golang:1.7.4
Perintah yang disebutkan di atas akan membuat bin / consul-replicate, yang dapat dipanggil sebagai biner. Tabel berikut menunjukkan daftar lengkap sub-perintah yang dicakupnya -
Pilihan | Deskripsi |
---|---|
auth | Nama pengguna otentikasi dasar (dan kata sandi opsional), dipisahkan oleh titik dua. Tidak ada nilai default. |
konsul * | Lokasi contoh konsul untuk melakukan kueri (mungkin alamat IP atau FQDN) dengan port. |
max-basi | Ketepatan maksimum kueri. Jika ditentukan, Consule akan mendistribusikan pekerjaan di antara semua server, bukan hanya pemimpinnya. Nilai defaultnya adalah 0 (tidak ada). |
ssl | Gunakan HTTPS saat berbicara dengan Konsul. Memerlukan server konsul untuk dikonfigurasi ke koneksi server yang aman. Nilai defaultnya salah. |
ssl-verifikasi | Verifikasi sertifikat saat menghubungkan melalui SSL. Ini membutuhkan penggunaan -ssl. Nilai defaultnya benar. |
syslog | Kirim keluaran log ke syslog (selain stdout dan stderr). Nilai defaultnya salah |
fasilitas syslog | Fasilitas untuk digunakan saat mengirim ke syslog. Ini membutuhkan penggunaan -syslog. Standarnya adalah LOKAL |
token | Token Consul API. Tidak ada nilai default. |
awalan * | Awalan sumber termasuk, dengan awalan tujuan opsi, dipisahkan oleh titik dua (:). Opsi ini bersifat tambahan dan dapat ditentukan beberapa kali untuk mereplikasi beberapa prefiks. |
mengecualikan | Awalan untuk dikecualikan selama replikasi. Opsi ini bersifat tambahan dan dapat ditentukan beberapa kali untuk beberapa prefiks untuk dikecualikan. |
Tunggu | Minium (: maksimum) menunggu stabilitas sebelum bereplikasi, dipisahkan oleh titik dua (:). Jika nilai maksimum opsional dihilangkan, itu dianggap 4x nilai minimum yang disyaratkan. Tidak ada nilai default. |
mencoba kembali | Jumlah waktu menunggu jika Consule mengembalikan kesalahan saat berkomunikasi dengan API. Nilai defaultnya adalah 5 detik. |
config | Jalur ke file konfigurasi atau direktori file konfigurasi pada disk, relatif terhadap direktori kerja saat ini. Nilai yang ditentukan di CLI lebih diutamakan daripada nilai yang ditentukan dalam file konfigurasi. Tidak ada nilai default. |
tingkat log | Tingkat log untuk keluaran. Ini berlaku untuk logging stdout / stderr serta logging syslog (jika diaktifkan). Nilai yang valid adalah "debug", "info", "warn, dan" err ". Nilai defaultnya adalah" warn ". |
sekali | Jalankan Consule Replicate sekali dan keluar (berlawanan dengan perilaku default daemon). (Hanya CLI) |
Versi: kapan | Keluarkan informasi versi dan keluar. (Hanya CLI) |
Mengambil Foto
Snapshot adalah bagian penting dan penting untuk mengelola cluster Konsul jika ada backup. Secara default, Konsul memberi kami cara untuk menyimpan snapshot dari cluster konsul. Konsul memberi kami empat sub-perintah terpisah yang dapat digunakan konsul untuk membuat snapshot, yaitu -
- Simpan snapshot Konsul
- Agen snapshot konsul
- Pemeriksaan snapshot Konsul
- Pemulihan snapshot Konsul
Mari kita pahami masing-masing secara rinci.
Simpan Snapshot Konsul
Perintah ini disetel untuk mengambil snapshot atomic, point-in-time dari status Server Konsul, yang mencakup Entri Kunci / Nilai, Katalog Layanan, Kueri yang Disiapkan, Sesi, dan ACL. Snapshot disimpan ke nama file yang disebutkan.
$ consul snapshot save <name-of-the-file>.snap
Outputnya akan seperti yang ditunjukkan pada tangkapan layar berikut.
Untuk memeriksa keberadaan file di direktori saat ini, periksa dengan menjalankannya di direktori Anda saat ini. Dalam kasus node non-pemimpin, silakan jalankan perintah berikut -
$ consul snapshot save -stale <name-of-file>.snap
Agen Snapshot Konsul
Sub-perintah ini memulai proses yang mengambil snapshot dari status server Konsul dan menyimpannya secara lokal, atau mendorongnya ke layanan penyimpanan jarak jauh opsional.
Pemeriksaan Jepretan Konsul
Ini digunakan untuk memeriksa snapshot point-in-time dari status server Konsul, yang mencakup entri kunci / nilai, katalog layanan, kueri yang disiapkan, sesi, dan ACL. Perintah dapat dijalankan sebagai berikut -
Note - Ingatlah bahwa perintah berikut hanya dapat dijalankan di Direktori, tempat snapshot disimpan.
$ consul snapshot save <name-of-the-file>.snap
Outputnya akan seperti yang ditunjukkan pada tangkapan layar berikut.
Pemulihan Snapshot Konsul
Perintah pemulihan snapshot digunakan untuk memulihkan snapshot point-in-time dari status server Konsul, yang mencakup entri kunci / nilai, katalog layanan, kueri yang disiapkan, sesi, dan ACL. Snapshot dibaca dari file cadangan yang disimpan.
Note - Ingatlah bahwa perintah berikut hanya dapat dijalankan di direktori tempat snapshot disimpan.
$ consul snapshot restore <name-of-the-file>.snap
Outputnya akan seperti yang ditunjukkan pada tangkapan layar berikut.
Jika Anda bekerja di Konsul dengan AWS, proyek ini mungkin membantu Anda menghemat waktu - https://github.com/pshima/consul-snapshot.