Mongodb administraci³n

  • View
    140

  • Download
    1

Embed Size (px)

Text of Mongodb administraci³n

MongoDB

MongoDBInstalacin y administracinJuan Esteban Ladettojladetto@gmail.comInstalacin en diferentes ambientesCmo todo proyecto Open Source (versiones pares son las estables)2.4, 2.6 (2.5 es desarrollo de los features que tendr la versin 2.6)En produccin solamente las versiones pares y la ltima subversin (2.6.7)Mongodb se puede descargar tanto binarios como cdigo fuente y compilar32 bits o 64 bits y para cualquier plataformaInstalacin en windowswww.mongodb.org/downloadsNecesario dbpath (default: \data\db)Puerto por defecto: 27017Instalar como servicio:"C:\mongodb\bin\mongod.exe" --config "C:\mongodb\mongod.cfg" --install Eliminar como serviciomongod.exe --remove

logpath=C:\mongodb\log\mongo.log3Instalacin 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 updatesudo apt-get install -y mongodb-org

mongodb-orgThis package is a metapackage that will automatically install the four component packages listed below.mongodb-org-serverThis package contains the mongod daemon and associated configuration and init scripts.mongodb-org-mongosThis package contains the mongos daemon.mongodb-org-shellThis package contains the mongo shell.mongodb-org-toolsThis package contains the following MongoDB tools: mongoimport bsondump, mongodump, mongoexport, mongofiles, mongooplog, mongoperf, mongorestore, mongostat, and mongotop.4Parmetros de configuracinhttp://docs.mongodb.org/manual/reference/configuration-options/Comandos bsicos del Shell de mongodbhelp Muestra ayudadb.help() Muestra ayuda para dbdb..help() muestra ayuda para cualquier coleccinshow dbs Muetra las dbsuse Cambia la db que se usashow collections Lista todas las colecciones de una dbshow users Muestra los usuarios de una dbshow roles Muestra los roles de la dbshow profile Muestra los queries que demoraron ms de 1 milisegundoshow databases = show dbs

Comandos bsicos del Shell de mongodbdb.cloneDatabase() Clona la db actual al host especificado, el host no puede tener seguridad.db.copyDatabase(, , ) Copia la db desde el mongodb-keyfile chmod 600 mongodb-keyfile AuthenticationUn usuario pertenece a una db y sobre estas puede tener todos los roles que quieraExisten 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 admindb.createUser( { user: root", pwd: "password", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })use admindb.createUser( { user: god", pwd: "password", roles: [ root] })db.runCommand({rolesInfo: god", showPrivileges: true});db.runCommand({rolesInfo: { role: "dbAdmin", db: "blog" } , showPrivileges: true});RolesA nivel de datos de bases de datos:readreadWriteA nivel de administracin de bases de datos:dbAdmindbOwneruserAdminLista completa de roles predefinidos:http://docs.mongodb.org/manual/reference/built-in-roles/#built-in-rolesLista completa de las funciones que se pueden hacer con roles:http://docs.mongodb.org/manual/reference/command/#role-management-commandsdb.createUser( { user: "accountUser", pwd: "password", roles: [ "readWrite", "dbAdmin" ] })db.runCommand({connectionStatus:1});db.updateUser(usuario, doc)Comandos tiles para creacin y manipulacin de usuariosdb.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 mongodbMemory Mapped FilesTodos los archivos de datos son memory mapped a la memoria virtual del OSMongoDB lee y escribe en RAM y el filesystem hace el restoVirtual Process size: suma de los tamaos de los arhivos + overhead (heap, conexiones)Si el journal est activo el tamao de la memoria virtual ser casi el dobleConceptos a conocer de mongodbJournalLos cambios en los archivos mapeados en memoria no se aplican en orden y diferentes partes de un archivo pueden ser de diferentes momentosSi algo sucedi y mongodb se cierra inesperadamente queremos volver a tener un estado consistente.Conceptos a conocer de mongodbArchivosdrwxr-xr-x 136 Nov 19 10:12 journal-rw------- 16777216 Oct 25 14:58 test.0-rw------- 134217728 Oct 25 14:58test.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

Cada base de datos puede contener n archivos para cada base de datosMximo 2 GB cada uno

15Conceptos a conocer de mongodbArchivosdrwxr-xr-x 136 Nov 19 10:12 journal-rw------- 16777216 Oct 25 14:58 test.0-rw------- 134217728 Oct 25 14:58test.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 Cada base de datos puede contener n archivos para cada base de datosMximo 2 GB cada uno

16Conceptos a conocer de mongodbIndices

Cada base de datos puede contener n archivos para cada base de datosMximo 2 GB cada uno

17Conceptos a conocer de mongodbStats> 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

Initialize -> ElectionPrimary + data replication from primary to secondary

20Replica Set Failure

Primary down/network failureAutomatic election of new primary if majority exists

21Replica Set Failover

New primary electedReplication established from new primary

22Replica Set Recovery

Down node comes upRejoins setsRecovery and then secondary23Replica 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 : 3600}}

> rs.initiate(conf)

PriorityFloating point number between 0..1000Highest member that is up to date wins Up to date == within 10 seconds of primaryIf a higher priority member catches up, it will force election and win

Slave DelayLags behind master by configurable time delay Automatically hidden from clientsProtects against operator errorsFat fingeringApplication corrupts data

25Desarrollando con replica setsAlta consistencia de datos

Desarrollando con replica setsBaja consistencia de datos

Write ConcernNetwork acknowledgementWait for error Wait for journal syncWait for replication

Unacknowledged

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.

29MongoDB Acknowledged (wait for error)

Wait for Journal Sync

Wait for Replication

Presenter should mention:Default is w:1w: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.

32TaggingControla desde donde y hacia donde leer y escribirCada miembro puede tener uno o ms tagstags: {dc: "ny"}tags: {dc: "ny", subnet: "192.168", rack: "row3rk7"}Replica Sets definen las reglas de write concernLas 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({...})&gt