workshop tecnico: mysql group replication in action day roma 2017 - mysql gro… · 2 agenda...

17
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 legale via campanini 6 20124 milano tel: +39 02/66.732.1 – fax: +39 02/66.732.300 unità operativa p.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

Upload: others

Post on 20-May-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Workshop tecnico: MySQL Group Replication in action Day Roma 2017 - MySQL Gro… · 2 Agenda Dall'istanza singola al cluster: esplorazione di alcune tecniche di HA con le repliche,

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

Page 2: Workshop tecnico: MySQL Group Replication in action Day Roma 2017 - MySQL Gro… · 2 Agenda Dall'istanza singola al cluster: esplorazione di alcune tecniche di HA con le repliche,

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

Page 3: Workshop tecnico: MySQL Group Replication in action Day Roma 2017 - MySQL Gro… · 2 Agenda Dall'istanza singola al cluster: esplorazione di alcune tecniche di HA con le repliche,

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

Page 4: Workshop tecnico: MySQL Group Replication in action Day Roma 2017 - MySQL Gro… · 2 Agenda Dall'istanza singola al cluster: esplorazione di alcune tecniche di HA con le repliche,

4

Configurazioni: MySQL + applicazione

Configurazioni

● /etc/my.cnf

● /var/www/html/wp-config.php

Page 5: Workshop tecnico: MySQL Group Replication in action Day Roma 2017 - MySQL Gro… · 2 Agenda Dall'istanza singola al cluster: esplorazione di alcune tecniche di HA con le repliche,

5

Architettura repliche standard

M S

S

R

mgr1 mgr2

mgr3

R

M

S

X

App + Router

DBmgr1 mgr2

mgr3

mgr4 mgr4

Page 6: Workshop tecnico: MySQL Group Replication in action Day Roma 2017 - MySQL Gro… · 2 Agenda Dall'istanza singola al cluster: esplorazione di alcune tecniche di HA con le repliche,

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

Page 7: Workshop tecnico: MySQL Group Replication in action Day Roma 2017 - MySQL Gro… · 2 Agenda Dall'istanza singola al cluster: esplorazione di alcune tecniche di HA con le repliche,

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

Page 8: Workshop tecnico: MySQL Group Replication in action Day Roma 2017 - MySQL Gro… · 2 Agenda Dall'istanza singola al cluster: esplorazione di alcune tecniche di HA con le repliche,

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

Page 9: Workshop tecnico: MySQL Group Replication in action Day Roma 2017 - MySQL Gro… · 2 Agenda Dall'istanza singola al cluster: esplorazione di alcune tecniche di HA con le repliche,

9

Failover

● Monitoraggio failover:

/var/log/mysqlfailover.log

/var/log/mysqlrouter/mysqlrouter.log

Page 10: Workshop tecnico: MySQL Group Replication in action Day Roma 2017 - MySQL Gro… · 2 Agenda Dall'istanza singola al cluster: esplorazione di alcune tecniche di HA con le repliche,

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

Page 11: Workshop tecnico: MySQL Group Replication in action Day Roma 2017 - MySQL Gro… · 2 Agenda Dall'istanza singola al cluster: esplorazione di alcune tecniche di HA con le repliche,

11

Architettura Group Replication

R RApp + Router

DB

Xmgr1 mgr2 mgr3

mgr4

mgr1 mgr2 mgr3

mgr4

Page 12: Workshop tecnico: MySQL Group Replication in action Day Roma 2017 - MySQL Gro… · 2 Agenda Dall'istanza singola al cluster: esplorazione di alcune tecniche di HA con le repliche,

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

Page 13: Workshop tecnico: MySQL Group Replication in action Day Roma 2017 - MySQL Gro… · 2 Agenda Dall'istanza singola al cluster: esplorazione di alcune tecniche di HA con le repliche,

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

Page 14: Workshop tecnico: MySQL Group Replication in action Day Roma 2017 - MySQL Gro… · 2 Agenda Dall'istanza singola al cluster: esplorazione di alcune tecniche di HA con le repliche,

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;

Page 15: Workshop tecnico: MySQL Group Replication in action Day Roma 2017 - MySQL Gro… · 2 Agenda Dall'istanza singola al cluster: esplorazione di alcune tecniche di HA con le repliche,

15

Configuriamo router

● /etc/mysqlrouter/mysqlrouter.conf

[routing:failover]

bind_address = 127.0.0.1:6446

destinations = mgr1,mgr2,mgr3

mode = read-write

Page 16: Workshop tecnico: MySQL Group Replication in action Day Roma 2017 - MySQL Gro… · 2 Agenda Dall'istanza singola al cluster: esplorazione di alcune tecniche di HA con le repliche,

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

Page 17: Workshop tecnico: MySQL Group Replication in action Day Roma 2017 - MySQL Gro… · 2 Agenda Dall'istanza singola al cluster: esplorazione di alcune tecniche di HA con le repliche,

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!