SlideShare ist ein Scribd-Unternehmen logo
1 von 62
DevOps / Cloud /Scalability

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

administras?
Alejandro E Brito Monedero @ae_bm
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

¿Quien soy?
–

Trabajo como administrador de sistemas y más

–

Estudié Ciencias de la Computacion

–

Participo en el grupo de Madrid DevOps

–

Aspirante a CTO (Chief Trolling Officer)
Así que pusiste MongoDB. Dime ¿cómo lo administras?
Así que pusiste MongoDB. Dime ¿cómo 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 / corosync

●

Te gusta manipular JSON

●

Estas leyendo hacker news
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Conoce a MongoDB
–

BD NoSQL

–

Orientado a documentos

–

No joins ni transacciones completas

–

Es “facil” poner en alta disponibilidad y hacer sharding

–

Empresa valorada en 1.2 Billones de $ (sorry RAE)
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Algunos detalles en MongoDB
–

Orientado a documentos seerializados en formato BSON (Binary JSON)

–

Los drivers se comunican con la BD usando BSON

–

La manipulación sobre los documentos es atómica

–

Se pueden hacer reemplazos o updates parciales en los documentos

–

Los ficheros de la BD se manipulan con MMAP
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Por si voy muy rápido
–

El tamaño máximo de un documento (hardcoded) son 16 MiB /
sino hay que usar GridFS

–

Se pueden hacer reemplazos o updates parciales en los
documentos

–

Cuidado con el aumentar en exceso el tamaño de un documento,
puedes forzar una relocalizacion (vease record size)
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Por si voy muy rápido
–

Los ficheros de la BD se manipulan con MMAP

–

_id identificador único del documento (único por colección)

–

Las capped collections ya estan ordenadas por orden de
insercion

–

Locks a nivel de BD (v 2.2.X) con prioridad para las escrituras
(vease problema de lectores y escritores)
Así que pusiste MongoDB. Dime ¿cómo lo administras?

Mejor verlo graficamente
Así que pusiste MongoDB. Dime ¿cómo lo administras?

Vista lógica de un proceso mongod
Así que pusiste MongoDB. Dime ¿cómo lo administras?

Vista lógica como se almacenan los
documentos
Así que pusiste MongoDB. Dime ¿cómo lo administras?

Comienzos
mongodb@db01:~$ mongod ­­dbpath /data/db ­­journal
Así que pusiste MongoDB. Dime ¿cómo lo administras?
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Backups
–

mongodump / mongorestore
●

●

Carga un poco al sistema

●

–

Fácil
Altera el page cache

Usando snapshots
●

Es necesario tener el journal activo

●

Rápido

●

Tienen que ser consistentes (SO y FS adecuados)
Así que pusiste MongoDB. Dime ¿cómo 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
Así que pusiste MongoDB. Dime ¿cómo 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();
Así que pusiste MongoDB. Dime ¿cómo 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
Así que pusiste MongoDB. Dime ¿cómo lo administras?

Un mensaje de nuestros sponsors
No tienes backups hasta que has probado que
se hacen correctamente
Así que pusiste MongoDB. Dime ¿cómo lo administras?

Ahora la solución para el insomnio
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Replicación
–

Llamados Replica Sets

–

Asincrona

–

Un solo nodo actua como primario (el único que procesa
escrituras)

–

Basada en statatements (change)

–

Auto failover

–

Auto node recovery
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Replicación
–

El nodo primario es elegido por mayoria

–

El nodo con la data más actual es el favorito

–

Si 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
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Replicación
–

Existen unos nodos llamados arbitrer, estos no tienen data pero
votan en la elección del primario

–

Siempre debe haber un número impar de votos para evitar un
caso de split-brain

–

Se pueden tener nodos secundarios con sincronizacion retardada
(util para cuando un error humano se replica XD)
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Replicación
–

El cliente puede escoger el nivel de garantia que necesitamos al
escribir datos
●

Ninguno

●

Escrito en 1 nodo

