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?
puppet
high-availability
Kyle Brandt
sumber
sumber
git
atausvn
ataursync
atau sistem kontrol versi apa pun yang Anda gunakan menjadi apa yang Anda perlu skala daripada master boneka.Jawaban:
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
svnsync
repo 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";
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:
Kemudian, Anda ingin sistem pusat untuk mendapatkan semua lalu lintas terkait sertifikat. Ada beberapa opsi untuk ini;
SRV
dukungan catatan baru di 3.0 untuk mengarahkan semua node agen ke tempat yang tepat untuk CA -_x-puppet-ca._tcp.example.com
ca_server
opsi konfigurasi dipuppet.conf
semua agenProxy 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:
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 menetapkandns_alt_names
dalam 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
SRV
catatan. Berikan semua klien Anda ini;Kemudian, tidak ada sertifikat khusus yang diperlukan untuk master - cukup tambahkan catatan baru ke
SRV
RR Anda di_x-puppet._tcp.example.com
dan 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 serangkaianSRV
catatan berbeda untuk situs yang berbeda; tidakdns_alt_names
dibutuhkanLaporan / 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 ..
..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_terminus
set kerest
seperti yang direkomendasikan dalam dokumentasi, ini akan benar-benar menghentikan konfigurasi berjalan ketika layanan inventaris pusat sedang down. Kuncinya di sini adalah dengan menggunakaninventory_service
ujung pada master non-sentral, yang memungkinkan kegagalan anggun ..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 .
sumber
SRV
catatan. oleh karena itu -SRV
catatan mengejutkan saya sebagai solusi paling elegan di sini meskipun ada ambivalensi umum terhadap mereka ...)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
rsync
mentranskrip 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 pendekradmind
(melalui keajaibanresolv.conf
ini dievaluasi untukradmind.[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
git
Anda juga memilikigit blame
yang 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
noop
langkah pemeriksaan kewarasan mereka - pembenci-proses-manual dalam diri saya berharap untuk beberapa tingkat otomatisasi di sekitarnya ...sumber