You are on page 1of 54

PRESIDENCIADELAREPBLICADELECUADOR POSTGRESQL Y SISTEMAS DE ALTA DISPONIBILIDAD SUBSECRETARADETECNOLOGASDELA INFORMACIN OCTUBRE2011 Ing.

MarceloSilva

CONTENIDO

Alta Alta

Disponibilidad.

Disponibilidad : Comparacin de diferentes soluciones. como sistema de Alta Disponibilidad. como sistema de Alta Disponibilidad Siguiente Paso.

QUIPUX QUIPUX

ALTADISPONIBILIDAD

Un grupo de computadores independientes que trabajan conjuntamente para incrementar la disponibilidad de diversas aplicaciones y servicios.

ALTADISPONIBILIDAD

La alta disponibilidad en definitiva busca contar con un ambiente tolerante a fallos, un sistema capaz de encubrir los fallos que se producen en l para mantener una prestacin de servicio continua.

ALTADISPONIBILIDAD:COMPARACIN DIFERENTESSOLUCIONES 1.- Disco Compartido . Una sola copia de la base de datos. Un arreglo de discos compartido por mltiples servidores. Si el servidor principal falla, se puede subir el servidor de respaldo en poco tiempo sin perdida de datos. Una significante limitacin es que si el arreglo de disco compartido falla ambos el servidor principal y el de respaldo quedan no funcionales. Este mtodo puede ser usado implementando un servidor GFS, XFS, OFS.

ALTADISPONIBILIDAD:COMPARACIN DIFERENTESSOLUCIONES 2.- Replicacin del sistema de archivos . Todos los cambios de un sistema de archivos son replicados a otro sistema de archivos residente en otra computadora. La nica restriccin de este mtodo es que como el servidor principal y el de respaldo son idnticos si existe corrupcin a nivel de datos, ambos ambientes tendrn este inconveniente. DRBD es una popular aplicacin para replicacin de sistemas de archivos.

ALTADISPONIBILIDAD:COMPARACIN DIFERENTESSOLUCIONES 3.- Warm y Hot Standby Usando PITR . Replicacin por medio de los archivos wall. Si el servidor principal falla, el servidor de respaldo contiene la mayora de los datos del servidor principal y fcilmente puede ser colocado como servidor principal. Este es un mtodo asncrono y solo puede ser utilizado sobre toda la base de datos. Ejemplo: walmgr (wal manager) skytools.projects.postgresql.org/doc/walmgr.html

ALTADISPONIBILIDAD:COMPARACIN DIFERENTESSOLUCIONES 4.-Replicacin Maestro-Esclavo usando triggers El servidor maestro asincrnicamente enva los cambios de datos al servidor esclavo. El servidor esclavo puede ser utilizado para consultas. Este mtodo es ideal para consultas para un almacn de datos. Slony-I, londiste Skytools son herramientas que usan este tipo de solucin.

ALTADISPONIBILIDAD:COMPARACIN DIFERENTESSOLUCIONES 5.-Replicacin Midleware . Un programa intercepta cada consulta SQL y enva esta a uno o ms servidores. Cada servidor opera independientemente, consultas de lectura / escritura pueden ser enviadas a todos los servidores, existe balanceo de carga a nivel de consultas. Funciones como random(), current_timestamp y secuencias pueden devolver diferentes valores en cada servidor. Pgpool-II y Sequoia son ejemplos de este tipo de replicacin.

ALTADISPONIBILIDAD:COMPARACIN DIFERENTESSOLUCIONES 6.-Replicacin asincrnica Maestro-Maestro . Para servidores que no estn regularmente conectados, como laptops o servidores remotos, si se guarda la consistencia de los datos estos pueden ser actualizados. Cada servidor trabaja independientemente y peridicamente esta comunicndose con otros servidores para identificar conflictos de transacciones, estos conflictos pueden ser resueltos por usuarios o reglas de resolucin de conflictos Bucardo es un ejemplo de este tipo de replicacin.

