Memantau database MySQL Anda secara proaktif sangat penting saat ini. Ini memainkan peran penting dan signifikan untuk mengelola dan mengontrol database Anda terutama untuk cluster tingkat produksi Anda. Hilangnya informasi spesifik yang akan bermanfaat untuk meningkatkan basis data Anda atau gagal mengidentifikasi akar penyebab masalah yang dapat dihadapi dapat menghasilkan kesulitan ekstrem untuk memperbaiki atau memulihkannya dari masa kejayaannya.
Pemantauan proaktif di database MySQL memungkinkan tim Anda memahami kinerja layanan database Anda. Apakah itu berfungsi dan memberikan berdasarkan beban kerja yang diharapkan untuk dibawa? Apakah Anda memiliki sumber daya yang cukup untuk server agar berkinerja berdasarkan beban kerja yang sedang ditanganinya? Pemantauan proaktif menerapkan hal-hal yang akan mencegah bencana atau merusak database Anda yang akan memberi tahu Anda sebelumnya. Dengan demikian, memungkinkan DBA atau administrator untuk melakukan tugas-tugas penting untuk menghindari kegagalan fungsi, kerusakan data, eksploitasi dan serangan keamanan, atau pemantulan lalu lintas yang tidak terduga di klaster database Anda. Dengan segera hadir, pemantauan proaktif untuk MySQL harus diotomatisasi dan akan beroperasi 24/7 tanpa gangguan dan terserah kepada DBA, Devops, administrator untuk memutuskan apakah berdasarkan prioritas tugas dan seberapa penting jika memerlukan pemeliharaan atau hanya pekerjaan rutin harian biasa.
Pemantauan proaktif dengan ClusterControl
ClusterControl menawarkan gaya yang beragam untuk memantau server database MySQL Anda. Pendekatannya sebanding dengan alat pemantauan perusahaan lain dan solusi cloud tingkat perusahaan. ClusterControl cenderung menerapkan semua praktik terbaik untuk mengelola dan memantau database tetapi dengan fleksibilitas untuk mengonfigurasi guna mencapai penyiapan yang diinginkan berdasarkan lingkungan Anda.
Ketika berbicara tentang alarm dan notifikasi, ClusterControl memiliki pendekatan campuran di mana ada alarm bawaan, dan kemudian ada Penasihat yang akan kita diskusikan lebih lanjut di blog ini.
Alarm Kontrol Cluster untuk MySQL
Alarm menunjukkan masalah yang dapat memengaruhi atau menurunkan klaster secara keseluruhan. Antarmuka ini memberikan penjelasan rinci tentang masalah, bersama dengan tindakan yang direkomendasikan (jika tersedia) untuk menyelesaikan masalah. Setiap alarm dikategorikan sebagai:
-
Kluster
-
Pemulihan cluster
-
Kesehatan basis data
-
Kinerja basis data
-
Host
-
Node
-
Jaringan
Alarm dapat dikenali dengan mencentang tombol Abaikan? kotak centang. Jika diabaikan, tidak ada pemberitahuan yang akan dikirim melalui email. Alarm tidak dapat dihapus atau ditutup, meskipun Anda dapat menyembunyikannya dari daftar dengan mengeklik tombol Sembunyikan Alarm yang Diabaikan.
Lihat contoh tangkapan layar di bawah,
Proaktivitas dengan ClusterControl
ClusterControl mendukung pemulihan otomatis yang bereaksi setiap kali deteksi kegagalan terjadi. Pemulihan Otomatis dengan ClusterControl adalah salah satu fungsi paling proaktif yang memainkan peran penting jika terjadi bencana.
Mengaktifkan pemulihan otomatis diperlukan untuk pemantauan proaktif ini yang bereaksi dalam berbagai situasi, misalnya, jika node MySQL utama gagal.
Di ClusterControl, ini akan langsung terdeteksi saat mendengarkan koneksi dengan server database, atau dalam hal ini server utama. ClusterControl akan bereaksi ASAP dan menerapkan failover.
Failover adalah bagian dari pemulihan Cluster yang diaktifkan. Karena kedua tombol Cluster dan Node diaktifkan, maka akan mengikuti pemulihan node seperti yang Anda lihat di bawah.
Tergantung pada jangkauan node, ClusterControl akan mencoba terus mencoba dengan menghubungkan melalui SSH dan mencoba mencapai node dan mencoba memulihkan dengan mulai menggunakan sysvinit atau systemd. Jelas, Anda mungkin berpikir bahwa itu menerapkan failover dan ClusterControl mencoba memulai primer yang gagal. Itu bisa berarti dua node database tersedia, bukan? Meskipun benar, ClusterControl akan membawa primer yang gagal ke status hanya-baca saat dipulihkan. Lihat di bawah,
Meskipun ada opsi tertentu yang dapat Anda atur untuk mengelola mekanisme failover, Anda harus merujuk ke dokumentasi kami untuk ini karena ini bukan fokus dari blog ini.
Menggunakan Penasihat untuk Proaktivitas dengan ClusterControl
Dalam ClusterControl, Penasihat akan ditemukan dengan membuka
Saat berada di Galera Cluster, ia menambahkan penasihat khusus Galera seperti yang ditunjukkan di bawah ini ,
Menyesuaikan Penasihat MySQL ClusterControl Anda
Advisor dapat disesuaikan dan dapat dimodifikasi sesuai kebutuhan Anda. Pada tangkapan layar Advisors di atas, cukup klik Edit dan Anda akan diarahkan ke IDE sederhana yang kami miliki di ClusterControl.
Anda juga dapat membuat ClusterControl Advisors Anda sendiri. Anda dapat merujuk diri Anda sendiri untuk mempelajari lebih lanjut tentang membuat dengan membaca Tulis Penasihat Pertama Anda atau ambil seri 2 bagian untuk membuatnya sendiri menggunakan skrip deteksi Meltdown/Spectre.
Bagaimana ClusterControl Advisor Menjadi Proaktif?
Secara teknis, penasihat ClusterControl sebagian besar bertindak sebagai pemberi tahu dan secara harfiah sebagai penasihat Anda. ClusterControl Advisors akan memberi tahu Anda jika mendeteksi perilaku yang tidak biasa jika mencapai ambang batas dasar yang ditetapkan secara default oleh ClusterControl. Biasanya, ambang batas yang diterapkan adalah nilai generik. Nilai generik ini didasarkan pada praktik terbaik dan pada beban kerja atau pengaturan lingkungan yang paling umum dan dapat diterima. Sebagian besar default penasihat tidak menyediakan alarm atau mekanisme peringatan di UI ClusterControl. Itu memberi tahu Anda melalui UI (lihat contoh tangkapan layar dari penasihat Lokasi Penyimpanan Binlog di bawah).
Seperti yang disebutkan sebelumnya, Penasihat dapat dimodifikasi dan dapat diedit melalui editor atau IDE sederhana kami. Misalnya dalam cluster Replikasi MySQL, ClusterControl menyediakan penasihat Lokasi Penyimpanan Binlog. Ini mendeteksi bahwa binlog disimpan di direktori data yang disarankan untuk berada di luar direktori data.
Mari kita ambil contoh dari daftar penasihat dan pilih Koneksi yang saat ini digunakan penasihat . Mari kita edit ini seperti yang ditunjukkan di bawah ini,
atau sebagai alternatif, Anda dapat pergi ke
Dengan membuatnya lebih proaktif dengan mengirimkan alarm, Anda dapat memodifikasinya dan menambahkan berikut fungsinya seperti di bawah ini,
function myAlarm(title, message, recommendation)
{
return Alarm::alarmId(
Node,
true,
title,
message,
recommendation
);
}
Sedangkan, setel ambang batas ke 20 lalu tambahkan baris ini di bawah ini tepat di dalam pernyataan kondisi if di mana ambang tercapai di atas nilai ambang yang diberikan.
myAlarmId = myAlarm(TITLE, msg, ADVICE_WARNING);
// Let's raise an alarm.
host.raiseAlarm(myAlarmId, Warning);
Here's the complete script with my modifications in bold,
#include "common/mysql_helper.js"
var DESCRIPTION="This advisor calculates the percentage of threads_connected over max_connections,"
" if the percentage is higher than 20% you will be notified,"
" preventing your database server from becoming unstable.";
var WARNING_THRESHOLD=20;
var TITLE="Connections currently used";
var ADVICE_WARNING="You are using more than " + WARNING_THRESHOLD +
"% of the max_connections."
" Consider regulating load, e.g by using HAProxy. Using up all connections"
" may render the database server unusable.";
var ADVICE_OK="The percentage of currently used connections is satisfactory." ;
function myAlarm(title, message, recommendation)
{
return Alarm::alarmId(
Node,
true,
title,
message,
recommendation
);
}
function main()
{
var hosts = cluster::mySqlNodes();
var advisorMap = {};
for (idx = 0; idx < hosts.size(); ++idx)
{
host = hosts[idx];
map = host.toMap();
connected = map["connected"];
var advice = new CmonAdvice();
print(" ");
print(host);
print("==========================");
if (!connected)
{
print("Not connected");
continue;
}
var Threads_connected = host.sqlStatusVariable("Threads_connected");
var Max_connections = host.sqlSystemVariable("Max_connections");
if (Threads_connected.isError() || Max_connections.isError())
{
justification = "";
msg = "Not enough data to calculate";
}
else
{
var used = round(100 * Threads_connected / Max_connections,1);
if (used > WARNING_THRESHOLD)
{
advice.setSeverity(1);
msg = ADVICE_WARNING;
justification = used + "% of the connections is currently used,"
" which is > " + WARNING_THRESHOLD + "% of max_connections.";
myAlarmId = myAlarm(TITLE, msg, ADVICE_WARNING);
// Let's raise an alarm.
host.raiseAlarm(myAlarmId, Warning);
}
else
{
justification = used + "% of the connections is currently used,"
" which is < 90% of max_connections.";
advice.setSeverity(0);
msg = ADVICE_OK;
}
}
advice.setHost(host);
advice.setTitle(TITLE);
advice.setJustification(justification);
advice.setAdvice(msg);
advisorMap[idx]= advice;
print(advice.toString("%E"));
}
return advisorMap;
}
Anda dapat menggunakan sysbench untuk mengujinya. Dalam pengujian saya, saya secara proaktif diberitahu dengan mengirimkan alarm. Ini juga akan dikirimkan kepada saya melalui email atau dapat diberitahukan jika Anda memiliki pemberitahuan pihak ketiga yang terintegrasi. Lihat tangkapan layar di bawah,
Peringatan Penasehat ClusterControl
Memodifikasi atau mengedit penasihat yang ada di ClusterControl diterapkan ke semua cluster. Itu berarti, Anda perlu memeriksa skrip Anda jika memiliki kondisi khusus yang hanya berlaku untuk cluster Anda yang ada (baik MySQL atau database lain yang didukung oleh ClusterControl). Ini karena penasihat ClusterControl disimpan dalam satu sumber hanya melalui cmon DB kami. Ini ditarik atau diambil oleh semua cluster yang telah Anda buat di ClusterControl.
Misalnya, Anda dapat melakukan ini dalam skrip:
var hosts =cluster::mySqlNodes();
var advisorMap ={};
print(hosts[1].clusterId());
Skrip ini akan mencetak ID cluster. Setelah Anda mendapatkan nilainya, tetapkan ke variabel dan gunakan variabel itu untuk mengevaluasi apakah benar ID cluster khusus ini dapat diterima atau tidak berdasarkan tugas yang Anda inginkan untuk dilakukan oleh penasihat Anda. Katakanlah,
function main()
{
var hosts = cluster::mySqlNodes();
var advisorMap = {};
for (idx = 0; idx < hosts.size(); ++idx)
{
host = hosts[idx];
map = host.toMap();
connected = map["connected"];
var advice = new CmonAdvice();
print(" ");
print(host);
print("==========================");
if (host.clusterId() == 15)
{
print("Not applicable for cluster id == 15");
continue;
}
…
….
…..
yang artinya jika cluster_id ==15, lewati saja atau lanjutkan ke loop berikutnya.
Kesimpulan
Membuat atau memodifikasi ClusterControl Advisors adalah peluang bagus untuk memanfaatkan fungsionalitas tersembunyi yang dapat diberikan ClusterControl kepada Anda. Mungkin tampak tersembunyi tetapi ada - hanya saja fitur tersebut jarang digunakan. Ini menyediakan fitur sederhana namun kuat yang disebut ClusterControl Domain Specific Language (CDSL) yang dapat digunakan untuk tugas-tugas yang sangat sulit yang tidak dimiliki ClusterControl. Pastikan Anda mengetahui semua peringatan dan juga lakukan uji semuanya terlebih dahulu sebelum akhirnya menerapkannya ke lingkungan produksi Anda.