Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Experiencias con PostgreSQL en AWS

1,120 views

Published on

Charla que dí en la PgConfEU en el año 2014, la cual se celebró en Madrid, España.
(Recomiendo descargar el original de la presentación)

Hablo sobre como desplegué Postgres en AWS en 2008 y comento también sobre cosas que se podrían hacer mejor, siguiendo un enfoque de mejora iterativo

Published in: Technology
  • Be the first to comment

Experiencias con PostgreSQL en AWS

  1. 1. EXPERIENCIAS CON POSTGRESQL EN AWS PGCONF.EU 2014 Alejandro E. Brito Monedero @ae_bm
  2. 2. ¿Quién soy y por qué estoy aquí? Ya sabes mi nombre Estudie ciencias de la computación He trabajado como sysadmin por más de 8 años Más info en http://bit.ly/1sT7bLw No sé
  3. 3. ¿Quién soy y por qué estoy aquí?
  4. 4. Esquema de la historia Antes de la nube® Migrando a la nube® Como operaba en la nube® Mejoras a lo hecho en la nube®
  5. 5. Antes de la nube® Conocimiento de postgresql Instalar (apt-get install postgresql-X.Y) Arreglar shared_buffers kernel.shmmax kernel.shmall BD sobre servidor físico
  6. 6. Migrando a la nube®
  7. 7. Migrando a la nube® Un par de conceptos Pago por uso Reservar instancias Imagen de máquina virtual: AMI Instance store EBS backed
  8. 8. Migrando a la nube® Un par de conceptos Almacenamiento Efímero: Instance Store EBS y Snapshots Objetos: S3
  9. 9. Migrando a la nube® Un par de conceptos Redes: VPC Máquina virtual: instance EBS-Optimized <tipo><generación>.<tamaño> Ej: r3.8xlarge
  10. 10. Migrando a la nube® Un par de conceptos Autenticación y autorización: IAM Credentials & Roles E/S garantizada: Provisioned IOPS Firewall: Security Groups
  11. 11. Migrando a la nube®
  12. 12. Migrando a la nube®
  13. 13. Migrando a la nube® Receta de la abuela Buscar un AMI base Crear nueva AMI Instalar postgres Scripts de backups
  14. 14. Migrando a la nube® Receta de la abuela Crear rol o generar credenciales Crear un Security Group y subredes dentro de VPC Elegir tipo de instancia
  15. 15. Migrando a la nube® ● Receta de la abuela ¿Qué instancia? Discos rápidos Y mucho ===>
  16. 16. Migrando a la nube® Receta de la abuela Ejecutar instancia con el AMI personalizado Crear volumen EBS y asociarlo a la instancia Poner LVM sobre el EBS
  17. 17. Migrando a la nube® Receta de la abuela Montar el LV (logical volume) como directorio de datos de postgres Poner en el crontab los scripts de backup Cargar un dump de la BD
  18. 18. Como operaba en la nube® Escalado vertical Este es el procedimiento cuando se usan instancias del tipo instance store Implica una parada del servicio
  19. 19. Como operaba en la nube® Escalado vertical Iniciar la imagen con postgres en una nueva instancia más grande Detener postgres en la instancia actual
  20. 20. Como operaba en la nube® Escalado vertical Desmontar el volumen de postgres Desactivar volume group vgchange -an <volume group> Desconectar EBS de la instancia
  21. 21. Como operaba en la nube® Escalado vertical Conectar EBS a la instancia nueva Activar volume group vgchange -ay <volume group> Montar volumen de postgres
  22. 22. Como operaba en la nube® Escalado vertical Iniciar postgres Hacer que los clientes sepan que postgres esta en la instancia nueva Poner a dormir a la instancia antigua
  23. 23. Como operaba en la nube® Aumentar en caliente el tamaño del volumen de datos Crear EBS más grande Conectar EBS a la instancia pvcreate <nuevo ebs> vgextend <volume group> <nuevo ebs>
  24. 24. Como operaba en la nube® Aumentar en caliente el tamaño del volumen de datos pvmove <viejo ebs> <nuevo ebs> vgreduce <volume group> <viejo ebs> pvremove <viejo ebs> lvextend <logical volume>
  25. 25. Como operaba en la nube® Aumentar en caliente el tamaño del volumen de datos extender filesystem Desconectar y eliminar EBS antiguo Si, no es gratis (E/S) pero no sé daban cuenta ^_^
  26. 26. Como operaba en la nube® Backups Crear otro EBS donde guardar los dumps Conectar el EBS a la instancia Montar y usar el EBS sin cosas rebuscadas (LVM, etc)
  27. 27. Como operaba en la nube® Backups Hacer un script que tenga 2 pasos Hacer el dump de la BD que se almacena en el EBS creado para los backups pg_dumpall –clean --file=<fichero dump>
  28. 28. Como operaba en la nube® Backups Hacer un script que tenga 2 pasos Desmontar volumen EBS Hacer un snapshot a S3 del EBS de los backups No olvidar siempre siempre siempre revisar los códigos de error
  29. 29. Como operaba en la nube® Restaurar backups Dependerá del cataclismo o prueba que se haga Si sigue funcional el EBS psql -1 -f <fichero dump> postgres
  30. 30. Como operaba en la nube® Restaurar backups Si el EBS esta muerto Crear un EBS del snapshot del backup Seguir los pasos de cuando el EBS esta funcional
  31. 31. Como operaba en la nube®
  32. 32. Mejoras a lo hecho en la nube® Puntos a mejorar Al hacer escalado vertical el tener que actualizar la dirección de la BD Mientras más grande es la BD más tardara en hacerse el dump y el respectivo restore
  33. 33. Mejoras a lo hecho en la nube® Puntos a mejorar Mejorar la frecuencia de los respaldos Usar PITR Backups cuando se tiene RAID 1+0
  34. 34. Mejoras a lo hecho en la nube® Actualizar la dirección de la BD Usar un servidor DNS interno Usar un pooler / proxy como pgbouncer
  35. 35. Mejoras a lo hecho en la nube® Actualizar la dirección de la BD Querer impresionar y usar algo como Consul o etcd Aprovechar las funcionalidades de VPC
  36. 36. Mejoras a lo hecho en la nube® Actualizar la dirección de la BD Por ejemplo usando VPC se puede Asignar direcciones IP secundarias a la interfaz de red Se usa IP aliasing La IP primaria y secundaria pueden estar en la misma subred
  37. 37. Mejoras a lo hecho en la nube® Actualizar la dirección de la BD Otro ejemplo con VPC Crear una subred para el servicio Crear una interfaz que estará en la red de servicio Hay que usar el comando ip La IP de servicio no puede estar en en el mismo rango que la IP primaria
  38. 38. Mejoras a lo hecho en la nube® Actualizar la dirección de la BD Ejemplo de la configuración cuando se usan interfaces de red ip rule add from <IP servicio> table <id tabla> ip addr add <IP servicio>/<mascara> dev <interfaz>
  39. 39. Mejoras a lo hecho en la nube® Actualizar la dirección de la BD Ejemplo de la configuración cuando se usan interfaces de red ip link set dev <interfaz> up
  40. 40. Mejoras a lo hecho en la nube® Actualizar la dirección de la BD Ejemplo de la configuración cuando se usan interfaces de red ip route add <subred servicio> dev <interfaz> proto kernel scope link src <ip servicio> table <id tabla>
  41. 41. Mejoras a lo hecho en la nube® Actualizar la dirección de la BD Ejemplo de la configuración cuando se usan interfaces de red ip route add default via <gw subred servicio> dev <interfaz> table <id tabla>
  42. 42. Mejoras a lo hecho en la nube® Backups Ver http://goo.gl/cBrtEQ Estrategia similar a la anterior, pero usando el formato custom
  43. 43. Mejoras a lo hecho en la nube® Backups Respaldar los globales pg_dumpall -g -c -f <fichero globales sql> Por cada BD pg_dump -f <dump bd> -Fc <bd>
  44. 44. Mejoras a lo hecho en la nube® Backups Restaurar psql -1 -f <fichero globales sql> Por cada BD pg_restore -C -d postgres <dump db>
  45. 45. Mejoras a lo hecho en la nube® Backups Ahora, si queremos aprovechar las snapshots de los EBS archive_mode = on wal_level = archive o superior
  46. 46. Mejoras a lo hecho en la nube® Backups Ahora, si queremos aprovechar las snapshots de los EBS Para archive_command usar un comando que no sobrescriba wal logs Solo termine con código 0 si hizo la copia
  47. 47. Mejoras a lo hecho en la nube® Backups Ahora, si queremos aprovechar las snapshots de los EBS Para archive_command El destino de los wal logs es un volumen aparte
  48. 48. Mejoras a lo hecho en la nube® Backups El procedimiento es queda SELECT pg_start_backup(<nombre>); Hacer el snapshot de el / los EBS que conforman el cluster SELECT pg_stop_backup();
  49. 49. Mejoras a lo hecho en la nube® Backups El procedimiento es queda Desmontar EBS donde el archive_command deja los wal logs Hacer un snapshot de ese EBS No olvidar revisar los códigos de error
  50. 50. Mejoras a lo hecho en la nube® Backups Para restaurar Recuperar las snapshot que tienen los datos Recuperar la snapshot del volumen con los wal logs
  51. 51. Mejoras a lo hecho en la nube® Backups Para restaurar Crear el recovery.conf con un restore_command Iniciar la BD
  52. 52. Mejoras a lo hecho en la nube® Backups Sobre el procedimiento Aunque se use RAID0 en el directorio de datos no es necesario suspender el dispositivo (según mis pruebas)
  53. 53. Mejoras a lo hecho en la nube® Backups Sobre el procedimiento Si eres paranoico lo puedes hacer pero recuerda reanudar la E/S antes de hacer el pg_stop_backup
  54. 54. Mejoras a lo hecho en la nube® Backups Sobre el procedimiento Si suspendes el dispositivo bloquearas las operaciones de E/S, así que haz los snapshots rápido
  55. 55. Mejoras a lo hecho en la nube® Backups Sobre el procedimiento Suspender Ej: dmsetup suspend <dispositivo> Reanudar Ej: dmsetup resume <dispositivo>
  56. 56. Mejoras a lo hecho en la nube® ¿Performance? Un tema para mucha discusión, cada caso es distinto Puedes usar SSDs, Provisioned IOPS, da consistencia a cambio de $$$
  57. 57. Mejoras a lo hecho en la nube® ¿Performance? Ver http://youtu.be/QkvNazjv_co Ver http://youtu.be/3OH4-Hx3tlE
  58. 58. Mejoras a lo hecho en la nube® ¿Performance? Determinar el cuello de botella Cualquier optimización que no sea hecha sobre el cuello de botella no tendrá efecto sobre el sistema (Theory of Constraints)
  59. 59. ¿Preguntas u objetos contundentes?
  60. 60. Creditos https://commons.wikimedia.org/wiki/File:Cloud_pattern1.jpg http://knowyourmeme.com/photos/638208-i-have-no-idea-what-im-doing http://static3.tudespensa.com/rep/7d72/imagenes/40471/4/chocolate-a-la-taza-tradicional- ram-brik-1-lt.jpg https://www.muralesyvinilos.com/murales/Madrid_skyline_muralesyvinilos_398 70095__Monthly_XXL.jpg https://commons.wikimedia.org/wiki/File:Postgresql_elephant.svg http://giphy.com/gifs/m4Kw0bz2tW9ws http://www.memegenerator.es/meme/13014499 http://giphy.com/gifs/Pk17IeO00wxFe http://i.giphy.com/wsEX8uMrTRDoI.gif http://i.giphy.com/XSQUAevZhaROM.gif

×