Navigator Kılavuzu: Yapılandırma Yönetimi ile Dağıtım Çözümü

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!

Bir önceki bölümde, altyapınızın web önyüz katmanında artıklık ekleyerek arıza süresinin nasıl azaltılacağı gösterildi. Hizmetiniz dosya ve verilerle çalışıyorsa, tek bir hata noktası olmaktan kaçınmak için benzer şekilde yedeklenmesi gereken merkezi bir arka plana da ihtiyacınız olacaktır.

Hem ön hem de arka uç, trafiği birden çok sunucuya dağıtmak için yük dengeli bir çözüm kullanabilir. Bu yapı, arka uçta, A / B testi, kanarya dağıtımları ve mavi / yeşil dağıtım gibi şeyleri destekleyerek, kesinti yaşamadan uygulama kodunuzu güncelleme becerisi gibi bazı benzersiz avantajlar sağlar. Ancak bu, altyapınıza da biraz karmaşıklık katıyor. Yük dengeleyicilerinizin yapılandırmasını nasıl sürdüreceğiniz, uygulamanızı ve üzerinde çalıştığı sunucuları nasıl yöneteceğiniz ve kullanıcı oturumları, dosya depolama ve veritabanları gibi şeylerin tutarlılığını nasıl ele alacakları gibi şeyleri göz önünde bulundurmanız gerekir.

DigitalOcean Load Balancers'ı veya kendinden yönetilen bir dizi yük dengeleyicisini kullanmanızdan bağımsız olarak, yapılandırmasının tutarlılığını korumanız gerekir. Kendinden yönetilen yük dengeleyici kurulumunda bir yapılandırma yönetim aracını kullanarak yapılandırma dosyasının yönetilmesi daha fazla uygulamalıdır ve bazı ekstra çalışma gerektirirken, DijitalOcean Yük Dengeleyicileri yük dengeleyici yedeklemesini otomatik olarak yöneten yönetilen bir hizmettir.

DigitalOcean Yük Dengeleyicileri için yapılandırma seçenekleri küratördür, ancak ayarların doğru ve tutarlı olduğundan emin olmanız gerekir. Load Balancer'ın arka ucunu belirlemek için bir Damlacık etiketi kullanmak, başarıya giden en doğrudan yoldur, çünkü damlacıkları otomatik olarak (tek tek IP yerine) eklemenize ve kaldırmanıza izin verir ve yapılandırmanızın yalnızca Ansible olmadan Terraform tarafından işlenebileceği anlamına gelir.

Yük dengeleme gereksinimleriniz daha karmaşıksa, kendi yük dengeleyicinizi kullanmayı seçmiş olabilirsiniz (önceki bölümde olduğu gibi HAProxy ile veya başka bir yük dengeleme yazılımı). Bu durumda, yük dengeleme katmanında fazlalık sağlamak için bir DigitalOcean Floating IP adresi ile birlikte bir çoklu yük dengeleyici Damlacık seti dağıtmanız gerekir.

Bizim kurulum

Veri tutarlılığı, yük dengeleyici yapılandırmanızla karşılaşacağınız başlıca sorun. Arka ucunuz birden fazla sunucudan herhangi birinden sunulabildiğinde, her sunucunun aynı tutarlı veri kümesine erişebildiğinden veya belirli bir oturumun belirli bir sunucuya bağlanmaya devam edeceğinden emin olmanız gerekir.

Bunu, Yapılandırma Yönetimi yazılımının daha güçlü bir şekilde kullanıldığını göstermek için bir fırsat olarak kullanacağız. WordPress'i çalıştıran bir web sitesi barındırma örneğimizde, kümedeki her düğümün uygun verilere sahip olmasını nasıl sağlayacağımız konusunda kararlar vermemiz gerekecek. Son kullanıcıların, düğümlerden hangisinin talebi ele aldığına bakılmaksızın, tutarlı bir deneyime sahip olmaları gerekir. Bir kullanıcı, bir düğümün WordPress sitemizdeki bir yazı veya resim hakkında bilgisi varsa, ancak diğer düğümler bunu yapmazsa, bir son kullanıcı sporadik sonuçları görebilir.

Tutarlılığı sağlamak için konfigürasyonda yürürken gözden geçireceğimiz üç ilgili bileşen vardır: kullanıcı oturumları, dosya depolama ve veritabanları.

Yapılandırmayı anlama

Konfigürasyon yapıldıktan sonra kümenin kurulması aslında nispeten kısa bir süreçtir, fakat bu konfigürasyonun ve kararların anlaşılması, bu modelleri kendi altyapınıza uygulayabilmenin anahtarıdır. Hadi parça parça parçalayalım.

