MYSQL CLUSTER Di Stefano Sardonini 1
MYSQL CLUSTER NDB, MON,HEARTBEAT Questo documento descrive la progettazione e configurazione di un architettura di database che utilizza l engine mysql ndb per la replica dei dati ed heartbeat per i nodi di connessione al cluster. Di seguito lo schema dell architettura NDB CLUSTER 192.168.99.60 192.168.99.62 192.168.99.63 192.168.99.61 192.168.99.64 192.168.99.65 192.168.99.66 CLIENT 2
Server Console Di Gestione Cluster Mysql ( 192.168.99.60 ) Sistema Operativo: Debian OS con 512Mb di Ram e 4 GB di Hard Disk Pacchetti installati: mysql-server Questo server consentirà di poter gestire il cluster ndb con la possibilità di rimuovere o aggiungere ulteriori server in ambiti di storage o interrogazione dei dati. Il pacchetto mysql-server viene installato per pura e semplice comodità in quanto abilita il comando ndb_mgm, pertanto mysql-server sul 192.168.99.60 non deve essere configurato. L unica operazione da fare è quella di creare un file in /etc/mysql chiamato ndb_mgmd.cnf Il cui contenuto, in base allo schema precedentemente riportato, è il seguente [NDBD DEFAULT] NoOfReplicas=2 # Il numero dei nodi ndb mysql ovvero 192.168.99.62 e 192.168.99.63 DataMemory=80M IndexMemory=18M [MYSQLD DEFAULT] [NDB_MGMD DEFAULT] [TCP DEFAULT] [NDB_MGMD] HostName=192.168.99.60 # E l ip del server che contiene questo file, il 192.168.99.60 [NDBD] HostName=192.168.99.62 # Indirizzo ip del primo dei due nodi ndb mysql DataDir=/var/lib/mysql-cluster # Questa è la directory del cluster ( che dovrebbe essere già presente ) DataMemory=512M [NDBD] HostName=192.168.99.63 # Indirizzo ip del secondo dei due nodi ndb mysql DataDir=/var/lib/mysql-cluster DataMemory=512M HostName=192.168.99.61 # Questo è un ip di un server autorizzato ad interrogare i db clusterizzato HostName=192.168.99.62 # Questo è un ip di un server autorizzato ad interrogare i db clusterizzato HostName=192.168.99.63 # Questo è un ip di un server autorizzato ad interrogare i db clusterizzato HostName=192.168.99.64 # Questo è un ip di un server autorizzato ad interrogare i db clusterizzato HostName=192.168.99.65 # Questo è un ip di un server autorizzato ad interrogare i db clusterizzato Da notare che non è stato messo il 192.168.99.66 in quanto è un ip VIRTUALE è importante che gli indirizzi ip dei server che costituiscono il 192.168.99.66 siano però autorizzati e quindi presenti nelle API MYSQL. Per avviare il servizio ndb: /etc/init.d/mysql-ndb-mgm restart Per controllare invece lo stato del cluster : ndb_mgm e successivamente show 3
Server Storage Mysql ( 192.168.99.62 e 192.168.99.63 ) Sistema Operativo: Debian OS con 1024Mb di Ram e 20GB di Hard Disk Pacchetti installati: mysql-server Sul server il 192.168.99.62 deve essere configurato il file my.cnf contenuto in /etc/mysql nel seguente modo: [client] port = 3306 [mysqld_safe] nice = 0 [mysqld] ndbcluster # questa riga è da aggiungere al file! ndb-connectstring=192.168.99.60 # anche questa riga è da aggiungere con l ip del server di console user = mysql pid-file = /var/run/mysqld/mysqld.pid port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp language = /usr/share/mysql/english key_buffer = 16M max_allowed_packet = 16M thread_stack = 128K thread_cache_size = 8 myisam-recover = BACKUP query_cache_limit = 1M query_cache_size = 16M expire_logs_days = 10 max_binlog_size = 100M skip-bdb [mysqldump] quick quote-names max_allowed_packet = 16M [mysql] [isamchk] key_buffer = 16M [MYSQL_CLUSTER] # deccomentare questa riga ndb-connectstring=192.168.99.60 # deccomentare questa riga ed indicare il server di console!includedir /etc/mysql/conf.d/ Infine la procedura va ripetuta allo stesso modo per il server 192.168.99.63 4
Configurazione dei nodi Mysql API (192.168.99.61,64,65 ) Sistema Operativo: Debian OS con 512Mb di Ram e 10GB di Hard Disk Pacchetti installati: mysql-server, heartbeat,mon In tutti i server deve essere installato e configurato mysql come di seguente [client] port = 3306 [mysqld_safe] nice = 0 [mysqld] ndbcluster # questa riga è da aggiungere al file! ndb-connectstring=192.168.99.60 # anche questa riga è da aggiungere con l ip del server di console user = mysql pid-file = /var/run/mysqld/mysqld.pid port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp language = /usr/share/mysql/english key_buffer = 16M max_allowed_packet = 16M thread_stack = 128K thread_cache_size = 8 myisam-recover = BACKUP query_cache_limit = 1M query_cache_size = 16M expire_logs_days = 10 max_binlog_size = 100M skip-bdb [mysqldump] quick quote-names max_allowed_packet = 16M [mysql] [isamchk] key_buffer = 16M [MYSQL_CLUSTER] # deccomentare questa riga ndb-connectstring=192.168.99.60 # deccomentare questa riga ed indicare il server di console!includedir /etc/mysql/conf.d/ La configurazione del file my.cnf è uguale in tutte le macchine ad esclusione del server di console. La particolarità risiede sul server di console in cui viene indicato chi è il nodo di storage e chi è il nodo d interrogazione al cluster stesso. 5
La configurazione di heartbeat permetterà, insieme a Mon, di disporre un indirizzo ip virtuale ( 192.168.99.66 ) composto da più server, da cui sarà possibile eseguire query verso il database clusterizzato. I file di configurazione di heartbeat si trovano o vanno creati in /etc/ha.d/ 1) Creare un file chiamato authkeys il cui contenuto sia: auth 1 1 sha1 SuperPassword # cambiare SuperPassword in una password a piacere 2) Creare un file chiamato ha.cf il cui contenuto sia: logfile /var/log/ha-log.log logfacility local0 keepalive 1 deadtime 10 warntime 3 initdead 20 bcast eth0 auto_failback off node MYSQL-CONNECTOR-01 # il NOME del server 192.168.99.61 node MYSQL-CONNECTOR-02 # il NOME del server 192.168.99.64 node MYSQL-CONNECTOR-03 # il NOME del server 192.168.99.65 3) Creare un file chiamato haresources il cui contenuto sia: MYSQL-CONNECTOR-02 192.168.99.66 # Un NOME valido per identificare l host virtuale Modificare il file hosts ( contenuto in /etc) aggiungendo le seguenti righe: MYSQL-CONNECTOR-01 192.168.99.61 MYSQL-CONNECTOR-02 192.168.99.64 MYSQL-CONNECTOR-03 192.168.99.65 6
La configurazione di MON consiste nel modificare il file /etc/mon/mon.cf come di seguente: # Cancellare tutto il contenuto ed inserire queste righe hostgroup mysql-node 127.0.0.1 watch mysql-node service mysql interval 10s monitor msql-mysql.monitor --mode mysql --database=mysql --password=lapassworddimysql period wd {Mon-Sun} alert stop-heartbeat.alert Ripetere la procedura di configurazione di mysql, heartbeat e mon per ogni server ( 192.168.99.61,192.168.99.64,192.168.99.65 ) Riavviare i server affinchè i servizi mysql, mon ed heartbeat diventino operativi Eseguire la login su un server e lanciare il seguente comando mysql -u root -p -e "show engines" grep ndbcluster Digitare la password e successivamente si DEVE OTTENERE il seguente risultato: ndbcluster YES Clustered, fault-tolerant, memory-based tables A volte, dopo il riavvio è necessario attendere qualche minuto affinchè I server siano effettivamente disponibili, tuttavia è possibile controllare la situazione dal server di console 7
Database in cluster Su ogni macchina, ad esclusione del server di console ( 192.168.99.60 ) creare un database chiamato TEST Sulle macchine 192.168.99.61,62,63 creare un utente che possa accedere a TEST da remoto, ad esempio con username admin e password admin Collegarsi al database utilizzando l ip 192.168.99.66 e le credenziali di accesso appena create Creare una tabella chiamata CLUSTER all interno del database TEST impartendole di utilizzare l engine ndbcluster: create table cluster (id int auto_increment primary key, campo1 char(100)) engine=ndbcluster; quindi inserire un record per controllare l operatività delle repliche dei dati insert into cluster (campo1) values ("server node 01"); Note negative: Quando si crea un database esso va creato su tutti i server ad esclusione di quello di console di gestione del cluster ( 192.168.99.60 ) Note positive: Se un server è offine l informazione, essendo replicata, è sempre disponibile Un applicativo per NON interrogare il database deve trovarsi nella situazione in cui tutti e 3 i server API siano offline (cioè quelli che costituiscono nel loro insieme l indirizzo virtuale 192.168.99.66). Per importare un database esistente in questa struttura è necessario eseguire un alter table in cui si vada a modificare l engine esistente delle tabelle in ndbcluster. 8