●

Escrito en N nodos

●

Escrito en la mayoria de los nodos

●

Escrito en los nodos con el tag indicado
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Replicación
–

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 consumido

–

Se pueden tener nodos hidden (prácticos para hacer backups)

–

Máximo 12 nodos, de los cuales máximo 7 pueden tener voto
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Opciones para configura la replicación (RS)
–

Priority: Indicamos nuestra preferencia por un primario

–

Hidden: Nodo oculto (no es visto ni consultado por los clientes)

–

Arbitrer

–

SlaveDelay: Indicar el retardo que tiene la replica

–

Tags: Para tener datacenter o rack awareness

–

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

Mejor verlo con diagramas
Así que pusiste MongoDB. Dime ¿cómo lo administras?

Funcionamiento lógico del HA
Así que pusiste MongoDB. Dime ¿cómo lo administras?

Ejemplo del uso de las prioridades
Así que pusiste MongoDB. Dime ¿cómo 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 más

Iniciar 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
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Para quitar el dolor de cabeza de no tener la BD replicada
–

Crear una configuración con el nombre con el nombre con el
que los clientes y otros miembros se conectaran al nodo

–

Iniciar el replica set

–

Ya tenemos mayoria, se elige un primario y se pueden aceptar
lecturas y escrituras

–

Sacar un snapshot para crear el secundario N y asi ahorrarnos un
full sync (hay que tener un oplog lo suficientemente grande)
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Para quitar el dolor de cabeza de no tener la BD replicada
–

Crear la máquina nueva con los datos del snapshot más reciente

–

Iniciar mongod indicando el replica set

–

Conectarse al nodo primario y agregar el nodo

–

Esperar a que se sincronice (esperemos que no sea un full sync)

–

Irse de vacaciones
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Comandos para manipular los replica set
–

rs.initiate(cfg): Iniciar el RS, donde cfg es un documento JSON
con la configuración

–

rs.add("dbXX"): Agrega un nodo al RS

–

rs.config(): Muestra la configuración actual

–

rs.status(): Ver estado del RS

–

rs.isMaster()

–

db.printReplicationInfo(): Ver info sobre la replicación y el
oplog
Así que pusiste MongoDB. Dime ¿cómo lo administras?

Ejemplo de configuración de un RS
Así que pusiste MongoDB. Dime ¿cómo lo administras?

Ejemplo de rs.status() 1/2
Así que pusiste MongoDB. Dime ¿cómo lo administras?

Ejemplo de rs.status() 2/2
Así que pusiste MongoDB. Dime ¿cómo lo administras?

Ejemplo de db.printReplicationInfo()
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Cosas para no olvidar sobre los RS
–

Sirven para hacer rolling updates (S-S-P)

–

Se pueden tener nodos dedicados para hacer backups

–

Se pueden tener nodos que repliquen con un retardo

–

Cuidado con la latencia y el tamaño del oplog

–

Distribuir los nodos en distintos sitios físicos (sea un entorno
cloud o no)
Así que pusiste MongoDB. Dime ¿cómo lo administras?

Vamos a hacer sharding
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Sharding
–

Se usa para hacer scaling out

–

Se hace mediante rangos, según la llave seleccionada

–

La data se divide en chunks, los cuales se pueden migrar de un
shard a otro hasta que todos los shards esten balanceados

–

Se hace a nivel de colección
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Sharding
–

Existen 2 tipos de operaciones en background
●

●

Split: cambia el metadata de un chunk al dividirlo
(operación no costosa)
Migrate: para mantener el balance, copia el chunk a otro
shard, despues actualiza la metadata. Se hace sin downtime,
pero es una operación costosa
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Sharding
–

Los clientes se conectan a un proceso llamado mongos (es un
proxy que sabe en que shard está almacenada la información)

–

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
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Comenzar a a hacer sharding
–

Iniciar 3 mongod en máquinas distintas como config servers (no
olvidar el crear el dbpath)

–

