Workshop tecnico: MySQL Group Replication in action Day Milano... · MySQL Group Replication in...
Transcript of Workshop tecnico: MySQL Group Replication in action Day Milano... · MySQL Group Replication in...
Partita IVA e Codice Fiscale: 12938200156C.C.I.A.A. Milano n.1599095Registro Imprese 12938200156Capitale Sociale € 2.418.433,00 i.v.
Sede Legale e Unità Operativa
Via Alfredo Campanini, 620124 MilanoTel: +39 02.66.732.1 – Fax: +39 02.66.732.300
Unità Operativa
Via Cristoforo Colombo, 16300147 RomaTel: +39 06.9826.9600 – Fax: +39 06.9826.9680
Mirko Conte, Senior ArchitectOracle MySQL Day Milano, 12 Ottobre 2017
Workshop tecnico:MySQL Group Replication in action
2
Agenda
Dall'istanza singola al cluster: esplorazione di alcune tecniche di HA conle repliche, standard e GR a confronto.
● Ambiente: MySQL + applicazione demo
● Creiamo istanze slave con repliche standard e gestiamo il failover
● Trasformiamo le repliche in Group Replication
● Introduciamo InnoDB Cluster
3
Software: MySQL + applicazione
● MySQL 5.7.19
● MySQL Router 2.1.4
● MySQL Shell 1.0.10
● MySQL Enterprise Backup 4.1.0
● MySQL Utilities 1.6.5
● Apache 2.4.6 + PHP 5.4.16 (Oracle Linux 7.4)
● Wordpress 4.8.2
4
Configurazioni: MySQL + applicazione
Configurazioni
● /etc/my.cnf
● /var/www/html/wp-config.php
5
Architettura repliche standard
M S
S
R
mgr1 mgr2
mgr3
R
M
S
X
App + Router
DBmgr1 mgr2
mgr3
mgr4 mgr4
6
Creiamo istanze slave con repliche standard (1/2)
● my.cnf
report-host=host
report-port=port
server-id=id
log-binbinlog-format=ROWenforce-gtid-consistency=ONgtid-mode=ONmaster-info-repository=TABLErelay-log-info-repository=TABLElog-slave-updates=ON
7
Creiamo istanze slave con repliche standard (2/2)
● Provisioning dati con MEB:
mysqlbackup --skip-binlog --backup-dir=path backup-and-apply-log
mysqlbackup --backup-dir=path copy-back
(implicito --login-path=client)
meta/backup_gtid_executed.sql
● Read-only
● Configurazione replica:
mysqlreplicate --master=conn-info --slave=conn-info --rpl-user=user:pwd
8
Configuriamo router e mysqlfailover
● Configurazione router: /etc/mysqlrouter/mysqlrouter.conf
[routing:failover]bind_address = 127.0.0.1:6446destinations = host1:port,host2:port
mode = read-write
● mysqlfailover
mysqlfailover --master=conn-info --slaves=conn-info,conn-info,... --candidates=conn-info,... --daemon=start --failover-mode=elect--log=/var/log/mysqlfailover.log --pidfile=/var/run/mysqlfailover --exec-post-failover=script
9
Failover
● Monitoraggio failover:
/var/log/mysqlfailover.log
/var/log/mysqlrouter/mysqlrouter.log
10
Post failover: ricostruire la replica
● Stop mysqlfailover:
pkill -9 mysqlfailoverrm -f /var/run/mysqlfailoverSET sql_log_bin=0; DROP TABLE IF EXISTS mysql.failover_console;
● Tentiamo il riallineamento del nodo principale tramite replica dal master:
mysqlreplicate --master=conn-info --slave=conn-info –rpl-user=user:pwd
● Invertiamo i ruoli con mysqlrpladmin, in caso di “errant transactions” ilnodo dovrà essere allineato con backup e restore:
mysqlrpladmin --master=conn-info –slaves=conn-info,conn-info,... --new-master=conn-info --demote-master switchover
11
Architettura Group Replication
R RApp + Router
DB
Xmgr1 mgr2 mgr3
mgr4
mgr1 mgr2 mgr3
mgr4
12
Requisiti della Group Replication
Requisiti e limitazioni:
● Richiesto storage engine InnoDB
● Richieste primary keys esplicite
● Network Performance e Ipv4
● Binary log formato ROW (non supportato checksum)
● Non adatto a very large transactions
● Con multi-primary: gap locks, table locks, named locks, DDL + DML concorrenti,foreign keys con cascading constraints, possibilità di abort al commit peroptimistic execution
13
Convertiamo a Group Replication (1/2)
● my.cnf
binlog_checksum=NONEtransaction_write_set_extraction=XXHASH64disabled_storage_engines=MyISAM,BLACKHOLE,FEDERATED,CSV,ARCHIVEloose-group_replication_group_name="uuid"loose-group_replication_start_on_boot=OFFloose-group_replication_local_address="host:port"loose-group_replication_group_seeds="host:port,host:port,host:port"loose-group_replication_bootstrap_group=OFFloose-group_replication_single_primary_mode=OFF
● Nota: opzione disabled_storage_engines unica non dinamica, nonnecessaria
14
Convertiamo alla Group Replication (2/2)
● Configuriamo i nodi:
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
CREATE USER user IDENTIFIED BY 'password';GRANT REPLICATION SLAVE ON *.* TO user;CHANGE MASTER TO MASTER_USER='user', MASTER_PASSWORD='password' FORCHANNEL 'group_replication_recovery';
● Attiviamo la GR sul primo nodo:
SET GLOBAL group_replication_bootstrap_group=ON;START GROUP_REPLICATION;SET GLOBAL group_replication_bootstrap_group=OFF;
● Altri nodi: START GROUP_REPLICATION;
15
Configuriamo router
● /etc/mysqlrouter/mysqlrouter.conf
[routing:failover]bind_address = 127.0.0.1:6446destinations = mgr1,mgr2,mgr3mode = read-write
16
Convertiamo a InnoDB Cluster
● Convertiamo GR a InnoDB Cluster:
mysqlsh --uri root:password@host:port --no-wizardvar cluster = dba.createCluster('clustername', {adoptFromGR: true})
mysqlrouter --bootstrap root:password@host --user=mysqlrouter –-force
● Passiamo da replica standard a InnoDB Cluster:
dba.configureLocalInstance('root@localhost:3306', {password:'password',mycnfPath:'/etc/my.cnf'})
var cluster=dba.createCluster('clustername')cluster.addInstance('root:password@host:port')
mysqlrouter --bootstrap root:password@host --user=mysqlrouter –-force
Sede Legale e Unità Operativa
Via Alfredo Campanini, 620124 MilanoTel: +39 02.66.732.1 – Fax: +39 02.66.732.300
Unità Operativa
Via Cristoforo Colombo, 16300147 RomaTel: +39 06.9826.9600 – Fax: +39 06.9826.9680
Grazie per l’attenzione!