Introducción
El objetivo es montar una replicación nativa de mysql en modo master-master mediante la herramienta mmm (Mysql MultiMaster). Es este caso vamos a usar dos servidores mysql5.1 sin datos (salvo las db de test y mysql).
Para el correcto funcionamiento del cluster el demonio mmm_monitor encargado de gestionar los roles del cluster lo vamos a sacar a otra máquina. (Tambien podriamos montarlo en el nodo pasivo).
Para el correcto funcionamiento del cluster el demonio mmm_monitor encargado de gestionar los roles del cluster lo vamos a sacar a otra máquina. (Tambien podriamos montarlo en el nodo pasivo).
Requisitos previos:
Los datafiles deben de ir en un volumen LVM para aprovecharnos de la posibilidad de hacer el mmm_clone para restore de datos. Por ejemplo para el ejemplo hemos creado un volumen LVM de 4 GB montado en el /DATABASE (los datafile estan dentro de /DATABASE/data).
Es importante dejar espacio sin asignar en LVM para realizar los snapshots.
Para nuestra configuración vamos a necesitar 4 ips:
Es importante dejar espacio sin asignar en LVM para realizar los snapshots.
Para nuestra configuración vamos a necesitar 4 ips:
- mmm1 (ip para la máquina física).
- mmm2 (ip para la máquina física).
- rol writer.
- rol reader (para un cluster activo-pasivo no es necesario, pero si queremos separar las lecturas de las excrituras si).
Configuración del mysql y la replicación.
Compilar un mysql de manera standard(o descargar los binarios).
Modificar el /etc/my.cnf
Configuramos la replicacion:
Activamos la replicaición:
Modificar el /etc/my.cnf
log-bin=mysql-bin binlog_format=mixed server-id = 10 read-only = 1 max_binlog_size = 100M max_relay_log_size = 100MCreamos el usuario de replicaron en ambas maquinas.
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%'
IDENTIFIED BY 'replicator';Migramos los datos. Si están vacíos los mysql no hace falta.
Configuramos la replicacion:
mmm1 mysql>CHANGE MASTER TO MASTER_HOST='mmm2',
MASTER_USER='replicator', MASTER_PASSWORD='replicator',
MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=380;
mmm2 mysql>CHANGE MASTER TO MASTER_HOST='mmm1',
MASTER_USER='replicator', MASTER_PASSWORD='replicator',
MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=512;El valor de los campos MASTER_LOG_POS y MASTER_LOG_FILE lo sacamos ejecutando el comando SHOW MASTER STATUS en cada nodo.
Activamos la replicaición:
mysql> START SLAVE;
Configuración mmm
Crear los usuarios que necesita el mmm:
- monitor user
- agent user
- replication user
- monitor user
- agent user
- replication user
GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.1.%'
IDENTIFIED BY 'mmm_monitor'; GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'192.168.1.%'
IDENTIFIED BY 'mmm_agent'; GRANT REPLICATION SLAVE ON *.* TO 'mmm_replication'@'192.168.1.%'
IDENTIFIED BY 'mmm_replication'; GRANT SUPER, REPLICATION CLIENT, RELOAD ON *.* TO 'mmm_tools'@'192.168.1.%'
IDENTIFIED BY 'mmm_tools';Creamos el usuario “mmmd”
useradd --comment "MMM Script Owner" --shell /sbin/nologin mmmdConfiguramos las mmm_tools:
mkdir /mmm_snapshot /mmm_backup /DATABASE/data/_mmm
Ficheros de configuración
- /etc/mysql-mmm/mmm_agent.conf (personalizar por cada nodo)
include mmm_common.conf this mmm1
- /etc/mysql-mmm/mmm_common.conf (este fichero es comun a todos los nodos incluido el monitor)
active_master_role writer
<host default>
cluster_interface eth0
pid_path /var/run/mmm_agentd.pid
bin_path /usr/lib/mysql-mmm/
replication_user mmm_replication
replication_password mmm_replication
agent_user mmm_agent
agent_password RepAgent
</host>
<host mmm1>
ip 192.168.1.242
mode master
peer mmm2
</host>
<host mmm2>
ip 192.168.1.243
mode master
peer mmm1
</host>
<role writer>
hosts mmm1, mmm2
ips 192.168.1.244
mode exclusive
prefer mmm1
</role>
<role reader>
hosts mmm1, mmm2
ips 192.168.1.245
mode balanced
</role>
- /etc/mysql-mmm/mmm_tools.conf (común a todos los nodos)
include mmm_agent.conf
default_copy_method scp
clone_dirs data
<host default>
ssh_user root
lvm_snapshot_size 1G
lvm_logical_volume database
lvm_volume_group vol0
lvm_mount_dir /mmm_snapshot
lvm_mount_opts -orw
tools_user mmm_tools
tools_password mmm_tools
backup_dir /mmm_backup
restore_dir /DATABASE
</host>
<copy_method scp>
backup_command scp -c blowfish -r %SSH_USER%@%IP%:%SNAPSHOT%/%CLONE_DIR%
%DEST_DIR%/
restore_command cp -axv %BACKUP_DIR%/* %DEST_DIR%/
true_copy 1
</copy_method>
<copy_method rdiff>
backup_command rdiff-backup --ssh-no-compression -v 5 !--include
%SNAPSHOT%/%CLONE_DIR%! --exclude %SNAPSHOT% %SSH_USER%@%IP%::%SNAPSHOT%/ %DEST_DIR%/
restore_command rdiff-backup --force -v 5 -r %VERSION% %BACKUP_DIR%
%DEST_DIR%/.mmm_restore; cp -axvl --remove-destination %DEST_DIR%/.mmm_restore/*
%DEST_DIR%/; rm -r %DEST_DIR%/.mmm_restore/
incremental_command rdiff-backup --parsable-output -l %BACKUP_DIR%
single_run 1
incremental 1
</copy_method>
<copy_method ssh-gz>
backup_command ssh -c blowfish %SSH_USER%@%IP% "cd '%SNAPSHOT%'; tar cv !'
%CLONE_DIR%'!" | gzip > %DEST_DIR%/backup.tar.gz
restore_command cd %DEST_DIR%; tar xzfv %BACKUP_DIR%/backup.tar.gz
single_run 1
</copy_method>
- /etc/mysql-mmm/mmm_mon.conf (solo la máquina que tenga el rol de monitor)
include mmm_common.conf
<monitor>
ip 127.0.0.1
pid_path /var/run/mmm_mond.pid
bin_path /usr/lib/mysql-mmm/
status_path /var/lib/misc/mmm_mond.status
ping_ips 192.168.1.242, 192.168.1.243
</monitor>
<host default>
monitor_user mmm_monitor
monitor_password mmm_monitor
</host>
debug 0
javierespejo.es
ResponderEliminarto do with the parameters:
ResponderEliminarlvm_logical_volume database
lvm_volume_group vol0
lvm_mount_dir / mmm_snapshot
lvm_mount_opts-ORW
in the case of RAID10 configured on a hard disk