Puppet adalah perangkat lunak sumber terbuka untuk manajemen konfigurasi dan penerapan. Didirikan pada tahun 2005, multi-platform dan bahkan memiliki bahasa deklaratif sendiri untuk konfigurasi.
Tugas yang berkaitan dengan administrasi dan pemeliharaan PostgreSQL (atau perangkat lunak lain sebenarnya) terdiri dari proses harian dan berulang yang memerlukan pemantauan. Ini berlaku bahkan untuk tugas-tugas yang dioperasikan oleh skrip atau perintah melalui alat penjadwalan. Kompleksitas tugas ini meningkat secara eksponensial ketika dijalankan pada infrastruktur besar, namun, menggunakan Wayang untuk tugas semacam ini sering kali dapat memecahkan jenis masalah skala besar ini karena Wayang memusatkan dan mengotomatiskan kinerja operasi ini dengan cara yang sangat gesit.
Puppet bekerja dalam arsitektur pada tingkat klien/server tempat konfigurasi dilakukan; operasi ini kemudian disebarkan dan dieksekusi pada semua klien (juga dikenal sebagai node).
Biasanya berjalan setiap 30 menit, node agen akan mengumpulkan sekumpulan informasi (jenis prosesor, arsitektur, alamat IP, dll.), juga disebut sebagai fakta, kemudian mengirimkan informasi tersebut ke master yang sedang menunggu jawaban untuk melihat apakah ada konfigurasi baru untuk diterapkan.
Fakta-fakta ini akan memungkinkan master untuk menyesuaikan konfigurasi yang sama untuk setiap node.
Dengan cara yang sangat sederhana, Wayang adalah salah satu alat DevOps yang paling penting tersedia hari ini. Di blog ini kita akan melihat hal-hal berikut...
- Kasus Penggunaan untuk Wayang &PostgreSQL
- Memasang Wayang
- Mengonfigurasi &Memprogram Wayang
- Mengonfigurasi Wayang untuk PostgreSQL
Penginstalan dan penyiapan Wayang (versi 5.3.10) yang dijelaskan di bawah ini dilakukan di sekumpulan host yang menggunakan CentOS 7.0 sebagai sistem operasi.
Kasus Penggunaan untuk Wayang &PostgreSQL
Misalkan ada masalah di firewall Anda pada mesin yang menghosting semua server PostgreSQL Anda, maka Anda perlu menolak semua koneksi keluar ke PostgreSQL, dan melakukannya sesegera mungkin.
Boneka adalah alat yang sempurna untuk situasi ini, terutama karena kecepatan dan efisiensi penting. Kita akan membicarakan contoh yang disajikan di bagian “Mengonfigurasi Wayang untuk PostgreSQL” dengan mengelola parameter listen_addresses.
Memasang Wayang
Ada serangkaian langkah umum yang harus dilakukan baik pada host master atau agen:
Langkah Pertama
Memperbarui file /etc/hosts dengan nama host dan alamat IP mereka
192.168.1.85 agent agent.severalnines.com
192.168.1.87 master master.severalnines.com puppet
Langkah Kedua
Menambahkan repositori Wayang di sistem
$ sudo rpm –Uvh https://yum.puppetlabs.com/puppet5/el/7/x86_64/puppet5-release-5.0.0-1-el7.noarch.rpm
Untuk sistem operasi lain atau versi CentOS, repositori yang paling sesuai dapat ditemukan di Puppet, Inc. Yum Repositories.
Langkah Ketiga
Konfigurasi server NTP (Network Time Protocol)
$ sudo yum -y install chrony
Langkah Empat
Chrony digunakan untuk menyinkronkan jam sistem dari server NTP yang berbeda dan dengan demikian menjaga sinkronisasi waktu antara server master dan agen.
Setelah chrony diinstal harus diaktifkan dan dimulai ulang:
$ sudo systemctl enable chronyd.service
$ sudo systemctl restart chronyd.service
Langkah Kelima
Nonaktifkan parameter SELinux
Pada file /etc/sysconfig/selinux parameter SELINUX (Security-Enhanced Linux) harus dinonaktifkan agar tidak membatasi akses pada kedua host.
SELINUX=disabled
Langkah Enam
Sebelum instalasi Wayang (baik master atau agen), firewall di host-host ini harus ditentukan dengan tepat:
$ sudo firewall-cmd -–add-service=ntp -–permanent
$ sudo firewall-cmd –-reload
Memasang Wayang Master
Setelah repositori paket dalang5-release-5.0.0-1-el7.noarch.rpm ditambahkan ke sistem, instalasi dalang dapat dilakukan:
$ sudo yum install -y puppetserver
Parameter alokasi memori maksimum adalah pengaturan penting untuk memperbarui file /etc/sysconfig/puppetserver menjadi 2GB (atau 1GB jika layanan tidak dimulai):
JAVA_ARGS="-Xms2g –Xmx2g "
Dalam file konfigurasi /etc/puppetlabs/puppet/puppet.conf perlu menambahkan parameterisasi berikut:
[master]
dns_alt_names=master.severalnines.com,puppet
[main]
certname = master.severalnines.com
server = master.severalnines.com
environment = production
runinterval = 1h
Layanan dollserver menggunakan port 8140 untuk mendengarkan permintaan node, oleh karena itu perlu dipastikan bahwa port ini akan diaktifkan:
$ sudo firewall-cmd --add-port=8140/tcp --permanent
$ sudo firewall-cmd --reload
Setelah semua pengaturan dibuat di dalang, saatnya untuk memulai layanan ini:
$ sudo systemctl start puppetserver
$ sudo systemctl enable puppetserver
Menginstal Wayang Agen
Agen Wayang dalam repositori paket dalang5-release-5.0.0-1-el7.noarch.rpm juga ditambahkan ke sistem, instalasi dalang-agen dapat dilakukan segera:
$ sudo yum install -y puppet-agent
File konfigurasi boneka-agen /etc/puppetlabs/puppet/puppet.conf juga perlu diperbarui dengan menambahkan parameter berikut:
[main]
certname = agent.severalnines.com
server = master.severalnines.com
environment = production
runinterval = 1h
Langkah selanjutnya terdiri dari mendaftarkan node agen pada host master dengan menjalankan perintah berikut:
$ sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true
service { ‘puppet’:
ensure => ‘running’,
enable => ‘true’
}
Saat ini, pada master host, ada permintaan tertunda dari agen boneka untuk menandatangani sertifikat:
Itu harus ditandatangani dengan menjalankan salah satu perintah berikut:
$ sudo /opt/puppetlabs/bin/puppet cert sign agent.severalnines.com
atau
$ sudo /opt/puppetlabs/bin/puppet cert sign --all
Akhirnya (dan setelah dalang menandatangani sertifikat) saatnya menerapkan konfigurasi ke agen dengan mengambil katalog dari dalang:
$ sudo /opt/puppetlabs/bin/puppet agent --test
Dalam perintah ini, parameter --test tidak berarti pengujian, pengaturan yang diambil dari master akan diterapkan ke agen lokal. Untuk menguji/memeriksa konfigurasi dari master, perintah berikut harus dijalankan:
$ sudo /opt/puppetlabs/bin/puppet agent --noop
Konfigurasi &Pemrograman Wayang
Puppet menggunakan pendekatan pemrograman deklaratif yang tujuannya adalah untuk menentukan apa yang harus dilakukan dan tidak masalah cara untuk mencapainya!
Bagian kode paling dasar pada Wayang adalah sumber daya yang menentukan properti sistem seperti perintah, layanan, file, direktori, pengguna, atau paket.
Di bawah ini disajikan sintaks sumber daya untuk membuat pengguna:
user { 'admin_postgresql':
ensure => present,
uid => '1000',
gid => '1000',
home => '/home/admin/postresql'
}
Sumber daya yang berbeda dapat digabungkan ke kelas sebelumnya (juga dikenal sebagai manifes) file dengan ekstensi “pp” (singkatan dari Puppet Program), namun, beberapa manifes dan data (seperti fakta, file, dan template) akan membuat modul. Semua hierarki dan aturan logis direpresentasikan dalam diagram di bawah ini:
Tujuan setiap modul adalah memuat semua manifes yang diperlukan untuk mengeksekusi satu tugas secara modular. Di sisi lain, konsep kelas tidak sama dengan bahasa pemrograman berorientasi objek, di Wayang berfungsi sebagai agregator sumber daya.
Organisasi file ini memiliki struktur direktori khusus untuk diikuti:
Di mana tujuan setiap folder adalah sebagai berikut:
Folder | Deskripsi |
manifes | Kode wayang |
file | File statis untuk disalin ke node |
templat | File template untuk disalin ke node yang dikelola (dapat disesuaikan dengan variabel) |
contoh | Manifes untuk menunjukkan cara menggunakan modul |
class dev_accounts {
$rootgroup = $osfamily ? {
'Debian' => 'sudo',
'RedHat' => 'wheel',
default => warning('This distribution is not supported by the Accounts module'),
}
include accounts::groups
user { 'username':
ensure => present,
home => '/home/admin/postresql',
shell => '/bin/bash',
managehome => true,
gid => 'admin_db',
groups => "$rootgroup",
password => '$1$7URTNNqb$65ca6wPFDvixURc/MMg7O1'
}
}
Di bagian berikutnya, kami akan menunjukkan cara membuat konten folder contoh serta perintah untuk menguji dan memublikasikan setiap modul.
Mengonfigurasi Wayang untuk PostgreSQL
Sebelum menyajikan beberapa contoh konfigurasi untuk menerapkan dan memelihara database PostgreSQL, Anda perlu menginstal modul boneka PostgreSQL (di host server) untuk menggunakan semua fungsinya:
$ sudo /opt/puppetlabs/bin/puppet module install puppetlabs-postgresql
Saat ini, ribuan modul yang siap digunakan di Puppet tersedia di repositori modul publik Puppet Forge.
Langkah Pertama
Konfigurasikan dan terapkan instance PostgreSQL baru. Berikut adalah semua pemrograman dan konfigurasi yang diperlukan untuk menginstal instance PostgreSQL baru di semua node.
Langkah pertama adalah membuat direktori struktur modul baru seperti yang dibagikan sebelumnya:
$ cd /etc/puppetlabs/code/environments/production/modules
$ mkdir db_postgresql_admin
$ cd db_postgresql_admin; mkdir{examples,files,manifests,templates}
Kemudian, dalam file manifes manifests/init.pp, Anda perlu menyertakan kelas postgresql::server yang disediakan oleh modul yang diinstal :
class db_postgresql_admin{
include postgresql::server
}
Untuk memeriksa sintaks manifes, sebaiknya jalankan perintah berikut:
$ sudo /opt/puppetlabs/bin/puppet parser validate init.pp
Jika tidak ada yang dikembalikan, berarti sintaksnya benar
Untuk menunjukkan cara menggunakan modul ini di folder contoh, Anda perlu membuat file manifes init.pp baru dengan konten berikut:
include db_postgresql_admin
Contoh lokasi dalam modul harus diuji dan diterapkan ke katalog master:
$ sudo /opt/puppetlabs/bin/puppet apply --modulepath=/etc/puppetlabs/code/environments/production/modules --noop init.pp
Terakhir, perlu untuk menentukan modul mana yang dapat diakses oleh setiap node dalam file “/etc/puppetlabs/code/environments/production/manifests/site.pp” :
node ’agent.severalnines.com’,’agent2.severalnines.com’{
include db_postgresql_admin
}
Atau konfigurasi default untuk semua node:
node default {
include db_postgresql_admin
}
Biasanya setiap 30 menit node memeriksa katalog master, namun kueri ini dapat dipaksakan di sisi node dengan perintah berikut:
$ /opt/puppetlabs/bin/puppet agent -t
Atau jika tujuannya adalah untuk mensimulasikan perbedaan antara konfigurasi master dan pengaturan node saat ini, dapat digunakan parameter nopp (tidak ada operasi):
$ /opt/puppetlabs/bin/puppet agent -t --noop
Langkah Kedua
Perbarui instance PostgreSQL untuk mendengarkan semua antarmuka. Instalasi sebelumnya mendefinisikan pengaturan instans dalam mode yang sangat ketat:hanya mengizinkan koneksi di localhost seperti yang dapat dikonfirmasi oleh host yang terkait dengan port 5432 (ditentukan untuk PostgreSQL):
$ sudo netstat -ntlp|grep 5432
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 3237/postgres
tcp6 0 0 ::1:5432 :::* LISTEN 3237/postgres
Untuk mengizinkan mendengarkan semua antarmuka, konten berikut harus ada di file /etc/puppetlabs/code/environments/production/modules/db_postgresql_admin/manifests/init.pp
class db_postgresql_admin{
class{‘postgresql:server’:
listen_addresses=>’*’ #listening all interfaces
}
}
Pada contoh di atas dideklarasikan class postgresql::server dan setting parameter listen_addresses menjadi “*” yang artinya semua interface.
Sekarang port 5432 dikaitkan dengan semua antarmuka, dapat dikonfirmasi dengan alamat IP/port berikut:“0.0.0.0:5432”
$ sudo netstat -ntlp|grep 5432
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 1232/postgres
tcp6 0 0 :::5432 :::* LISTEN 1232/postgres
Untuk mengembalikan pengaturan awal:hanya izinkan koneksi database dari localhost, parameter listen_addresses harus disetel ke “localhost” atau menentukan daftar host, jika diinginkan:
listen_addresses = 'agent2.severalnines.com,agent3.severalnines.com,localhost'
Untuk mengambil konfigurasi baru dari master host, hanya perlu memintanya di node:
$ /opt/puppetlabs/bin/puppet agent -t
Langkah Ketiga
Buat Basis Data PostgreSQL. Instance PostgreSQL dapat dibuat dengan database baru serta pengguna baru (dengan kata sandi) untuk menggunakan database ini dan aturan pada file pg_hab.conf untuk mengizinkan koneksi database untuk pengguna baru ini:
class db_postgresql_admin{
class{‘postgresql:server’:
listen_addresses=>’*’ #listening all interfaces
}
postgresql::server::db{‘nines_blog_db’:
user => ‘severalnines’, password=> postgresql_password(‘severalnines’,’passwd12’)
}
postgresql::server::pg_hba_rule{‘Authentication for severalnines’:
Description =>’Open access to severalnines’,
type => ‘local’,
database => ‘nines_blog_db’,
user => ‘severalnines’,
address => ‘127.0.0.1/32’
auth_method => ‘md5’
}
}
Sumber daya terakhir ini memiliki nama "Otentikasi untuk beberapa sembilan" dan file pg_hba.conf akan memiliki satu aturan tambahan lagi:
# Rule Name: Authentication for severalnines
# Description: Open access for severalnines
# Order: 150
local nines_blog_db severalnines 127.0.0.1/32 md5
Untuk mengambil konfigurasi baru dari host master, yang diperlukan hanyalah memintanya di node:
$ /opt/puppetlabs/bin/puppet agent -t
Langkah Empat
Buat Pengguna Hanya-Baca. Untuk membuat pengguna baru, dengan hak istimewa hanya baca, sumber daya berikut perlu ditambahkan ke manifes sebelumnya:
postgresql::server::role{‘Creation of a new role nines_reader’:
createdb => false,
createrole => false,
superuser => false, password_hash=> postgresql_password(‘nines_reader’,’passwd13’)
}
postgresql::server::pg_hba_rule{‘Authentication for nines_reader’:
description =>’Open access to nines_reader’,
type => ‘host’,
database => ‘nines_blog_db’,
user => ‘nines_reader’,
address => ‘192.168.1.10/32’,
auth_method => ‘md5’
}
Untuk mengambil konfigurasi baru dari host master, yang diperlukan hanyalah memintanya di node:
$ /opt/puppetlabs/bin/puppet agent -t
Kesimpulan
Dalam posting blog ini, kami menunjukkan kepada Anda langkah-langkah dasar untuk menerapkan dan mulai mengonfigurasi database PostgreSQL Anda melalui cara otomatis dan disesuaikan pada beberapa node (yang bahkan bisa berupa mesin virtual).
Jenis otomatisasi ini dapat membantu Anda menjadi lebih efektif daripada melakukannya secara manual dan konfigurasi PostgreSQL dapat dengan mudah dilakukan dengan menggunakan beberapa kelas yang tersedia di repositori puppetforge