SlideShare una empresa de Scribd logo
1 de 98
MongoDB
Instalación y administración
Juan Esteban Ladetto
jladetto@gmail.com
Instalación en diferentes ambientes
• Cómo todo proyecto Open Source (versiones pares son las estables)
• 2.4, 2.6 (2.5 es desarrollo de los features que tendrá la versión 2.6)
• En producción solamente las versiones pares y la última subversión
(2.6.7)
• Mongodb se puede descargar tanto binarios como código fuente y
compilar
• 32 bits o 64 bits y para cualquier plataforma
Instalación en windows
• www.mongodb.org/downloads
• Necesario dbpath (default: datadb)
• Puerto por defecto: 27017
• Instalar como servicio:
• "C:mongodbbinmongod.exe" --config "C:mongodbmongod.cfg" --install
• Eliminar como servicio
• mongod.exe --remove
Instalación en Linux (ubuntu)
- sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
- echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee
/etc/apt/sources.list.d/mongodb.list
- sudo apt-get update
- sudo apt-get install -y mongodb-org
mongodb-org
This package is a metapackage that will automatically install the
four component packages listed below.
mongodb-org-server
This package contains the mongod daemon and associated
configuration and init scripts.
mongodb-org-mongos
This package contains the mongos daemon.
mongodb-org-shell
This package contains the mongo shell.
mongodb-org-tools
This package contains the following MongoDB tools: mongoimport
bsondump, mongodump, mongoexport, mongofiles, mongooplog,
mongoperf, mongorestore, mongostat, and mongotop.
Parámetros de configuración
• http://docs.mongodb.org/manual/reference/configuration-options/
Comandos básicos del Shell de mongodb
• help Muestra ayuda
• db.help() Muestra ayuda para db
• db.<collection>.help() muestra ayuda para cualquier colección
• show dbs Muetra las dbs
• use <db> Cambia la db que se usa
• show collections Lista todas las colecciones de una db
• show users Muestra los usuarios de una db
• show roles Muestra los roles de la db
• show profile Muestra los queries que demoraron más de 1 milisegundo
• show databases = show dbs
Comandos básicos del Shell de mongodb
• db.cloneDatabase(<host>) Clona la db actual al host especificado,
el host no puede tener seguridad.
• db.copyDatabase(<from>, <to>, <host>) Copia la db <from> desde
el <host a la db que se especifique.
• db.fromColl.renameCollection(<toColl>) Renombra la co.
• db.repairDatabase() Repara y compacta la db. Es lento y bloquea la
db
• db.createUser( <user>, <pwd> ) Agrega un usuario a la db actual
• db.getCollectionNames() Lista las colecciones de la db actual.
• db.dropDatabase() borra la db actual.
Creación y administración de usuarios
• Por defecto no autorización ni autenticación
• 2 formas de habilitarlo
• Antes de iniciar servicio con auth
• Iniciar servicio con auth y aprovechar el localhost exception (no recomendado
para armar replicasets/sharing)
Authorization
• Si el servicio corre standalone habilitando el flag auth
• Si el servicio corre como parte de un replication set o un shard es
necesario un keyfile (compartido) como mínimo
• MongoDB soporta 2 mecanismos en su versión no paga: password base
(keyfile) y certificados x.509
openssl rand -base64 741 > mongodb-keyfile
chmod 600 mongodb-keyfile
Authentication
• Un usuario pertenece a una db y sobre estas puede tener todos los
roles que quiera
• Existen 2 bases de datos especiales en mongodb (admin y local) y los
usuarios de esas bases de datos pueden realizar operaciones en otras
bases de datos siempre y cuando se les den acceso
use admin
db.createUser(
{
user: “root",
pwd: "password",
roles: [ { role: "userAdminAnyDatabase", db:
"admin" } ]
}
)
use admin
db.createUser(
{
user: “god",
pwd: "password",
roles: [ “root”]
}
)
db.runCommand({rolesInfo: “god", showPrivileges: true});
db.runCommand({rolesInfo: { role: "dbAdmin", db: "blog" } , showPrivileges: true});
Roles
• A nivel de datos de bases de datos:
• read
• readWrite
• A nivel de administración de bases de datos:
• dbAdmin
• dbOwner
• userAdmin
• Lista completa de roles predefinidos:
http://docs.mongodb.org/manual/reference/built-in-roles/#built-in-roles
• Lista completa de las funciones que se pueden hacer con roles:
http://docs.mongodb.org/manual/reference/command/#role-management-
commands
db.createUser(
{
user: "accountUser",
pwd: "password",
roles: [ "readWrite", "dbAdmin" ]
}
)
db.runCommand({connectionStatus:1});
db.updateUser(“usuario”, doc)
Comandos útiles para creación y
manipulación de usuarios
db.createUser({
user: "siteUserAdmin",
pwd: "password",
roles: [ { role: "userAdminAnyDatabase", db: "admin"
} ] })
db.createUser({
user: "superuser",
pwd: "12345678",
roles: [ "root" ]})
db.updateUser("user123",{
pwd: "KNlZmiaNUp0B",
customData: { title: "Senior Manager" }})
db.changeUserPassword("reporting",
"SOh3TbYhxuLiW8ypJPxmt1oOfL")
db.getUser(“”)
db.getRole( "readWrite", { showPrivileges: true } )
db.grantRolesToUser(
"reportsUser",
[{ role: "readWrite", db: "products" } ,
{ role: "readAnyDatabase", db:"admin" }])
db.revokeRolesFromUser(
"reportsUser",
[{ role: "readWrite", db: "accounts" }]
)
db.createRole({
role: "manageOpRole",
privileges: [{ resource: { cluster: true }, actions: [ "killop",
"inprog" ] },
{ resource: { db: "", collection: "" }, actions: [
"killCursors" ] }],
roles: []})
Conceptos a conocer de mongodb
Memory Mapped Files
• Todos los archivos de datos son memory mapped a la memoria virtual
del OS
• MongoDB lee y escribe en RAM y el filesystem hace el resto
• Virtual Process size: suma de los tamaños de los arhivos + overhead
(heap, conexiones)
• Si el journal está activo el tamaño de la memoria virtual será casi el
doble
Conceptos a conocer de mongodb
Journal
• Los cambios en los archivos mapeados en memoria no se aplican en
orden y diferentes partes de un archivo pueden ser de diferentes
momentos
• Si algo sucedió y mongodb se cierra inesperadamente queremos
volver a tener un estado consistente.
Conceptos a conocer de mongodb
Archivos
drwxr-xr-x 136 Nov 19 10:12 journal
-rw------- 16777216 Oct 25 14:58 test.0
-rw------- 134217728 Oct 25 14:58 test.1
-rw------- 268435456 Oct 25 14:58 test.2
-rw------- 536870912 Oct 25 14:58 test.3
-rw------- 1073741824 Oct 25 14:58 test.4
-rw------- 2146435072 Oct 25 14:58 test.5
-rw------- 16777216 Oct 25 14:58 test.ns
Conceptos a conocer de mongodb
Archivos
drwxr-xr-x 136 Nov 19 10:12 journal
-rw------- 16777216 Oct 25 14:58 test.0
-rw------- 134217728 Oct 25 14:58 test.1
-rw------- 268435456 Oct 25 14:58 test.2
-rw------- 536870912 Oct 25 14:58 test.3
-rw------- 1073741824 Oct 25 14:58 test.4
-rw------- 2146435072 Oct 25 14:58 test.5
-rw------- 16777216 Oct 25 14:58 test.ns
--directoryperdb
--smallfiles
–nopreallocate para muchas base de datos
Conceptos a conocer de mongodb
Indices
Conceptos a conocer de mongodb
Stats > db.Sessions.stats(){
"ns" : "SessionState.Sessions",
"count" : 2720,
"size" : 16509440,
"avgObjSize" : 6069,
"storageSize" : 58408960,
"numExtents" : 8,
"nindexes" : 2,
"lastExtentSize" : 20643840,
"paddingFactor" : 1,
"systemFlags" : 1,
"userFlags" : 1,
"totalIndexSize" : 351568,
"indexSizes" : {"_id_" : 212576,"Expires_1" : 138992},
"ok" : 1}
> db.stats(){
"db" : "SessionState",
"collections" : 4,
"objects" : 3504,
"avgObjSize" : 4996.649543378995,
"dataSize" : 17508260,
"storageSize" : 59473920,
"numExtents" : 11,
"indexes" : 2,
"indexSize" : 351568,
"fileSize" : 67108864,
"nsSizeMB" : 16,
"dataFileVersion" : {"major" : 4, "minor" : 5},
"extentFreeList" : {"num" : 0,"totalSize" : 0},
"ok" : 1}
Replica Sets
Replica Set – Initialize
Replica Set – Failure
Replica Set – Failover
Replica Set – Recovery
Replica Set – Recovered
> conf = {
_id : "mySet",
members : [
{_id : 0, host : “host:20717”, priority : 3},
{_id : 1, host : “host:27018", priority : 2},
{_id : 2, host : “host:27019”},
{_id : 4, host : "E", hidden : true, slaveDelay : 3600}
]
}
> rs.initiate(conf)
Configuration Options
> conf = {
_id : "mySet",
members : [“host:20717”,
“host:27018", “host:27019”],
{_id : 4, host : "E", hidden : true, slaveDelay
}
> rs.initiate(conf)
Desarrollando con replica sets
Alta consistencia de datos
Desarrollando con replica sets
Baja consistencia de datos
Write Concern
• Network acknowledgement
• Wait for error
• Wait for journal sync
• Wait for replication
Unacknowledged
MongoDB Acknowledged (wait for error)
Wait for Journal Sync
Wait for Replication
Tagging
• Controla desde donde y hacia donde leer y escribir
• Cada miembro puede tener uno o más tags
• tags: {dc: "ny"}
• tags: {dc: "ny", subnet: "192.168", rack: "row3rk7"}
• Replica Sets definen las reglas de write concern
• Las reglas pueden cambiar sin afectar el desarrollo ya realizado
Un ejemplo
• {
• _id : "mySet",
• members : [
• {_id : 0, host : "A", tags : {"dc": "ny"}},
• {_id : 1, host : "B", tags : {"dc": "ny"}},
• {_id : 2, host : "C", tags : {"dc": "sf"}},
• {_id : 3, host : "D", tags : {"dc": "sf"}},
• {_id : 4, host : "E", tags : {"dc": "cloud"}}],
• settings : {
• getLastErrorModes : {
• allDCs : {"dc" : 3},
• someDCs : {"dc" : 2}} }
• }
• > db.blogs.insert({...})
• > db.runCommand({getLastError : 1, w : "someDCs"})
Wait for Replication (Tagging)
Modos de lectura
• 5 modes
• primary (only) - Default
• primaryPreferred
• secondary
• secondaryPreferred
• Nearest
Cuando más de un nodo es posible de elegir el más cercano es el usado
Mantenimiento y upgrade
• No downtime
• Hacer mantenimiento/upgrade
– Empezar con los nodos secundarios
– Dejar para el final de primario
Replica Set – 1 Data Center
Single datacenter
Puntos de falla:
– Power
– Network
– Data center
– Que fallen 2 nodos
Replica Set – 2 Data Centers
Multi data center
Un nodo en otro DC
No es posible durabilidad
ya que si se cae el DC1
no podrá hacerse como
primary (falta al menos 1
member más)
Replica Set – 3 Data Centers
3 data centers
Cómo funciona internamente
• Heartbeat cada 2 segundos
• Times-out en 10 segundos
• Local DB (not replicated)
– system.replset
– oplog.rs
• Capped collection donde se almacenan las
operaciones realizadas en el nodo
Replica Set commands
• rs.initiate(config) -> inicializa la replicaset
• Config=> doc con members
• rs.status() -> status
• rs.isMaster() -> devuelve info de quien es master
• rs.config()
• rs.reconfig(config)
• rs.add( { "_id": 3, "host": "mongodbd3.example.net:27017", "priority": 0 } )
• rs.stepDown()
• rs.freeze() -> no elegirme como primario por x n segundos
• rs.remove()
• rs.slaveOk()
• db.isMaster()
• rs.syncFrom()
Sharding
Vertical Scalability (Scale Up)
Horizontal Scalability (Scale Out)
Particionado
• Los usuarios definen el shard key
• Los shard keys definen un rango de datos
• Los keys son como puntos en una línea
• El rango es un segment de esa línea
Distribución de la información
• Inicialmente 1 chunk (64mb)
• MongoDB automáticamente divide y migra los chunks when el
máximo es alcanzado
Balanceo y ruteo
• Las consultas rutean a los shards específicos
• MongoDB balancea el cluster
• MongoDB migra automáticamente a nuevos nodos
Architecture
• Juguemos con un sharding de prueba
mongo –nodb
cluster = new ShardingTest({"shards" : 3, "chunksize" : 1})
db = (new Mongo("localhost:30999")).getDB("test")
for (var i=0; i<100000; i++) {
db.users.insert({"username" : "user"+i, "created_at" : new Date()});
}
db.users.count()
sh.status()
sh.enableSharding("test")
db.users.ensureIndex({"username" : 1})
sh.shardCollection("test.users", {"username" : 1})
db.users.find({username: "user12345"}).explain()
db.users.find().explain()
cluster.stop()
Qué es un shard?
• Shard es un nodo del cluster
• Un shard puede ser un simple mongod o una replica set
Meta Data Storage
• Config servers
• Almacena cluster chunk ranges and locations
• O 1 o 3 (en producción tienen que ser 3)
• No son replica sets (almacenan lo mismo por separado)
Routing y balanceo
• Mongos
• Actúan como routers/balanceadores
• No tienen información local (persiste la info en los config servers)
• Puede ser como mínimo uno o más (pueden correr en los mismos
server que los config servers)
infrastructura Sharding
Iniciar un servidor de configuración
• mongod –configsvr default port (27019)
mongos Router
• mongos --configdb <hostname>:27019
• Para 3 servidores de configuración
mongos --configdb <host1>:<port1>,<host2>:<port2>,<host3>:<port3>
• Siempre se puede agregar un nuevo mongos por más que el cluster esté andando
Arrancar un shard
• mongod --shardsvr
• Arranca un mongod con el
Puerto por defecto (27018)
• Shard no es parte del
cluster
• Shard puede haber corrido
en producción
Agregar el Shard
• On mongos:
• sh.addShard(‘<host>:27018’)
• Adding a replica set:
• sh.addShard(‘<host>:<port>’) de un
nodo del replica set
Verificar que un shard se haya agregado
db.runCommand({ listshards:1 })
Habilitar Sharding
sh.enableSharding(“<dbname>”)
sh.shardCollection(“<dbname>.people”,{“country”:1})
sh.shardCollection(“<dbname>.cars”,{“year”:1, ”uniqueid”:1}) -> key
compuesto para evitar duplicados
Chunk es una sección de un rango más
grande
Separando Chunks
• Un chunk es dividido solamente cuando exceed su máximo tamaño
• Si los shard key tienen el mismo valor no se pueden dividir
• La division de un Chunk es una operación lógica (no hay movimiento
de información)
Balanceo
• Mongos corren los balanceos
• Cuando la diferencias de chunks entre los shards más densos y los
menos densos llega al punto máximo comienza la migración
Ronda de balanceo
• Un mongos toma el Balancer lock
• Status
use config
db.locks.find(
{ _id: “balancer” })
Mover chunks
• Mongos envía un moveChunk al shard de origen
• El shard de origen notifica al shard de destino
• El shard de destino toma el documento desde el origen
Listo, documento en Nuevo shard
• El shard de destino actualiza el servidor de configuración
Ruteo de consultas: Consultas puntuales
Ruteo de consultas: Consultas puntuales
recibimos pedido
Ruteo de consultas: Consultas puntuales
Sabemos donde está la info
Ruteo de consultas: Consultas puntuales
el shard devuelve lo solicitado
Mongos devuelve la info al cliente
Ruteo de queries más complejas (mapping)
Consulta compleja recibida
Enviamos el pedido a todos los shards
Devuelven la info que solicitamos
Mongos devuelve al cliente
Mismo caso con sort
Shard Key
• Shard key es immutable
• Los valores de los Shard key son immutables
• Tienen que estar indexados
• Shard key limitado a 512 bytes
• Shard key usado como route query
• Elegir un campo comunmente usado en consultas
Consideraciones
• Cardinalidad
• Distribución de escritura
• Query Isolation
• Disponibilidad
• Localidad de los índices
Optimizar el ruteo
Minimizar tráfico innecesario
Permitir el mejor escalamiento
Métodos de Backup
• 3 posibilidades:
• LVM snapshots
• mongodump -> mongorestore
• MMS backup service
Métodos de Backup
LVM snapshots
• Consiste en hacer un snapshot de todo el volumen donde está
montada la db
• La base de datos debe estar en un estado válido al momento del snapshot
• Si hay documentos que se están escribiendo puede quedar en un estado
inconsistente
• Si se usa journaling el journal tiene que residir en el mismo volumen
• No se puede capturar el backup incremental
Métodos de Backup
mongodump-mongorestore
• Para poder hacer un dump el usuario como mínimo rol de backup o
dbAdmin
• Algunos parámetros necesarios
• mongodump –u <usuario> -p <pwd> --authenticationDatabase <db> --host
<host><:port> -d <database> -c <collection> -o <path> --oplog --journal
• Para hacer restore el procedimiento es similar
• mongorestore –u <usuario> -p <pwd> --authenticationDatabase <db> --host
<host><:port> -d <database> -c <collection> -o <path> --oplogReplay –oplogLimit
<timestamp>
mongodump
• options:
• --help produce help message
• -v [ --verbose ] be more verbose (include multiple times for more verbosity e.g. -vvvvv)
• -h [ --host ] arg mongo host to connect to ( <set name>/s1,s2 for sets)
• --port arg server port. Can also use --host hostname:port
• --ipv6 enable IPv6 support (disabled by default)
• -u [ --username ] arg username
• -p [ --password ] arg password
• --dbpath arg directly access mongod database files in the given path, instead of connecting to a mongod server - needs to lock the data directory, so cannot be used if a
mongod is currently accessing the same path
• --directoryperdb if dbpath specified, each db is in a separate directory
• -d [ --db ] arg database to use
• -c [ --collection ] arg collection to use (some commands)
• -o [ --out ] arg (=dump) output directory or "-" for stdout
• -q [ --query ] arg json query
• --oplog Use oplog for point-in-time snapshotting
• --repair try to recover a crashed database
mongorestore
options:
--help produce help message
-v [ --verbose ] be more verbose (include multiple times for more verbosity e.g. -vvvvv)
-h [ --host ] arg mongo host to connect to ( <set name>/s1,s2 for sets)
--port arg server port. Can also use --host hostname:port
--ipv6 enable IPv6 support (disabled by default)
-u [ --username ] arg username
-p [ --password ] arg password
--dbpath arg directly access mongod database files in the given path, instead of connecting to a mongod server - needs to lock the data directory, so cannot be used if a
mongod is currently accessing the same path
--directoryperdb if dbpath specified, each db is in a separate directory
-d [ --db ] arg database to use
-c [ --collection ] arg collection to use (some commands)
--objcheck validate object before inserting
--filter arg filter to apply before inserting
--drop drop each collection before import
--oplogReplay replay oplog for point-in-time restore
Métodos de Backup
MMS backup service
• Servicio hosteado por la gente de 10gen (mongodb)
• Incremental backup
Métodos de Backup
Incremental backups
• https://github.com/EqualExperts/Tayra/
• https://github.com/reverb/wordnik-oss
• MMS 
Importando y exportando collecciones
mongoimport --host localhost --db myDB --collection myCollection --
type csv --file data.csv --headerline –upsert
mongoexport --host localhost --db myDB --collection myCollection --
csv –out data.csv
Algunas otras cosas
• Capped Collections
• db.createCollection( "log", { capped: true, size: 100000 , max:1000} )
• db.collection.isCapped()
• db.runCommand({"convertToCapped": "mycoll", size: 100000});
• Ttl collections
• db.log_events.ensureIndex( { "createdAt": 1 }, { expireAfterSeconds: 3600 } )
Notas para llegar a producción
• Redes
• Connection pooling
• db.runCommand({ connPoolStats: 1 } )
• Hardware
• SSD cuando sea posible
• CPU y suficiente RAM para manejar el volumen o carga
• Disco
• Obviar NFS cuando sea posible
• Separar journals/databases en diferentes volúmenes
• ReplicaSet o Sharding
• Definir el nivel de Write concern que se requiera
Seguridad
Exposición en redes y seguridad
- wire protocol
- bind_ip: intentar que la exposición sea únicamente hacia adentro
- port: si bien el 27017 es el default de mongo no viene mal cambiarlo
- desde que redes pueden llegar? Filtremos lo más posible
Seguridad
Checklist de seguridad
• Siempre con authorization y authentication
• Collection-level Access control
• db.createRole( {
role: "collectionInventario",
privileges: [ { resource: { db: "products", collection: "inventory" },
actions: [ "find", "update", "insert" ] },
{ resource: { db: "products", collection: "orders" },
actions: [ "find" ] } ] , roles: [] })
db.grantRolesToUser( "usuario", [ "collectionInventario" ] )
db.getUser(“usuario”)
• http://docs.mongodb.org/v2.6/MongoDB-security-guide.pdf
Monitoreo
Qué y con qué?
• Working sets
• db.stats()
• db.runCommand( { serverStatus: 1, workingSet: 1 } )
• Oplog replication lag
• rs.printSlaveReplicationInfo()
• IOPS
• Cantidad de conexiones
• db.runCommand ({connPoolStats: 1})
• Disponibilidad en el storage
• Memoria
• Uso de CPU (+70% empezamos a complicarnos, queries no optimizadas, etc)
• Capacidad de redes/Traffic IN/OUT
• Pages faults
• db.adminCommand({"serverStatus" : 1}).recordStats -> cantidad de veces que tuvimos que hace
swap de páginas
Monitoreo
Qué y con qué?
• iostat
• vmstat
• mongotop
• mongostat
• mongoperf echo “{nTheards:12, fileSizeMB:1024, r:true}” | mongoperf
• Mirar las slow queries (
• db.setProfilingLevel(1, 100)
• db.system.profile.find().limit(10).sort( { ts : -1 } ).pretty()
• Mucho mejor con - http://mongolab.org/dex/
Monitoreo
Herramientas de monitoreo
Integrando con otras herramientas
Tool Plugin Description
Ganglia mongodb-ganglia
Python script to report operations
per second, memory usage, btree
statistics, master/slave status and
current connections.
Ganglia gmond_python_modules
Parses output from the serverStatus
and replSetGetStatus commands.
Motop None
Realtime monitoring tool for
MongoDB servers. Shows current
operations ordered by durations
every second.
mtop None A top like tool.
Munin mongo-munin Retrieves server statistics.
Munin mongomon
Retrieves collection statistics (sizes,
index sizes, and each (configured)
collection count for one DB).
Munin munin-plugins Ubuntu PPA
Some additional munin plugins not in
the main distribution.
Nagios nagios-plugin-mongodb
A simple Nagios check script, written
in Python.
Zabbix mikoomi-mongodb
Monitors availability, resource
utilization, health, performance and
other important metrics.
http://docs.mongodb.org/manual/administration/monitoring/#self-hosted-monitoring-tools
Operando mongodb
• db.currentOp() – o filtrar por cualquier parte del documento
• db.killOp()
• db.system.profile.find().pretty()
Complementos
• Herramientas varias para trabajar con mongodb
• Rockmongo
• MMS overview
Disaster recovery
• Procedimientos y prácticas
Consideraciones finales
• Procedimientos y prácticas
Preguntas?
Gracias
Juan Esteban Ladetto
jladetto@gmail.com

Más contenido relacionado

La actualidad más candente

My sql failover test using orchestrator
My sql failover test  using orchestratorMy sql failover test  using orchestrator
My sql failover test using orchestratorYoungHeon (Roy) Kim
 
Your tuning arsenal: AWR, ADDM, ASH, Metrics and Advisors
Your tuning arsenal: AWR, ADDM, ASH, Metrics and AdvisorsYour tuning arsenal: AWR, ADDM, ASH, Metrics and Advisors
Your tuning arsenal: AWR, ADDM, ASH, Metrics and AdvisorsJohn Kanagaraj
 
Introduction to MongoDB.pptx
Introduction to MongoDB.pptxIntroduction to MongoDB.pptx
Introduction to MongoDB.pptxSurya937648
 
MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)
MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)
MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)Jean-François Gagné
 
OpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQLOpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQLOpen Gurukul
 
MySQL Performance for DevOps
MySQL Performance for DevOpsMySQL Performance for DevOps
MySQL Performance for DevOpsSveta Smirnova
 
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오PgDay.Seoul
 
MySQL Timeout Variables Explained
MySQL Timeout Variables Explained MySQL Timeout Variables Explained
MySQL Timeout Variables Explained Mydbops
 
pg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLpg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLCommand Prompt., Inc
 
Pengenalan Git
Pengenalan GitPengenalan Git
Pengenalan Gitfajran
 
PostgreSQL: Joining 1 million tables
PostgreSQL: Joining 1 million tablesPostgreSQL: Joining 1 million tables
PostgreSQL: Joining 1 million tablesHans-Jürgen Schönig
 
Patroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easyPatroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easyAlexander Kukushkin
 
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]David Lee
 
RMAN in 12c: The Next Generation (PPT)
RMAN in 12c: The Next Generation (PPT)RMAN in 12c: The Next Generation (PPT)
RMAN in 12c: The Next Generation (PPT)Gustavo Rene Antunez
 
PostgreSQL- An Introduction
PostgreSQL- An IntroductionPostgreSQL- An Introduction
PostgreSQL- An IntroductionSmita Prasad
 
Introduction to PostgreSQL
Introduction to PostgreSQLIntroduction to PostgreSQL
Introduction to PostgreSQLJoel Brewer
 
Looking ahead at PostgreSQL 15
Looking ahead at PostgreSQL 15Looking ahead at PostgreSQL 15
Looking ahead at PostgreSQL 15Jonathan Katz
 
PostgreSQL Database Slides
PostgreSQL Database SlidesPostgreSQL Database Slides
PostgreSQL Database Slidesmetsarin
 

La actualidad más candente (20)

My sql failover test using orchestrator
My sql failover test  using orchestratorMy sql failover test  using orchestrator
My sql failover test using orchestrator
 
Your tuning arsenal: AWR, ADDM, ASH, Metrics and Advisors
Your tuning arsenal: AWR, ADDM, ASH, Metrics and AdvisorsYour tuning arsenal: AWR, ADDM, ASH, Metrics and Advisors
Your tuning arsenal: AWR, ADDM, ASH, Metrics and Advisors
 
Introduction to MongoDB.pptx
Introduction to MongoDB.pptxIntroduction to MongoDB.pptx
Introduction to MongoDB.pptx
 
MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)
MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)
MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)
 
OpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQLOpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQL
 
Oracle Tablespace - Basic
Oracle Tablespace - BasicOracle Tablespace - Basic
Oracle Tablespace - Basic
 
MySQL Performance for DevOps
MySQL Performance for DevOpsMySQL Performance for DevOps
MySQL Performance for DevOps
 
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오
 
MySQL Timeout Variables Explained
MySQL Timeout Variables Explained MySQL Timeout Variables Explained
MySQL Timeout Variables Explained
 
pg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLpg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQL
 
Pengenalan Git
Pengenalan GitPengenalan Git
Pengenalan Git
 
PostgreSQL: Joining 1 million tables
PostgreSQL: Joining 1 million tablesPostgreSQL: Joining 1 million tables
PostgreSQL: Joining 1 million tables
 
Patroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easyPatroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easy
 
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
 
RMAN in 12c: The Next Generation (PPT)
RMAN in 12c: The Next Generation (PPT)RMAN in 12c: The Next Generation (PPT)
RMAN in 12c: The Next Generation (PPT)
 
PostgreSQL- An Introduction
PostgreSQL- An IntroductionPostgreSQL- An Introduction
PostgreSQL- An Introduction
 
Introduction to PostgreSQL
Introduction to PostgreSQLIntroduction to PostgreSQL
Introduction to PostgreSQL
 