Iniciar un mongos, indicandole las direcciones de los 3 config
servers

–

Conectarse al mongos y agregar un shard indicando el replica
set y al menos un miembro

–

Habilitar el sharding en la bd que contiene la colección que nos
interesa fragmentar
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Comenzar a a hacer sharding
–

Crear un indice en la colección, la que usaremos como shard key

–

Activar el sharding en la colección indicando el indice a usar
como shard key

–

Si queremos agregar más replica sets, repetimos el punto de
agregar shards
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Hacer backups con sharding
–

Detener el balanceador, sino puede que al hacer un respaldo,
haya información que se este migrando de shard y que se pierda
o se duplique

–

Hacer backup de los servidores de config apagando uno y
haciendo mongodump, para evitar cambios en la metadata

–

Hacer el backup de cada shard

–

Activar de nuevo los 3 config servers

–

Iniciar el balanceador
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Comandos usados al hacer sharding
–

sh.addShard()

–

sh.status()

–

sh.enableSharding()

–

sh.shardCollection()

–

sh.stopBalancer()

–

sh.startBalancer()
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Comandos usados al hacer sharding
–

sh.getBalancerState(): Ver si el balancer está activo

–

sh.isBalancerRunning(): Ver si hay migraciones en proceso
Así que pusiste MongoDB. Dime ¿cómo 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 hash

–

Después de escoger un shard key no se puede cambiar
Así que pusiste MongoDB. Dime ¿cómo 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 set

–

Si vas a hacer un bulk load considera hacer pre splitting, así
ahorras las actualizacione de metadata que hacen los config
servers
Así que pusiste MongoDB. Dime ¿cómo lo administras?

Ejemplo de una arquitectura lógica para hacer sharding
Así que pusiste MongoDB. Dime ¿cómo lo administras?

Ejemplo de lo que puede pasar si no detienes la migración de
chunks
Así que pusiste MongoDB. Dime ¿cómo lo administras?

Ejemplo del comando sh.status() 1/2
Así que pusiste MongoDB. Dime ¿cómo lo administras?

Ejemplo del comando sh.status() 2/2
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Indices
–

Por ahora solo hay del tipo b-tree

–

Pueden ser simples o compuestos

–

En los indices compuestos importa el orden de los campos con
los que se creo el indice

–

Si no se crean en background (ensureIndex) son bloqueantes

–

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

●

Indices
–

Se pueden usar sobre arrays o documentos anidados

–

Soportan el modo sparse, es bueno usar este tipo cuando se
hacen indices sobre campos que no están en un porcentaje alto
de documentos ~ 95%

–

También hay indices geoespaciales

–

Mejoran las lecturas pero las escrituras se hacen más lentas
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Indices
–

Más indices implica hacer más escrituras

–

Si el documento tiene que ser relocalizado dentro del fichero
tambien hay que actualizar el indice

–

Es más rápido construir un indice despues de un import que
tenerlo creado antes hacer un bulk import

–

Cada cierto número de consultas la BD prueba varios planes
para saber cual es el mejor plan a seguir al hacer la consulta
Así que pusiste MongoDB. Dime ¿cómo 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
Así que pusiste MongoDB. Dime ¿cómo lo administras?

Ejemplo de consulta sin indice
Así que pusiste MongoDB. Dime ¿cómo lo administras?

Ejemplo de consulta con indice
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Monitoring y otros tips
–

Existen comandos como el mongostat que nos sirven para ver
cosas como los fallos de página, el % de bloqueo de las bbdd, el
tamaño del conjunto residente y todas esas cosas que aprendiste
en sistemas operativos ^_^

–

Mongodb (la compañia) ofrece un servicio de monitoring en
cloud (MMS), por si te sientes cansado o no tienes tiempo
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Monitoring y otros tips
–

RAM, más es mejor

–

Tener CPUs rápidas

–

Discos rápidos

–

Tener la data y el journal en spindles distintos

–

Usar RAID 1+0

–

