Navigator Kılavuzu: Yüksek Erişilebilirlik

Not : Bu, Navigator Guide Guide kitabının içeriğinin DigitalOcean Solutions Engineers tarafından sunulan bir sunumudur. Kitabın amacı, iş müşterilerinin altyapı ihtiyaçlarını planlamalarına yardımcı olmak, yol boyunca çalışma örneklerini sunmak ve teknik nüansı ve bazı kararları diğerlerinden daha iyi kılan “neden” i içermektedir.

Kitap ve beraberindeki kod, GitHub deposunda herkese açık olarak bulunacaktır. Bu erken bir sürüm olduğu için, kitap henüz tamamlanmadı ve depo henüz kamuya açık değil, ama bizi izlemeye devam edin!

Küçük bir blog, büyük bir uygulama veya bir API çalıştırıyor olmanız önemli değil; asla çevrimdışı olmasını istemezsiniz.

Tek bir başarısızlık noktası, altyapınızın arızalanması durumunda arıza süresine neden olacak herhangi bir parçasıdır. Bir örnek, hem web sunucunuzu hem de veritabanınızı barındırmak için bir sunucu kullanmak olacaktır. Kesintiler genellikle bu tek hata noktalarından kaynaklanır ve bu durumlardan kaçınmak için altyapımızı tasarlamak isteriz.

Yüksek düzeyde kullanılabilir bir altyapının tek bir hata noktası yoktur. Genel olarak, bu, altyapınızın hizmete bölünmesi ve her bir hizmeti birden fazla sunucuda çalıştırması anlamına gelir. Bir sunucu başarısız olursa, istekleri işlemek için başka sunucular vardır. Yüksek kullanılabilirlikli bir yapılandırma sadece artıklık için değil, altyapınızı da ölçeklendirmek için daha hızlı ve daha uygun maliyetli olacaktır.

Dosyalarınızı barındıran bir web hizmeti resim. Şimdi üç bağımsız sunucuda çalışıyor. Birkaç acil sorunumuz var. Kullanıcılar bu sunuculara nasıl erişecek? Bağımsız sunucuların her biri için DNS kayıtları ekleyebiliriz. Kullanıcılar maalesef rasgele sunuculara yönlendirilecek ve çevrimdışı olan bir sunucuya gönderilecek.

Altyapımıza bir yük dengeleyici ekleyerek bu tuzakları önleyebiliriz. Yük dengeleyici, yapılandırmasında sahip olduğu sunucuların her birinde sağlık kontrolleri gerçekleştirir. Bir sunucu çevrimdışıysa, yük dengeleyici herhangi bir kullanıcı isteği göndermez. Bir yük dengeleyici, kullanıcıları mevcut en iyi sunucuya daha iyi yönlendirerek performansı artırır.

Bu ilavesi yaparken sahip olacağımız ek bir endişe, yük dengeleyicinin kendisinin tek bir arıza noktası olmamasıdır. Bunu düşündük ve yük dengeleyici katmanında ve arka uç sunucularında yüksek oranda bulunan iki tam çözüm var.

Bizim kurulum

Bu bölümde, yük dengelenmiş bir çözümü birkaç web sunucusuyla dağıtmanın iki yoluna bakacağız. Bu bölümün sonunda (bölüm 4 – 6), web ve veri tabanı hizmetlerinin önünde birden fazla yük dengeleyicimiz olacak ve tek bir hata noktamız olmadığından emin olacağız.

Yük dengelemeyi kurmak için farklı yollar vardır. Her ikisi de, arka planda bir Nginx web hizmeti sunan iki örnek kurulumdan geçeceğiz.

İlk çözüm, yük devretme kurtarmasını otomatik olarak işleyen yüksek kullanılabilir bir servis olan DigitalOcean Load Balancers'ı kullanıyor. Ayrıca, ölçekleme işlemini basitleştiren manuel bir liste yerine etiketlere göre trafiği Damlacıklar'a yönlendirebilme özelliğini de içerir.

