MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

DBA Saya Sakit - Tips Kegagalan Basis Data untuk SysAdmins

Skenario terbaik adalah, jika terjadi kegagalan basis data, Anda memiliki Rencana Pemulihan Bencana (DRP) yang baik dan lingkungan yang sangat tersedia dengan proses failover otomatis, tetapi… apa yang terjadi jika gagal beberapa alasan yang tidak terduga? Bagaimana jika Anda perlu melakukan failover manual? Di blog ini, kami akan membagikan beberapa rekomendasi untuk diikuti jika Anda perlu melakukan failover database Anda.

Pemeriksaan Verifikasi

Sebelum melakukan perubahan apa pun, Anda perlu memverifikasi beberapa hal dasar untuk menghindari masalah baru setelah proses failover.

Status Replikasi

Mungkin saja, pada saat kegagalan, node slave tidak mutakhir, karena kegagalan jaringan, beban tinggi, atau masalah lain, jadi Anda perlu memastikan budak memiliki semua (atau hampir semua) informasi. Jika Anda memiliki lebih dari satu node slave, Anda juga harus memeriksa node mana yang paling canggih dan memilihnya untuk failover.

misalnya:Mari kita periksa status replikasi di Server MariaDB.

MariaDB [(none)]> SHOW SLAVE STATUS\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.100.110

Master_User: rpl_user

Master_Port: 3306

Connect_Retry: 10

Master_Log_File: binlog.000014

Read_Master_Log_Pos: 339

Relay_Log_File: relay-bin.000002

Relay_Log_Pos: 635

Relay_Master_Log_File: binlog.000014

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Last_Errno: 0

Skip_Counter: 0

Exec_Master_Log_Pos: 339

Relay_Log_Space: 938

Until_Condition: None

Until_Log_Pos: 0

Master_SSL_Allowed: No

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_SQL_Errno: 0

Replicate_Ignore_Server_Ids:

Master_Server_Id: 3001

Using_Gtid: Slave_Pos

Gtid_IO_Pos: 0-3001-20

Parallel_Mode: conservative

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it

Slave_DDL_Groups: 0

Slave_Non_Transactional_Groups: 0

Slave_Transactional_Groups: 0

1 row in set (0.000 sec)

Dalam kasus PostgreSQL, ini sedikit berbeda karena Anda perlu memeriksa status WAL dan membandingkan yang diterapkan dengan yang diambil.

postgres=# SELECT CASE WHEN pg_last_wal_receive_lsn()=pg_last_wal_replay_lsn()

postgres-# THEN 0

postgres-# ELSE EXTRACT (EPOCH FROM now() - pg_last_xact_replay_timestamp())

postgres-# END AS log_delay;

 log_delay

-----------

         0

(1 row)

Kredensial

Sebelum menjalankan failover, Anda harus memeriksa apakah aplikasi/pengguna Anda dapat mengakses master baru Anda dengan kredensial saat ini. Jika Anda tidak mereplikasi pengguna database Anda, mungkin kredensial telah diubah, jadi Anda perlu memperbaruinya di node slave sebelum ada perubahan.

misalnya:Anda dapat menanyakan tabel pengguna di database mysql untuk memeriksa kredensial pengguna di Server MariaDB/MySQL:

MariaDB [(none)]> SELECT Host,User,Password FROM mysql.user;

+-----------------+--------------+-------------------------------------------+

| Host            | User | Password                                  |

+-----------------+--------------+-------------------------------------------+

| localhost       | root | *CD7EC70C2F7DCE88643C97381CB42633118AF8A8 |

| localhost       | mysql | invalid                                   |

| 127.0.0.1       | backupuser | *AC01ED53FA8443BFD3FC7C448F78A6F2C26C3C38 |

| 192.168.100.100 | cmon         | *F80B5EE41D1FB1FA67D83E96FCB1638ABCFB86E2 |

| 127.0.0.1       | root | *CD7EC70C2F7DCE88643C97381CB42633118AF8A8 |

| ::1             | root | *CD7EC70C2F7DCE88643C97381CB42633118AF8A8 |

| localhost       | backupuser | *AC01ED53FA8443BFD3FC7C448F78A6F2C26C3C38 |

| 192.168.100.112 | user1        | *CD7EC70C2F7DCE88643C97381CB42633118AF8A8 |

| localhost       | cmonexporter | *0F7AD3EAF21E28201D311384753810C5066B0964 |

| 127.0.0.1       | cmonexporter | *0F7AD3EAF21E28201D311384753810C5066B0964 |

| ::1             | cmonexporter | *0F7AD3EAF21E28201D311384753810C5066B0964 |