5 Steps to PostgreSQL Performance
5 Steps to PostgreSQL Performance5 Steps to PostgreSQL Performance
5 Steps to PostgreSQL Performance
 
Looking ahead at PostgreSQL 15
Looking ahead at PostgreSQL 15Looking ahead at PostgreSQL 15
Looking ahead at PostgreSQL 15
 
PostgreSQL Database Slides
PostgreSQL Database SlidesPostgreSQL Database Slides
PostgreSQL Database Slides
 

Similar a Mongodb administración

Fundamentos de Administración PostgreSQL
Fundamentos de Administración PostgreSQLFundamentos de Administración PostgreSQL
Fundamentos de Administración PostgreSQLcamposer
 
Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slonyJohanna Mendez
 
Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slonyJohanna Mendez
 
Estructura del Registro de Windows
Estructura del Registro de WindowsEstructura del Registro de Windows
Estructura del Registro de WindowsAdrián Lois
 
William fabricio manual de sistemas sas
William fabricio manual de sistemas sasWilliam fabricio manual de sistemas sas
William fabricio manual de sistemas sasRafael Toro
 
NOSQL: Primeros Pasos en MongoDB
NOSQL: Primeros Pasos en MongoDBNOSQL: Primeros Pasos en MongoDB
NOSQL: Primeros Pasos en MongoDBVictor Cuervo
 