Desactivar NUMA o hacer malabarismos con cgroups

–

Usar tamaños de readahead pequeños por la entrada y salida
aleatoria
Así que pusiste MongoDB. Dime ¿cómo lo administras?
Así que pusiste MongoDB. Dime ¿cómo lo administras?

●

Referencias / tarea
–

http://docs.mongodb.org/manual/administration/

–

http://media.amazonwebservices.com/AWS_NoSQL_MongoDB.pdf

–

https://education.mongodb.com/

–

http://docs.mongodb.org/manual/administration/production-notes/

–

Para ver pruebas de stress sobre BD distribuidas
http://aphyr.com/tags/jepsen

–

No olviden visitar http://madrid.devops.es/

Weitere ähnliche Inhalte

Was ist angesagt? (20)

MongoDB: la BBDD NoSQL más popular del mercado
MongoDB: la BBDD NoSQL más popular del mercadoMongoDB: la BBDD NoSQL más popular del mercado
MongoDB: la BBDD NoSQL más popular del mercado
 
LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)
 
Alta Disponibilidad con PostgreSQL
Alta Disponibilidad con PostgreSQLAlta Disponibilidad con PostgreSQL
Alta Disponibilidad con PostgreSQL
 
Características MONGO DB
Características MONGO DBCaracterísticas MONGO DB
Características MONGO DB
 
MongoDB - Madrid Devops Febrero
MongoDB - Madrid Devops FebreroMongoDB - Madrid Devops Febrero
MongoDB - Madrid Devops Febrero
 
Redis: servidor de estructuras de datos
Redis: servidor de estructuras de datosRedis: servidor de estructuras de datos
Redis: servidor de estructuras de datos
 
Taller Redis
Taller RedisTaller Redis
Taller Redis
 
Postgresql Como Funciona Una Dbms Por Dentro
Postgresql Como Funciona Una Dbms Por DentroPostgresql Como Funciona Una Dbms Por Dentro
Postgresql Como Funciona Una Dbms Por Dentro
 
Couch db
Couch dbCouch db
Couch db
 
Las cronicas de redis
Las cronicas de redisLas cronicas de redis
Las cronicas de redis
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2Dba PostgreSQL desde básico a avanzado parte2
Dba PostgreSQL desde básico a avanzado parte2
 
Practica 2 FTP
Practica 2 FTPPractica 2 FTP
Practica 2 FTP
 
Tabla y Manual de instalación de PostgreSQL 9.5
Tabla y Manual de instalación de PostgreSQL 9.5Tabla y Manual de instalación de PostgreSQL 9.5
Tabla y Manual de instalación de PostgreSQL 9.5
 
Cluster MySQL en Windows
Cluster MySQL en WindowsCluster MySQL en Windows
Cluster MySQL en Windows
 
Mysql cluster
Mysql clusterMysql cluster
Mysql cluster
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
Fundamentos de Administración PostgreSQL
Fundamentos de Administración PostgreSQLFundamentos de Administración PostgreSQL
Fundamentos de Administración PostgreSQL
 
Documentacion postgresql
Documentacion postgresqlDocumentacion postgresql
Documentacion postgresql
 
Postgresql expo
Postgresql expoPostgresql expo
Postgresql expo
 

Ähnlich wie Así que pusiste MongoDB. Dime ¿cómo lo administras?

Ähnlich wie Así que pusiste MongoDB. Dime ¿cómo lo administras? (20)

Maual de instalacion mongodb
Maual de instalacion mongodbMaual de instalacion mongodb
Maual de instalacion mongodb
 
Mongodb
MongodbMongodb
Mongodb
 
Instalacion mongo db_2.4.9
Instalacion mongo db_2.4.9Instalacion mongo db_2.4.9
Instalacion mongo db_2.4.9
 
¿que es mongodb?
¿que es mongodb?¿que es mongodb?
¿que es mongodb?
 
Hadoop en accion
Hadoop en accionHadoop en accion
Hadoop en accion
 