| 192.168.100.110 | rpl_user     | *EEA7B018B16E0201270B3CDC0AF8FC335048DC63 |

+-----------------+--------------+-------------------------------------------+

12 rows in set (0.001 sec)

Dalam kasus PostgreSQL, Anda dapat menggunakan perintah '\du' untuk mengetahui peran, dan Anda juga harus memeriksa file konfigurasi pg_hba.conf untuk mengelola akses pengguna (bukan kredensial). Jadi:

postgres=# \du

                                       List of roles

    Role name     |             Attributes         | Member of

------------------+------------------------------------------------------------+-----------

 admindb          | Superuser, Create role, Create DB                          | {}

 cmon_replication | Replication                                                | {}

 cmonexporter     |                                             | {}

 postgres         | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

 s9smysqlchk      | Superuser, Create role, Create DB                          | {}

Dan pg_hba.conf:

# TYPE DATABASE USER ADDRESS METHOD

host replication  cmon_replication  localhost  md5

host  replication  cmon_replication  127.0.0.1/32  md5

host  all  s9smysqlchk  localhost  md5

host  all  s9smysqlchk  127.0.0.1/32  md5

local   all            all                   trust

host    all            all 127.0.0.1/32 trust

Akses Jaringan/Firewall

Kredensial bukan satu-satunya masalah yang mungkin terjadi saat mengakses master baru Anda. Jika node berada di pusat data lain, atau Anda memiliki firewall lokal untuk memfilter lalu lintas, Anda harus memeriksa apakah Anda diizinkan untuk mengaksesnya atau bahkan jika Anda memiliki rute jaringan untuk mencapai node master baru.

misalnya:iptables. Mari izinkan lalu lintas dari jaringan 167.124.57.0/24 dan periksa aturan saat ini setelah menambahkannya:

$ iptables -A INPUT  -s 167.124.57.0/24 -m state --state NEW  -j ACCEPT

$ iptables -L -n

Chain INPUT (policy ACCEPT)

target     prot opt source               destination

ACCEPT     all -- 167.124.57.0/24      0.0.0.0/0 state NEW

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

misalnya:rute. Misalkan master node baru Anda berada di jaringan 10.0.0.0/24, server aplikasi Anda berada di 192.168.100.0/24, dan Anda dapat menjangkau jaringan jarak jauh menggunakan 192.168.100.100, jadi di server aplikasi Anda, tambahkan rute yang sesuai:

$ route add -net 10.0.0.0/24 gw 192.168.100.100

$ route -n

Kernel IP routing table

Destination     Gateway Genmask         Flags Metric Ref Use Iface

0.0.0.0         192.168.100.1 0.0.0.0         UG 0 0 0 eth0

10.0.0.0        192.168.100.100 255.255.255.0   UG 0 0 0 eth0

169.254.0.0     0.0.0.0 255.255.0.0     U 1027 0 0 eth0

192.168.100.0   0.0.0.0 255.255.255.0   U 0 0 0 eth0

Poin Aksi

Setelah memeriksa semua poin yang disebutkan, Anda harus siap melakukan tindakan untuk melakukan failover database Anda.

Alamat IP Baru

Karena Anda akan mempromosikan node slave, alamat IP master akan berubah, jadi Anda perlu mengubahnya di aplikasi atau akses klien Anda.

Menggunakan Load Balancer adalah cara terbaik untuk menghindari masalah/perubahan ini. Setelah proses failover, Load Balancer akan mendeteksi master lama sebagai offline dan (tergantung pada konfigurasi) mengirim lalu lintas ke yang baru untuk menulis di dalamnya, jadi Anda tidak perlu mengubah apa pun di aplikasi Anda.

misalnya:Mari kita lihat contoh konfigurasi HAProxy:

listen  haproxy_5433

        bind *:5433

        mode tcp

        timeout client  10800s

        timeout server  10800s

        balance leastconn

        option tcp-check

        server 192.168.100.119 192.168.100.119:5432 check

        server 192.168.100.120 192.168.100.120:5432 check

Dalam hal ini, jika satu node mati, HAProxy tidak akan mengirim lalu lintas ke sana dan hanya mengirim lalu lintas ke node yang tersedia.

Konfigurasi ulang Node Slave

Jika Anda memiliki lebih dari satu node slave, setelah mempromosikan salah satunya, Anda harus mengkonfigurasi ulang sisa slave untuk terhubung ke master baru. Ini bisa menjadi tugas yang memakan waktu, tergantung pada jumlah node.

Verifikasi &Konfigurasi Cadangan

