Fent rèpliques de directoris entre servidors amb unison

Logo del unisonUna de els tasques importants que vaig barrinant en la part de guifi.net i ComEsFa?org  els darrers dies és la construcció del que hauria de ser un protocol d'actuació per tal de donar resposta als diferents tipus de contingències que puguin aparèixer (caigudes de xarxa, que un servidor s'espatlli, que hi hagi una inundació al torrent de l'Esperança, que caigui un llamp i fregeixi alguns servidors i ràdios,... etc).
El primer pas era fer còpies de la base de dades, és un part important perquè inclou la part més important, faltava però mantenir un sincronisme entre diverses màquines del codi (php, imatges, etc..) de tota aquella part A través del blog del mussol Oriol, que està sindicat a ComEsFa?org, he descobert una nova eina que simplifica moltíssim aquesta tasca. És molt senzilla i és la que en faig 5 cèntims en aquestes ratlles.

La meva idea per donar alta disponibilitat a ComEsFa?org s'inspira en el que a la feina coneixem com a "Grid Computing", que bàsicament consisteix en aconseguir que una pila de servidors funcionin com un de sol, repartint-se càrrega i serveis entre ells, on a més en cas de fallida d'un d'ells, els que sobreviuen poden de forma automàtica agafar les funcions del que ha fallat. Aquesta estratègia és doblement interessant en entorns comercials crítics: És una arquitectura tolerant a fallides, i per tant, d'alta disponibilitat, i a més, si es fa el desplegament sobre servidors de baix cost, per exemple basats en Linux, s'aconsegueixen uns nivells de servei que fa uns anys eren inpensables en màquines de gama baixa, i moltes vegades t'estalvien d'haver de gastar molts diners en ferro més car.

Per econòmic que sigui, i encara que òbviament també fem servir Linux als servidors, ni ComEsFa?org és comercial, ni fem servir eines comercials. Es tracta doncs que encara que amb un xic més de complexitat i renunciant a algunes funcionalitats, poder aconseguir resultats suficients per al nivell de disponibilitat que requereix ComEsFa?org, de manera que em pugui estalviar la preocupació de "què passaria si un dia....".

Diagrama de la rèplicaEn aquest cas l'objectiu és replicar els directoris entre tres servidors per tal de poder oferir un servei "actiu/passiu", és a dir, que en cas d'avaria llarga en una de les màquines, sense haver de tirar de còpies, una de les altres dues ja estigui totalment preparada per assumir-ne les funcions. L'activa és el bandoler, que fa "clúster" local amb el servidor d'el Serrat, i "clúster geogràfic" (a quilòmetres de distància), amb el servidor de l'Esperança. El diagrama que teniu a la dreta descriu aquesta lògica.

Instal·lació

L'unison permet replicar directoris entre màquines de diversos sistemes operatius, incloent el win d'ous. Si aneu a la pàgina del projecte hi trobareu la secció de "Downloads" on hi han les instruccions per a descarregar-lo.
En aquest cas, totes les màquines tenen un "guinux" basat en Fedora, de manera que directament he provat un...

apt-get install unison

...per veure què passava, i efectivament, només amb això qüestió de 15 o 20 segons m'ha deixat l'unison instal·.lat als diferents servidors.

Com fer-lo servir

Molt bé, ja és instal·lat, i ara.. on carai és, com el faig servir?
Cerco en les opcions de tots els menús i no l'hi he sapigut veure... no serà que no s'ha afegit a cap llista de programes? Potser... i si teclejem unison des del terminal en la línia de comandes...?
Pantalla del unisonI efectivament, teclejant "unison" apareix una finestreta. Tot seguit ja m'apareix un diàleg força senzill de interpretar intuitivament: S'hi posen dos directoris, com a mínim un de local (es poden fer rèpliques també entre locals), i opcionalment el remot, on s'hi indica, a més del directori i el servidor amb el que replicarem, el protocol, que ara mateix és via ssh, rsh o una socket. Quan s'indica rsh o ssh hi hem de posar, també l'usuari.

Aviat m'adono doncs que és ben simple de fer servir, i d'una altra ventatja important que ja venia descrita en l'"Overview": És segur sense haver d'obrir ports especials, i d'una altra que també diu però que jo no havia advertit a primera vista i que també és molt important: Funciona en la capa d'usuari, el que li dona encara molta més seguretat.

Quan va via rsh o ssh, i suposant que tenim redencials adequades en el servidor remot, executa la comanda per arrencar en l'altre servidor l'unison. Quan fem servir comunicació via sockets, cal tenir-lo prèviament arrencat amb la comanda:

unison -socket <num_de_socket>

On <num_de_socket> és òbviament el número de socket que farem servir per a la comunicació, i l'hem de tenir funcionant des de l'usuari que té permís per accedir al direcri, és a dir, que no cal sigui root.