Integración LDAP + SAMBA
Integración LDAP + SAMBAIntegración LDAP + SAMBA
Integración LDAP + SAMBAcyberleon95
 
Análisis de Datos con MongoDB
Análisis de Datos con MongoDBAnálisis de Datos con MongoDB
Análisis de Datos con MongoDBAlejandro Mancilla
 
Javier Marcos - Detección de amenazas a escala con osquery [rooted2019]
Javier Marcos - Detección de amenazas a escala con osquery [rooted2019]Javier Marcos - Detección de amenazas a escala con osquery [rooted2019]
Javier Marcos - Detección de amenazas a escala con osquery [rooted2019]RootedCON
 
Curso sql server_administracion
Curso sql server_administracionCurso sql server_administracion
Curso sql server_administracionSalvador Ramos
 
LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)Emanuel Calvo
 

Similar a Mongodb administración (20)

Fundamentos de Administración PostgreSQL
Fundamentos de Administración PostgreSQLFundamentos de Administración PostgreSQL
Fundamentos de Administración PostgreSQL
 
Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slony
 
Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slony
 
Estructura del Registro de Windows
Estructura del Registro de WindowsEstructura del Registro de Windows
Estructura del Registro de Windows
 
William fabricio manual de sistemas sas
William fabricio manual de sistemas sasWilliam fabricio manual de sistemas sas
William fabricio manual de sistemas sas
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
NOSQL: Primeros Pasos en MongoDB
NOSQL: Primeros Pasos en MongoDBNOSQL: Primeros Pasos en MongoDB
NOSQL: Primeros Pasos en MongoDB
 
