Professional Documents
Culture Documents
Introduccin
Un solo servidor de MySQL se convierte en el SPOF de nuestra infraestructura. Si no hay datos, no hay servicio. aptgetinstallmysql es solo el primer paso, luego queda mucho por hacer. En la era 2.0 todo est en bases de datos, su optimizacin es imprescindible. MySQL nos ofrece muchas posibilidades.
Introduccin
Cmo evitamos un SPOF? Aadiendo ms mquinas. Pero las mquinas deben ser iguales en cuanto a la parte lgica, los datos deben estar replicados y mantenerse sincronizados. La replicacin nos ayuda a solventar en parte este problema.
Introduccin
Seguridad. Los datos estn replicados en distintas mquinas fsicas, por lo que tenemos un live backup. Balanceo de carga. Podemos distribuir la carga entre distintas mquinas. Alta disponibilidad. Al tener datos en varias mquinas, si una se cae otra puede tomar el control. Quebraderos de cabeza. La informtica es la ciencia menos exacta que existe.
Seguridad
Mysqldump Copiando las tablas del disco en caliente (parando antes la BBDD). Replicacin etc...
La principal diferencia es que la replicacin nos ofrece un backup siempre actualizado. Las dems ser de la fecha de su programacin. Utilizad siempre dos mtodos como mnimo. Nunca se debe dejar la replicacin como nico sistema de backup.
5
Arquitecturas de replicacin
Limitaciones
Un esclavo solo puede tener un maestro. Por el contrario, un maestro mltiples esclavos. No es recomendable montar una replicacin por WAN. La replicacin es asncrona y sensible a latencias. En un servidor esclavo esta prohibido escribir datos, solo se usarn selects.
7
Maestro-Esclavo
Maestro-Esclavo
Habilitar los logs binarios. Crear un usuario que permita conectarse a los esclavos. Habilitar sync_binlog. Elegir un server-id.
Maestro-Esclavo
10
Maestro-Esclavo
Configuramos el eslavo:
Seleccionamos un ID diferente para cada uno. Importamos la BD. Nos configuramos como esclavo de un maestro.
11
Maestro-Esclavo
Master_log_pos y Master_log_file indican al esclavo desde que posicin del log binario deben leer, de forma que no se repliquen datos que ya tenemos. Podemos sacarlo con un dump como ya hemos visto o con el comando showmasterstatus; El log binario debe estr habilitado :)
12
Maestro-Esclavo
No se debe dejar al servidor la eleccin de cuando escribir los datos al disco duro. Si el servidor se cae sin que algunos datos se escriban en el log, es posible que estos se pierdan (depender del sistema de ficheros). sync_binlog por defecto es 0, que deja que el servidor decida cuando realizar la escritura al disco. Se recomienda un valor de 1, para que se fuerce la escritura. Esto tambin es lento, depender de los discos duros instalados. Si el servidor se cae, como mucho perderemos una transaccin. 13
Maestro-Esclavo
Para comprobar si la replicacin es correcta tenemos el comando showslavestatus. Este nos tiene que mostrar lo siguiente:
Slave_IO_Running: Se encarga de conectarse al maestro para comprobar cambios Slave_SQL_Running: Se encarga de escribir las sentencias SQL. Seconds_Behind_Master: El lag en segundos entre el maestro y el esclavo.
14
Maestro-Esclavo
Otras opciones:
15
Maestro-Esclavo
16
Maestro-Esclavo
No se quien es el autor :(
17
Maestro-Maestro
18
Maestro-Maestro
La arquitectura maestro-maestro es igual a la maestro esclavo. Aqu los hosts realizan las dos tareas, maestro y esclavo al mismo tiempo. Esta arquitectura soporta como mximo dos hosts, ya que un esclavo solo puede tener como mximo un maestro. A es maestro de B. B es maestro de A. A es esclavo de B. B es esclavo de A.
19
Maestro-Maestro
Habilitar el log binario. Seleccionar un server-id. Establecer el valor de sync_binlog. Crear los usuarios para la replicacin.
20
Maestro-Maestro
Los auto-incrementales son el gran problema de este tipo de arquitectura. Si se realizan dos insert al mismo tiempo que incluya un campo autoincremental, podemos tener un problema de ID duplicado. A enva a B un artculo cuyo ID autoincremental es 3000, B enva un artculo diferente a A cuyo autoincremental es 3000 tambin. La replicacin se rompe.
auto_increment_increment=2 auto_increment_offset=1
21
Circular
Lo que se escribe en uno se replica en el siguiente, este en el siguiente, este en... A B C D A Es la menos recomendable. En realidad est casi prohibida tambin ;)
22
Circular
Es una forma de disponer de ms de dos servidores en arquitectura maestro-maestro. Contra ms sean los hosts implicados, mayor el caos de su administracin. ABCDEA Si el host C se cae (por ejemplo) la replicacin se rompe. Lo escrito en B no se replica, lo escrito en D se replica en todos menos en C, etc. Si se cae por ejemplo B y D, el caos es infinito. La solucin es salir corriendo. A no ser que no exista otra solucin, no se recomienda.
23
Circular
Los logs que reciben los esclavos, deben logearlos en el log binario para enviarselo al siguiente en la cadena. Esto no es el funcionamiento por defecto, los que se recibe como esclavo no se logea. Para cambiarlo:
logslaveupdates
En algn momento de la cadena nos llegarn nuestros propios logs. Para evitar formar un bucle:
Replicatesameserverid=0
auto_increment_increment=4 auto_increment_offset=1
24
Replicacin rota
25
Replicacin rota
Es recomendable tener el error-log habilitado, ah se guardar, entre otras cosas, cualquier error relacionado con la replicacin. EJEMPLO!
Sep1111:13:16test2mysqld[6776]:09091111:13:16 [ERROR]Slave:Error'Table't'alreadyexists'on query.Defaultdatabase:'mysql'.Query:'CREATE TABLEt(cCHAR(20)CHARACTERSETutf8COLLATE utf8_bin)',Error_code:1050 Sep1111:13:16test2mysqld[6776]:09091111:13:16 [ERROR]Errorrunningquery,slaveSQLthread aborted.Fixtheproblem,andrestarttheslaveSQL threadwith"SLAVESTART".Westoppedatlog'mysql bin.000003'position421
26
Replicacin rota
Forma rpida y no tan buena de solucionarlo: Decirle al esclavo que ignore esa querie y continue con la replicacin:
mysql>stopslave;QueryOK,0rowsaffected(0.00 sec) mysql>SETGLOBALSQL_SLAVE_SKIP_COUNTER=1;Query OK,0rowsaffected(0.00sec) mysql>startslave;
27
Replicacin rota
Forma buena (y algo lenta) de solucionarlo: http://www.maatkit.org/ Maatkit makes MySQL easier to manage. Lo de easier ponedlo entre muchas comillas. Son una coleccin de herramientas que nos puede ayudar en la administracin de nuestro servidores, y en este caso en particular, en rescatar una replicacin. Todas las utilidades: http://www.maatkit.org/doc/
28
Replicacin rota
Para saber si dos tables estn sincronizadas, podemos sacar un checksum de estas y comparar:
mktablechecksum mktablesync
29
SandBox
Montar equipos fsicos e instalarlos (de locos). Montar mquinas virtuales. Usar sandbox!
30
SandBox
Montar sistemas de replicacin Probar versiones nuevas de MySQL facilmente Manejar mltiples instancias de MySQL desde un nico punto. Te olvidas de rmps, sources, debs... tar.gz binario! Testear Testear Testear...
31
SandBox
No es un producto oficial de MySQL. Est escrito el perl (puag!) y an as funciona bien. http://mysqlsandbox.net/ Tendremos que descargar un paquete tar.gz de MySQL y Sandbox.
32
Instalacin
Como root!
root@shyris:~#tarxzfMySQLSandbox3.0.05.tar.gz root@shyris:~#cdMySQLSandbox3.0.05/ root@shyris:~/MySQLSandbox3.0.05#perlMakefile.PL root@shyris:~/MySQLSandbox3.0.05#make root@shyris:~/MySQLSandbox3.0.05#maketest root@shyris:~/MySQLSandbox3.0.05#makeinstall root@shyris:/usr/local/bin#ls low_level_make_sandboxmake_multiple_sandboxmake_sandbox make_sandbox_from_sourcesbtest_sandbox make_multiple_custom_sandboxmake_replication_sandbox make_sandbox_from_installedmsandboxsbtool
33
Uso de SandBox
punisher@shyris:~$make_sandbox/home/punisher/MySQL/mysql 5.0.86perconahighperfb19.tar.gz unpacking/home/punisher/MySQL/mysql5.0.86percona highperfb19.tar.gz Executinglow_level_make_sandbox basedir=/home/punisher/MySQL/5.0.86\ sandbox_directory=msb_5_0_86\ install_version=5.0\ sandbox_port=5086\ no_ver_after_name\ my_clause=logerror=msandbox.err
34
Uso de SandBox
Parar sandbox:
Arrancar sandbox:
Utilizar sandbox:
Reiniciar sandbox:
Limpiar el sandbox:
35
punisher@shyris:~$make_replication_sandbox how_many_slaves=2/home/punisher/MySQL/mysql5.0.86 perconahighperfb19.tar.gz installingandstartingmaster installingslave1 installingslave2 startingslave1 .sandboxserverstarted startingslave2 .sandboxserverstarted initializingslave1 initializingslave2 replicationdirectoryinstalledin $HOME/sandboxes/rsandbox_5_0_86
36
Acceder al maestro
m1 s1 s2 check_slaves
Acceder al esclavo 1
Acceder al esclavo 2
Chequear esclavos
37
punisher@shyris:~$make_replication_sandbox master_master/home/punisher/MySQL/mysql5.0.86percona highperfb19.tar.gz installingnode1 installingnode2 #server:1: #server:2: #server:1: #server:2: Circularreplicationactivated groupdirectoryinstalledin $HOME/sandboxes/rcsandbox_5_0_86
38
39
MMM
Cuando ya sabemos que queremos y lo montamos, llega el mantenimiento. Si tenemos un cluster de, por ejemplo, 2 maestros y 50 esclavos, comprobar el correcto funcionamiento es complicado. Y si deseamos parar algn esclavo? Y si deseamos parar algn maestro? Es necesario reducir el tiempo de parada de servicio al mnimo.
40
MMM
41
MMM
Monitorizacin de la replicacin Monitorizacin de los hosts Gestin del failover Balanceo de IPs entre nodos Gestin de grupos de escritura/lectura
42
MMM
La alta disponibilidad se hace mediante el balanceo de Ips virtuales que saltarn de un servidor a otro en caso de ser necesario.
Exclusivo: Una nica IP para muchos hosts. Si el host que la tiene se cae se balancea a otro. Generalmente se usa en los nodos de escritura. Balanceado: Una IP por cada host. Si uno de los hosts se cae la IP se balancea a cualquier otro, pasando a tener dos IPs virtuales. Se usa para nodos en lectura.
43
MMM
Se pueden meter los servidores dentro de dos roles, escritura y lectura. Escritura es obligatorio, mientras que el de lectura no tiene porque definirse. La diferencia es lgica:
Nodos de escritura son aquellos en los que los datos se escribirn. Nodos de lectura son aquellos de los cuales se leern datos.
44
MMM
En los nodos:
45
MMM
Los ficheros de configuracin se guardan en /etc/mysqlmmm Todos tendrn un fichero llamado mmm_common.conf que ser exactamente igual. El nodo de control mmm_mon.conf Los servidores de MySQL mmm_agent.conf
46
MMM
Los Hosts Sus Ips Los roles Usuario/Contrasea del agente Usuario/Contrasea para la replicacin La interfaz de red en la que se trabaja
47
MMM
Usuario/Contrasea para la monitorizacin Ips a las que pingar Ruta de los binarios Ruta del PID Nidel de debug
48
MMM
49
MMM
Como hemos visto, hay varios usuarios y contraseas definidos. Hay que crerlos en MySQL.
GRANTREPLICATIONCLIENTON*.*TO'mmm_monitor'@'10.100.1.%' IDENTIFIEDBY'RepMonitor'; GRANTSUPER,REPLICATIONCLIENT,PROCESSON*.*TO 'mmm_agent'@'10.100.1.%'IDENTIFIEDBY'RepAgent'; GRANTREPLICATIONSLAVEON*.*TO'replication'@'10.100.1.%' IDENTIFIEDBY'slave';
El usuario monitor se usa para comprobar el estado de los servidores Mysql. El usuario agent se usa para cambiar el read only mode, poner offline un equipo, ejecutar un change_master, etc. El usuario replication slave... para replicacin ;) 50
MMM
Una vez puesto en marcha los servicios, se deben poner online los servidores desde el comando de control.
MMM:~#mmm_controlshow db1(10.100.1.1)master/AWAITING_RECOVERY.Roles: db2(10.100.1.2)master/AWAITING_RECOVERY.Roles: db3(10.100.1.3)slave/AWAITING_RECOVERY.Roles: db4(10.100.1.4)slave/AWAITING_RECOVERY.Roles: MMM:~#mmm_controlset_onlinedb1 OK:Stateof'db1'changedtoONLINE.Nowyoucanwait sometimeandcheckitsnewroles! MMM:~#mmm_controlset_onlinedb2 OK:Stateof'db2'changedtoONLINE.Nowyoucanwait sometimeandcheckitsnewroles! MMM:~#mmm_controlset_onlinedb3 OK:Stateof'db3'changedtoONLINE.Nowyoucanwait sometimeandcheckitsnewroles! MMM:~#mmm_controlset_onlinedb4 OK:Stateof'db4'changedtoONLINE.Nowyoucanwait sometimeandcheckitsnewroles!
51
MMM
52
MySQL Proxy
El balanceo de carga se puede hacer bien por hardware como por software. Existe un software creado para MySQL que nos puede ayudar. Para que te ayude debes saber LUA. http://forge.mysql.com/wiki/MySQL_Proxy Es un proxy que se pone entre el cliente y los servidores de MySQL.
53
MySQL Proxy
54
Se acab
55