así que pusiste mongodb. dime ¿cómo lo administras?

Download Así que pusiste MongoDB. Dime ¿cómo lo administras?

If you can't read please download the document

Upload: alejandro-e-brito-monedero

Post on 25-May-2015

3.003 views

Category:

Technology


4 download

DESCRIPTION

Charla hecha en el Codemotion celebrado en España los dias 18 y 19 de octubre para explicar de manera introductoria como administrar un entorno de mongodb en producción. Haciendo enfasis en hacer backups y sharding. Se recomienda descargar para su mejor visualización (Gifs animados ^_^)

TRANSCRIPT

  • 1. DevOps / Cloud /ScalabilityAs que pusiste MongoDB. Dime cmo loadministras? Alejandro E Brito Monedero @ae_bm

2. As que pusiste MongoDB. Dime cmo lo administras?Quien soy? Trabajo como administrador de sistemas y msEstudi Ciencias de la ComputacionParticipo en el grupo de Madrid DevOpsAspirante a CTO (Chief Trolling Officer) 3. As que pusiste MongoDB. Dime cmo lo administras? 4. As que pusiste MongoDB. Dime cmo lo administras?Aun no estas seguro de tu esquema de datos?Has tenido que denormalizar tus datos?No quieres tener que lidiar con sistemas como pacemaker / corosyncTe gusta manipular JSONEstas leyendo hacker news 5. As que pusiste MongoDB. Dime cmo lo administras?Conoce a MongoDB BD NoSQLOrientado a documentosNo joins ni transacciones completasEs facil poner en alta disponibilidad y hacer shardingEmpresa valorada en 1.2 Billones de $ (sorry RAE) 6. As que pusiste MongoDB. Dime cmo lo administras?Algunos detalles en MongoDB Orientado a documentos seerializados en formato BSON (Binary JSON)Los drivers se comunican con la BD usando BSONLa manipulacin sobre los documentos es atmicaSe pueden hacer reemplazos o updates parciales en los documentosLos ficheros de la BD se manipulan con MMAP 7. As que pusiste MongoDB. Dime cmo lo administras?Por si voy muy rpido El tamao mximo de un documento (hardcoded) son 16 MiB / sino hay que usar GridFSSe pueden hacer reemplazos o updates parciales en los documentosCuidado con el aumentar en exceso el tamao de un documento, puedes forzar una relocalizacion (vease record size) 8. As que pusiste MongoDB. Dime cmo lo administras?Por si voy muy rpido Los ficheros de la BD se manipulan con MMAP_id identificador nico del documento (nico por coleccin)Las capped collections ya estan ordenadas por orden de insercionLocks a nivel de BD (v 2.2.X) con prioridad para las escrituras (vease problema de lectores y escritores) 9. As que pusiste MongoDB. Dime cmo lo administras?Mejor verlo graficamente 10. As que pusiste MongoDB. Dime cmo lo administras?Vista lgica de un proceso mongod 11. As que pusiste MongoDB. Dime cmo lo administras?Vista lgica como se almacenan los documentos 12. As que pusiste MongoDB. Dime cmo lo administras?Comienzos mongodb@db01:~$mongoddbpath/data/dbjournal 13. As que pusiste MongoDB. Dime cmo lo administras? 14. As que pusiste MongoDB. Dime cmo lo administras?Backups mongodump / mongorestore Carga un poco al sistemaFcil Altera el page cacheUsando snapshots Es necesario tener el journal activoRpidoTienen que ser consistentes (SO y FS adecuados) 15. As que pusiste MongoDB. Dime cmo lo administras?Backup mediante snapshots Si todos los ficheros de datos y el journal estan en un mismo disco Hacer un snapshot con LVM EBS lo que uses para hacer snapshots Para restaurar simplemente iniciar un mongod con la data del snapshot 16. As que pusiste MongoDB. Dime cmo lo administras?Backup mediante snapshots Si los ficheros de datos estan en disco y el journal en otro o usas RAID 1+0 con EBSs Bloquear la BD sincronizar (en el mongod) db.fsyncLock(); Hacer el snapshot Desbloquear la BD (no confiar en el autocompletar) db.fsyncUnlock(); 17. As que pusiste MongoDB. Dime cmo lo administras?Backup mediante snapshots Los ficheros de datos en un disco y el journal en otro o usas RAID 1+0 con EBSs (conectado al mongod) Para restaurar seguir el proceso equivalente al caso anterior 18. As que pusiste MongoDB. Dime cmo lo administras?Un mensaje de nuestros sponsors No tienes backups hasta que has probado que se hacen correctamente 19. As que pusiste MongoDB. Dime cmo lo administras?Ahora la solucin para el insomnio 20. As que pusiste MongoDB. Dime cmo lo administras?Replicacin Llamados Replica SetsAsincronaUn solo nodo actua como primario (el nico que procesa escrituras)Basada en statatements (change)Auto failoverAuto node recovery 21. As que pusiste MongoDB. Dime cmo lo administras?Replicacin El nodo primario es elegido por mayoriaEl nodo con la data ms actual es el favoritoSi se usa ack clusterwide no es necesario hacer rollback (para cuando un antiguo primario se vuelve a unir al cluster)Distintos niveles de preferencias para hacer lecturas 22. As que pusiste MongoDB. Dime cmo lo administras?Replicacin Existen unos nodos llamados arbitrer, estos no tienen data pero votan en la eleccin del primarioSiempre debe haber un nmero impar de votos para evitar un caso de split-brainSe pueden tener nodos secundarios con sincronizacion retardada (util para cuando un error humano se replica XD) 23. As que pusiste MongoDB. Dime cmo lo administras?Replicacin El cliente puede escoger el nivel de garantia que necesitamos al escribir datos NingunoEscrito en 1 nodoEscrito en N nodosEscrito en la mayoria de los nodosEscrito en los nodos con el tag indicado 24. As que pusiste MongoDB. Dime cmo lo administras?Replicacin Los secundarios se sincronizan con el primario, leyendo una capped collection llamada oplog Debe ser lo suficientemente grande para que el primario no sobreescriba datos que los secundarios no han consumidoSe pueden tener nodos hidden (prcticos para hacer backups)Mximo 12 nodos, de los cuales mximo 7 pueden tener voto 25. As que pusiste MongoDB. Dime cmo lo administras?Opciones para configura la replicacin (RS) Priority: Indicamos nuestra preferencia por un primarioHidden: Nodo oculto (no es visto ni consultado por los clientes)ArbitrerSlaveDelay: Indicar el retardo que tiene la replicaTags: Para tener datacenter o rack awarenessVote 26. As que pusiste MongoDB. Dime cmo lo administras?Mejor verlo con diagramas 27. As que pusiste MongoDB. Dime cmo lo administras?Funcionamiento lgico del HA 28. As que pusiste MongoDB. Dime cmo lo administras?Ejemplo del uso de las prioridades 29. As que pusiste MongoDB. Dime cmo lo administras?Para quitar el dolor de cabeza de no tener la BD replicada Apagar el proceso mongod Puedes hacer un fichero de configuracion para ahorrar el pasar tantos parametros al iniciar mongod (ejem: El RS) Hacer un snapshot no estaria de msIniciar mongod indicando el RS al que pertenece (Aunque el proceso este arriba, como no esta inicializado, no hay primario, solo se pueden hacer operaciones administrativas 30. As que pusiste MongoDB. Dime cmo lo administras?Para quitar el dolor de cabeza de no tener la BD replicada Crear una configuracin con el nombre con el nombre con el que los clientes y otros miembros se conectaran al nodoIniciar el replica setYa tenemos mayoria, se elige un primario y se pueden aceptar lecturas y escriturasSacar un snapshot para crear el secundario N y asi ahorrarnos un full sync (hay que tener un oplog lo suficientemente grande) 31. As que pusiste MongoDB. Dime cmo lo administras?Para quitar el dolor de cabeza de no tener la BD replicada Crear la mquina nueva con los datos del snapshot ms recienteIniciar mongod indicando el replica setConectarse al nodo primario y agregar el nodoEsperar a que se sincronice (esperemos que no sea un full sync)Irse de vacaciones 32. As que pusiste MongoDB. Dime cmo lo administras?Comandos para manipular los replica set rs.initiate(cfg): Iniciar el RS, donde cfg es un documento JSON con la configuracinrs.add("dbXX"): Agrega un nodo al RSrs.config(): Muestra la configuracin actualrs.status(): Ver estado del RSrs.isMaster()db.printReplicationInfo(): Ver info sobre la replicacin y el oplog 33. As que pusiste MongoDB. Dime cmo lo administras?Ejemplo de configuracin de un RS 34. As que pusiste MongoDB. Dime cmo lo administras?Ejemplo de rs.status() 1/2 35. As que pusiste MongoDB. Dime cmo lo administras?Ejemplo de rs.status() 2/2 36. As que pusiste MongoDB. Dime cmo lo administras?Ejemplo de db.printReplicationInfo() 37. As que pusiste MongoDB. Dime cmo lo administras?Cosas para no olvidar sobre los RS Sirven para hacer rolling updates (S-S-P)Se pueden tener nodos dedicados para hacer backupsSe pueden tener nodos que repliquen con un retardoCuidado con la latencia y el tamao del oplogDistribuir los nodos en distintos sitios fsicos (sea un entorno cloud o no) 38. As que pusiste MongoDB. Dime cmo lo administras?Vamos a hacer sharding 39. As que pusiste MongoDB. Dime cmo lo administras?Sharding Se usa para hacer scaling outSe hace mediante rangos, segn la llave seleccionadaLa data se divide en chunks, los cuales se pueden migrar de un shard a otro hasta que todos los shards esten balanceadosSe hace a nivel de coleccin 40. As que pusiste MongoDB. Dime cmo lo administras?Sharding Existen 2 tipos de operaciones en background Split: cambia el metadata de un chunk al dividirlo (operacin no costosa) Migrate: para mantener el balance, copia el chunk a otro shard, despues actualiza la metadata. Se hace sin downtime, pero es una operacin costosa 41. As que pusiste MongoDB. Dime cmo lo administras?Sharding Los clientes se conectan a un proceso llamado mongos (es un proxy que sabe en que shard est almacenada la informacin)Se deberian tener 3 procesos mongod que sirven de config servers (tienen la metadata que mapea un rango de la shard key con el shard correspondiente)Los config servers funcionan con 2 phase commit, as que si no estan los 3 no se puede actualizar la metadata 42. As que pusiste MongoDB. Dime cmo lo administras?Comenzar a a hacer sharding Iniciar 3 mongod en mquinas distintas como config servers (no olvidar el crear el dbpath)Iniciar un mongos, indicandole las direcciones de los 3 config serversConectarse al mongos y agregar un shard indicando el replica set y al menos un miembroHabilitar el sharding en la bd que contiene la coleccin que nos interesa fragmentar 43. As que pusiste MongoDB. Dime cmo lo administras?Comenzar a a hacer sharding Crear un indice en la coleccin, la que usaremos como shard keyActivar el sharding en la coleccin indicando el indice a usar como shard keySi queremos agregar ms replica sets, repetimos el punto de agregar shards 44. As que pusiste MongoDB. Dime cmo lo administras?Hacer backups con sharding Detener el balanceador, sino puede que al hacer un respaldo, haya informacin que se este migrando de shard y que se pierda o se dupliqueHacer backup de los servidores de config apagando uno y haciendo mongodump, para evitar cambios en la metadataHacer el backup de cada shardActivar de nuevo los 3 config serversIniciar el balanceador 45. As que pusiste MongoDB. Dime cmo lo administras?Comandos usados al hacer sharding sh.addShard()sh.status()sh.enableSharding()sh.shardCollection()sh.stopBalancer()sh.startBalancer() 46. As que pusiste MongoDB. Dime cmo lo administras?Comandos usados al hacer sharding sh.getBalancerState(): Ver si el balancer est activosh.isBalancerRunning(): Ver si hay migraciones en proceso 47. As que pusiste MongoDB. Dime cmo lo administras?Consideraciones al hacer sharding Es muy importante seleccionar un shard key que no presente crecimiento monotono y con mucha cardinalidad, ahora hay un helper que maneja la shard key usando un hashDespus de escoger un shard key no se puede cambiar 48. As que pusiste MongoDB. Dime cmo lo administras?Consideraciones al hacer sharding De ahora en adelante siempre operar a traves de un mongos, a menos que se tenga que manipular un replica setSi vas a hacer un bulk load considera hacer pre splitting, as ahorras las actualizacione de metadata que hacen los config servers 49. As que pusiste MongoDB. Dime cmo lo administras?Ejemplo de una arquitectura lgica para hacer sharding 50. As que pusiste MongoDB. Dime cmo lo administras?Ejemplo de lo que puede pasar si no detienes la migracin de chunks 51. As que pusiste MongoDB. Dime cmo lo administras?Ejemplo del comando sh.status() 1/2 52. As que pusiste MongoDB. Dime cmo lo administras?Ejemplo del comando sh.status() 2/2 53. As que pusiste MongoDB. Dime cmo lo administras?Indices Por ahora solo hay del tipo b-treePueden ser simples o compuestosEn los indices compuestos importa el orden de los campos con los que se creo el indiceSi no se crean en background (ensureIndex) son bloqueantesPermiten duplicados 54. As que pusiste MongoDB. Dime cmo lo administras?Indices Se pueden usar sobre arrays o documentos anidadosSoportan el modo sparse, es bueno usar este tipo cuando se hacen indices sobre campos que no estn en un porcentaje alto de documentos ~ 95%Tambin hay indices geoespacialesMejoran las lecturas pero las escrituras se hacen ms lentas 55. As que pusiste MongoDB. Dime cmo lo administras?Indices Ms indices implica hacer ms escriturasSi el documento tiene que ser relocalizado dentro del fichero tambien hay que actualizar el indiceEs ms rpido construir un indice despues de un import que tenerlo creado antes hacer un bulk importCada cierto nmero de consultas la BD prueba varios planes para saber cual es el mejor plan a seguir al hacer la consulta 56. As que pusiste MongoDB. Dime cmo lo administras?Algunas operaciones relacionadas con los indices .hint(): Sirve para forzar a usar un indice en particular.explain(): Con esto sabemos si nos conviene crear un indice para la consulta o si se est usando el indice 57. As que pusiste MongoDB. Dime cmo lo administras?Ejemplo de consulta sin indice 58. As que pusiste MongoDB. Dime cmo lo administras?Ejemplo de consulta con indice 59. As que pusiste MongoDB. Dime cmo lo administras?Monitoring y otros tips Existen comandos como el mongostat que nos sirven para ver cosas como los fallos de pgina, el % de bloqueo de las bbdd, el tamao del conjunto residente y todas esas cosas que aprendiste en sistemas operativos ^_^Mongodb (la compaia) ofrece un servicio de monitoring en cloud (MMS), por si te sientes cansado o no tienes tiempo 60. As que pusiste MongoDB. Dime cmo lo administras?Monitoring y otros tips RAM, ms es mejorTener CPUs rpidasDiscos rpidosTener la data y el journal en spindles distintosUsar RAID 1+0Desactivar NUMA o hacer malabarismos con cgroupsUsar tamaos de readahead pequeos por la entrada y salida aleatoria 61. As que pusiste MongoDB. Dime cmo lo administras? 62. As que pusiste MongoDB. Dime cmo lo administras?Referencias / tarea http://docs.mongodb.org/manual/administration/http://media.amazonwebservices.com/AWS_NoSQL_MongoDB.pdfhttps://education.mongodb.com/http://docs.mongodb.org/manual/administration/production-notes/Para ver pruebas de stress sobre BD distribuidas http://aphyr.com/tags/jepsenNo olviden visitar http://madrid.devops.es/