Dbdeployer
DbdeployerDbdeployer
Dbdeployer
 
Integración LDAP + SAMBA
Integración LDAP + SAMBAIntegración LDAP + SAMBA
Integración LDAP + SAMBA
 
Mysql
MysqlMysql
Mysql
 
Análisis de Datos con MongoDB
Análisis de Datos con MongoDBAnálisis de Datos con MongoDB
Análisis de Datos con MongoDB
 
SGBD Postgresql
SGBD PostgresqlSGBD Postgresql
SGBD Postgresql
 
Pgpymongo y pgpycouch
Pgpymongo y pgpycouchPgpymongo y pgpycouch
Pgpymongo y pgpycouch
 
Pg pool cluster postgresql
Pg pool cluster postgresqlPg pool cluster postgresql
Pg pool cluster postgresql
 
Javier Marcos - Detección de amenazas a escala con osquery [rooted2019]
Javier Marcos - Detección de amenazas a escala con osquery [rooted2019]Javier Marcos - Detección de amenazas a escala con osquery [rooted2019]
Javier Marcos - Detección de amenazas a escala con osquery [rooted2019]
 
Wilver mongo db
Wilver mongo dbWilver mongo db
Wilver mongo db
 
Tp1 db avanz-v1.1
Tp1 db avanz-v1.1Tp1 db avanz-v1.1
Tp1 db avanz-v1.1
 
Trabajo zabbix
Trabajo zabbixTrabajo zabbix
Trabajo zabbix
 
Curso sql server_administracion
Curso sql server_administracionCurso sql server_administracion
Curso sql server_administracion
 
LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)
 

Último

TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..RobertoGumucio2
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 

Último (20)

TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 

