Workshop tecnico: MySQL Group Replication in action Day Roma 2017 - MySQL Gro… · 2 Agenda...
Transcript of Workshop tecnico: MySQL Group Replication in action Day Roma 2017 - MySQL Gro… · 2 Agenda...
partita iva e codice fiscale: 12938200156
c.c.i.a.a. milano n.1599095
registro imprese 12938200156
capitale sociale € 2.418.433,00 i.v.
direzione e sede legalevia campanini 6
20124 milano
tel: +39 02/66.732.1 – fax: +39 02/66.732.300
unità operativap.zza san benedetto da norcia 33
00071 pomezia (rm)
tel: +39 06/9826.9600 – fax: +39 06/9826.9680
Mirko Conte, Senior Architect
Oracle MySQL Day Roma, 11 Maggio 2017
Workshop tecnico:
MySQL Group Replication in action
2
Agenda
Dall'istanza singola al cluster: esplorazione di alcune tecniche di HA con
le 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.18
● MySQL Router 2.1.3
● MySQL Shell 1.0.9
● MySQL Enterprise Backup 4.1.0
● MySQL Utilities 1.6.5
● Apache 2.4.6 + PHP 5.4.16 (Oracle Linux 7.3)
● Wordpress 4.7.4
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-bin
binlog-format=ROW
enforce-gtid-consistency=ON
gtid-mode=ON
master-info-repository=TABLE
relay-log-info-repository=TABLE
log-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 -–force 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:6446
destinations = 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 mysqlfailover
rm -f /var/run/mysqlfailover
SET 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” il
nodo 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)
● Transaction savepoints non supportati
● 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 per optimistic execution
13
Convertiamo in Group Replication (1/2)
● my.cnf
binlog_checksum=NONE
transaction_write_set_extraction=XXHASH64
disabled_storage_engines=MyISAM,BLACKHOLE,FEDERATED,CSV,ARCHIVE
loose-group_replication_group_name="uuid"
loose-group_replication_start_on_boot=OFF
loose-group_replication_local_address="host:port"
loose-group_replication_group_seeds="host:port,host:port,host:port"
loose-group_replication_bootstrap_group=OFF
loose-group_replication_single_primary_mode=OFF
● Nota: opzione disabled_storage_engines unica non dinamica, non
necessaria
14
Convertiamo in 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'
FOR CHANNEL '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:6446
destinations = mgr1,mgr2,mgr3
mode = read-write
16
Convertiamo in InnoDB Cluster
● Convertiamo GR a InnoDB Cluster:
mysqlsh --uri root:password@host
var 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')
mysqlrouter --bootstrap root:password@host --user=mysqlrouter –-force
direzione e sede legalevia campanini 6
20124 milano
tel: +39 02/66.732.1 – fax: +39 02/66.732.300
unità operativap.zza san benedetto da norcia 33
00071 pomezia (rm)
tel: +39 06/9826.9600 – fax: +39 06/9826.9680
Grazie per l’attenzione!