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.