ALTADISPONIBILIDAD:COMPARACIN DIFERENTESSOLUCIONES 7.-Replicacin sincrnica Maestro-Maestro . Cada servidor puede aceptar peticiones de escritura, y los datos modificados son transmitidos del servidor original a cada uno de los servidores. Escrituras pesadas pueden causar constantes bloqueos degradando el rendimiento. Peticiones de lectura pueden ser enviadas a cualquier servidor. Ejemplo: PyReplica (http://pgfoundry.org/projects/pyreplica)

CUADROCOMPARATIVO
F u n cio n alidad Disco Rep licaci nW arm y Ho t licaci n Rep Rep licaci n Rep licaci nRep licaci n Co m p artid o el sistem a d S tand b y M aestro - M id lew are asin cr nicasincr n ica d e arch ivo sUsan d o P ITE sclavo R M aestro - M aestro u san d o M aestro M aestro trig g ers M s S NA DRB D P IT R S lony P gpool-II B uc ardo deA L W Regis tros tablas de L SQ Regis tros tablas de Regis tros tablas bloqueos regis tros de y de

Im plem entac in Utiliz ada M todo de Com unic ac in c o Dis B loques Com partido dis c o Hardware no es pec ial requerido P erm ite m ltiples s erv idores m aes tros No hay s obrec arga del X s erv idor m aes tro S in es pera para m ltiples X s erv idores F alla del m aes tro s in prdida X de datos S erv idores en es pera s olo ac eptan c ons ultas de lec tura G ranularidad P or T abla Nec es aria la res oluc in de X c onflic tos

X X X

X X X

X X X

X X

X X X

X H o to n ly X X X X X

X X X X X X

QUIPUXCOMOSISTEMADEALTA DISPONIBILIDAD
5.000 Usuarios concurrentes. 23.000 documentos diarios generados (Promedio). 4.348.397 documentos generados en los ltimos

meses. 681.657 documentos firmados electrnicamente en los ltimos 13 meses. 88 instituciones usando el sistema concurrentemente. 45.958 usuarios activos. Servicio 7 x 24. Nota : Datos del 30 de Septiembre de 2011

13

QUIPUXCOMOSISTEMADEALTA DISPONIBILIDAD

QUIPUXCOMOSISTEMADEALTADISPONIBILIDAD SIGUIENTEPASO

QUIPUXCOMOSISTEMADEALTADISPONIBILIDAD SIGUIENTEPASO

REFERENCIASBIBLIOGRFICAS

Libro

: The PostgreSQL 9.0 Reference Manual Volume 3: Server Administration Guide ///media/datos/MarioLopez/Subsecretaria/Cursos/P resentacion%20Postgres%20y%20alta %20disponibilidad/cluster-de-servidores-conpostgresql.html

PREGUNTAS

Gracias
Por:Ing.MarioLpezB. mario.lopez@presidencia.gob.ec

PRESIDENCIADELAREPBLICADELECUADOR

SKYTOOLS : PgQ REPLICACIN CON LONDISTE


SubsecretaradeTecnologasdelaInformacin Abril2011
Por:Ing.MarioLpezB. mario.lopez@presidencia.gob.ec

AGENDA
PgQ Londiste LaboratoriodereplicacinPgQLondisteconPostgreSQL

PgQ:QUES
Una

implementacin de colas sobre PostgreSQL con una interfacedestoreprocedures EventossongeneradosporProductoresycolocadosenlacola parapoderserprocesadosporlosConsumidores

PgQ:PARAQUESIRVE
Mensajeraasincrnica ProcesamientoPorLotes Replicacin TransaccionesDistribuidas

PgQ:CARACTERSTICAS

TRANSACCIONAL . Eventos son generados transaccionalmente. EFICIENTE. Los eventos son procesados por lotes y es muy liviano. FLEXIBLE. Sin lmites en el nmero de Productores y Consumidores CONFIABLE.Loseventossonalmacenadosenlabasededatos PostgreSQL FCIL DE USAR. Interface SQL simple, API's para diferentes lenguajes CDIGO ABIERTO. No se requiere de licencia y los fuentes estndisponibles

GLOSARIO

EVENTO. Pieza atmica de datos generado por un Productor . Un eventoPgQesunregistrodeunadelastablassoportadasporlacola LOTE DE EVENTOS.- PgQ esta diseado para manejar de forma ms eficiente gran cantidad de datos es por esto que agrupa en lotes para que sean procesados los eventos COLA.- Los eventos son almacenados en tablas diseadas para manejar las colas . Varios Productores pueden escribir en la misma cola y varios Consumidores pueden leer de la misma cola. Los elementos son almacenados en la cola antes de poder ser consumidos PRODUCTOR.- Aplicaciones que colocan un evento en la cola CONSUMIDOR.- Aplicaciones que leen eventos de una cola

PgQ:COLA
Esencialmenteunconjuntodetablasenunabasededatos

PostgreSQL Pordefectomaneja3tablasporcola Loseventossondescartadossolocuandotodoslos Consumidoreshanprocesadoelevento LascolassonaccesiblesmedianteunAPIatravsdestore procedures Sepuedetenerdiferentescolasparaunamismabasededatos CualquiernmerodeProductoresycualquiernmerode Consumidores

PgQ:APIPARACOLA

Creacinyeliminacindecolas pgq.create_queue(nombre_cola) pgq.drop_queue(nombre_cola) Funciones de informacin de las colas pgq.get_queue_info(nombre_cola) pgq.get_consumer_info(nombre_cola) pgq.current_event_table(nombre_cola) Manejo de los Consumidores pgq.register_consumer(qname, cname) pgq.unregister_consumer(qname, cname)

PgQ:EVENTO
Unregistroenunatablaquemanejaunacola

Registros a ser procesados

PgQ:LOTEDEEVENTOS
Los eventos son agrupados en lotes para un procesamiento

mseficiente Los Consumidores obtienen eventos en lotes El tamao del lote puede ser tuneado para la aplicacin o topologa de red Lotes ms pequeos podran mejorar el procesamiento Los lotes son preparados por un proceso separado llamado Ticker

PgQ:TICKER
Es

un demonio que peridicamente crea ticks sobre la(s) cola(s).ElTickesesencialmenteunaposicinenlasecuencia deeventos Un lote es formado de eventos que son encolados entre dos ticks Sin Ticker no hay lotes de eventos Si se tiene una pausa muy extendida del ticker los lotes de eventos podran ser muy grandes y los consumidores no podran procesar adecuadamente el lote de eventos. Ticker esta envuelto en miscelneos como son el vacuum de las tablas pgq, calendarizacin de eventos encolados y la rotacin de las tablas de las colas

PgQ:CONSUMIDOR
Seadhierealacola El

que obtiene eventos de la cola pidiendo un lote de eventos Solo ve los eventos que se han producido despus de la suscripcin Los eventos son vistos al menos una vez los eventos no se pierden Se debe contar con algn tipo de seguimiento para que un evento solo sea utilizado una vez Skytools posee algunas herramientas para esto Si el evento no puede ser procesado inmediatamente puede ser calendarizado para ser reprocesado posteriormente

PgQ:ESTADO
Puedeserobtenidallamandoapgq.get_consumer_info() Se

visualiza el informe de la cola, el nombre de los consumidores, retrasos etc Lag es el tiempo del ltimo lote de eventos finalizado Last seenes el tiempo transcurrido en el que un consumidor proces el ltimo lote de eventos

PgQ:PRODUCTOR
Cualquiercosacolocadaenloseventosdelascolas Configura

el formato de carga de un evento acordado entre el Productor y el Consumidor Interfaz bsica mediante un API pgq.insert_event(queue, ev_type, ev_data) La replicacin usa triggers para la generacin de los eventos pgq.sqltriga(queue, options) pgq.logutriga(queue, options) Carga masiva es tambin posible

SKYTOOLS3:NUEVAS CARACTERSTICAS
ConsumidorentrevariosSubConsumidores Soporta Cascada .- Una cola idntica es mantenida entre los nodos, los Consumidores pueden fcilmente moverse en diferentes nodos Los tickers de base de datos remplazados por un simple demonio pgqd Utilitario qadmin para manejar colas y Consumidores

Consumidores Colaborativos. Distribucin de carga de un

PgQ:CONSUMIDORESCOLABORATIVOS

AlgunasocasionesunsoloConsumidornosatisfaceconelvolumendelotesde eventos Consumidores paralelos podra ayudar, pero necesitamos dividir la carga de trabajo para evitar tratar el mismo evento dos veces Entonces necesitamos que los Consumidores puedan trabajar de forma colaborativa Skytool 3 introduce los Sub Consumidores con este fin. Estos comparten la carga de trabajo de forma colaborativa Hay algunas diferencias en el manejo de registros y el procesamiento por lotes pero se parece bastante al de los Consumidores regulares pgq_coop.register_subconsumer(qname,cname,scname) pgq_coop.unregister_subconsumer(qname,cname,scname,mode) pgq_coop.next_batch(qname,cname,scname) pgq_coop.finish_batch(batch_id)

PgQ:CASCADA

Cascadaesunconjuntodenodosdebase de datos y una cola que se distribuye entre los nodos . Los ID de eventos se mantienenidnticosentrelosnodos La cascada puede ser representada como un rbol donde los eventos creados en la raz se propagan sobre la cascada de otros nodos Solo puede haber un nodo raz pero cualquier nmero de ramas u hojas Los nodos hoja son especficos de la replicacin ellos no tienen una copia de la cola y no participan en el evento de propagacin

PgQ:CASCADA
Una replicacin en cascada tpica sera de una base de datos

primaria(nodoraz),yunarplicaenespera(rama) Nosotros podemos cambiar fcilmente las funciones de replicacin de los nodos raz o rama y los Consumidores seguirn como si nada hubiera pasado En caso de que el nodo raz colapse, se promueve un nodo rama sobreviviente a nodo raz y se reconfigura los Consumers , en este escenario podra existir prdidas de datos

PgQ:Wrapup
Productoresgeneraneventosenlascolas Los Tickers de grupos de eventos en lotes Los

lotes de eventos son proporcionados a los Consumidores en un ordenamiento FIFO Consumidores pueden procesar los eventos con pgq_ext

LONDISTE:REPLICACIN

ImplementacindereplicacinMaestro/EsclavosobrePgQ Usa sqltriga/logtriga para capturar los cambios de las tablas de la base Maestra PgQ Consumer replica los eventos capturados entre los esclavos Un master puede tener varios esclavos Los esclavos pueden ser maestros de otros esclavos

LONDISTE:CONFIGURACIN
Preparaelarchivodeconfiguracin:basesdedatos origen ydestinoy elnombredelacola Ejecutar los comandos londiste de instalacin para el Proveedor y Consumidor Comenzar el proceso de replicacin entre el maestro y el esclavo Se empieza la copia inicial las tablas de la base de datos esclava se pueden usar una vez termine este proceso

TALLERDEREPLICACIN: CONFIGURACIONESPRELIMINARES
InstalacindelsistemaoperativoLinux InstalacindelabasededatosPostgreSQL InstalacindelasherramientasSKYTOOL

(yuminstallskytools) Creacindelabasededatosdemaestra Cargadedatosinicialesenlabasededatosmaestra Creacindelabasededatosesclava Creacindetablasysecuenciasenlabasededatosesclava

TALLERDEREPLICACIN: CONFIGURACINDEPgQ
Crear

la carpeta /etc/skytools en el servidor de la base maestraytambinenlosesclavos,comodueopostgres mkdirskytools chownpostgres:skytools Crearelarchivodeconfiguracinpgqadmen/etc/skytools/ (pgqadm.ini)enelservidormaestroyenelservidoresclavo

TALLERDEREPLICACIN: CONFIGURACINDEPgQ
[pgqadm] #nombredeljobunico job_name=replica db = dbname=prueba port=5432 host=192.168.20.28 user=replica password=replica11 #frecuenciademantenimeinto maint_delay_min=2 #frecuenciadeverificacindeactividades loop_delay=0.1 logfile=/var/log/skytools/%(job_name)s.log pidfile=/var/log/skytools/%(job_name)s.pid use_skylog=0

TALLERDEREPLICACIN: CONFIGURACINDEPgQ
Colocarcomodueoapostgresdelarchivopgqadm.ini

chownpostgres:pgqadm.ini Cambiaralusuariopostgressupostgres Crearenvar/loglacarpetaskytoolscomodueopostgres Configuracindelaestructurapgqadmservidormaestro pgqadm.py/etc/skytools/pgqadm.iniinstall Inicializacindeltickerenelservidormaestrocomousuario postgres Ejecutamoslasiguientelneadecomandopgqadm.pyd/ etc/skytools/pgqadm.initicker

TALLERDEREPLICACIN: CONFIGURACINDEPgQ
Revisar

que la generacin e inicializacin de la cola este correcto en el servidor maestro Ejecutamos la siguiente lnea de comando ; pgqadm.py /etc/skytools/pgqadm.ini status

TALLERDEREPLICACIN: CONFIGURACINDELONDISTE
Creamos el archivo de configuracin londiste.ini

#nombre de trabajo job_name = pruebalondiste provider_db = dbname=prueba port=5432 host=192.168.40.207 user=ureplica password=replica11 subscriber_db = dbname=pruebareplica port=5432 host=192.168.40.208 user=replica password=replica11 pgq_queue_name = cola1_replicaprueba logfile = /var/log/skytools/%(job_name)s.log pidfile = /var/log/skytools/%(job_name)s.pid # loop_delay = 1 # lock_timeout = 10.0

TALLERDEREPLICACIN: CONFIGURACINDELONDISTE
Instalamos

la estructura londiste en el proveedor para lo cual ejecutamos la siguiente lnea de comando en el servidor maestro londiste.py londiste.ini provider install

Instalamos

la estructura londiste en los consumidores ejecutando la siguiente lnea de comando londiste.py londiste.ini subscriber install Verificamos el estado de la cola desde los consumidores para lo cual ejecutamos la siguiente lnea de comando pgqadm.py pgqadm.ini status

TALLERDEREPLICACIN: CONFIGURACINDELONDISTE
Inicializamos

el proceso de replicacin en el servidor maestro para lo cual ejecutamos el siguiente comando londiste.py -d londiste.ini replay Tenemos que indicar que tablas y que secuencias sern colocadas en el proveedor #!/bin/sh londiste.py londiste.ini provider add catastrofe londiste.py londiste.ini provider add catastrofe_pais londiste.py londiste.ini provider add continente londiste.py londiste.ini provider add pais londiste.py londiste.ini provider add tipo_catastrofe

TALLERDEREPLICACIN: CONFIGURACINDELONDISTE
#!/bin/sh londiste.py londiste.ini provider catastrofe_codigocatastrofe_seq londiste.py londiste.ini provider continente_codigocontinente_seq londiste.py londiste.ini provider pais_codigopais_seq londiste.py londiste.ini provider tipo_catastrofe_codigotipocatastrofe_seq add-seq add-seq add-seq add-seq

TALLERDEREPLICACIN: CONFIGURACINDELONDISTE
Tenemos

que indicar que tablas y que secuencias sern colocadas en el suscriptor #!/bin/sh londiste.py londiste.ini subscriber add catastrofe londiste.py londiste.ini subscriber add catastrofe_pais londiste.py londiste.ini subscriber add continente londiste.py londiste.ini subscriber add pais londiste.py londiste.ini subscriber add tipo_catastrofe

TALLERDEREPLICACIN: CONFIGURACINDELONDISTE
#!/bin/sh londiste.py londiste.ini subscriber catastrofe_codigocatastrofe_seq londiste.py londiste.ini subscriber continente_codigocontinente_seq londiste.py londiste.ini subscriber pais_codigopais_seq londiste.py londiste.ini subscriber tipo_catastrofe_codigotipocatastrofe_seq add-seq add-seq add-seq add-seq

TALLERDEREPLICACIN: CONFIGURACINDELONDISTE
Verificamos

el estado de la cola tanto en el servidor proveedor como en los consumidores pgqadm.py pgqadm.ini status Revisar los logs para verificar que no existan inconvenientes En caso de que se caiga la rplica hacer lo siguiente : 1.- Reiniciar la generacin de tickers con pgqadm.py -d /etc/skytools/pgqadm.ini ticker 2.- Reiniciar la replicacin con londiste.py -d londiste.ini replay

CONCLUSIONES/ RECOMENDACIONES
AlternativaviabledereplicacinconPostgres Paralareplicacintomarencuentaquesolosepuedenreplicar

tablasquetenganclaveprimaria Para una actualizacin de la estructura de la base de datos ejecutarelcambioprimeroenlabaseesclavayluegoenlabase maestra Nuncaejecutarningnscriptdecambioupdate/deleteetcenla baseesclavasiempreenlabasemaestra

PREGUNTAS

Gracias
Por:Ing.MarceloSilva. marcelo.silva@presidencia.gob.ec

PREGUNTAS

Gracias
Por:Ing.MarioLpezB. mario.lopez@presidencia.gob.ec

You might also like