Memastikan database sehat adalah salah satu hal penting dan penting yang harus dilakukan oleh administrator database. Jika kita mengabaikan pemeliharaan database, ada kemungkinan lebih tinggi bahwa kita mengalami masalah; misalnya, masalah kinerja database yang disebabkan oleh beban kerja yang berubah seiring waktu, atau kesalahan konfigurasi yang menyebabkan pelanggaran data.
Pemeriksaan konfigurasi secara teratur, pemanfaatan sumber daya, prosedur pencadangan dan pemulihan, keamanan data, kinerja kueri dapat membantu menghindari masalah basis data. Kami perlu memiliki pemeriksaan basis data standar untuk lingkungan basis data kami, sehingga kami dapat memantau apakah basis data masih terkendali.
Apa itu Pemeriksaan Kesehatan Basis Data
Pemeriksaan kondisi database terdiri dari sejumlah tugas untuk memeriksa kondisi database kita. Mengapa kita perlu melakukan pemeriksaan kesehatan? Kami perlu mengidentifikasi dan memperbaiki masalah atau anomali apa pun di lingkungan database kami, apakah itu masalah kinerja, masalah konfigurasi, atau sesuatu yang dapat menyebabkan pemadaman.
Kami dapat membagi pemeriksaan kesehatan menjadi beberapa kategori:
-
Pemeriksaan keamanan, untuk mengunci akses ke database dan memastikan lalu lintas berasal dari jaringan tepercaya dengan benar hak istimewa.
-
Pemeriksaan konfigurasi, untuk memastikan konfigurasi memenuhi kriteria standar yang telah ditentukan oleh organisasi.
-
Pemeriksaan kinerja, untuk memastikan bahwa database menggunakan sumber daya perangkat keras dan responsif terhadap aplikasi.
-
Prosedur Pencadangan dan Pemulihan, untuk memastikan bahwa cadangan yang kami ambil dari database dapat dipulihkan.
Dari kategori-kategori tersebut, kita dapat membuat rincian apa yang perlu kita periksa di database. Ini sangat penting, sehingga kami dapat melakukan pemeriksaan terperinci pada setiap aspek. Misalnya:
-
Keamanan Basis Data
-
Bandingkan pengguna dan hak istimewa pada database dengan akses matriks pengguna yang kita miliki
-
Periksa alamat IP daftar putih di database, apakah lalu lintas berasal dari jaringan tepercaya
-
Pastikan logging audit database diaktifkan
-
Pemeriksaan Konfigurasi
-
Periksa SSL sudah ada
-
Pastikan konfigurasi database sudah benar (baik izin maupun kepemilikan)
-
Pemeriksaan kinerja
-
Periksa rasio cache hit database
-
Pastikan koneksi database masih cukup untuk menangani lalu lintas
-
Prosedur Pencadangan dan Pemulihan
-
Jadwal pencadangan yang tepat, yang memberikan RPO yang disepakati
-
Pastikan kami menguji cadangan sehingga kami tahu bahwa data dapat dipulihkan
Berdasarkan daftar di atas, kita dapat membuat skrip untuk memeriksa item-item tersebut pada setiap jenis database (mis. MySQL, PostgreSQL, MongoDB). Setiap tipe database jelas akan memiliki perintah yang berbeda.
Mengotomatiskan Pemeriksaan Kesehatan Basis Data
Kami tidak ingin menjalankan tugas yang berulang setiap minggu atau setiap bulan, pemeriksaan kesehatan database adalah tugas yang memakan waktu. Kami menjalankan skrip di setiap node basis data, jadi otomatisasi pemeriksaan kesehatan menghemat waktu kami.
Berdasarkan daftar skrip health check, kita dapat membuat skrip bash untuk menjalankan tugas dan menjadwalkannya dengan cron. Di bawah ini hanya contoh laporan pemeriksaan kesehatan basis data sederhana:
#!/bin/sh
# Simple database check report
username = "audit_user"
password = "pwd001"
hostname = "db01-payment"
mycnf = "/etc/mysql/my.cnf"
dt=$(date '+%d/%m/%Y %H:%M:%S');
audit_name = "MySQL_Healthcheck_audit_report_"$dt
# check the queries
/bin/mysql -h $hostname -u $username -p $password --skip-column-names -B -e "SHOW STATUS LIKE 'Queries'" > $audit_name
# check open table cache hit ratio
/bin/mysql -h $hostname -u $username -p $password --skip-column-names -B -e "SHOW STATUS LIKE 'Table_open_cache_hits'" >> $audit_name
# check the ssl session mode
/bin/mysql -h $hostname -u $username -p $password --skip-column-names -B -e "SHOW STATUS LIKE 'Ssl_session_cache_mode'" >> $audit_name
# check the buffer pool size
cat $mycnf | grep "innodb_buffer_pool_size" >> $audit_name
#check ssl key in my.cnf
cat $mycnf | grep "ssl_key" >> $audit_name
# check permission of my.conf
ls -ltr $mycnf >> $audit_name
Pemeriksaan kesehatan juga dapat diotomatiskan dengan alat manajemen konfigurasi seperti Ansible, Salt,Chef, atau Puppet.
Mengotomatiskan Pemeriksaan Kesehatan Database dengan ClusterControl
ClusterControl adalah platform operasi untuk database, ini menunjukkan masalah kesehatan, kinerja, atau ketersediaan server dalam lingkungan database mereka, semuanya dari konsol pusat. Mendukung otomatisasi pemeriksaan kesehatan database melalui Laporan Operasional. Anda dapat membuat atau menjadwalkan laporan operasional, serta laporan insiden. Ada beberapa jenis laporan seperti yang ditunjukkan di bawah ini:
Laporan Sistem Harian memberi Anda wawasan tentang cluster database Anda saat ini dengan terdiri dari berbagai informasi seperti status layanan node, status cadangan, waktu aktif node, ringkasan kueri teratas.
Laporan Peningkatan Paket memberi Anda ringkasan paket yang tersedia untuk peningkatan versi dari manajer penyimpanan.
Laporan Perubahan Skema membandingkan perubahan basis data dalam struktur tabel yang terjadi antara dua laporan berbeda yang dihasilkan.
Laporan Cadangan memberi Anda informasi tentang ringkasan dan detail pencadangan, misalnya, pencadangan terakhir dibuat, status pencadangan, status verifikasi pencadangan, dan periode penyimpanan cadangan.
Selain Laporan Operasional, ada juga Penasihat yang memberi Anda wawasan tentang CPU, disk, koneksi database, dll., seperti di bawah ini:
Pemberitahuan melalui email dan peringatan melalui saluran pihak ketiga yang dikonfigurasi memberikan wawasan tentang hal-hal yang salah (mis. pencadangan yang gagal, pencadangan yang tidak dapat diperbaiki, kegagalan node).
Schema Analyzer memberikan informasi tentang indeks duplikat/redundan, tabel tanpa Kunci Utama, dan tabel menggunakan mesin penyimpanan MyISAM. Indeks yang redundan bisa jadi sangat bagus untuk diketahui, karena membuat ukuran database (dan cadangan) membengkak, dan dapat memperlambat pembaruan pada tabel.