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