sql >> Databasteknik >  >> NoSQL >> MongoDB

Automatisera databashälsokontroll

Att säkerställa att databasen är sund är en av de kritiska och viktiga sakerna som en databasadministratör måste göra. Om vi ​​försummar underhållet av databasen är det större sannolikhet att vi stöter på ett problem; till exempel ett problem med databasprestanda orsakat av en arbetsbelastning som har förändrats över tiden, eller felkonfiguration som leder till ett dataintrång.

Regelbunden kontroll av konfigurationen, resursutnyttjande, säkerhetskopierings- och återställningsprocedurer, datasäkerhet, frågeprestanda kan hjälpa till att undvika databasproblem. Vi måste ha en standarddatabaskontroll för vår databasmiljö, så vi kan övervaka om databasen fortfarande är under kontroll.

Vad är en databashälsokontroll

En databashälsokontroll består av ett antal uppgifter för att kontrollera vår databas tillstånd. Varför måste vi göra en hälsokontroll? Vi måste identifiera och åtgärda eventuella problem eller avvikelser i vår databasmiljö, oavsett om det är ett prestandaproblem, konfigurationsproblem eller något som kan orsaka ett avbrott.

Vi kan dela upp hälsokontrollen i några kategorier:

  • Säkerhetskontroll, för att låsa åtkomst till databasen och säkerställa att trafiken kommer från ett pålitligt nätverk med rätt privilegier.

  • Konfigurationskontroll för att säkerställa att konfigurationen uppfyller standardkriterierna som har definierats av organisationen.

  • Prestandakontroll för att säkerställa att databasen använder hårdvaruresurserna och är lyhörd för applikationer.

  • Procedurer för säkerhetskopiering och återställning, för att säkerställa att säkerhetskopian vi tog från databasen kan återställas.

Från dessa kategorier kan vi göra en uppdelning av vad vi behöver kontrollera i databasen. Detta är mycket viktigt, så vi kan ha en detaljerad kontroll av varje aspekt. Till exempel:

  • Databassäkerhet

  • Jämför användaren och privilegier på databasen med den användarmatrisåtkomst vi har

  • Kontrollera vitlistans IP-adress i databasen, om trafik kommer från ett pålitligt nätverk

  • Se till att revisionsloggning av databasen är aktiverad

  • Konfigurationskontroll

  • Kontrollera SSL som redan finns på plats

  • Se till att databaskonfigurationen är korrekt (både behörighet och äganderätt)

  • Prestandakontroll

  • Kontrollera cacheträffförhållandet för databasen

  • Se till att databasanslutningen fortfarande är tillräckligt för att hantera trafiken

  • Procedur för säkerhetskopiering och återställning

  • Riktigt backupschema, som levererar den överenskomna RPO

  • Se till att vi testar säkerhetskopior så att vi vet att data kan återställas

Baserat på listan ovan kan vi skapa ett skript för att kontrollera dessa objekt på varje typ av databas (t.ex. MySQL, PostgreSQL, MongoDB). Varje databastyp kommer uppenbarligen att ha olika kommandon.

Automatiska databashälsokontroller

Vi vill inte köra en repetitiv uppgift på vecko- eller månadsbasis, databasens hälsokontroll är en tidskrävande uppgift. Vi kör skriptet på varje databasnod, så automatisering av hälsokontrollerna sparar oss ganska mycket tid.

Baserat på listan över hälsokontrollskript, kan vi skapa bash-skript för att köra uppgifterna och schemalägga det med cron. Nedan är bara exempel på en enkel databashälsokontrollrapport:

#!/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

Hälsokontroller kan också automatiseras med verktyg för konfigurationshantering som Ansible, Salt, Chef eller Puppet.

Automatiska databashälsokontroller med ClusterControl

ClusterControl är en operationsplattform för databaser, den visar servertillstånd, prestanda eller tillgänglighetsproblem i deras databasmiljö, allt från en central konsol. Det stöder automatisering av databashälsokontroller genom Operational Reports. Du kan generera eller schemalägga operativa rapporter, såväl som incidentrapporter. Det finns några typer av rapporter som visas nedan:

Den dagliga systemrapporten ger dig insikt om ditt nuvarande databaskluster med består av diverse information såsom nodtjänststatus, backupstatus, nodernas drifttid, sammanfattning av vanliga frågor.

Paketuppgraderingsrapport ger dig en sammanfattning av tillgängliga paket för uppgraderingen från förvarschef.

Schema Changes Report jämför databasändringar i en tabellstruktur som inträffade mellan två olika genererade rapporter.

Säkerhetskopieringsrapporter ger dig information om säkerhetskopieringssammanfattning och detaljer, t.ex. senast skapad säkerhetskopia, status för säkerhetskopian, säkerhetskopieringsverifieringsstatus och säkerhetskopieringsperiod.

Förutom verksamhetsrapporterna finns det även rådgivare som ger dig insikt om CPU, disk, databasanslutningar etc., enligt nedan:

Meddelanden via e-post och varning via konfigurerade tredjepartskanaler ger insikt om saker som går fel (t.ex. misslyckade säkerhetskopior, oåterställbara säkerhetskopior, nodfel).

Schema Analyzer ger information om dubbletter/redundanta index, tabeller utan primärnycklar och tabeller som använder MyISAM-lagringsmotorn. Redundanta index kan vara särskilt bra att känna till, eftersom de gör databasens storlek (och säkerhetskopior) förstorad och kan sakta ner uppdateringar på bordet.


  1. Mongo C# JSON-läsaren förväntade sig ett värde men hittade 'replSetGetStatus'

  2. Kan jag använda Tornado+ Selleri+ RabbitMQ + Redis?

  3. vad är pagecache, dentries, inoder?

  4. Redis auth-fel med Node.js och socket.io