En la primera sincronització, trigarà una mica, de fet, el que es triga en fer una còpia sencera. En les successives, ja anira molt més ràpid, ja que només es copiaran els arxius que s'hagin canviat des de la darrera sincronització, possibilitant així la rèplica amb un node distanciat geogràficament, o fins i tot via internet.

Automatitzant la rèplica

Un cop es comprova que tot funciona n'hi ha prou amb automatitzar la tasca el "cron", per exemple cada hora, i ja només amb això qualsevol canvi que es faci, sigui en el servidor que sigui (la copia és bidireccional), s'enviarà al(s) altre(s).

Amb això ja és molt més fàcil de tenir "mirrors" per guardar ComEsFa?.org de qualsevol contingència Eye-wink

rroca – dg, 21/11/2004 – 23:23

Opcions de visualització de comentaris

Escull com vols veure els comentaris i clica 'Desa configuració' per activar els canvis.

Serveix per tot?

Això permet copiar directoris per a imatges i altres arxius que es pugin, però no serviria per les dades de la base de dades no?

Ho dic entenent que hi hi poden haver dues persones que facin una modificació simultània a dos servidors i llavors si es fa una cópia a sac una d'elles es perdria no?

A més a més suposo que el drupal deu fer les id dels comentaris/artícles autoincrementals, això no faria incompatible tenir dos servidors simultàniament, per backup de conya, ja que si escrivim una resposta en un servidor i una altra persona escriu una resposta en l'altre servidor hi hauria un conflicte al tenir ambdues respostes la mateixa id no?

Mad93 – dl, 22/11/2004 – 09:41

Si, és només actiu/passiu

Els altres estan només en stand-by. El que faix amb la base de dades és exportar-la (sencera) amb mysqldump, comprimir-la, i també copiar-la. Això vol dir que matxaca els canvis en destí.


He vist algunes coses de rèplica amb mysql, però molt lluny del que es podria fer amb "Real Application Clusters" (accès simultani a la mateixa base de dades amb integritat des de nodes diferents). En definitiva, un actiu/actiu de veritat sense risc de conflictes.

Tanmateix una protecció actiu/passiu és suficient en el nostre cas. No hi ha tampoc tanta criticitat, si cau el servei unes hores no passa res, l'important és que encara que hi hagi un desastre al servidor, en poques hores es pot activar amb una pèrdua mínima de informació.

Si mai convingués fer actiu/actiu, la única manera que s'em acut és de recòrrer a que un node dongui servei a les lectures, i l'altre (un de sol), fer les pàguines que impliquin escriptura. Tanmateix no es pas el cas encara.

rroca – dl, 22/11/2004 – 17:09

Problemilla que tinc jo...

Al servidor que tenim a la feina hi tinc uns 30Gb de fitxers d'usuaris, que m'agradaria tenir backup i he intentat deferents mètodes a part dels típics que ja es fan en local. Però voldria usar l'unison per fer-ho el problema és que triga tanta estona fent el llistat de canvis dels fitxers remots que m'acaba donant 'timeout' l'enllaç. Si algú té alguna idea que m'ho digui, gràcies.

Oriol – dm, 23/11/2004 – 10:42

i si ho fas per parts?

A mi l'unison em va molt ràpid en comprovar els noms (excepte la 1a sincronització clar), clar que no copio tant, només la part que l'aplicació que correspon.
Jo crec que l'unison és per a això: parts concretes, i còpia a nivell d'usuari.

Podries tenir diverses instàncies d'unison, en frequències diferents en funció de la sensibilitat de cada part de la informació.

Moltes vegades no cal una rèplica sistemàtica de tanta informació, dificilment tot és igualment sensible. En tot cas, si realment el que busques és això, poster semblaria més lògic un mirror geogràfic... a banda del que et puguin oferir maquinari del tipus SAN, no sé si amb iSCSCI ho podries tambe aconseguir.

rroca – dc, 24/11/2004 – 20:31

amo i grup

Hola
al fer la copia de seguretat em canvia l'amo i el grup dels fitxers i m'ho posa tot a root (q es amb el q faig la copia) hi ha alguna manera de que no ho faci?

un altre tema es que per buscar aquest article poso "unison" a la cerca i no m'el troba, com es aixo?

tictacbum – ds, 17/09/2005 – 02:14

permisos i cerca

L'unison funciona a nivell d'usuari. No replica els permisos.

La cerca és un pel salsitxera si, pero a mi s' que m'el troba: Ara em surt el 4rt.

rroca – ds, 17/09/2005 – 04:51

i com ho feu?

i llavors com ho feu amb els servidors de guifi.net? ho modifiqueu a ma? es que cada cop que actualitza un fitxer li canvia els permisos...

tictacbum – ds, 17/09/2005 – 12:29

per usuaris

doncs això, a nivell d'usuari. O ni això, només determinats directoris (els que cal protegir). No pas com a trot i copiant tot a sac.

rroca – dg, 18/09/2005 – 13:00