Konsolos - Yük Devretme Olayları
Bu bölümde Konsoloslukta Yük Devretme Olayları hakkında bilgi edineceğiz. Bu, aşağıdaki işlevlerin yardımıyla yapılacaktır -
- Tek Küme Hatası
- Jepsen Testi
- Çoklu Küme Hatası
- Anlık görüntü alma
Bunların her birini ayrıntılı olarak anlayalım.
Tek Küme Hatası
Tek bir küme arızasında, veri merkezlerinden birine yerleştirilen küme başarısız olmaya başlar. Her durum senaryosunda, bir yük devretme durumunda sistemin yalnızca bunu önleyemeyeceğinden, aynı zamanda güvenebileceği bir yedeğe sahip olduğundan emin olmak önemlidir. Konsolos Yük Devretme olaylarını önlemek için Konsolos-uyarıları olarak adlandırılan bir şey kullanacağız. Ana proje şu adreste bulunabilir -https://github.com/AcalephStorage/consul-alerts.
Consul-uyarıları, Consul Health kontrollerine dayalı olarak bildirimler ve hatırlatıcılar göndermek için oldukça erişilebilir bir arka plan programıdır. Bu proje localhost: 9000'de bir arka plan programı ve API çalıştırır ve varsayılan veri merkezi (dc1) ile yerel konsül aracısına (localhost: 8500) bağlanır.
Projeye başlamak için iki yöntem vardır. İlk yöntem, onu şu yolla kurmaktır:GO. GO kurmuş ve yapılandırmış kullanıcılar için aşağıda verilen adımları takip edebilirler -
$ go get github.com/AcalephStorage/consul-alerts
$ go install
$ consul-alerts start
Son komut, konsül uyarısı, veri merkezi seçeneği, konsül-acl belirteci, vb. İçin varsayılan bağlantı noktalarını geçersiz kılmak için kolayca kullanılabilir. Komut ayrıca aşağıda verildiği gibi yazılabilir -
$ consul-alerts start --alert-addr = localhost:9000 --consul-addr = localhost:8500
--consul-dc = dc1 --consul-acl-token = ""
İkinci yöntem, kullanıcının Docker'ı kullanmasını içerir. Her iki yöntem de farklı senaryolarda eşit derecede kullanışlıdır. Docker üzerinden Consul-uyarıları kullanmak için aşağıdaki komutu kullanarak Docker Hub'dan imajı çekelim.
$ docker pull acaleph/consul-alerts
Docker yönteminde, aşağıdaki üç seçeneği değerlendirebiliriz -
- Konteynırın kendisinde yerleşik olan Consul Agent'ı kullanma.
- Başka bir Docker Container üzerinde çalışan Consul Agent'ı kullanma.
- Uzak Konsolos Örneği üzerinden bağlantı kurmak için Konsolos uyarılarını kullanma.
Şimdi her ikisini de ayrıntılı olarak tartışalım.
Konteynırın kendisinde yerleşik olan Consul Agent'ı kullanma
Konsolos temsilcisini aşağıdaki komutu kullanarak başlatalım -
$ 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
Burada, biz geçersiz kılıyoruz entrypoint Bayrakta belirtildiği üzere Konsolos için --entrypoint. Bununla birlikte, kullanarak kullanılan bağlantı noktasından bahsederek istemciye önyükleme yapıyoruz.-p flag, data directory /data -data-dir bayrağı ve istemciyi 0.0.0.0 olarak kullanarak.
Yeni bir terminal penceresinde, konsolos uyarıları seçeneğini başlatalım.
$ docker exec -ti consul-alerts /bin/consul-alerts start --alertaddr = 0.0.0.0:9000
--log-level = info --watch-events --watch-checks
Burada, yukarıdaki adımlarda, etkileşimli modda başlamak için konsolos uyarılarını yürütüyoruz. Uyarı adresi bağlantı noktası 9000 olarak belirtilir. Saat, konsolosluk kontrolleri ile birlikte konsül temsilcilerinin etkin olup olmadığını kontrol eder.
Konsolos uyarılarının kolaylıkla başladığını ve konsolos acentesinin eklenmesiyle yeni bir sağlık kontrolü kaydettiğini açıkça görüyoruz. Datacenter, kullanıcıya göre değiştirilebilen dc1 olarak alınmıştır.
Başka bir Docker Container üzerinde çalışan Consul Agent'ı kullanma
Burada, Docker Container üzerinde çalıştırılacak her türlü konsol imajını kullanabilirsiniz. Konsolos uyarıları görüntüsünü kullanarak, konsolos konteynerini konsolos uyarıları konteynerine kolayca bağlayabiliriz. Bu,--link flag.
Note - Aşağıdaki komutu kullanmadan önce, lütfen konsolos konteynerinin başka bir terminalde çalıştığından emin olun.
$ 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
Uzak Konsolos Örneği üzerinden bağlantı kurmak için Konsolos uyarılarını kullanma
Burada, bir uzak konsolos örneği üzerinden bağlantı kurmak için Konsolos uyarılarını kullanmak için aşağıdaki komutu kullanmalıyız.
$ 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
Jepsen Testi
Jespen, herhangi bir sistemdeki kısmi toleransı ve ağı test etmek için yazılmış bir araçtır. Sistem üzerinde rastgele bazı işlemler oluşturarak sistemi test eder.Jepsen is written in Clojure. Ne yazık ki, demo için Jepsen testi, veritabanı sistemleriyle büyük bir küme oluşumu seviyesi gerektirir ve bu nedenle burada ele alınması kapsam dışıdır.
Jepsen, test edilen veri deposunu beş farklı ana bilgisayarda kurarak çalışır. Test edilen veri deposu için, istekleri göndermek için beş düğümün her birini işaret eden bir istemci oluşturur. Ayrıca, "Nemesis" adlı özel bir istemci (ler) dizisi oluşturur ve bu, kümede hasara yol açar,iptables. Ardından, ağı dönüşümlü olarak bölümlere ayırıp iyileştirirken aynı anda farklı düğümlere karşı isteklerde bulunur.
Test çalıştırmasının sonunda, kümeyi iyileştirir, kümenin iyileşmesini bekler ve ardından sistemin ara ve son durumunun beklendiği gibi olup olmadığını doğrular. Buradan bazı alıntılar alınmıştır .
Jepsen Testi hakkında daha fazla bilgi için buradan kontrol edin .
Çoklu Küme Hatası
Çoklu Küme Yük Devretme olayı sırasında, birden çok veri merkezinde konuşlandırılan kümeler, müşteriye desteklenen hizmetleri desteklemez. Consul, böyle bir durum ortaya çıktığında, Consul'un bu tür koşullarda hizmet vermenize yardımcı olacak özelliklere sahip olmasını sağlamamızı sağlar.
Bunun gerçekleşmesi için, Consul'u Bir Kümeden Birden Çok Kümeye kopyalamamıza yardımcı olacak bir projeye bakacağız. Proje bize, konsolosluk replikat arka plan programını kullanarak birden fazla Consul Veri merkezinde K / V çiftlerini çoğaltmanın bir yolunu sağlıyor. Bu Hashicorp projesini -https://github.com/hashicorp/consul-replicate. Bu projeyi denemek için bazı ön koşullar şunlardır:
- Golang
- Docker
- Consul
- Git
Aşağıdaki komutlarla başlayalım -
Note - Aşağıdaki komutu çalıştırmadan önce, lütfen Git'in makinenize düzgün şekilde kurulduğundan ve yapılandırıldığından emin olun.
$ git clone - https://github.com/hashicorp/consul-replicate.git
Çıktı, aşağıdaki ekran görüntüsünde gösterildiği gibi olacaktır.
$ cd consul-replicate
$ make
Çıktı, aşağıdaki ekran görüntüsünde gösterildiği gibi olacaktır.
İkili dosyayı oluşturmada biraz sorun yaşıyorsanız, aşağıdaki komutu kullanarak Docker görüntülerini manuel olarak çekmeyi de deneyebilirsiniz:
$ docker pull library/golang:1.7.4
Yukarıda bahsedilen komut, ikili olarak çağrılabilen bin / consul-replicate oluşturacaktır. Aşağıdaki tablo, kapsadığı alt komutların tam listesini gösterir -
Seçenek | Açıklama |
---|---|
kimlik doğrulaması | İki nokta üst üste ile ayrılmış temel kimlik doğrulama kullanıcı adı (ve isteğe bağlı şifre). Varsayılan değer yoktur. |
konsolos * | Bağlantı noktasıyla sorgulanacak konsolos örneğinin konumu (bir IP adresi veya FQDN olabilir). |
azami bayat | Bir sorgunun maksimum bayatlığı. Consule, belirtilirse, işi sadece lider yerine tüm sunucular arasında dağıtacaktır. Varsayılan değer 0'dır (yok). |
ssl | Konsolos ile konuşurken HTTPS kullanın. Konsül sunucusunun güvenli bağlantılara sunucu olarak yapılandırılmasını gerektirir. Varsayılan değer yanlıştır. |
ssl-doğrulama | SSL ile bağlanırken sertifikaları doğrulayın. Bu, -ssl'nin kullanılmasını gerektirir. Varsayılan değer doğrudur. |
sistem günlüğü | Günlük çıktısını syslog'a gönderin (stdout ve stderr'e ek olarak). Varsayılan değer yanlıştır |
sistem günlüğü tesisi | Syslog'a gönderirken kullanılacak tesis. Bu, -syslog'un kullanılmasını gerektirir. Varsayılan, YEREL'dir |
jeton | Consul API simgesi. Varsayılan değer yoktur. |
önek * | İki nokta üst üste ile ayrılmış, seçeneklerle hedef öneki içeren kaynak önek (:). Bu seçenek toplamadır ve birden çok önekin kopyalanması için birden çok kez belirtilebilir. |
hariç tutmak | Çoğaltma sırasında dışlanacak bir önek. Bu seçenek toplamadır ve birden çok önekin hariç tutulması için birden çok kez belirtilebilir. |
Bekle | Çoğaltmadan önce kararlılığı bekleyecek minimum (: maksimum), iki nokta üst üste ile ayrılmış (:). İsteğe bağlı maksimum değer atlanırsa, gerekli minimum değerin 4 katı olduğu varsayılır. Varsayılan değer yoktur. |
yeniden dene | Consule, API ile iletişim kurarken bir hata döndürürse beklenecek süre. Varsayılan değer 5 saniyedir. |
yapılandırma | Geçerli çalışma dizinine göre diskteki bir yapılandırma dosyası veya yapılandırma dosyalarının dizin yolu. CLI'de belirtilen değerler, yapılandırma dosyasında belirtilen değerlere göre önceliklidir. Varsayılan değer yoktur. |
günlük düzeyi | Çıktı için günlük düzeyi. Bu, stdout / stderr günlüğünün yanı sıra syslog günlüğü için de geçerlidir (etkinleştirilmişse). Geçerli değerler "debug", "info", "warn ve" err "dır. Varsayılan değer" warn "dır. |
bir Zamanlar | Consule Replicate'i bir kez çalıştırın ve çıkın (arka plan programının varsayılan davranışının aksine). (Yalnızca CLI) |
versiyon | Sürüm bilgilerinin çıktısını alın ve çıkın. (Yalnızca CLI) |
Anlık Görüntü Alma
Snapshot'lar, yedekleme durumunda Consul kümesini yönetmek için gerekli ve önemli bir parçadır. Varsayılan olarak, Consul bize konsolos kümesinin anlık görüntülerini kaydetmenin bir yolunu sunar. Consul bize, konsülü kullanarak anlık görüntüler oluşturmak için kullanabileceğimiz dört ayrı alt komut sağlar, bunlar:
- Konsolos anlık görüntü kaydetme
- Konsolos anlık görüntü ajanı
- Konsolos anlık görüntü incelemesi
- Konsolos anlık görüntü geri yükleme
Bunların her birini ayrıntılı olarak anlayalım.
Consul Snapshot Save
Bu komut, Anahtar / Değer Girişleri, Hizmet Kataloğu, Hazırlanan Sorgular, Oturumlar ve ACL'leri içeren Consul Sunucularının durumunun atomik, belirli bir nokta anlık görüntüsünü almak üzere ayarlanmıştır. Anlık görüntü, belirtilen dosya adına kaydedilir.
$ consul snapshot save <name-of-the-file>.snap
Çıktı, aşağıdaki ekran görüntüsünde gösterildiği gibi olacaktır.
Geçerli dizinde dosyanın varlığını kontrol etmek için, lütfen dosyayı mevcut dizininizde çalıştırarak kontrol edin. Lider olmayan bir düğüm durumunda, lütfen aşağıdaki komutu yürütün -
$ consul snapshot save -stale <name-of-file>.snap
Consul Snapshot Agent
Bu alt komut, Consul sunucularının durumunun anlık görüntülerini alan ve bunları yerel olarak kaydeden veya bunları isteğe bağlı bir uzak depolama hizmetine iten bir işlemi başlatır.
Konsolos Anlık Görüntü İncelemesi
Anahtar / değer girişleri, hizmet kataloğu, hazırlanan sorgular, oturumlar ve ACL'leri içeren Consul sunucularının anlık anlık görüntüsünü incelemek için kullanılır. Komut aşağıdaki gibi yürütülebilir -
Note - Aşağıdaki komutun yalnızca anlık görüntünün kaydedildiği Dizinde çalıştırılabileceğini unutmayın.
$ consul snapshot save <name-of-the-file>.snap
Çıktı, aşağıdaki ekran görüntüsünde gösterildiği gibi olacaktır.
Consul Snapshot Restore
Snapshot restore komutu, anahtar / değer girişleri, hizmet kataloğu, hazırlanmış sorgular, oturumlar ve ACL'leri içeren Consul sunucularının durumunun anlık bir anlık görüntüsünü geri yüklemek için kullanılır. Anlık görüntü, kaydedilen yedekleme dosyasından okunur.
Note - Aşağıdaki komutun yalnızca anlık görüntünün kaydedildiği dizinde çalıştırılabileceğini unutmayın.
$ consul snapshot restore <name-of-the-file>.snap
Çıktı, aşağıdaki ekran görüntüsünde gösterildiği gibi olacaktır.
AWS ile Consul üzerinde çalışıyorsanız, bu proje biraz zaman kazanmanıza yardımcı olabilir - https://github.com/pshima/consul-snapshot.