Si resolveis el nombre teleobjetivo.org vereis que ahora apunta a dos direcciones IP diferentes. El motivo es bien simple, ahora este blog se ejecuta en dos servidores a la vez.
La duplicación del servidor se divide en dos partes, la parte fácil y la parte difícil. La parte fácil consiste en instalar el wordpress, el programa que uso para hacer el blog, en los dos servidores donde estará disponible; esta parte no tiene mayores misterios, se trata de copiar los ficheros del servidor primario al secundario.
La parte complicada es la base de datos. Wordpress utiliza una base de datos MySQL para almacenar los artículos y los comentarios, así que es preciso que cada sevidor tenga en marcha su propia copia de MySQL y, lo mas importante, que ambas copias estén sincronizadas; es decir, que en el momento en que yo escribo un artículo, el MySQL primario lo copie en el secundario, y que cada vez que alguien escribe un comentario lo mismo, se copie a las dos bases de datos.

Como se ve en el diagrama, las dos copias del wordpress son independientes y no necesitan comunicarse, pero los servidores MySQL si que deben comunicarse entre si para intercambiar las actualizaciones en el blog.
Afortunadamente, MySQL contempla la posibilidad de mantener varios servidores sinconizados, así que se trata solo de configurarlos. Los pasos de configuración son los siguientes:
- Uno de los servidores debe ser el maestro y otro el esclavo. Da igual cual asuma cada papel, en este caso, MYSQL-1 será el maestro y MYSQL-2 el esclavo.
- Editamos el fichero de configuración de MYSQL-1 para que aparezcan estas líneas:
[mysqld]
server_id=1
log-bin=replicacion - Reiniciamos MYSQL-1 y sacamos una copia de la base de datos del wordpress con el programa mysqldump.
- Entramos en MYSQL-1 y ejecutamos los siguientes comandos:
grant file on *.* to replicacion identified BY ‘clavedeacceso’;
update mysql.user set repl_slave_priv=’Y',repl_client_priv=’Y’ where user=’replicacion’;
flush privileges;Estos comandos crean el usuario "replicacion", que es el que utilizará el servidor esclavo para conectarse al master y ejecutar las sincronizaciones.
- Ejecutamos el comando: show master status; Este comando nos devuelve una tabla de valores, tenemos que anotar "File" y "Position".
- Ahora le toca el turno al servidor esclavo. Lo primero de todo, hay que editar el servidor de configuración de MYSQL-2 para que se vean estas líneas:
[mysqld]
server_id=2Hecho esto, reiniciaremos el servidor.
- Crearemos la base de datos de wordpress utlizando el volcado creado anteriormente.
- Ejecutar los comandos siguientes:
change master to master_host=dirección IP de MYSQL-1,
master_user=’replicacion’,
master_password=’clavedeacceso’,
master_logfile=’File’,
master_logpos=Position;
start slave;Siendo File y Position los valores que anotamos antes.
Si lo hemos hecho todo bien, a partir de ahora ambos servidores MySQL se mantendrán sincronizados y las bases de datos contendrán exactamente lo mismo.
Queda una última parte, que es sincronizar el directorio uploads de wordpress (donde se guardan las imágenes que aparecen en el blog). Para ello utilizaremos el programa rsync configurado para autentificarse con una clave pública, lo que permite al programa conectarse a un servidor remoto sin que sea necesario introducir una clave manualmente. Los pasos son los siguientes:
- Desde la línea de comandos del servidor linux primario, ejecutamos: ssh-keygen -t rsa -b 4096 -f /root/.ssh/id_rsa
- El comando anterior nos pedirá que introduzcamos una passphrase; la dejamos en blanco.
- Ahora, en el directorio de configuración del ssh del usuario root tendremos dos ficheros, id_rsa que contiene la clave privada y id_rsa.pub que contiene la clave pública.
- Copiamos la clave pública al servidor linux secundario, al directorio /root/.ssh
- En el servidor secundario, vamos al directorio /root/.ssh y buscamos el fichero "authorized_keys". Si el fichero no existe, entonces renombramos el fichero id_rsa.pub que hemos copiado del servidor primario. Si existe, lo editamos y el fichero id_rsa.pub lo añadimos como última línea.
- Ahora volvemos al linux primario y creamos el siguiente script:
#!/bin/sh
rsync -avz secundario:/directoriouploads2 /directoriouploads1
rsync -avz /directoriouploads1 secundario:/directoriouploads2Siendo:
- secundario: Dirección IP del servidor secundario.
- directoriouploads1: Directorio de uploads de wordpress en el linux primario.
- directoriouploads2: Directorio de uploads de wordpress en el linux secundario.
- Creamos una entrada en el crontab del linux primario para que el script anterior se ejecute cada hora.
Si hemos hecho bien este paso, cada vez que escribamos un artículo al que subamos alguna imagen, se copiará al otro servidor.
Y ya está. Desde este momento, ya tendremos nuestro blog replicado en dos servidores con lo que podrá soportar tranquilamente el efecto barrapunto, meneame y lo que se tercie.
RSS de Teleobjetivo





5 respuestas ↓
1 Facu // 9 de Agosto de 2009 a la(s) 3:03 am
muy util!
estan dentro del mismo datacenter? porque si los mysql estan escuchando en una ip de internet, lo ideal tambien seria poner una regla en el iptables para que solo pueda acceder la ip del server hermano a los serverers (en los puertos de mysql y rsync)…por seguridad!
saludos!
2 monti // 9 de Agosto de 2009 a la(s) 6:40 pm
Facu: No, no están en el mismo datacenter; de hecho, ni siquiera están en el mismo país, uno está en España y el otro en Estados Unidos.
En la práctica esto no supone ningún problema, porque hay poco movimiento de datos entre los servidores MySQL es pequeño.
Y si, tengo puesta una regla en iptables para proteger el MySQL.
3 ErPaquillo // 18 de Agosto de 2009 a la(s) 9:00 pm
Esto me recuerda a algo que ya hice hace tiempo… Sólo que por aquella época los cambios los hacía en el my.cnf, reiniciaba los servicios de MySQL en las máquinas “participantes” y voilá!
Y lo del RSYNC me ha matao… ¿Recuerdas las batallitas que te contaba al respecto?
Tengo por aquí mi cuadernillo de trabajo del año 2003 y cierto manual de RSYNC que sigue teniendo tan buena pinta como hace siete años, si quitamos el acumulo de polvo del mismo… jejejeje
Me alegro que estés duplicando la web. Eso significa que tienes mucho tráfico y necesitas el mirror (o que vas a migrar uno de los servidores próximamente… jejeje) En todo caso, es agradable verte tan interesado en estas mundanas labores de programación como hace años…
4 Fernando Gomez // 19 de Octubre de 2009 a la(s) 12:42 am
Nosotros vamos a probar con 2 VPS dedicados a apache (que es donde tenemos problemas por tener mucho tráfico en un site) y otro exclusivamente a MySQL, asi te olvidas de sincronizar la bd.
La parte de sincronizar los contenidos, es justo lo que estaba buscando. Nos pondremos a probarlo en unos dias. Gracias por el post.
5 Wordpress balanceado en varios servidores | Fernando Gomez // 20 de Octubre de 2009 a la(s) 12:53 pm
[…] nos falta sincronizar los contenidos. Aqui tengo que dar las gracias a Francisco Monteagudo, por su post. No tienes más que seguir la última parte al pie de la letra que copio […]
Dejar un Comentario