Kukla ile Çok Bölmeli Yüksek Kullanılabilirlik Seçenekleri


14

İki veri merkezim var ve önemli altyapımızın daha fazlası kukla ile kontrol altına alınmaya başladıkça, birincil sitemizin başarısız olması durumunda ikinci tesisteki kukla ustası çalışmasının önemi önemlidir.

Daha da iyisi, bir tür aktif / aktif kuruluma sahip olmaktır, böylece ikinci sitedeki sunucular WAN üzerinden yok olmaz.

Çok bölgeli kuklaların yüksek kullanılabilirliği için standart yöntemler var mı?


1
Sorunuzu doğru anladım mı? Kukla ustası kullanılamıyorsa gereksiz kukla ustası bulmanın bir yolunu mu arıyorsunuz?
Hrvoje Špoljar

Bu kukla nasıl kullandığınıza bağlıdır. Çok fazla esneklik var. Örneğin, saklanan yapılandırmaları mı kullanıyorsunuz?
Zoredache

3
"Ustaca kukla" ya baktınız mı? Bunun özü, her ajanın tezahürleri kontrol etmesi ve bunları yerel olarak uygulamasıdır. Sen ile bitirmek gitveya svnveya rsyncveya ne olursa olsun versiyon kontrol sistemi size kukla ustası yerine dışarı ölçekli gerekenleri olmak kullanın.
Ladadadada

3
Aktif-aktif soruyu çözmenin bir ipucu: Her iki veri merkezinden de aynı ( "sanal" / "Hizmet-" ) IP'sini duyurmak için anycast kullanabilirsiniz . Bunu, çözümleyen DNS Sunucularımız için yapıyoruz. Her veri merkezinde, yük dengeleyicilerimiz aynı anycast IP'sini duyurur. Yönlendirmemiz yerel yük dengeleyiciyi tercih ediyor, ancak arıza olması durumunda diğer DC'lere geri dönüyor (~ "artık yayınlama IP'sini duyurmuyor").
Michuelnik

1
Kukla 3.0'ın yeni özelliklerinden birinin SRV kayıt desteği olduğunu görüyorum , Windows kullanıcılarının iyi bildiği ve Site içeriklerine yardımcı olabileceği bir şey.
sysadmin1138

Yanıtlar:


13

Kukla aslında çok uyarılı ortamlara, uyarılarla oldukça iyi bir şekilde ödünç verilir. En önemlisi? Kuklanın bir çok kısmı merkezileşmeyi sever. Sertifika yetkilisi, envanter ve gösterge tablosu / rapor hizmetleri, dosya kâğıtları ve depolanan yapılandırmalar - hepsi, konuşacakları tek bir yer olan bir kurulumda en iyi durumdadır (veya yalnızca gerektirir).

Bununla birlikte, birincil sitenizi kaybettiğinizde bazı işlevlerin zarif bir şekilde kaybolması konusunda sorun yaşıyorsanız, çok hareketli bir ortamda çalışan bu hareketli parçaların çoğunu almak oldukça uygulanabilir.


Bir master'a düğüm raporlaması için temel işlevsellik ile başlayalım:

Modüller ve Manifestler

Bu bölüm basit. Sürüm onları kontrol eder. Eğer bir dağıtılmış versiyon kontrol sistemiyse, sadece merkezileştirin ve senkronize edin ve yük devretme yerinde itme / çekme akışınızı gerektiği gibi değiştirin. Subversion ise, muhtemelen svnsyncyük devretme sitenize repo yapmak istersiniz .

Sertifika yetkilisi

Buradaki bir seçenek, sertifika yetkilisi dosyalarını yöneticiler arasında eşitlemektir, böylece hepsi aynı kök sertifikayı paylaşır ve sertifikaları imzalayabilir. Bu beni her zaman "yanlış yapmak" olarak etkiledi;

  • Bir kaptan gerçekten başka bir kaptandan gelen bağlantı için müşteri onayında sunulan kendi sertifikasını geçerli olarak görmeli mi?
  • Bu, envanter hizmeti, gösterge tablosu vb. İçin güvenilir bir şekilde çalışır mı?
  • Ek geçerli DNS alt adlarını yolun altına nasıl eklersiniz?

Dürüst olmak gerekirse, bu seçenek üzerinde kapsamlı bir test yaptığımı söyleyemem, çünkü korkunç görünüyor. Ancak, Kukla Labs Not başına bu seçeneği teşvik etmek aramıyorsanız görünüyor burada .

Yani, bırakılan şey merkezi bir CA ustasına sahip olmak. Tüm istemciler ve diğer yöneticiler CA sertifikasını ve CRL'yi önbelleğe aldıklarından (CRL'yi gerektiği kadar yenilemese de) CA kapalı olduğunda tüm güven ilişkileri çalışmaya devam eder, ancak yeni sertifikaları imzalayamazsınız. birincil siteyi yedekler veya yedek sistemdeki yedeklemelerden CA yöneticisini geri yüklersiniz.

CA olarak davranmak için bir ana öğe seçeceksiniz ve diğer tüm yöneticilerin devre dışı bırakmasını sağlayabilirsiniz:

[main]
    ca_server = puppet-ca.example.com
[master]
    ca = false

Ardından, bu merkezi sistemin sertifikayla ilgili tüm trafiği almasını istersiniz. Bunun için birkaç seçenek var;

  1. SRVTüm aracı düğümlerini CA için doğru yere yönlendirmek üzere 3.0'da yeni kayıt desteğini kullanın -_x-puppet-ca._tcp.example.com
  2. Tüm aracılardan ca_serveryapılandırma seçeneğini ayarlayınpuppet.conf
  3. Aracılardan gelen CA ile ilgili tüm isteklerin doğru yöneticiye doğru şekilde gönderilmesini sağlayın. Örneğin, tüm master'larınızı Yolcu aracılığıyla Apache'de çalıştırıyorsanız, bunu CA olmayanlar üzerinde yapılandırın:

    SSLProxyEngine On
    # Proxy on to the CA.
    ProxyPassMatch ^/([^/]+/certificate.*)$ https://puppet-ca.example.com:8140/$1
    # Caveat: /certificate_revocation_list requires authentication by default,
    # which will be lost when proxying. You'll want to alter your CA's auth.conf
    # to allow those requests from any device; the CRL isn't sensitive.
    

Ve bunu yapmalı.


Yan hizmetlere geçmeden önce, bir yan not;

Ana Sertifikalar için DNS Adları

Bence bu, 3.0'a geçmek için en zorlayıcı sebep. Diyelim ki bir düğümü "herhangi bir çalışan usta" ya yönlendirmek istiyorsunuz.

2.7 altında, genel bir DNS adına ihtiyacınız olacak puppet.example.comve tüm ustaların sertifikalarında buna ihtiyacı var. Bu dns_alt_names, yapılandırmalarında ayar yapmak, master olarak yapılandırılmadan önce sahip oldukları sertifikayı yeniden vermek, listeye yeni bir DNS adı eklemeniz gerektiğinde sertifikayı yeniden vermek (birden çok DNS adının acentaları kendi alanlarında ustaları tercih edin) .. çirkin.

3.0 ile SRVkayıtları kullanabilirsiniz . Tüm müşterilerinize bunu verin;

[main]
    use_srv_records = true
    srv_domain = example.com

Ardından, ustaları için gerekli özel certs - Sadece için yeni bir kayıt eklemek SRVde RR _x-puppet._tcp.example.comsen seti ve bu gruptaki canlı ustası. Daha da iyisi, ana seçim mantığını daha sofistike hale getirebilirsiniz; "herhangi bir çalışma ustası, ancak sitenizde olanı tercih edin" SRVfarklı siteler için farklı kayıt kümeleri oluşturarak ; gerek yok dns_alt_names.


Raporlar / Gösterge Tablosu

Bu en iyi şekilde merkezileştirilir, ancak birincil siteniz kapalıyken onsuz yaşayabilirseniz sorun olmaz. Sadece raporlarınızı koymak için tüm ustalarınızı doğru yerle yapılandırın.

[master]
    reports = http
    reporturl = https://puppetdash.example.com/reports/upload

..ve hazırsınız. Rapor yüklenememesi yapılandırma çalışması için ölümcül değildir; sadece kontrol paneli sunucusunun tostu kaybolur.

Gerçek Envanter

Gösterge tablonuza yapıştırılmış bir başka güzel şey de envanter hizmetidir. İle facts_terminuskarşı sette restmerkezi envanter hizmet aşağı olduğunda belgelerinde önerildiği şekilde, bu aslında yapılandırma çalışır kırarım. Buradaki hile inventory_service, zarif olmayan başarısızlığa izin veren merkezi olmayan ustaların sonunu kullanmaktır.

facts_terminus = inventory_service
inventory_server = puppet-ca.example.com
inventory_port = 8140

Merkezi envanter sunucunuzun, envanter verilerini ActiveRecord veya PuppetDB aracılığıyla depolayacak şekilde ayarlamasını sağlayın ve hizmet kullanılabilir olduğunda her zaman güncel kalmalıdır.


Yani - geri yükleninceye kadar yeni bir düğümün sertifikasını imzalamak için CA'yı bile kullanamayacağınız güzel bir barebone yapılandırma yönetimi ortamına girme konusunda sorun yaşıyorsanız, bu gerçekten işe yarayabilir - gerçekten güzel olsa da bu bileşenlerden bazıları olsaydı dağıtıldı için biraz daha samimi .


1
CA şeyler için +1. Bir yük devretme durumu ortaya çıkana kadar (bu noktada yeni "master" ınızdaki CA bitlerini açıp SRVkaydı güncelleyene kadar tüm CA güzelliklerini senkronize edebilir / sürüm kontrol edebilir ve "bekleme" kuklacılarında bunların hiçbirini etkinleştiremeyeceğinizi unutmayın. buna göre - SRVkayıtlar, onlara karşı genel kararsızlığım olmasına rağmen beni burada en zarif çözüm olarak
vuruyor

1
@ voretaq7 Bu iyi bir nokta - tamamen başarısız bir kurulum, bu tür aktif / aktif dağıtımdan çok daha az ayak işi olacaktır.
Shane Madden

2
Bir ek olarak, aynı zamanda iyi bilgilere sahip olan kukla dokümanlarındaki çok master ölçekleme kılavuzuna bir güncelleme yaptım
Shane Madden

8

Ladadadada'nın tanımladığı “ustasız kukla” yaklaşımı en çok tanıdığım yaklaşımdır (temelde şirketimde radmind ile yaptığımız şeydir). Daha doğru bir şekilde, herhangi bir sunucunun acil olarak tüm evrenimize (teorik olarak) hizmet verebileceği "harici bir işlemle senkronize edilmiş birden fazla master" olduğunu daha doğru tahmin ediyorum.

Bizim durumumuzda radmind'in doğası nedeniyle, sadece rsynconaylanmış bir ana bilgisayardan her uzak sitenin radmind sunucusuna transkript ve veri dosyalarını gönderiyoruz ve istemciler güncellemelerini sunucudan kısa ana bilgisayar adıyla alıyorlar radmind(bunun büyüsü resolv.confsayesinde radmind.[sitename].mycompany.com- her zaman yerel Yerel sunucu kapalıysa, geçersiz kılmak ve başka herhangi bir sitenin sunucusunu işaret etmek yeterince kolaydır).

Bu tür rsync işlemi muhtemelen sizin durumunuzda da işe yarayacaktır, ancak muhtemelen sürüm kontrolü tabanlı bir çözümle karşılaştırıldığında en uygunudur.


Kukla veya şef için, sürüm kontrol tabanlı bir sistem birkaç nedenden dolayı basit rsync'den daha mantıklıdır - büyük olanı, sürüm kontrol eden kukla komut dosyaları (radmind'de olduğu gibi tüm OS görüntülerinden ziyade).
Sürüm kontrolü tabanlı yönetimin ek avantajları olarak, aynı anda depoda birden fazla kişinin çalışmasını sağlayabilirsiniz (paralellik için büyük kazanç), temelde ücretsiz olarak revizyon geçmişine sahip olursunuz ve birisi Kukla ortamını bozarsa kolay geri dönüşünüz vardır ( kullanarak gitda git blameteneke ne diyor var).
Yaratıcı dallanma ve birleştirme, sürüm kontrol çerçevesi içinde büyük bir işletim sistemi yükseltmesi veya başka bir geçişle bile başa çıkmanıza olanak tanır - Bir kez doğru bulduğunuzda yeni şubeye geçin ve (umarız) üretim push Just Work olacaktır.

Bunu burada uygulasaydım, muhtemelen gitmekte olan kukla konfigürasyonlarının aklı başında (müşteri tarafı öncesi) olmasını sağlamak için ön-taahhüt ve post-taahhüt kancalarından yararlanır ve eğer varsa evrenin geri kalanına iterdim (sunucu tarafı yayın - muhtemelen dağıtım politikalarınız bu tür davranışlara izin veriyorsa bir ortam güncellemesini de tetikler).

Her sitede yeni kukla yöneticisi sunucuları getirmek açısından, her uzak kukla yöneticisine kukla ortamını kontrol edebilir ve yukarıda açıkladığım resolv.conf / ana bilgisayar adı korsanlığını veya Michuelnik'in önerdiği yerel sistemlere yönlendirilmiş herhangi bir yayın hizmeti IP'sini kullanabilirsiniz ( ikincisi, bir sitenin kuklacı patlarsa otomatik başarısızlık istiyorsanız) her sitenin "doğru" kuklacıyı gördüğünden ve güncellemeleri almaya çalışırken WAN bağlantılarınızı tıkamadığından emin olmak için kullanışlıdır.


Brain Tree Payments'taki insanlar görünüşte sürüm kontrolü ve rsync çözümlerini bazı özel Capistrano görevleriyle birleştirdiler - çözümleri hala manuel iş akışı öğelerine dayanıyormuş gibi yarı pişmiş görünüyor, ancak olmadan uyarlanabilir ve otomatik hale getirilebilir çok fazla iş.
İçimdeki paranoyak kompulsif test cihazının noopakıl sağlığı kontrol adımlarına olan düşkünlüğü var - içimdeki manüel el-işlemlerin etrafında bir miktar otomasyon olmasını diliyorum ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.