İkinci çözüm ise, Kontrol Paneli veya API kullanılarak otomatik olarak bir bölge içinde atanabilecek ve yeniden atanabilecek statik IP adresleri olan, HAProxy ve DigitalOcean Floating IP'lerle daha özel bir yük dengeleme çözümüdür. Ana sistemin arızalanması durumunda trafiği bir bekleme yük dengeleyicisine yönlendirmek için kullanabilirsiniz.

Bu kitapta Terraform ve Ansible'ı ilk kez kullandığımız için, el ile kendi projelerinizi oluşturma konusunda deneyim sahibi olmak için bu bölümü biraz manuel olarak ele alacağız. Bir sonraki bölümde daha karmaşık kurulumlara ilerlerken, konfigürasyonun çoğunu otomatik hale getireceğiz.

DigitalOcean Yük Dengelerini Kullanma

DigitalOcean Yük Dengeleyicisini Ayarlama

Denetleyici Damlacık üzerinde, depomuzda bu bölümün dizinine geçin.

cd /root/navigators-guide/example-code/02-scale/ch04/digitalocean_loadbalancer

Bu dizinde, bir terraform.tfvars.sample dosyası var. Bu örnek dosya, ihtiyacınız olan bilgiyi bulmanıza yardımcı olacak açıklamalar ve notlar içerir. Yorumlar olmadan, dosya şu şekilde görünür:

do_token = ""

project = "DO-LB"

region = "sfo2"

image_slug = "debian-9-x64"

keys = ""

private_key_path = ""

ssh_fingerprint = ""

public_key = ""

Bunun yapacağı şey, DigitalOcean Load Balancer'ı Nginx çalıştıran birkaç damlacıkla birlikte yaratmak. Her web sunucusu, Damlacık'ın ana bilgisayar adı ile basit bir karşılama mesajı gösterecektir.

Açıklamalardaki yönergelere göre değişkenleri doldurun, daha sonra dosyayı terraform.tfvars yeniden adlandırın.

mv terraform.tfvars.sample terraform.tfvars

Bu yapılandırma bir TLS sertifikası gerektirmez, ancak DigitalOcean Yük Dengeleyicisine bir tane eklenebilir. DigitalOcean Yük Dengeleyici özelliği de hiçbir ücret ödemeden sertifikalar sağlayan Let's Encrypt ile bir entegrasyona sahiptir. Lets Encrypt, DigitalOcean hesabınıza kayıtlı ve eklenmiş bir alan adı gerektirir.

Ardından, Terraform dağıtımını hazırlayın ve yürütün. Öncelikle, plan dosyalarını ve modülleri terraform init kullanarak terraform init . İsteğe bağlı olarak, gerçek senaryoyu çalıştırdığınızda ne olacağını görmek için terraform plan çalıştırabilirsiniz. Hazır olduğunuzda, DigitalOcean API'sı aracılığıyla oluşturma isteklerini yürütmek için terraform apply .

terraform init
terraform apply

Yürütme işlemini yes girerek onaylamanız gerekecek ve başvuru tamamlandığında bildirim alacaksınız.

Bu noktada, web sunucunuzdaki örnek içeriği görmek için Yük Balancer'in tarayıcınızdaki genel IP adresini ( terraform show ile birlikte alabilirsiniz) ziyaret edebilirsiniz.

Terraform ayrıca kümenizi destroy seçeneği ile otomatik olarak kaldırabilir. Hızlı test için bu iş akışını kullanabilirsiniz, ancak kümeye kaydedilen verilerin kaldırılacağını bilin. destroy seçeneği kümenizi kaldıracaktır. Bu bölümde yaptığımız çalışmalardan temizlemenin en hızlı yolu budur. Yeni bir küme oluşturmak için apply yeniden çalıştırabilirsiniz.

Bu örnek kümeyi parçalamadan önce, beklediğimiz gibi gerçekten mevcut olduğunu test edelim.

Küme Kullanılabilirliğini Test Etme

Arka uç web sunucularının kullanılabilirliğini test etmek için, Yük Dengeleyici'den sürekli olarak bağlantı talep ederken bir sunucuyu çevrimdışı duruma getirebiliriz. Bağlantılar bunu yapmaya devam ederse, bir sunucu arızasına rağmen hizmetin çevrimiçi kaldığını biliyoruz. (Yük Dengeleyicinin yük devretme işlemini, bir hizmet olarak çalıştığı, yani kendi bileşenlerine doğrudan erişiminiz olmadığı veya buna ihtiyaç duymadığınız anlamına geldiği için test edemiyoruz.)