Mongodb administración

  • 1. MongoDB Instalación y administración Juan Esteban Ladetto jladetto@gmail.com
  • 2. Instalación en diferentes ambientes • Cómo todo proyecto Open Source (versiones pares son las estables) • 2.4, 2.6 (2.5 es desarrollo de los features que tendrá la versión 2.6) • En producción solamente las versiones pares y la última subversión (2.6.7) • Mongodb se puede descargar tanto binarios como código fuente y compilar • 32 bits o 64 bits y para cualquier plataforma
  • 3. Instalación en windows • www.mongodb.org/downloads • Necesario dbpath (default: datadb) • Puerto por defecto: 27017 • Instalar como servicio: • "C:mongodbbinmongod.exe" --config "C:mongodbmongod.cfg" --install • Eliminar como servicio • mongod.exe --remove
  • 4. Instalación en Linux (ubuntu) - sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 - echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list - sudo apt-get update - sudo apt-get install -y mongodb-org mongodb-org This package is a metapackage that will automatically install the four component packages listed below. mongodb-org-server This package contains the mongod daemon and associated configuration and init scripts. mongodb-org-mongos This package contains the mongos daemon. mongodb-org-shell This package contains the mongo shell. mongodb-org-tools This package contains the following MongoDB tools: mongoimport bsondump, mongodump, mongoexport, mongofiles, mongooplog, mongoperf, mongorestore, mongostat, and mongotop.
  • 5. Parámetros de configuración • http://docs.mongodb.org/manual/reference/configuration-options/
  • 6. Comandos básicos del Shell de mongodb • help Muestra ayuda • db.help() Muestra ayuda para db • db.<collection>.help() muestra ayuda para cualquier colección • show dbs Muetra las dbs • use <db> Cambia la db que se usa • show collections Lista todas las colecciones de una db • show users Muestra los usuarios de una db • show roles Muestra los roles de la db • show profile Muestra los queries que demoraron más de 1 milisegundo • show databases = show dbs
  • 7. Comandos básicos del Shell de mongodb • db.cloneDatabase(<host>) Clona la db actual al host especificado, el host no puede tener seguridad. • db.copyDatabase(<from>, <to>, <host>) Copia la db <from> desde el <host a la db que se especifique. • db.fromColl.renameCollection(<toColl>) Renombra la co. • db.repairDatabase() Repara y compacta la db. Es lento y bloquea la db • db.createUser( <user>, <pwd> ) Agrega un usuario a la db actual • db.getCollectionNames() Lista las colecciones de la db actual. • db.dropDatabase() borra la db actual.
  • 8. Creación y administración de usuarios • Por defecto no autorización ni autenticación • 2 formas de habilitarlo • Antes de iniciar servicio con auth • Iniciar servicio con auth y aprovechar el localhost exception (no recomendado para armar replicasets/sharing)
  • 9. Authorization • Si el servicio corre standalone habilitando el flag auth • Si el servicio corre como parte de un replication set o un shard es necesario un keyfile (compartido) como mínimo • MongoDB soporta 2 mecanismos en su versión no paga: password base (keyfile) y certificados x.509 openssl rand -base64 741 > mongodb-keyfile chmod 600 mongodb-keyfile
  • 10. Authentication • Un usuario pertenece a una db y sobre estas puede tener todos los roles que quiera • Existen 2 bases de datos especiales en mongodb (admin y local) y los usuarios de esas bases de datos pueden realizar operaciones en otras bases de datos siempre y cuando se les den acceso use admin db.createUser( { user: “root", pwd: "password", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } ) use admin db.createUser( { user: “god", pwd: "password", roles: [ “root”] } ) db.runCommand({rolesInfo: “god", showPrivileges: true}); db.runCommand({rolesInfo: { role: "dbAdmin", db: "blog" } , showPrivileges: true});
  • 11. Roles • A nivel de datos de bases de datos: • read • readWrite • A nivel de administración de bases de datos: • dbAdmin • dbOwner • userAdmin • Lista completa de roles predefinidos: http://docs.mongodb.org/manual/reference/built-in-roles/#built-in-roles • Lista completa de las funciones que se pueden hacer con roles: http://docs.mongodb.org/manual/reference/command/#role-management- commands db.createUser( { user: "accountUser", pwd: "password", roles: [ "readWrite", "dbAdmin" ] } ) db.runCommand({connectionStatus:1}); db.updateUser(“usuario”, doc)
  • 12. Comandos útiles para creación y manipulación de usuarios db.createUser({ user: "siteUserAdmin", pwd: "password", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] }) db.createUser({ user: "superuser", pwd: "12345678", roles: [ "root" ]}) db.updateUser("user123",{ pwd: "KNlZmiaNUp0B", customData: { title: "Senior Manager" }}) db.changeUserPassword("reporting", "SOh3TbYhxuLiW8ypJPxmt1oOfL") db.getUser(“”) db.getRole( "readWrite", { showPrivileges: true } ) db.grantRolesToUser( "reportsUser", [{ role: "readWrite", db: "products" } , { role: "readAnyDatabase", db:"admin" }]) db.revokeRolesFromUser( "reportsUser", [{ role: "readWrite", db: "accounts" }] ) db.createRole({ role: "manageOpRole", privileges: [{ resource: { cluster: true }, actions: [ "killop", "inprog" ] }, { resource: { db: "", collection: "" }, actions: [ "killCursors" ] }], roles: []})
  • 13. Conceptos a conocer de mongodb Memory Mapped Files • Todos los archivos de datos son memory mapped a la memoria virtual del OS • MongoDB lee y escribe en RAM y el filesystem hace el resto • Virtual Process size: suma de los tamaños de los arhivos + overhead (heap, conexiones) • Si el journal está activo el tamaño de la memoria virtual será casi el doble
  • 14. Conceptos a conocer de mongodb Journal • Los cambios en los archivos mapeados en memoria no se aplican en orden y diferentes partes de un archivo pueden ser de diferentes momentos • Si algo sucedió y mongodb se cierra inesperadamente queremos volver a tener un estado consistente.
  • 15. Conceptos a conocer de mongodb Archivos drwxr-xr-x 136 Nov 19 10:12 journal -rw------- 16777216 Oct 25 14:58 test.0 -rw------- 134217728 Oct 25 14:58 test.1 -rw------- 268435456 Oct 25 14:58 test.2 -rw------- 536870912 Oct 25 14:58 test.3 -rw------- 1073741824 Oct 25 14:58 test.4 -rw------- 2146435072 Oct 25 14:58 test.5 -rw------- 16777216 Oct 25 14:58 test.ns
  • 16. Conceptos a conocer de mongodb Archivos drwxr-xr-x 136 Nov 19 10:12 journal -rw------- 16777216 Oct 25 14:58 test.0 -rw------- 134217728 Oct 25 14:58 test.1 -rw------- 268435456 Oct 25 14:58 test.2 -rw------- 536870912 Oct 25 14:58 test.3 -rw------- 1073741824 Oct 25 14:58 test.4 -rw------- 2146435072 Oct 25 14:58 test.5 -rw------- 16777216 Oct 25 14:58 test.ns --directoryperdb --smallfiles –nopreallocate para muchas base de datos
  • 17. Conceptos a conocer de mongodb Indices
  • 18. Conceptos a conocer de mongodb Stats > db.Sessions.stats(){ "ns" : "SessionState.Sessions", "count" : 2720, "size" : 16509440, "avgObjSize" : 6069, "storageSize" : 58408960, "numExtents" : 8, "nindexes" : 2, "lastExtentSize" : 20643840, "paddingFactor" : 1, "systemFlags" : 1, "userFlags" : 1, "totalIndexSize" : 351568, "indexSizes" : {"_id_" : 212576,"Expires_1" : 138992}, "ok" : 1} > db.stats(){ "db" : "SessionState", "collections" : 4, "objects" : 3504, "avgObjSize" : 4996.649543378995, "dataSize" : 17508260, "storageSize" : 59473920, "numExtents" : 11, "indexes" : 2, "indexSize" : 351568, "fileSize" : 67108864, "nsSizeMB" : 16, "dataFileVersion" : {"major" : 4, "minor" : 5}, "extentFreeList" : {"num" : 0,"totalSize" : 0}, "ok" : 1}
  • 20. Replica Set – Initialize
  • 21. Replica Set – Failure
  • 22. Replica Set – Failover
  • 23. Replica Set – Recovery
  • 24. Replica Set – Recovered
  • 25. > conf = { _id : "mySet", members : [ {_id : 0, host : “host:20717”, priority : 3}, {_id : 1, host : “host:27018", priority : 2}, {_id : 2, host : “host:27019”}, {_id : 4, host : "E", hidden : true, slaveDelay : 3600} ] } > rs.initiate(conf) Configuration Options > conf = { _id : "mySet", members : [“host:20717”, “host:27018", “host:27019”], {_id : 4, host : "E", hidden : true, slaveDelay } > rs.initiate(conf)
  • 26. Desarrollando con replica sets Alta consistencia de datos
  • 27. Desarrollando con replica sets Baja consistencia de datos
  • 28. Write Concern • Network acknowledgement • Wait for error • Wait for journal sync • Wait for replication
  • 33. Tagging • Controla desde donde y hacia donde leer y escribir • Cada miembro puede tener uno o más tags • tags: {dc: "ny"} • tags: {dc: "ny", subnet: "192.168", rack: "row3rk7"} • Replica Sets definen las reglas de write concern • Las reglas pueden cambiar sin afectar el desarrollo ya realizado
  • 34. Un ejemplo • { • _id : "mySet", • members : [ • {_id : 0, host : "A", tags : {"dc": "ny"}}, • {_id : 1, host : "B", tags : {"dc": "ny"}}, • {_id : 2, host : "C", tags : {"dc": "sf"}}, • {_id : 3, host : "D", tags : {"dc": "sf"}}, • {_id : 4, host : "E", tags : {"dc": "cloud"}}], • settings : { • getLastErrorModes : { • allDCs : {"dc" : 3}, • someDCs : {"dc" : 2}} } • } • > db.blogs.insert({...}) • > db.runCommand({getLastError : 1, w : "someDCs"})
  • 35. Wait for Replication (Tagging)
  • 36. Modos de lectura • 5 modes • primary (only) - Default • primaryPreferred • secondary • secondaryPreferred • Nearest Cuando más de un nodo es posible de elegir el más cercano es el usado
  • 37. Mantenimiento y upgrade • No downtime • Hacer mantenimiento/upgrade – Empezar con los nodos secundarios – Dejar para el final de primario
  • 38. Replica Set – 1 Data Center Single datacenter Puntos de falla: – Power – Network – Data center – Que fallen 2 nodos
  • 39. Replica Set – 2 Data Centers Multi data center Un nodo en otro DC No es posible durabilidad ya que si se cae el DC1 no podrá hacerse como primary (falta al menos 1 member más)
  • 40. Replica Set – 3 Data Centers 3 data centers
  • 41. Cómo funciona internamente • Heartbeat cada 2 segundos • Times-out en 10 segundos • Local DB (not replicated) – system.replset – oplog.rs • Capped collection donde se almacenan las operaciones realizadas en el nodo
  • 42. Replica Set commands • rs.initiate(config) -> inicializa la replicaset • Config=> doc con members • rs.status() -> status • rs.isMaster() -> devuelve info de quien es master • rs.config() • rs.reconfig(config) • rs.add( { "_id": 3, "host": "mongodbd3.example.net:27017", "priority": 0 } ) • rs.stepDown() • rs.freeze() -> no elegirme como primario por x n segundos • rs.remove() • rs.slaveOk() • db.isMaster() • rs.syncFrom()
  • 46. Particionado • Los usuarios definen el shard key • Los shard keys definen un rango de datos • Los keys son como puntos en una línea • El rango es un segment de esa línea
  • 47. Distribución de la información • Inicialmente 1 chunk (64mb) • MongoDB automáticamente divide y migra los chunks when el máximo es alcanzado
  • 48. Balanceo y ruteo • Las consultas rutean a los shards específicos • MongoDB balancea el cluster • MongoDB migra automáticamente a nuevos nodos
  • 49. Architecture • Juguemos con un sharding de prueba mongo –nodb cluster = new ShardingTest({"shards" : 3, "chunksize" : 1}) db = (new Mongo("localhost:30999")).getDB("test") for (var i=0; i<100000; i++) { db.users.insert({"username" : "user"+i, "created_at" : new Date()}); } db.users.count() sh.status() sh.enableSharding("test") db.users.ensureIndex({"username" : 1}) sh.shardCollection("test.users", {"username" : 1}) db.users.find({username: "user12345"}).explain() db.users.find().explain() cluster.stop()
  • 50. Qué es un shard? • Shard es un nodo del cluster • Un shard puede ser un simple mongod o una replica set
  • 51. Meta Data Storage • Config servers • Almacena cluster chunk ranges and locations • O 1 o 3 (en producción tienen que ser 3) • No son replica sets (almacenan lo mismo por separado)
  • 52. Routing y balanceo • Mongos • Actúan como routers/balanceadores • No tienen información local (persiste la info en los config servers) • Puede ser como mínimo uno o más (pueden correr en los mismos server que los config servers)
  • 54. Iniciar un servidor de configuración • mongod –configsvr default port (27019)
  • 55. mongos Router • mongos --configdb <hostname>:27019 • Para 3 servidores de configuración mongos --configdb <host1>:<port1>,<host2>:<port2>,<host3>:<port3> • Siempre se puede agregar un nuevo mongos por más que el cluster esté andando
  • 56. Arrancar un shard • mongod --shardsvr • Arranca un mongod con el Puerto por defecto (27018) • Shard no es parte del cluster • Shard puede haber corrido en producción
  • 57. Agregar el Shard • On mongos: • sh.addShard(‘<host>:27018’) • Adding a replica set: • sh.addShard(‘<host>:<port>’) de un nodo del replica set
  • 58. Verificar que un shard se haya agregado db.runCommand({ listshards:1 })
  • 60. Chunk es una sección de un rango más grande
  • 61. Separando Chunks • Un chunk es dividido solamente cuando exceed su máximo tamaño • Si los shard key tienen el mismo valor no se pueden dividir • La division de un Chunk es una operación lógica (no hay movimiento de información)
  • 62. Balanceo • Mongos corren los balanceos • Cuando la diferencias de chunks entre los shards más densos y los menos densos llega al punto máximo comienza la migración
  • 63. Ronda de balanceo • Un mongos toma el Balancer lock • Status use config db.locks.find( { _id: “balancer” })
  • 64. Mover chunks • Mongos envía un moveChunk al shard de origen • El shard de origen notifica al shard de destino • El shard de destino toma el documento desde el origen
  • 65. Listo, documento en Nuevo shard • El shard de destino actualiza el servidor de configuración
  • 66. Ruteo de consultas: Consultas puntuales
  • 67. Ruteo de consultas: Consultas puntuales recibimos pedido
  • 68. Ruteo de consultas: Consultas puntuales Sabemos donde está la info
  • 69. Ruteo de consultas: Consultas puntuales el shard devuelve lo solicitado
  • 70. Mongos devuelve la info al cliente
  • 71. Ruteo de queries más complejas (mapping)
  • 73. Enviamos el pedido a todos los shards
  • 74. Devuelven la info que solicitamos
  • 77. Shard Key • Shard key es immutable • Los valores de los Shard key son immutables • Tienen que estar indexados • Shard key limitado a 512 bytes • Shard key usado como route query • Elegir un campo comunmente usado en consultas
  • 78. Consideraciones • Cardinalidad • Distribución de escritura • Query Isolation • Disponibilidad • Localidad de los índices Optimizar el ruteo Minimizar tráfico innecesario Permitir el mejor escalamiento
  • 79. Métodos de Backup • 3 posibilidades: • LVM snapshots • mongodump -> mongorestore • MMS backup service
  • 80. Métodos de Backup LVM snapshots • Consiste en hacer un snapshot de todo el volumen donde está montada la db • La base de datos debe estar en un estado válido al momento del snapshot • Si hay documentos que se están escribiendo puede quedar en un estado inconsistente • Si se usa journaling el journal tiene que residir en el mismo volumen • No se puede capturar el backup incremental
  • 81. Métodos de Backup mongodump-mongorestore • Para poder hacer un dump el usuario como mínimo rol de backup o dbAdmin • Algunos parámetros necesarios • mongodump –u <usuario> -p <pwd> --authenticationDatabase <db> --host <host><:port> -d <database> -c <collection> -o <path> --oplog --journal • Para hacer restore el procedimiento es similar • mongorestore –u <usuario> -p <pwd> --authenticationDatabase <db> --host <host><:port> -d <database> -c <collection> -o <path> --oplogReplay –oplogLimit <timestamp>
  • 82. mongodump • options: • --help produce help message • -v [ --verbose ] be more verbose (include multiple times for more verbosity e.g. -vvvvv) • -h [ --host ] arg mongo host to connect to ( <set name>/s1,s2 for sets) • --port arg server port. Can also use --host hostname:port • --ipv6 enable IPv6 support (disabled by default) • -u [ --username ] arg username • -p [ --password ] arg password • --dbpath arg directly access mongod database files in the given path, instead of connecting to a mongod server - needs to lock the data directory, so cannot be used if a mongod is currently accessing the same path • --directoryperdb if dbpath specified, each db is in a separate directory • -d [ --db ] arg database to use • -c [ --collection ] arg collection to use (some commands) • -o [ --out ] arg (=dump) output directory or "-" for stdout • -q [ --query ] arg json query • --oplog Use oplog for point-in-time snapshotting • --repair try to recover a crashed database
  • 83. mongorestore options: --help produce help message -v [ --verbose ] be more verbose (include multiple times for more verbosity e.g. -vvvvv) -h [ --host ] arg mongo host to connect to ( <set name>/s1,s2 for sets) --port arg server port. Can also use --host hostname:port --ipv6 enable IPv6 support (disabled by default) -u [ --username ] arg username -p [ --password ] arg password --dbpath arg directly access mongod database files in the given path, instead of connecting to a mongod server - needs to lock the data directory, so cannot be used if a mongod is currently accessing the same path --directoryperdb if dbpath specified, each db is in a separate directory -d [ --db ] arg database to use -c [ --collection ] arg collection to use (some commands) --objcheck validate object before inserting --filter arg filter to apply before inserting --drop drop each collection before import --oplogReplay replay oplog for point-in-time restore
  • 84. Métodos de Backup MMS backup service • Servicio hosteado por la gente de 10gen (mongodb) • Incremental backup
  • 85. Métodos de Backup Incremental backups • https://github.com/EqualExperts/Tayra/ • https://github.com/reverb/wordnik-oss • MMS 
  • 86. Importando y exportando collecciones mongoimport --host localhost --db myDB --collection myCollection -- type csv --file data.csv --headerline –upsert mongoexport --host localhost --db myDB --collection myCollection -- csv –out data.csv
  • 87. Algunas otras cosas • Capped Collections • db.createCollection( "log", { capped: true, size: 100000 , max:1000} ) • db.collection.isCapped() • db.runCommand({"convertToCapped": "mycoll", size: 100000}); • Ttl collections • db.log_events.ensureIndex( { "createdAt": 1 }, { expireAfterSeconds: 3600 } )
  • 88. Notas para llegar a producción • Redes • Connection pooling • db.runCommand({ connPoolStats: 1 } ) • Hardware • SSD cuando sea posible • CPU y suficiente RAM para manejar el volumen o carga • Disco • Obviar NFS cuando sea posible • Separar journals/databases en diferentes volúmenes • ReplicaSet o Sharding • Definir el nivel de Write concern que se requiera
  • 89. Seguridad Exposición en redes y seguridad - wire protocol - bind_ip: intentar que la exposición sea únicamente hacia adentro - port: si bien el 27017 es el default de mongo no viene mal cambiarlo - desde que redes pueden llegar? Filtremos lo más posible
  • 90. Seguridad Checklist de seguridad • Siempre con authorization y authentication • Collection-level Access control • db.createRole( { role: "collectionInventario", privileges: [ { resource: { db: "products", collection: "inventory" }, actions: [ "find", "update", "insert" ] }, { resource: { db: "products", collection: "orders" }, actions: [ "find" ] } ] , roles: [] }) db.grantRolesToUser( "usuario", [ "collectionInventario" ] ) db.getUser(“usuario”) • http://docs.mongodb.org/v2.6/MongoDB-security-guide.pdf
  • 91. Monitoreo Qué y con qué? • Working sets • db.stats() • db.runCommand( { serverStatus: 1, workingSet: 1 } ) • Oplog replication lag • rs.printSlaveReplicationInfo() • IOPS • Cantidad de conexiones • db.runCommand ({connPoolStats: 1}) • Disponibilidad en el storage • Memoria • Uso de CPU (+70% empezamos a complicarnos, queries no optimizadas, etc) • Capacidad de redes/Traffic IN/OUT • Pages faults • db.adminCommand({"serverStatus" : 1}).recordStats -> cantidad de veces que tuvimos que hace swap de páginas
  • 92. Monitoreo Qué y con qué? • iostat • vmstat • mongotop • mongostat • mongoperf echo “{nTheards:12, fileSizeMB:1024, r:true}” | mongoperf • Mirar las slow queries ( • db.setProfilingLevel(1, 100) • db.system.profile.find().limit(10).sort( { ts : -1 } ).pretty() • Mucho mejor con - http://mongolab.org/dex/
  • 93. Monitoreo Herramientas de monitoreo Integrando con otras herramientas Tool Plugin Description Ganglia mongodb-ganglia Python script to report operations per second, memory usage, btree statistics, master/slave status and current connections. Ganglia gmond_python_modules Parses output from the serverStatus and replSetGetStatus commands. Motop None Realtime monitoring tool for MongoDB servers. Shows current operations ordered by durations every second. mtop None A top like tool. Munin mongo-munin Retrieves server statistics. Munin mongomon Retrieves collection statistics (sizes, index sizes, and each (configured) collection count for one DB). Munin munin-plugins Ubuntu PPA Some additional munin plugins not in the main distribution. Nagios nagios-plugin-mongodb A simple Nagios check script, written in Python. Zabbix mikoomi-mongodb Monitors availability, resource utilization, health, performance and other important metrics. http://docs.mongodb.org/manual/administration/monitoring/#self-hosted-monitoring-tools
  • 94. Operando mongodb • db.currentOp() – o filtrar por cualquier parte del documento • db.killOp() • db.system.profile.find().pretty()
  • 95. Complementos • Herramientas varias para trabajar con mongodb • Rockmongo • MMS overview

Notas del editor

  1. logpath=C:\mongodb\log\mongo.log
  2. Cada base de datos puede contener n archivos para cada base de datos Máximo 2 GB cada uno
  3. Cada base de datos puede contener n archivos para cada base de datos Máximo 2 GB cada uno
  4. Cada base de datos puede contener n archivos para cada base de datos Máximo 2 GB cada uno
  5. Initialize -> Election Primary + data replication from primary to secondary
  6. Primary down/network failure Automatic election of new primary if majority exists
  7. New primary elected Replication established from new primary
  8. Down node comes up Rejoins sets Recovery and then secondary
  9. Priority Floating point number between 0..1000 Highest member that is up to date wins Up to date == within 10 seconds of primary If a higher priority member catches up, it will force election and win Slave Delay Lags behind master by configurable time delay Automatically hidden from clients Protects against operator errors Fat fingering Application corrupts data
  10. Not really fire and forget. This return arrow is to confirm that the network successfully transferred the packet(s) of data. This confirms that the TCP ACK response was received.
  11. Presenter should mention: Default is w:1 w:majority is what most people should use for durability. Majority is a special token here signifying more than half of the nodes in the set have acknowledged the write.
  12. Using 'someDCs' so that in the event of an outage, at least a majority of the DCs would receive the change. This favors availability over durability.
  13. Using 'allDCs' because we want to make certain all DCs have this piece of data. If any of the DCs are down, this would timeout. This favors durability over availability.
  14. A good question to ask the audience : 'Why wouldn't you set w={dc:3}'… Why would you ever do that? What would be the complications?
  15. Ops will be most interested in Configuration Dev will be most interested in Mechanics
  16. From mainframes, to RAC Oracle servers... People solved problems by adding more resources to a single machine.
  17. Large scale operation can be combined with high performance on commodity hardware through horizontal scaling Build - Document oriented database maps perfectly to object oriented languages Scale - MongoDB presents clear path to scalability that isn't ops intensive - Provides same interface for sharded cluster as single instance
  18. MongoDB 2.2 and later only need <host> and <port> for one member of the replica set
  19. Once chunk size is reached, mongos asks mongod to split a chunk + internal function called splitVector() mongod counts number of documents on each side of split + based on avg. document size `db.stats()` Chunk split is a **logical** operation (no data has moved) Max on first chunk should be 14
  20. Balancer lock actually held on config server.
  21. Moved chunk on shard2 should be gray
  22. How do the other mongoses know that their configuration is out of date? When does the chunk version on the shard itself get updated?
  23. _id could be unique across shards if used as shard key. we could only guarantee uniqueness of (any) attributes if the keys are used as shard keys with unique attribute equals true
  24. Cardinality – Can your data be broken down enough? Query Isolation - query targeting to a specific shard Reliability – shard outages A good shard key can: Optimize routing Minimize (unnecessary) traffic Allow best scaling