Yük Dengeleyici Yapılandırması

DigitalOcean Yük Dengeleyici

Önceki bölümlerde olduğu gibi, Yük Dengeleyici yapılandırmasını yönetmek için Terraform'u kullanacağız. Aşağıdaki giriş bir Yük Dengeleyici oluşturur ve arka uç Damlacık etiketini, yönlendirme kurallarını, kullanılacak TLS sertifikasını ve Yük Dengeleyicisinin kullanacağı sağlık denetimlerini sağlar. SSL ve diğer güvenlik ayarları bu bölümün kapsamı dışındadır, ancak Bölüm 13'te ayrıntılı olarak ele alınmıştır.

İşte example-code/02-scale/ch05/init_deploy/main.tf dosyasında bulunan kaynak bloğu:

...

resource "digitalocean_loadbalancer" "public" {
name = "${var.project}-lb"
region = "${var.region}"
droplet_tag = "${digitalocean_tag.backend_tag.id}"
redirect_http_to_https = true
depends_on = ["digitalocean_tag.backend_tag"]

forwarding_rule {
entry_port = 80
entry_protocol = "http"

target_port = 80
target_protocol = "http"
}

healthcheck {
port = 80
protocol = "http"
path = "/"
check_interval_seconds = 5
response_timeout_seconds = 3
unhealthy_threshold = 2
healthy_threshold = 2
}
}

Yük Dengeleyicileri, değişmez bir kaynak (bir Damlacık gibi) yerine bir hizmet olduğu için, yapılandırma argümanlarında bir değişiklik, Yük Dengeleyicinin tamamını yeniden oluşturmaz; yerinde güncellenir. Desteklenen argümanlar ve çıktı özellikleri hakkında daha fazla ayrıntı için, Terraform belgelerine bakın.

Genel web trafiğinin web sunucularımıza yük dengelemesini yönetmek için bir DigitalOcean Yük Dengeleyici kullanıyoruz.

HAProxy Cluster

Daha düşük bir seviyedeki yük dengeleme ayarlarına erişim veya çoklu arka uç hizmetleri için destek gibi daha karmaşık bir yapılandırmaya ihtiyacınız varsa, kendi yük dengeleyici kümenizi kurabilirsiniz. Önceki bölümden HAProxy örneğiyle devam edeceğiz.

Ansible, konfigürasyon dosyalarınızı oluşturma ve güncelleme sürecini basitleştiren Jinja2 şablon sistemini kullanır. Jinja2 ifadeler, döngüler, matematik işlemleri ve yerleşik filtrelerin büyük kütüphanesi gibi bir programlama dilinde bulabileceğiniz değişkenler ve kontrol yapılarının kullanımını destekler. Bu özet Ansible içindeki şablonlama sistemine adalet yapmaz. Daha fazla bilgi için Ansible'ın belgelerini gözden geçirmenizi öneririz.

Yapılandırmanız değiştiğinde bir güncellemeyi tetiklemenin birkaç yolu vardır. Sitenizdeki talep çok fazla dalgalanmadıysa veya değişikliklerin ne zaman gerçekleşeceğinden haberiniz olursa, tam otomatik ölçekleme oluşturmaya gerek duymayabilir veya isteyebilirsiniz. Bunun yerine, Ansible oynatma kitabınızı manuel olarak çalıştırabilir veya bir değişikliği Terraform dağıtım komut dosyalarınıza git deposunuzda ilettiğinizde çalışacak şekilde ayarlayabilirsiniz.

Başka bir seçenek ise, hizmet keşfi için Konsol'u kullanmak ve yapılandırma dosyasını otomatik olarak yenilemek için yük dengeleyicinize konsol consul-template yapılandırmaktır. Bu, genel altyapınıza ek damlacıklar ekler, ancak diğer hizmetler için de Consul'yu kullanabilirsiniz.

Veritabanı kümemizin yük dengelemesini yürütmek için bir HAProxy Cluster kullanıyoruz.

Kullanıcı Oturumları

Oturum İncelemesi

Bir kullanıcı bir yük dengeleyici tarafından barındırılan bir siteyi ziyaret ettiğinde, bir sonraki isteğinin aynı arka uç sunucusu tarafından ele alınacağının garantisi yoktur. Basit statik sayfalar için, bu bir sorun olmayacaktır, ancak hizmet kullanıcının oturumunun bilgisi gerektiriyorsa (giriş yapmışlarsa), bununla ilgilenmeniz gerekir. Bunu, yığınınızda farklı noktalarda uygulanabilecek bir kaç seçenek vardır.