Hadoop en accion
Hadoop en accionHadoop en accion
Hadoop en accion
 
Mongo db
Mongo dbMongo db
Mongo db
 
Mongo db
Mongo dbMongo db
Mongo db
 
MongoDB
MongoDBMongoDB
MongoDB
 
Resilient Distributed Dataset - Analisis paper
Resilient  Distributed Dataset - Analisis paper Resilient  Distributed Dataset - Analisis paper
Resilient Distributed Dataset - Analisis paper
 
Spark
SparkSpark
Spark
 
Alta disponibilidad con MySQL
Alta disponibilidad con MySQLAlta disponibilidad con MySQL
Alta disponibilidad con MySQL
 
mongoDB - Arquitectura y Componentes
mongoDB - Arquitectura y ComponentesmongoDB - Arquitectura y Componentes
mongoDB - Arquitectura y Componentes
 
Cómo volarle la peluca a tus usuarios con la velocidad de tu sitio?
Cómo volarle la peluca a tus usuarios con la velocidad de tu sitio?Cómo volarle la peluca a tus usuarios con la velocidad de tu sitio?
Cómo volarle la peluca a tus usuarios con la velocidad de tu sitio?
 
Instalacion nosql "mongodb"
Instalacion nosql "mongodb"Instalacion nosql "mongodb"
Instalacion nosql "mongodb"
 
Intro cassandra
Intro cassandraIntro cassandra
Intro cassandra
 
MongoDB
MongoDBMongoDB
MongoDB
 
MongoDB Atlas: La mejor forma de utilizar MongoDB en la nube 1
MongoDB Atlas: La mejor forma de utilizar  MongoDB en la nube 1MongoDB Atlas: La mejor forma de utilizar  MongoDB en la nube 1
MongoDB Atlas: La mejor forma de utilizar MongoDB en la nube 1
 
Introduccón a Mongodb
Introduccón a MongodbIntroduccón a Mongodb
Introduccón a Mongodb
 
MongoDB
MongoDBMongoDB
MongoDB
 

Mehr von Alejandro E Brito Monedero (14)

Mad scalability (perfomance debugging)
Mad scalability (perfomance debugging)Mad scalability (perfomance debugging)
Mad scalability (perfomance debugging)
 
Tres historias
Tres historiasTres historias
Tres historias
 
AMQP vs GRAPHITE
AMQP vs GRAPHITEAMQP vs GRAPHITE
AMQP vs GRAPHITE
 
Sysdig
SysdigSysdig
Sysdig
 
Sysdig SRECon 16 Europe
Sysdig SRECon 16 EuropeSysdig SRECon 16 Europe
Sysdig SRECon 16 Europe
 
Funcional para trollear
Funcional para trollearFuncional para trollear
Funcional para trollear
 
Top Bug
Top BugTop Bug
Top Bug
 
Fabric más allá de lo básico
Fabric más allá de lo básicoFabric más allá de lo básico
Fabric más allá de lo básico
 
Experiencias con PostgreSQL en AWS
Experiencias con PostgreSQL en AWSExperiencias con PostgreSQL en AWS
Experiencias con PostgreSQL en AWS
 
Fabric Fast & Furious edition
Fabric Fast & Furious editionFabric Fast & Furious edition
Fabric Fast & Furious edition
 
AWS Baby steps circa 2008
AWS Baby steps circa 2008AWS Baby steps circa 2008
AWS Baby steps circa 2008
 
Using Logstash, elasticsearch & kibana
Using Logstash, elasticsearch & kibanaUsing Logstash, elasticsearch & kibana
Using Logstash, elasticsearch & kibana
 
Wireshark tips
Wireshark tipsWireshark tips
Wireshark tips
 
Mi experiencia con Amazon AWS EC2 y S3
Mi experiencia con Amazon AWS EC2 y S3Mi experiencia con Amazon AWS EC2 y S3
Mi experiencia con Amazon AWS EC2 y S3
 

Kürzlich hochgeladen

CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 

Kürzlich hochgeladen (13)

CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 

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

  • 1. DevOps / Cloud /Scalability Así que pusiste MongoDB. Dime ¿cómo lo administras? Alejandro E Brito Monedero @ae_bm
  • 2. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● ¿Quien soy? – Trabajo como administrador de sistemas y más – Estudié Ciencias de la Computacion – Participo en el grupo de Madrid DevOps – Aspirante a CTO (Chief Trolling Officer)
  • 3. Así que pusiste MongoDB. Dime ¿cómo lo administras?
  • 4. Así que pusiste MongoDB. Dime ¿cómo 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 / corosync ● Te gusta manipular JSON ● Estas leyendo hacker news
  • 5. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Conoce a MongoDB – BD NoSQL – Orientado a documentos – No joins ni transacciones completas – Es “facil” poner en alta disponibilidad y hacer sharding – Empresa valorada en 1.2 Billones de $ (sorry RAE)
  • 6. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Algunos detalles en MongoDB – Orientado a documentos seerializados en formato BSON (Binary JSON) – Los drivers se comunican con la BD usando BSON – La manipulación sobre los documentos es atómica – Se pueden hacer reemplazos o updates parciales en los documentos – Los ficheros de la BD se manipulan con MMAP
  • 7. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Por si voy muy rápido – El tamaño máximo de un documento (hardcoded) son 16 MiB / sino hay que usar GridFS – Se pueden hacer reemplazos o updates parciales en los documentos – Cuidado con el aumentar en exceso el tamaño de un documento, puedes forzar una relocalizacion (vease record size)
  • 8. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Por si voy muy rápido – Los ficheros de la BD se manipulan con MMAP – _id identificador único del documento (único por colección) – Las capped collections ya estan ordenadas por orden de insercion – Locks 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 ¿cómo lo administras? Mejor verlo graficamente
  • 10. Así que pusiste MongoDB. Dime ¿cómo lo administras? Vista lógica de un proceso mongod
  • 11. Así que pusiste MongoDB. Dime ¿cómo lo administras? Vista lógica como se almacenan los documentos
  • 12. Así que pusiste MongoDB. Dime ¿cómo lo administras? Comienzos mongodb@db01:~$ mongod ­­dbpath /data/db ­­journal
  • 13. Así que pusiste MongoDB. Dime ¿cómo lo administras?
  • 14. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Backups – mongodump / mongorestore ● ● Carga un poco al sistema ● – Fácil Altera el page cache Usando snapshots ● Es necesario tener el journal activo ● Rápido ● Tienen que ser consistentes (SO y FS adecuados)
  • 15. Así que pusiste MongoDB. Dime ¿cómo 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 ¿cómo 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 ¿cómo 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 ¿cómo lo administras? Un mensaje de nuestros sponsors No tienes backups hasta que has probado que se hacen correctamente
  • 19. Así que pusiste MongoDB. Dime ¿cómo lo administras? Ahora la solución para el insomnio
  • 20. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Replicación – Llamados Replica Sets – Asincrona – Un solo nodo actua como primario (el único que procesa escrituras) – Basada en statatements (change) – Auto failover – Auto node recovery
  • 21. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Replicación – El nodo primario es elegido por mayoria – El nodo con la data más actual es el favorito – Si 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 ¿cómo lo administras? ● Replicación – Existen unos nodos llamados arbitrer, estos no tienen data pero votan en la elección del primario – Siempre debe haber un número impar de votos para evitar un caso de split-brain – Se pueden tener nodos secundarios con sincronizacion retardada (util para cuando un error humano se replica XD)
  • 23. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Replicación – El cliente puede escoger el nivel de garantia que necesitamos al escribir datos ● Ninguno ● Escrito en 1 nodo ● Escrito en N nodos ● Escrito en la mayoria de los nodos ● Escrito en los nodos con el tag indicado
  • 24. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Replicación – 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 consumido – Se pueden tener nodos hidden (prácticos para hacer backups) – Máximo 12 nodos, de los cuales máximo 7 pueden tener voto
  • 25. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Opciones para configura la replicación (RS) – Priority: Indicamos nuestra preferencia por un primario – Hidden: Nodo oculto (no es visto ni consultado por los clientes) – Arbitrer – SlaveDelay: Indicar el retardo que tiene la replica – Tags: Para tener datacenter o rack awareness – Vote
  • 26. Así que pusiste MongoDB. Dime ¿cómo lo administras? Mejor verlo con diagramas
  • 27. Así que pusiste MongoDB. Dime ¿cómo lo administras? Funcionamiento lógico del HA
  • 28. Así que pusiste MongoDB. Dime ¿cómo lo administras? Ejemplo del uso de las prioridades
  • 29. Así que pusiste MongoDB. Dime ¿cómo 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 más Iniciar 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 ¿cómo lo administras? ● Para quitar el dolor de cabeza de no tener la BD replicada – Crear una configuración con el nombre con el nombre con el que los clientes y otros miembros se conectaran al nodo – Iniciar el replica set – Ya tenemos mayoria, se elige un primario y se pueden aceptar lecturas y escrituras – Sacar 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 ¿cómo lo administras? ● Para quitar el dolor de cabeza de no tener la BD replicada – Crear la máquina nueva con los datos del snapshot más reciente – Iniciar mongod indicando el replica set – Conectarse al nodo primario y agregar el nodo – Esperar a que se sincronice (esperemos que no sea un full sync) – Irse de vacaciones
  • 32. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Comandos para manipular los replica set – rs.initiate(cfg): Iniciar el RS, donde cfg es un documento JSON con la configuración – rs.add("dbXX"): Agrega un nodo al RS – rs.config(): Muestra la configuración actual – rs.status(): Ver estado del RS – rs.isMaster() – db.printReplicationInfo(): Ver info sobre la replicación y el oplog
  • 33. Así que pusiste MongoDB. Dime ¿cómo lo administras? Ejemplo de configuración de un RS
  • 34. Así que pusiste MongoDB. Dime ¿cómo lo administras? Ejemplo de rs.status() 1/2
  • 35. Así que pusiste MongoDB. Dime ¿cómo lo administras? Ejemplo de rs.status() 2/2
  • 36. Así que pusiste MongoDB. Dime ¿cómo lo administras? Ejemplo de db.printReplicationInfo()
  • 37. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Cosas para no olvidar sobre los RS – Sirven para hacer rolling updates (S-S-P) – Se pueden tener nodos dedicados para hacer backups – Se pueden tener nodos que repliquen con un retardo – Cuidado con la latencia y el tamaño del oplog – Distribuir los nodos en distintos sitios físicos (sea un entorno cloud o no)
  • 38. Así que pusiste MongoDB. Dime ¿cómo lo administras? Vamos a hacer sharding
  • 39. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Sharding – Se usa para hacer scaling out – Se hace mediante rangos, según la llave seleccionada – La data se divide en chunks, los cuales se pueden migrar de un shard a otro hasta que todos los shards esten balanceados – Se hace a nivel de colección
  • 40. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Sharding – Existen 2 tipos de operaciones en background ● ● Split: cambia el metadata de un chunk al dividirlo (operación no costosa) Migrate: para mantener el balance, copia el chunk a otro shard, despues actualiza la metadata. Se hace sin downtime, pero es una operación costosa
  • 41. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Sharding – Los clientes se conectan a un proceso llamado mongos (es un proxy que sabe en que shard está almacenada la información) – 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 ¿cómo lo administras? ● Comenzar a a hacer sharding – Iniciar 3 mongod en máquinas distintas como config servers (no olvidar el crear el dbpath) – Iniciar un mongos, indicandole las direcciones de los 3 config servers – Conectarse al mongos y agregar un shard indicando el replica set y al menos un miembro – Habilitar el sharding en la bd que contiene la colección que nos interesa fragmentar
  • 43. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Comenzar a a hacer sharding – Crear un indice en la colección, la que usaremos como shard key – Activar el sharding en la colección indicando el indice a usar como shard key – Si queremos agregar más replica sets, repetimos el punto de agregar shards
  • 44. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Hacer backups con sharding – Detener el balanceador, sino puede que al hacer un respaldo, haya información que se este migrando de shard y que se pierda o se duplique – Hacer backup de los servidores de config apagando uno y haciendo mongodump, para evitar cambios en la metadata – Hacer el backup de cada shard – Activar de nuevo los 3 config servers – Iniciar el balanceador
  • 45. Así que pusiste MongoDB. Dime ¿cómo 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 ¿cómo lo administras? ● Comandos usados al hacer sharding – sh.getBalancerState(): Ver si el balancer está activo – sh.isBalancerRunning(): Ver si hay migraciones en proceso
  • 47. Así que pusiste MongoDB. Dime ¿cómo 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 hash – Después de escoger un shard key no se puede cambiar
  • 48. Así que pusiste MongoDB. Dime ¿cómo 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 set – Si 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 ¿cómo lo administras? Ejemplo de una arquitectura lógica para hacer sharding
  • 50. Así que pusiste MongoDB. Dime ¿cómo lo administras? Ejemplo de lo que puede pasar si no detienes la migración de chunks
  • 51. Así que pusiste MongoDB. Dime ¿cómo lo administras? Ejemplo del comando sh.status() 1/2
  • 52. Así que pusiste MongoDB. Dime ¿cómo lo administras? Ejemplo del comando sh.status() 2/2
  • 53. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Indices – Por ahora solo hay del tipo b-tree – Pueden ser simples o compuestos – En los indices compuestos importa el orden de los campos con los que se creo el indice – Si no se crean en background (ensureIndex) son bloqueantes – Permiten duplicados
  • 54. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Indices – Se pueden usar sobre arrays o documentos anidados – Soportan el modo sparse, es bueno usar este tipo cuando se hacen indices sobre campos que no están en un porcentaje alto de documentos ~ 95% – También hay indices geoespaciales – Mejoran las lecturas pero las escrituras se hacen más lentas
  • 55. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Indices – Más indices implica hacer más escrituras – Si el documento tiene que ser relocalizado dentro del fichero tambien hay que actualizar el indice – Es más rápido construir un indice despues de un import que tenerlo creado antes hacer un bulk import – Cada cierto número 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 ¿cómo 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 ¿cómo lo administras? Ejemplo de consulta sin indice
  • 58. Así que pusiste MongoDB. Dime ¿cómo lo administras? Ejemplo de consulta con indice
  • 59. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Monitoring y otros tips – Existen comandos como el mongostat que nos sirven para ver cosas como los fallos de página, el % de bloqueo de las bbdd, el tamaño del conjunto residente y todas esas cosas que aprendiste en sistemas operativos ^_^ – Mongodb (la compañia) ofrece un servicio de monitoring en cloud (MMS), por si te sientes cansado o no tienes tiempo
  • 60. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Monitoring y otros tips – RAM, más es mejor – Tener CPUs rápidas – Discos rápidos – Tener la data y el journal en spindles distintos – Usar RAID 1+0 – Desactivar NUMA o hacer malabarismos con cgroups – Usar tamaños de readahead pequeños por la entrada y salida aleatoria
  • 61. Así que pusiste MongoDB. Dime ¿cómo lo administras?
  • 62. Así que pusiste MongoDB. Dime ¿cómo lo administras? ● Referencias / tarea – http://docs.mongodb.org/manual/administration/ – http://media.amazonwebservices.com/AWS_NoSQL_MongoDB.pdf – https://education.mongodb.com/ – http://docs.mongodb.org/manual/administration/production-notes/ – Para ver pruebas de stress sobre BD distribuidas http://aphyr.com/tags/jepsen – No olviden visitar http://madrid.devops.es/