Yük Dengeleyiciye saniyede bir kez bağlanacak olan bir terminalde aşağıdaki komutu çalıştırın.

while true; do curl -k load_balancer_ip; sleep 1; done

Sürekli çıkışı göreceksiniz:

Welcome to DO-LB-backend-01!
Welcome to DO-LB-backend-02!
Welcome to DO-LB-backend-03!
Welcome to DO-LB-backend-01!
Welcome to DO-LB-backend-02!
Welcome to DO-LB-backend-03!

Arka uç damlacıklarından birini kapatmayı deneyin. Damlacık çevrimdışıyken, hala diğer Yük Dengeleyici arka uçlarınızdan geçerli yanıtları döndüren testi görmelisiniz. Kapattığınız Damlacık artık yanıt vermiyor. Tekrar açarsanız, Yük Dengelerinin yapılandırılmış kontrollerini geçtikten sonra tekrar otomatik olarak dönüş haline geldiğini görürsünüz.

(Koşu testini durdurmada yardıma ihtiyacınız varsa, döngüyü CTRL-C klavye komutuyla çıkarabilirsiniz)

Kümeyi Ölçeklendirmek

İlk küme kurulumu 3 arka uç Damlacık kullanır. Arka plan damlacıklarının sayısı ayarı, variable.tf dosyasında varsayılan değişken bildirimindedir. node_count değişkenini node_count ayarlamak için terraform.tfvars bir satır ekleyerek geçersiz kılabiliriz. Çizgi eklendikten sonra, Terraform planını yeniden uygulamanız gerekecektir.

terraform apply

Terraform gerçekten burada parlıyor. Bu değişkene göre damlacıkların sayısını değiştirmek için mantığı işler, böylece node_count değişkeni arttıkça veya azaldıkça damlacıkları otomatik olarak oluşturur veya yok eder.

Yük Dengeleyicinize giden curl terminalde, çıkışa bir göz atın. Yeni Damlacıklar temel alındığında, otomatik olarak yanıt vermeye başladığını göreceksiniz.

Welcome to DO-LB-backend-02!
Welcome to DO-LB-backend-03!
Welcome to DO-LB-backend-01!
Welcome to DO-LB-backend-02!
Welcome to DO-LB-backend-03!
Welcome to DO-LB-backend-04!
Welcome to DO-LB-backend-05!
Welcome to DO-LB-backend-01!
Welcome to DO-LB-backend-02!
Welcome to DO-LB-backend-03!
Welcome to DO-LB-backend-04!
Welcome to DO-LB-backend-05!
Welcome to DO-LB-backend-01!

Devam etmeden önce, bu test projesini yok etmek isteyeceksiniz. Terraform planın mevcut durumunu mevcut çalışma dizininde tutar. Kaynakları Terraform aracılığıyla yok ettiğinizde, durumu otomatik olarak temizler.

terraform destroy

HAProxy ve DigitalOcean Yüzer IP Adresini Kullanma

Özel bir yük dengeleme çözümü kullanmak doğru seçim olabilir. DigitalOcean Load Balancer'ın şu anda desteklemediği bazı seçenekler vardır. Bunun örnekleri, arka planlar, birden çok TLS sertifikası, proxy protokol desteği veya belirli bir TCP parametresi ayarı olarak birden fazla site veya uygulamayı barındırıyor olabilir.

Bu örnek, yük devretme için bir DigitalOcean Floating IP kullanarak kümelenmiş HAProxy v1.8 yük dengeleyicileri kullanır.

HAProxy Kurmak

Denetleyici Damlacık üzerinde, depomuzda bu bölümün dizinine geçin.

cd /root/navigators-guide/example-code/02-scale/ch04/haproxy_loadbalancer

Bu dizinde, bir terraform.tfvars.sample dosyası var. Bu örnek dosya, ihtiyacınız olan bilgiyi bulmanıza yardımcı olacak açıklamalar ve notlar içerir. Yorumlar olmadan, dosya şu şekilde görünür:

do_token = ""

project = "HAPROXY-LB"

region = "sfo2"

image_slug = "debian-9-x64"

keys = ""

private_key_path = ""

ssh_fingerprint = ""

public_key = ""

Açıklamalardaki yönergelere göre değişkenleri doldurun, daha sonra dosyayı terraform.tfvars yeniden adlandırın.

mv terraform.tfvars.sample terraform.tfvars

Ardından, Terraform dağıtımını hazırlayın ve yürütün. Öncelikle, plan dosyalarını ve modülleri terraform init kullanarak terraform init . İsteğe bağlı olarak, gerçek senaryoyu çalıştırdığınızda ne olacağını görmek için terraform plan çalıştırabilirsiniz. Hazır olduğunuzda, DigitalOcean API'sı aracılığıyla oluşturma isteklerini yürütmek için terraform apply .

terraform init
terraform apply

Yürütme işlemini yes girerek onaylamanız gerekecek ve başvuru tamamlandığında bildirim alacaksınız.

Şimdi terraform show çalıştırırsanız, dağıttığınız kaynakları görebilirsiniz. Her kaynak kümesi (damlacıklar), Terraform konfigürasyon dosyasındaki kaynak ismine göre bir grup ismine yerleştirilir. Bu örnekte, haproxy.tf dosyasının kaynak bildirimi bu grupları belirler.

Üç gruplardır load_balancer HAProxy için web_node Nginx için ve fip Yüzer IP için. INI formatında Ansible bir invintory elde etmek için terraform-inventory -inventory bir göz atabilir veya -list seçeneğiyle JSON çıktı -list .

Bu noktada, ihtiyacınız olan damlacıklar oluşturulur ve çalışır, ancak yine de yapılandırılması gerekir.

Damlacıkları Ansible ile Yapılandırma

Ansible'ı kullanarak damlacıkların yapılandırmasını otomatikleştireceğiz. Birkaç Ansible rolünü indirmek için önceden yapılandırılmış bir temel Ansible oyun kitabımız var. Sen listelenen bu yanıtlayıcı 'rolleri bulacaksınız requirements.yml dosyası. Bunları tek tek yüklemeniz gerekmez; Gerekli rolleri Ansible Galaxy ile indirebilirsiniz.

Bu komut rolleri roles dizinine yerleştirir.

ansible-galaxy install -r requirements.yml

Bu rol için ayarlamamız gereken birkaç değişken daha var. / Root / navigators-guide / example-code / 02-scale / ch04 / haproxy loadbalancer / group vars / load_balancer / directory dizinine geri döneceğiz . Varolan vars.yml dosyasını görüntülemek varsa, görürsünüz do_token ve ha_auth_key değerlerini tayin ediliyor vault_do_token ve vault_ha_auth_key sırasıyla. Vault.yml adlı ikincil bir dosya oluşturacağız ve vault_ değişkenlerini vault_ .

Değişkenleri ayarlamadan önce iki şeye ihtiyacınız olacak. Yük devretme senaryoları için yüzer IP atamasını ve küme üyelerini doğrulamak için kullanılacak bir SHA-1 hashını işlemek için kullanılacak bir DigitalOcean API belirteci. Bunu sizin için oluşturmaya yardımcı olacak bir aracımız var.

cd /root/navigators-guide/example-code/02-scale/ch04/haproxy_loadbalancer/
./gen_auth_key

Bu doğrulama anahtarı oluşturulduktan sonra devam edin ve vars / load_balancer / vault.yml ** dosyasını ** grubu oluşturun . Dosya böyle bir şeye benzemeli:

---
vault_do_token: "79da2e7b8795a24c790a367e4929afd22bb833f59bca00a008e2d91cb5e4285e"
vault_ha_auth_key: "c4b25a9f95548177a07d425d6bc9e00c36ec4ff8"

Bu anahtarların güvenliği ve gizliliği altyapımız için hayati önem taşımaktadır. Bu vault.yml dosyasını kimlerin görüntüleyebileceğini veya düzenleyebileceğini sınırlamak istiyoruz. Ansible ansible-vault adlı yerleşik bir şifreleme sistemine sahiptir.