Kullanıcı oturumlarını işlemeyi seçtiğiniz yöntem, kullanım durumunuza bağlı olacaktır. İşte bazı seçenekler:

IP kaynak yakınlığı, tüm istekleri aynı IP adresinden aynı arka uça yönlendirir. Kullanıcılarınızın NAT kullanarak bir yönlendiricinin arkasından bağlanabileceği durumlarda bu en iyi seçim değildir, çünkü hepsi aynı IP adresine sahip olacaktır.

Yük dengeleyici oturumu ve uygulama oturumu seçenekleri benzer. Her ikisi de, yük dengeleyiciyi, istekleri göndermek için hangi arka ucun belirleneceğini belirlemek için IP başlık bilgisine bakmak üzere yapılandırır. IP kaynak yakınlık yönteminin aksine, bir NAT'ın arkasındaki kullanıcılar bireysel kullanıcılar olarak tanımlanabilir. Bunu, birden fazla farklı veri noktasına dayalı olarak kullanıcı kimliğini yapılandırmak için kullanılabilecek HAProxy yük dengeleyicileri üzerinde bir çubuk tablosu uygulayarak daha da ayarlayabilirsiniz.

Dosya sistemi çoğaltması , oturumların saklandığı dosya sistemindeki yolu çoğaltır ve tüm oturumların tüm oturumlara erişmesini sağlar. Göz önünde bulundurulması gereken bir önemli nokta, çoğaltma işleminin gerçekleştiği hızdır. Yönteme bağlı olarak, ılımlı bir gecikme süresi bile, arka uç düğümünü çoğaltmak için çok sayıda oturum ile son kullanıcılar için sorunlara neden olabilir.

Bir veritabanı veya bellek içi veri deposu kullanmak benzerdir. Her ikisi de, uygulamanızı bir veritabanında veya Redis gibi bir bellek içi önbellekte depolayan kullanıcı oturumlarını bir şekilde oluşturmanızı gerektirir. Bir veritabanı kullanmak, uygulamanızın diğer veri istekleri için bağlanmak üzere ayarlanmış olması nedeniyle uygun olabilir. Oldukça aktif bir site için bu, veritabanının kendisinin üzerinde daha fazla yük getirebilir, ancak çoğu durumda durumları kullanır, ek yük önemsizdir. Redis veya Memcached gibi bir bellek içi önbellek kullanmak, birkaç tane daha Damlacık oluşturmanız gerekir, ancak performans iyileştirmeleri için veritabanı sorgu yanıtlarını önbelleğe almak için kullanabileceğiniz çok hızlı ve çok yönlü çözümler.

WordPress zaten oturumlar için bir veritabanı kullanacak şekilde yapılandırıldığından, kullanacağımız çözüm budur.

Dosya depolama

Dosya Deposu Gözden Geçirme:

Uygulamanızın kullandığı dosyalar tutarlı olmalı; Tüm sunucuların aynı kaynak kümesine erişmesi gerekecektir. Bu soruna iyi bir yaklaşım, depolama işlevselliğini arka uç uygulama sunucularınızdan ayırmak ve bunun yerine dosya depolama için ayrı bir hizmet kullanmaktır. Statik varlıklar için bir nesne depolama çözümü kullanabilirsiniz. DigitalOcean Spaces, yerleşik artıklık ile yüksek oranda kullanılabilir bir nesne depolama hizmetidir. Bölüm 7'deki depolama seçenekleri, özellikle Spaces hakkında konuşuyoruz.

Oturumlar gibi, uygulama düğümleriniz arasında yerel dosya sistemi çoğaltmasını kullanarak dosya depolamayı da yapabilirsiniz. Bununla birlikte, bu, altyapınıza ve ek yapılandırma değişikliklerine başka bir hizmet eklemektedir.

Daha basit bir çözüm, özellikle WordPress'in bir DigitalOcean Spaces Sync eklentisine sahip olması nedeniyle, DigitalOcean Spaces gibi nesne deposunu kullanmaktır. Kurulum, tek bir eklentiyi kurmak ve yapılandırmak için azaltıldığından, bu bölümde kullanacağımız çözüm budur.

Veritabanı

Veritabanı İncelemesi

Dosya depolama alanı gibi, veritabanınızın tüm arka uç damlacıkları için erişilebilir olması gerekir. Veritabanı kümelerini ve güncellemeleri bir kümede nasıl çoğaltırsınız, işlevsel kümelenmiş bir veritabanı çözümü için gereklidir.

Ayrıca, veritabanınız yüksek düzeyde kullanılabilir olmalıdır – yani, artıklık ve otomatik yük devretme vardır. Bu, bir yük dengeleyicinin arkasına koymaktan daha karmaşık olabilir çünkü sistem, farklı düğümlere çakışan güncellemeler yapılırsa ne olacağı gibi, veri tutarlılığını ele alması gerekecek.

Örneğimizde, bu sorunları ele almak için bir MariaDB Galera kümesi kullanıyoruz. Galera, her bir veritabanı düğümünde eşzamanlı çoğaltmayı işler, bunların her biri tam birincil veritabanı sunucusu görevi görür. Bu, kümedeki düğümlerin her birine okuyabileceğiniz ve yazabileceğiniz anlamına gelir ve her şey senkronize halde tutulur. Belirli bir düğümün birincil yazma sunucusu olarak seçildiği birincil ve ikincil çoğaltma biçimlerini içeren veritabanlarını kümelemek için başka yollar da vardır.

Her küme çözümünün değeri vardır. Bizim egzersizimiz için Galera bize en çok yararı sağlar çünkü veri tutarlılığı otomatik olarak işlenir ve kümedeki her düğüm birincil sunucu olarak kullanılabilir. Yük devretme veya geri dönüş adımları gerekli değildir.

WordPress neredeyse her şey için veritabanına dayanır ve tek bir dış veritabanı sunucusu tek bir hata noktasıdır. Veritabanı kümeleri için birkaç seçenek vardır ve sizin durumunuzda en iyi olana göre farklı parçalar karıştırılabilir ve eşleştirilebilir.

Bu bölümde, MySQL'in bir çatalı olan MariaDB üzerinde çalışan bir Galera kümelenmesi yapacağız. Bu, bağlı bir DigitalOcean Floating IP'ye sahip birkaç HAProxy düğümünün arkasında çalışır.

Bunun için kaynak deposu ziyaret edebilirsiniz: https://github.com/DO-Solutions/galera-tf-mod. Varsayılan olarak üç düğüm içeren kümeye TCP yönlendirmesini ayarlar. Üç düğümden daha az kullanırsak, bölünmüş beyin durumlarından kaçınmak ve kümeyi çalışır halde tutmak için bir Galera Arbitrator düğümü gerekli olacaktır. Ana alan adraform dosyanızdaki örnek kod / 02-scale / ch05 / init_deploy / main.tf modül modül bloğuna aşağıdaki satırı ekleyerek düğüm sayısını da arttırabilirsiniz . Tek bir sayı düğümüne sahip olmak isteyeceğinize ve böylelikle bir çekirdeğin çoğunlukta çoğunluk oyu verebileceğini unutmayın. Bir örnek, iki düğümün bir kaydın var olması gerektiğini düşünürse ve iki diğer düğüm noktasında kayıt olmaması gerektiğinde, karar vermek için ek bir düğüme gerek duyulur.

module "sippin_db" {
...
db_node_count = "5"
}

WordPress Kümesini Ayarlama

Projemizde, WordPress kümesini kurmak sadece birkaç komut alıyor. Bu bölümün örnek kodunu içeren kontrol /root/navigators-guide/example-code/02-scale/ch05/init_deploy ile /root/navigators-guide/example-code/02-scale/ch05/init_deploy .

Bu dizinden, sağladığımız başlatma komut dosyasını çalıştırın. Ayarlamanız gereken tüm ayarlar ve değişkenler üzerinden size yol gösterecektir.

./bin/init_config

GitHub'daki başlatma komut dosyasının kodunu görüntüleyebilirsiniz. Komut dosyasının çok sayıda işlev gerçekleştirdiğini göreceksiniz. Gerçekten ne yapıyor, gerekli Terraform ve Ansible değişken dosyalarını otomatik olarak oluşturuyor ve bilinen herhangi bir sorun olmadığından emin olmak. Komut dosyasının yapacağı ilk şey geçerli bir DigitalOcean API belirteci istemektir. Bundan sonra, betik küme oluşturulması için gereken bazı benzersiz anahtarlar oluşturacaktır. Bir sonraki komut, projeyi adlandırmak ve bir bölge seçmek olacaktır. Bir SSH anahtarı zaten yapılandırılmışsa (Bölüm 4'te yaptığımız gibi), komut dosyası Terraform'un bunu kullanmasını söyleyecektir. Bir SSH anahtarı henüz yapılandırılmamışsa, bir kişi oluşturulacak ve DigitalOcean hesabınıza otomatik olarak eklenecektir. Son olarak, komut dosyası gerekli şifreleri isteyecektir.

Komut, Terraform planını tamamladıktan ve Ansible playbook'u yürütmeye hazır olduktan sonra. Bu, Bölüm 4'teki örneklere çok benzer, ancak oluşturulmuş ve yapılandırılmış daha fazla kaynak var.

Eğer her şeyi manuel olarak yapılandırırsanız, terraform.tvfars dosyasında Terraform için girilen değişkenlere ihtiyacınız olacaktır. Ansible, group_vars klasörünün içinde birden çok klasör içinde değişkenler gerektirdi.

Başlatma senaryosu, çıkmadan önce Terraform'a nasıl devam edeceğinize dair talimatlar yazdıracak, ancak biz de buradan geçeceğiz.

Öncelikle, çalışan terraform plan , DigitalOcean hesabınızda aşağıdaki öğeleri oluşturacaktır:

  1. WordPress sitenize erişim sağlayacak bir Yük Dengeleyici.
  2. WordPress web düğümleri olarak kullanılacak üç damlacık.
  3. Veritabanı düğümleri olarak kullanılacak üç damlacık.
  4. Veritabanı kümesi için iki HAProxy Yük Dengeleyici düğümleri.
  5. Veritabanı yük dengeleyici için bir adet Yüzer IP adresi.

terraform plan

Ardından, init kullanarak Terraform dağıtımını hazırlamak için plan dosyalarını ve modülleri ayrıştırın.

terraform init

Son olarak, oluşturma isteklerini DigitalOcean API aracılığıyla apply .

terraform apply

Terraform tüm altyapı bileşenlerini oluşturduktan sonra bunları yapılandırmak için Ansible'ı kullanın. Yürütülecek üç Ansible rolü vardır: biri veritabanı sunucularını yapılandırmak, biri veritabanı yük dengeleyicileri yapılandırmak ve bir tanesi de tüm web düğümlerinde WordPress'i kurmaktır.

Üç rolün hepsini tek bir komutla çalıştırabilirsiniz:

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

Oyun kitabı bittiğinde, WordPress kurulumunu bitirmeniz gerekir.

Yük Dengeleyicinizin IP adresini tarayıcınızda ziyaret edin ve WordPress yapılandırmanızı tamamlamak için ekrandaki talimatları izleyin. Bölüm 13'ün WordPress kurulumunuzu HTTPS ile nasıl koruyacağını kapsadığını unutmayın.

Son adım, varsayılan olarak yüklenen DigitalOcean Spaces Sync eklentisini etkinleştirmek ve yapılandırmaktır. Denetim Masası'nı kullanarak bir Boşluk oluşturmanız ve daha sonra bir Spaces erişim anahtarı oluşturmanız gerekir. Ardından, WordPress öğelerini Spaces'ta depolamaya yönelik topluluk makalemizi takip edin.

Kurulumu Doğrulama

Tarayıcınızda Yük Dengeleyici IP adresinize giderek, buna benzer varsayılan WordPress sitesini görebilirsiniz:

Sonuç, tamamen işlevsel bir WordPress sitesidir. Bir blogu yapılandırarak veya yayın oluşturarak test edebilirsiniz. Web sunucularından ikisini, HAProxy sunucularından birini ve veritabanı düğümlerinden birini kapatabilirdiniz ve web sitesi hala tamamen işlevsel olmalıdır.

Test edildikten sonra, tüm bu altyapı bileşenlerini DigitalOcean hesabınızdan tek bir komutla kaldırabilirsiniz. Bu, bu bölümdeki çalışmaları temizlemek için tüm kümeyi kaldıracaktır.

terraform destroy

Sen-re çalıştırabileceği apply ardından küme yeniden oluşturmak için yanıtlayıcı 'taktik kitabı yeniden çalıştırın ve.

Sıradaki ne?

Yüksek kullanılabilirlik örneklerini aldık ve konsepti tüm uygulama yığını boyunca uyguladık. Bu bölümdeki örnek, tamamen yedekli ve ölçeklenebilir bir WordPress web sitesi oluşturmak için kullanıldı. Bu, yapılandırma yönetim araçlarından yararlanılarak sağlandı. Bir sonraki bölümde dağıtımlarımızı daha da geliştirmek ve geliştirmek için bir yol keşfedeceğiz. Kitabın geri kalanı, depolama, izleme ve güvenlik ile ilgili kavramları kapsayacak, ancak daha önemlisi, işletmeniz için nasıl uygulandıkları ve altyapınızı planlarken neler düşünüleceğini ele alacaktır.

Bir önceki yazımız olan Navigator Kılavuzu: Modüler Altyapı Yapılandırması başlıklı makalemizi de okumanızı öneririz.

About This Author

Comments are closed

%d blogcu bunu beğendi: