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";
- 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;
- Gunakan
SRV
dukungan catatan baru di 3.0 untuk mengarahkan semua node agen ke tempat yang tepat untuk CA -_x-puppet-ca._tcp.example.com
- Siapkan
ca_server
opsi konfigurasi di puppet.conf
semua agen
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_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;
[main]
use_srv_records = true
srv_domain = example.com
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 serangkaian SRV
catatan berbeda untuk situs yang berbeda; tidak dns_alt_names
dibutuhkan
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_terminus
set ke rest
seperti yang direkomendasikan dalam dokumentasi, ini akan benar-benar menghentikan konfigurasi berjalan ketika layanan inventaris pusat sedang down. Kuncinya di sini adalah dengan menggunakan inventory_service
ujung 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 .