Dosyayı şifrelemek için bu komutu kullanın:

ansible-vault encrypt vault.yml

Bu işlem bir şifre isteyecektir. Ansible oynatma kitabını çalıştırdığımız her seferde, bu şifre için de istenir. Şifrelenmiş dosyayı düzenlemeniz gerekiyorsa, bunu ansible-vault üzerinden ansible-vault . Ansible Vault belgelerinin, özelliklerin tüm özelliklerinin tam listesi vardır.

ansible-vault edit vault.yml

Ansible, otomasyon için ideal olan oyun kitabımızı her çalıştırdığında şifre çözme şifresini gerektirecektir. Şifreyi, sistemimizde izin kontrolleri ekleyerek güvenceye almamızı sağlayan başka bir yerde saklayabiliriz. Parolayı saklamak için bir dosya oluşturmak için echo 'password' > ~/.vaultpass.txt veya dosyayı el ile oluşturmak için bir metin düzenleyicisi kullanabilirsiniz. Ayrıcalıklı olmayan kullanıcıların bu dosyaya erişimi olmadığını doğrulamak istersiniz. /root/navigators-guide/example-code/02-scale/ch04/haproxy_loadbalancer/ansible.cfg yapılandırma dosyasındaki unultment vault_password_file satırı. Bu, Ansible'ı oyun kitaplarını her çalıştırdığınızda size ait şifrenizi sormanızı engeller. Parolanızı depolamak için kullanmak istediğiniz dosya ve dosya adını da değiştirebilirsiniz, ancak lütfen git deposunuzdan uzak tuttuğunuzdan emin olun. Yanlışlıkla herhangi bir parola veya gizli jeton atmak ve itmek istemezsiniz.

Şimdi ana Ansible oyun kitabını yürütmeye hazırız. ansible-playbook -i /usr/local/bin/terraform-inventory site.yml köküne geri dönün ve ansible-playbook -i /usr/local/bin/terraform-inventory site.yml . Yine, ekranda hangi rolün çalıştığını, rolün şu anda hangi görevde olduğunu ve bir değişiklik veya hatanın tespit edilip edilmediğini belirten bir metin akışı görmeye başlayacaksınız. Oyunun sonunda, şu ana kadar her ana bilgisayar için toplamlarınızla bir oyun özetini göreceksiniz:

PLAY RECAP *********************************************************************
138.68.50.232 : ok=1 changed=0 unreachable=0 failed=0
159.65.78.225 : ok=1 changed=0 unreachable=0 failed=0
165.227.9.176 : ok=40 changed=38 unreachable=0 failed=0
178.128.128.168 : ok=1 changed=0 unreachable=0 failed=0
178.128.3.35 : ok=40 changed=38 unreachable=0 failed=0
206.189.174.220 : ok=1 changed=0 unreachable=0 failed=0

Artık sitenize, basit bir html sayfamıza, yüzer IP adresinizi ziyaret ederek ya da yüzer IP adresine işaret eden bir alan ekleyerek ilerleyebilirsiniz.

Küme Kullanılabilirliğini Test Etme

Arka uç web sunucularının kullanılabilirliğini test etmek için, yük dengeleyicilerden sürekli olarak bağlantı talep ederken bir tane çevrimdışı olabiliriz. Bağlantılar bunu yapmaya devam ederse, bir sunucu arızasına rağmen hizmetin çevrimiçi kaldığını biliyoruz.

Yük Dengeleyiciye saniyede bir kez bağlanacak olan bir terminalde aşağıdaki komutu çalıştırın.

while true; do curl -k floating_ip; sleep 1; done

Sürekli çıkışı göreceksiniz:

Welcome to HAPROXY-LB-backend-01!
Welcome to HAPROXY-LB-backend-02!
Welcome to HAPROXY-LB-backend-03!
Welcome to HAPROXY-LB-backend-01!
Welcome to HAPROXY-LB-backend-02!
Welcome to HAPROXY-LB-backend-03!

Arka uç damlacıklarından birini kapatmayı deneyin. Damlacık çevrimdışıyken, diğer Yük Dengeleyici arka uçlarınızdan geçerli yanıtları döndüren kıvrılmayı hala görmelisiniz. Kapattığınız Damlacık artık yanıt vermiyor. Tekrar açarsanız, Yük Dengelerinin yapılandırılmış kontrollerini geçtikten sonra tekrar dönüşe eklendiğini görürsünüz.

Test hala çalışıyorsa, ana HAProxy Damlacık'yı kapatın ve yüzer IP adresinin birkaç düşürülmüş istek sonrasında ikincil HAProxy Damlacık'a yönlendirdiğini göreceksiniz. İkincil HAProxy Damlacık otomatik olarak alır ve test çalışmaya devam eder.

(Koşu testini durdurmada yardıma ihtiyacınız varsa, döngüyü CTRL-C klavye komutuyla çıkarabilirsiniz)

Kümeyi Ölçeklendirmek

İlk küme kurulumu 3 arka uç Damlacık kullanır. Arka plan damlacıklarının sayısı ayarı, variable.tf dosyasında varsayılan değişken bildirimindedir. node_count değişkeninin 5 olarak ayarlanmasıyla terraform.tfvars bir satır ekleyerek geçersiz kılabiliriz.

terraform apply

Terraform gerçekten burada parlıyor. Bu değişkene göre damlacıkların sayısını değiştirmek için mantığı işler, böylece node_count değişkeni arttıkça veya azaldıkça damlacıkları otomatik olarak oluşturur veya yok eder.

Kaynak sayımındaki her değişiklikle, arka uç damlacıklarınızı yapılandırmak ve HAProxy yapılandırmasını değiştirmek için tekrar Droplets'ınıza karşı Ansible'ı çalıştırmanız gerekir.

ansible-playbook -i /usr/local/bin/terraform-inventory site.yml

Yük Dengeleyicinize giden curl terminalde, çıkışa bir göz atın. Yeni Damlacıklar temel alındığında, otomatik olarak yanıt vermeye başladığını göreceksiniz.

Welcome to HAPROXY-LB-backend-02!
Welcome to HAPROXY-LB-backend-03!
Welcome to HAPROXY-LB-backend-01!
Welcome to HAPROXY-LB-backend-02!
Welcome to HAPROXY-LB-backend-03!
Welcome to HAPROXY-LB-backend-04!
Welcome to HAPROXY-LB-backend-05!
Welcome to HAPROXY-LB-backend-01!
Welcome to HAPROXY-LB-backend-02!
Welcome to HAPROXY-LB-backend-03!
Welcome to HAPROXY-LB-backend-04!
Welcome to HAPROXY-LB-backend-05!
Welcome to HAPROXY-LB-backend-01!

İşiniz bittiğinde, destroy ile oluşturulan Terraform kaynaklarını temizleyebilirsiniz. Kümenizi bu şekilde yok ettiğinizde tüm verilerinizi kaybedeceksiniz.

terraform destroy

Sıradaki ne?

Basit bir web uygulaması aldık ve birden fazla damlacık üzerinde çalıştırarak ve iki farklı yük dengeleyici ile operasyonel damlacıklara yönlendirerek trafiği yüksek kullanılabilir hale getirdik. Bunlar, fazlalık ve arıza süresinin önlenmesi için temel kavramlardır.

Bir sonraki bölümde, yük dengeleyicinizin yapılandırmasını nasıl koruyacağınızı, uygulamanızı ve üzerinde bıraktığınız damlacıkları nasıl yöneteceğinizi ve kullanıcı oturumlarını, dosya depolamayı ve veritabanlarını nasıl işleyeceğinizi kapsayacak şekilde bu kavramları genişleteceğiz. Sekiz damlacık kümesinde çalışan bir WordPress'i dağıtmak için Terraform ve Ansible kullanmaya devam edeceğiz.

Bir önceki yazımız olan Navigator Kılavuzu: Yapılandırma Yönetimi ile Dağıtım Çözümü başlıklı makalemizi de okumanızı öneririz.

About This Author

Comments are closed

%d blogcu bunu beğendi: