Pilihan untuk Multisite, Ketersediaan Tinggi dengan Boneka

14

Saya memelihara dua pusat data, dan karena lebih banyak infrastruktur penting kami mulai dikendalikan melalui boneka, penting bagi master wayang bekerja di situs kedua jika situs utama kami gagal.

Lebih baik lagi jika memiliki semacam pengaturan aktif / aktif sehingga server di situs kedua tidak melakukan polling di WAN.

Apakah ada metode standar ketersediaan boneka multi-situs yang tinggi?

Kyle Brandt
sumber
1
Apakah saya mengerti pertanyaan Anda benar? Anda sedang mencari cara untuk memiliki master boneka berlebihan jika master boneka tidak tersedia?
Hrvoje Špoljar
Ini agak tergantung pada bagaimana Anda menggunakan boneka. Ada banyak fleksibilitas. Misalnya, apakah Anda menggunakan konfigurasi tersimpan?
Zoredache
3
Pernahkah Anda melihat "boneka tak bertuan"? Inti dari itu adalah bahwa setiap agen memiliki checkout dari manifes dan mereka menerapkannya secara lokal. Anda berakhir dengan gitatau svnatau rsyncatau sistem kontrol versi apa pun yang Anda gunakan menjadi apa yang Anda perlu skala daripada master boneka.
Ladadadada
3
Sekedar petunjuk untuk menyelesaikan pertanyaan aktif-aktif: Anda bisa menggunakan siaran mana saja untuk mengumumkan IP yang sama ( "virtual" / "Layanan-" ) dari kedua pusat data. Kami melakukan ini untuk menyelesaikan Server DNS kami. Di setiap datacenter loadbalancers kami mengumumkan IP anycast yang sama. Routing kami lebih memilih loadbalancer lokal tetapi jatuh kembali ke DC lain jika terjadi kegagalan (~ "tidak lagi mengumumkan IP anycast").
Michuelnik
1
Saya melihat salah satu fitur baru untuk puppet 3.0 adalah dukungan catatan SRV , sesuatu yang akrab dengan orang Windows dan dapat membantu dengan hal-hal Situs.
sysadmin1138

Jawaban:

13

Wayang sebenarnya cocok dengan lingkungan multi-master, dengan peringatan. Yang utama? Banyak bagian dari Wayang suka dipusatkan. Otoritas sertifikat, inventaris, dan layanan dashboard / laporan, konfigurasi file dan konfigurasi tersimpan - semuanya merupakan yang terbaik dalam (atau hanya memerlukan) pengaturan di mana hanya ada satu tempat bagi mereka untuk diajak bicara.

Ini cukup bisa dilakukan, untuk mendapatkan banyak bagian bergerak yang bekerja di lingkungan multi-master, jika Anda setuju dengan hilangnya beberapa fungsi saat Anda kehilangan situs utama.


Mari kita mulai dengan fungsionalitas dasar untuk mendapatkan simpul yang melaporkan ke master:

Modul dan Manifes

Bagian ini sederhana. Versi mengontrolnya. Jika ini adalah sistem kontrol versi terdistribusi, maka cukup pusatkan dan sinkronkan, dan ubah aliran push / pull Anda sesuai kebutuhan di situs failover. Jika itu Subversion, maka Anda mungkin ingin svnsyncrepo ke situs failover Anda.

Otoritas Sertifikat

Salah satu opsi di sini adalah hanya menyinkronkan file otoritas sertifikat antara master, sehingga semua berbagi sertifikat root yang sama dan mampu menandatangani sertifikat. Ini selalu mengejutkan saya sebagai "melakukan kesalahan";

  • Haruskah satu master benar-benar melihat sertifikatnya sendiri yang disajikan dalam auth klien untuk koneksi masuk dari master lain sebagai valid?
  • Apakah itu dapat diandalkan untuk layanan inventaris, dasbor, dll?
  • Bagaimana Anda menambahkan nama alt DNS tambahan yang valid di ujung jalan?

Jujur saya tidak bisa mengatakan bahwa saya telah melakukan pengujian menyeluruh opsi ini, karena tampaknya mengerikan. Namun, sepertinya Puppet Labs tidak mencari untuk mendorong opsi ini, menurut catatan di sini .

Jadi, yang tersisa adalah memiliki CA master pusat. Semua hubungan kepercayaan tetap berfungsi ketika CA turun karena semua klien dan master lainnya menyimpan sertifikat CA dan CRL (meskipun mereka tidak menyegarkan CRL sesering yang seharusnya), tetapi Anda tidak dapat menandatangani sertifikat baru hingga Anda mendapatkan cadangan situs utama atau memulihkan master CA dari cadangan di situs failover.

Anda akan memilih satu master untuk bertindak sebagai CA, dan semua master lainnya menonaktifkannya:

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

Kemudian, Anda ingin sistem pusat untuk mendapatkan semua lalu lintas terkait sertifikat. Ada beberapa opsi untuk ini;

  1. Gunakan SRVdukungan catatan baru di 3.0 untuk mengarahkan semua node agen ke tempat yang tepat untuk CA -_x-puppet-ca._tcp.example.com
  2. Siapkan ca_serveropsi konfigurasi di puppet.confsemua agen
  3. Proxy semua lalu lintas untuk permintaan terkait CA dari agen ke master yang benar. Misalnya, jika Anda menjalankan semua master Anda di Apache melalui Penumpang, maka konfigurasikan ini di non-CA:

    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.
    

Dan, itu harus dilakukan.


Sebelum kita beralih ke layanan tambahan, catatan tambahan;

Nama DNS untuk Sertifikat Master

Saya pikir ini di sini adalah alasan paling menarik untuk pindah ke 3.0. Katakanlah Anda ingin menunjukkan sebuah simpul pada "master pekerjaan apa pun".

Di bawah 2.7, Anda akan memerlukan nama DNS generik seperti puppet.example.com, dan semua master membutuhkan ini dalam sertifikat mereka. Itu berarti menetapkan dns_alt_namesdalam konfigurasi mereka, menerbitkan kembali sertifikat yang mereka miliki sebelum dikonfigurasi sebagai master, menerbitkan kembali sertifikat itu lagi ketika Anda perlu menambahkan nama DNS baru ke daftar (seperti jika Anda ingin beberapa nama DNS untuk punya agen lebih suka master di situs mereka) .. jelek.

Dengan 3.0, Anda dapat menggunakan SRVcatatan. Berikan semua klien Anda ini;

[main]
    use_srv_records = true
    srv_domain = example.com

Kemudian, tidak ada sertifikat khusus yang diperlukan untuk master - cukup tambahkan catatan baru ke SRVRR Anda di _x-puppet._tcp.example.comdan Anda siap, itu adalah master langsung dalam grup. Lebih baik lagi, Anda dapat dengan mudah membuat logika pemilihan master lebih canggih; "master yang bekerja, tetapi lebih suka yang ada di situs Anda" dengan menyiapkan serangkaian SRVcatatan berbeda untuk situs yang berbeda; tidak dns_alt_namesdibutuhkan


Laporan / Dasbor

Yang ini berfungsi dengan baik tersentralisasi, tetapi jika Anda bisa hidup tanpanya ketika situs utama Anda turun, maka tidak ada masalah. Cukup konfigurasikan semua master Anda dengan tempat yang tepat untuk meletakkan laporan ..

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

..dan Anda sudah siap. Kegagalan untuk mengunggah laporan tidak fatal untuk menjalankan konfigurasi; itu hanya akan hilang jika server dashboard bersulang.

Inventarisasi Fakta

Hal lain yang menyenangkan untuk menempel ke dasbor Anda adalah layanan inventaris. Dengan facts_terminusset ke restseperti yang direkomendasikan dalam dokumentasi, ini akan benar-benar menghentikan konfigurasi berjalan ketika layanan inventaris pusat sedang down. Kuncinya di sini adalah dengan menggunakan inventory_serviceujung pada master non-sentral, yang memungkinkan kegagalan anggun ..

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

Siapkan server inventaris pusat Anda untuk menyimpan data inventaris baik melalui ActiveRecord atau PuppetDB, dan server harus selalu terbarui setiap kali layanan tersedia.


Jadi - jika Anda setuju dengan lingkungan manajemen konfigurasi barebones yang cantik di mana Anda bahkan tidak dapat menggunakan CA untuk menandatangani sertifikat node baru sampai dipulihkan, maka ini dapat bekerja dengan baik - meskipun itu akan sangat bagus jika beberapa komponen ini sedikit lebih ramah untuk didistribusikan .

Shane Madden
sumber
1
+1 untuk hal-hal CA. Perhatikan bahwa Anda dapat menyinkronkan / mengontrol versi semua barang CA dan tidak mengaktifkannya di puppetmasters "standby" sampai muncul situasi failover (saat itu Anda mengaktifkan bit CA pada "master" baru Anda dan memperbarui SRVcatatan. oleh karena itu - SRVcatatan mengejutkan saya sebagai solusi paling elegan di sini meskipun ada ambivalensi umum terhadap mereka ...)
voretaq7
1
@ voretaq7 Itu poin yang bagus - pengaturan gagal-murni akan jauh lebih sedikit kerja keras daripada penyebaran aktif / aktif semacam ini.
Shane Madden
2
Sebagai tambahan, saya juga menyumbang pembaruan untuk panduan penskalaan multi-master dalam dokumen boneka yang memiliki informasi yang baik juga: docs.puppetlabs.com/guides/scaling_multiple_masters.html
Shane Madden
8

Pendekatan "boneka tak bertuan" yang dijelaskan Ladadadada adalah yang paling saya kenal (pada dasarnya itulah yang kami lakukan dengan Radmind di perusahaan saya). Saya kira lebih tepatnya itu adalah "Banyak master yang disinkronkan oleh proses eksternal", di mana server mana pun dapat (secara teoritis) melayani seluruh alam semesta kita dalam keadaan darurat.

Dalam kasus kami karena sifat radmind, kami hanya rsyncmentranskrip dan file data dari master yang disetujui ke server radmind masing-masing situs jarak jauh, dan klien menarik pembaruan mereka dari server dengan nama host pendek radmind(melalui keajaiban resolv.confini dievaluasi untuk radmind.[sitename].mycompany.com- selalu lokal server radmind. Jika server lokal sedang down, cukup mudah untuk mengganti dan mengarahkan ke server situs lain).

Proses rsync semacam ini mungkin akan bekerja dalam situasi Anda juga, tetapi mungkin kurang optimal dibandingkan dengan solusi berbasis kontrol versi.


Untuk boneka atau koki, sistem berbasis kontrol versi lebih masuk akal daripada rsync sederhana karena beberapa alasan - yang paling penting adalah Anda menggunakan skrip wayang versi (daripada seluruh gambar OS seperti yang Anda lakukan dengan radmind).
Sebagai manfaat tambahan dari manajemen berbasis kontrol versi, Anda dapat meminta banyak orang mengerjakan repositori sekaligus (kemenangan besar untuk paralelisme), Anda pada dasarnya mendapatkan revisi sejarah secara gratis, dan jika seseorang merusak lingkungan Wayang, Anda dapat dengan mudah mengembalikan (anggap Anda kembali menggunakan gitAnda juga memiliki git blameyang melakukan apa yang tertulis di kaleng).
Percabangan dan penggabungan kreatif bahkan memungkinkan Anda menangani upgrade OS besar atau transisi lain dalam kerangka kerja kontrol versi - Setelah Anda melakukannya cukup beralih ke cabang baru dan (mudah-mudahan) dorongan produksi hanya akan berfungsi.

Jika saya menerapkan ini di sini, saya mungkin akan memanfaatkan kait pra-komit dan pasca-komit di git untuk memastikan bahwa konfigurasi boneka yang dilakukan adalah waras (pra-sisi klien) dan mendorongnya ke seluruh alam semesta jika mereka are (pos sisi server - mungkin juga memicu pembaruan lingkungan jika kebijakan penerapan Anda mengizinkan perilaku semacam itu).

Dalam hal memunculkan server puppetmaster baru di setiap situs, Anda dapat dengan mudah memeriksa lingkungan boneka ke setiap puppetmaster jarak jauh, dan menggunakan peretasan resolv.conf / hostname yang saya jelaskan di atas atau IP layanan siaran yang dialihkan ke sistem lokal seperti yang disarankan Michuelnik ( yang terakhir berguna jika Anda ingin gagal-otomatis jika puppetmaster satu situs meledak) untuk menangani memastikan setiap situs melihat puppetmaster "benar" dan tidak menyumbat tautan WAN Anda yang mencoba mendapatkan pembaruan.


Orang-orang di Brain Tree Payments tampaknya telah menggabungkan kontrol versi dan solusi rsync bersama dengan beberapa tugas kustom Capistrano - solusi mereka tampaknya setengah matang dalam arti masih bergantung pada elemen-elemen alur kerja manual, tetapi itu bisa disesuaikan dan otomatis tanpa terlalu banyak bekerja.
Penguji kompulsif paranoid dalam diri saya memiliki kesukaan untuk nooplangkah pemeriksaan kewarasan mereka - pembenci-proses-manual dalam diri saya berharap untuk beberapa tingkat otomatisasi di sekitarnya ...

voretaq7
sumber