Setelah Anda menyiapkan semuanya (master baru dipromosikan, slave dikonfigurasi ulang, penulisan aplikasi di master baru), penting untuk mengambil tindakan yang diperlukan untuk mencegah masalah baru, jadi pencadangan adalah suatu keharusan dalam langkah ini. Kemungkinan besar Anda memiliki kebijakan pencadangan yang berjalan sebelum kejadian (jika tidak, Anda pasti harus memilikinya), jadi Anda harus memeriksa apakah pencadangan masih berjalan atau akan dilakukan di topologi baru. Ada kemungkinan bahwa Anda menjalankan pencadangan pada master lama, atau menggunakan node budak yang sekarang menjadi master, jadi Anda perlu memeriksanya untuk memastikan kebijakan pencadangan Anda akan tetap berfungsi setelah perubahan.

Pemantauan Basis Data

Saat Anda melakukan proses failover, pemantauan adalah suatu keharusan sebelum, selama, dan setelah proses. Dengan ini, Anda dapat mencegah masalah sebelum menjadi lebih buruk, mendeteksi masalah yang tidak terduga selama failover, atau bahkan mengetahui jika terjadi kesalahan setelahnya. Misalnya, Anda harus memantau apakah aplikasi Anda dapat mengakses master baru Anda dengan memeriksa jumlah koneksi yang aktif.

Metrik Utama untuk Dipantau

Mari kita lihat beberapa metrik yang paling penting untuk dipertimbangkan:

  • Keterlambatan Replikasi
  • Status Replikasi
  • Jumlah koneksi
  • Penggunaan/kesalahan jaringan
  • Pemuatan server (CPU, Memori, Disk)
  • Database dan log sistem

Kembalikan

Tentu saja, jika terjadi kesalahan, Anda harus dapat memutar kembali. Memblokir lalu lintas ke node lama dan membuatnya seisolasi mungkin bisa menjadi strategi yang baik untuk ini, jadi jika Anda perlu melakukan rollback, Anda akan memiliki node lama yang tersedia. Jika rollback setelah beberapa menit, tergantung pada lalu lintas, Anda mungkin perlu memasukkan data menit ini di master lama, jadi pastikan Anda juga memiliki node master sementara yang tersedia dan diisolasi untuk mengambil informasi ini dan menerapkannya kembali .

Otomatiskan Proses Failover dengan ClusterControl

Melihat semua tugas yang diperlukan ini untuk melakukan failover, kemungkinan besar Anda ingin mengotomatiskannya dan menghindari semua pekerjaan manual ini. Untuk ini, Anda dapat memanfaatkan beberapa fitur yang dapat ditawarkan ClusterControl kepada Anda untuk berbagai teknologi basis data, seperti pemulihan otomatis, pencadangan, pengelolaan pengguna, pemantauan, dan fitur lainnya, semuanya dari sistem yang sama.

Dengan ClusterControl Anda dapat memverifikasi status replikasi dan kelambatannya, membuat atau mengubah kredensial, mengetahui jaringan dan status host, dan bahkan lebih banyak verifikasi.

Menggunakan ClusterControl Anda juga dapat melakukan tindakan cluster dan node yang berbeda, seperti mempromosikan budak , memulai ulang database dan server, menambah atau menghapus node database, menambah atau menghapus node load balancer, membangun kembali slave replikasi, dan banyak lagi.

Dengan menggunakan tindakan ini, Anda juga dapat mengembalikan failover jika diperlukan dengan membangun kembali dan mempromosikan master sebelumnya.

ClusterControl memiliki layanan pemantauan dan peringatan yang membantu Anda mengetahui apa yang terjadi atau bahkan jika sesuatu terjadi sebelumnya.

Anda juga dapat menggunakan bagian dasbor untuk mendapatkan tampilan yang lebih ramah pengguna tentang status sistem Anda.

Kesimpulan

Jika terjadi kegagalan database master, Anda harus memiliki semua informasi untuk mengambil tindakan yang diperlukan secepatnya. Memiliki DRP yang baik adalah kunci untuk menjaga sistem Anda berjalan sepanjang (atau hampir semua) waktu. DRP ini harus menyertakan proses failover yang terdokumentasi dengan baik untuk memiliki RTO (Tujuan Waktu Pemulihan) yang dapat diterima untuk perusahaan.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MariaDB LAST_INSERT_ID() Dijelaskan

  2. Database MySQL Saya Kehabisan Ruang Disk

  3. MariaDB JSON_REMOVE() Dijelaskan

  4. Bagaimana IFNULL() Bekerja di MariaDB

  5. Otomasi Basis Data dengan Wayang:Menyebarkan Replikasi MySQL &MariaDB