SlideShare una empresa de Scribd logo
1 de 26
Curso de Administración de
- Indice -


    Elementos básicos de un Cluster

    Tipos de Cluster

    Que es un Shard

    Replica Set + Sharding

    File Based configuration + Examples

    Montaje y configuración del Cluster

    Comandos para administración y estado

    Preguntas
Elementos de un cluster
Elementos de un cluster

        Shards – DB Daemon
        Arbiters – Supervisor
        Configuration – “DNS” for Routing daemon
        Routing – in App server, make query to cluster
 Estos son los elementos básicos de un cluster en replica
set con Shards, a mi parecer es el mas útil, versátil y
escalable. (V1.6)
 Existe la modalidad Master-Slave, es similar a Mysql –
(V1.2)
Elementos de un cluster

 Para el montaje de un Cluster hay que basar la
configuración en estructuras de 3 servidores.
 Para poder configurar los demonios de configuración, es
necesario levantar 3, exactamente igual para los demonios
de bases de datos.
 Los árbitros son considerados demonios de bases de
datos, pero con el Oplog a 0, para que no “pesen”
 En cambio los enrutadores solo puede haber 1 en cada
servidor de aplicación
Tipos de Cluster

Existen varios tipos de Cluster:
        Master-Slave
        Replica Set
        Replica Set + Shards
 El Master-Slave se basa en 1 demonio por servidor, ese
demonio es o Maestro o esclavo, es muy simple
 Vamos centrarnos en el Replica Set y RS + Shards que es
el mas complicado de configurar.
Shards

Un shard es un trozo de tu base de datos, extraído de la
misma con ciertos patrones de configuración.
        Lo normal es que esto sea automático, pero si quieres
        hacer que el sharding tenga una distribución concreta
        tienes que configurar un Shard Key
        Es importante matizar que tanto un Shard, como un
        arbitro, como un configurador tienen por ejecutable el
        demonio MONGOD
        En cambio los enrutadores tiene con ejecutable el
        demonio MONGOS
Replica Set

 Es el modo de replicación que usa el servidor, un replica set
contiene un espejo de el servidor/es configurado como tal.
Por si solo es un método un poco peculiar de almacenar los datos,
ya que todo esta en todos los servidores
Puedes meter en un RS tantos servidores como quieras (E.G)
RS + Sharding

 Al juntar estos 2 modos de configuración la cosa se complica,
requisitos:
         Debe haber tantos RS como Shards haya en el cluster
         Debe haber mínimo 3 demonios de DB por replica set
         Con haber 3 demonios de configuración en general
         valdría
         1 demonio enrutador por servidor de aplicación
         Mínimo 1 arbitro por replica set
 Esta es la configuración recomendada para un producto en
producción
RS + Sharding
RS + Sharding

Este es un esquema típico de produccion:
       2 servidores de aplicación con un cluster de 4 servidores
       de MongoDB
       Lo he configurado de tal manera que haya 2/3 demonios
       por servidor
             Portalmdb1 – 1 demonio de DB + 1 Arbitro
             Portalmdb2 – 1 demonio de DB + 1 Config server
             Portalmdb3 – 1 demonio de DB + 1 Config server + 1 Arbitro
             Portalmdb4 – 1 demonio de DB + 1 Config server
             Portalweb1-2 – 1 demonio enrutador por servidor de aplicación
RS + Sharding

  Tras Levantar los demonios Arbiter y Shard, nos conectamos a un
  nodo de cada shard para configurar el replica set:
 $ mongo 10.25.144.38:10000/admin
 > rs.initiate({"_id" : "agny", "members" : [
 ... {"_id" : 0, "host" : "10.25.144.38:10000"},
 ... {"_id" : 1, "host" : "10.25.144.39:10000"},
 ... {"_id" : 2, "host" : "10.25.144.40:11000", arbiterOnly : true}]})
 {
       "info" : "Config now saved locally. Should come online in about a minute.",
       "ok" : 1
 }
Despues de esto ya tenemos 1 replica set configurado,vamos con las
  shards
RS + Sharding

  Despues de configurar el RS, tenemos que levantar los demonios
  restantes, configurador y enrutador. Tras hacerlo nos conectamos
  al enrutador, a la DB Admin:
$ mongo 10.25.144.39:30000/admin

> db.runCommand({addshard : "agny/10.25.144.38:10000,10.25.144.39:10000"})
{ "shardAdded" : "agny", "ok" : 1 }
> db.runCommand({addshard : "rudra/10.25.144.40:10000,10.25.144.41:10000"})
{ "shardAdded" : "rudra", "ok" : 1 }
Despues solo queda activar el sharding en la base de datos, o sino en
  alguna coleccion en concreto que sepamos que va a ser la mas
  concurrida y consultada
RS + Sharding

Te conectas a la base de datos (siempre a través del Mongos):
         mongo 10.25.144.39:30000
         use globserv
         #creas el indice
         mongos> db.user.ensureIndex({"userName" : 1})
         use admin
         #levantas el sharding en globserv
         mongos> db.runCommand( { enablesharding : "globserv" } );
File Based Configuration

Para levantar los demonios de base de datos, lo habitual es poner los
  parametros en el comando:
       mongod --dbpath /var/lib/mongo/rudra --port 11000 --replSet rudra --oplogSize 1 → Arbitro

       mongod --dbpath /var/lib/mongo/agny --port 10000 --replSet agny → Shard

       mongod --dbpath /var/lib/mongo/config --port 20000 → Demonio de configuracion

       mongos --configdb 10.25.144.39:20000,10.25.144.40:20000,10.25.144.41:20000 --port 30000 → Enrutador


Esta no es la manera mas eficaz de levantar los demonios, ya que el
  comando es muy grande y puedes olvidar o omitir una parte
  importante
Para mejorar esto vamos a usar archivos de configuración, lo cual lo
  hace mucho mas sencillo, ya que se levantará asi:
       mongod -f /path/to/conf_file      ó      mongos -f /path/to/conf_file
Ejemplos de archivos de
                                           Configuracion
Archivo rudra_arbiter.conf → Arbitro           Archivo agny_shard.conf → Demonio de Shard

dbpath = /var/lib/mongo/rudra                  dbpath = /var/lib/mongo/agny

logpath = /var/log/mongo/rudra.log             logpath = /var/log/mongo/agny.log

logappend = true                               logappend = true

bind_ip = 10.25.144.38                         bind_ip = 10.25.144.38

port = 11000                                   port = 10000

fork = true                                    fork = true

nohttpinterface = true                         nohttpinterface = true

shardsvr = true                                shardsvr = true

replSet = rudra                                replSet = agny

oplogSize = 1
Ejemplos de archivos de
                                         Configuracion
Archivo config_server.conf → Demonio de Configuracion   Archivo mongos_server.conf → Demonio de enrutamiento

dbpath = /var/lib/mongo/config                          logpath = /var/log/mongo/mongos.log

logpath = /var/log/mongo/config.log                     logappend = true

logappend = true                                        port = 30000

bind_ip = 10.25.144.39                                  fork = true

port = 20000
                                                        configdb = 10.25.144.38:20000,10.25.144.40:20000,10.25.144.39:20000
configsvr = true

fork = true

nohttpinterface = true



    IMPORTANTE: El orden para levantar los demonios es el siguiente:
                          Shard>Arbitros>Configurador>Enrutador
Configurando un Cluster...

   Configurar un cluster es relativamente sencillo si se hace
    en la propia maquina, no debería llevar mas de 5 minutos.
   Vamos a usar la siguiente configuracion:
            1 enrutador
            1 configurador
            1 arbitro
            2 Shards de base de datos
Podemos usar ficheros o en su defecto levantar los servicios
  con los demonios unicamente
Configurando un Cluster...

   Hay que tener en cuenta que la ip siempre será localhost,
    lo unico que va a variar es el puerto al que te conectas.
   Los pasos son los siguientes:
            Levantamos los demonios Shards y Arbitros
            Nos conectamos a la base de datos
            Configuramos el RS
            Levantamos los demonios Configuradores y enrutadores
            Nos conectamos al enrutador
            Configuramos el Sharding y despues shardeamos una DB
Comandos de adminsitracion

   Ahora solo faltan los comandos para ver el estado del sharding, el
    estado del replica set y demas, en principio a no ser que lo esteis
    configurando o haya algun problema, generalmente no necesitareis
    dicha información pero aun no habiendo lentitud en la DB no esta
    demas echarle un ojo
   Depende que necesites consultar, será necesario que te conectes a un
    demonio u a otro:
             Si necesitas informacion del estado del replica set, es
             necesario conectarse a lo Shard de DB
             Si necesitas consultar el estado del sharding, te debes
             conectar al enrutador
Comandos para Replica Set

   rs.status(): Status del Replica Set
   rs.conf(): Muestra la configuracion del replica set
   rs.reconfig(): reconfigura el RS
   rs.isMaster(): Muestra si el servidor al que te conectas es el primario
    o el secundario
   rs.stepDown(): Obliga a un nodo primario a ser secundario
   rs.freeze(): configura un tiempo de "congelacion" antes de que el
    secundario se haga primario
   Existen mas aqui
Comandos para Sharding

   db.printShardingStatus(): Muestra la infotmacion del Sharding actual
   sh.splitAt(): parte en 2 un chunk donde tu le indiques
        
             sh.splitAt( "records.people", { "zipcode": 63109 }
sh.splitFind(): Busca los splits dentro de tu DB
   No recomiendo realizar acciones de Split sin haberlas consultado
    antes con la gente de BE, ya que puede incrementar los tiempos de
    busqueda
   Los chunks por defecto ocupan 64 Mb, se puede modificar su
    tamaño pero 10Gen no suele recomendarlo
Comandos en general

Mongotop y Mongostat: Ambos dan información sobre el
 estado de la base de datos, (mongotop no esta en todas las
 versiones)
db.stats(): Datos sobre el estado de una DB dentro de MongoDB
sh.getBalancerState().pretty(): Muestra el estado del
  balanceador interno de MongoDB
                 Mucha mas informacion aqui
Preguntas...
Creditos

Nombre: Juan Manuel Parrilla
Puesto: Release Engineer en Telefonica I+D por Amaris
Contacto: juanmanuel.parrilla@amaris.com
Contacto Adicional: jmp.tid@gmail.com
Skype: jmp_tid
Twitter: @kerbeross
Mongo db course   administration

Más contenido relacionado

La actualidad más candente

Compilación del Kernel
Compilación del KernelCompilación del Kernel
Compilación del Kernel
Juan Sánchez
 
Manual instalación RAID 5 en centOS 6.2
Manual instalación RAID 5 en centOS 6.2Manual instalación RAID 5 en centOS 6.2
Manual instalación RAID 5 en centOS 6.2
camilaml
 
Apuntes servidores
Apuntes servidoresApuntes servidores
Apuntes servidores
Rene Zenteno
 
Taller Redis
Taller RedisTaller Redis
Taller Redis
betabeers
 
Instalacionoracle10 g
Instalacionoracle10 gInstalacionoracle10 g
Instalacionoracle10 g
ronyweb
 

La actualidad más candente (19)

Tarea 3
Tarea 3Tarea 3
Tarea 3
 
Curso gratuito de Redis
Curso gratuito de RedisCurso gratuito de Redis
Curso gratuito de Redis
 
Compilación del Kernel
Compilación del KernelCompilación del Kernel
Compilación del Kernel
 
Instalación Oracle 11gR2 en Linux Centos 5.5
Instalación Oracle 11gR2 en Linux Centos 5.5Instalación Oracle 11gR2 en Linux Centos 5.5
Instalación Oracle 11gR2 en Linux Centos 5.5
 
High Availability, Load Balancing and Replication on Linux
High Availability, Load Balancing and Replication on LinuxHigh Availability, Load Balancing and Replication on Linux
High Availability, Load Balancing and Replication on Linux
 
Manual instalación RAID 5 en centOS 6.2
Manual instalación RAID 5 en centOS 6.2Manual instalación RAID 5 en centOS 6.2
Manual instalación RAID 5 en centOS 6.2
 
Dns debian
Dns debianDns debian
Dns debian
 
P6 DOS ROUTERS
P6 DOS ROUTERSP6 DOS ROUTERS
P6 DOS ROUTERS
 
DHCP y DNS
DHCP y DNSDHCP y DNS
DHCP y DNS
 
Apuntes servidores
Apuntes servidoresApuntes servidores
Apuntes servidores
 
Jaime Casanova - Domando a la bestia Replicación
Jaime Casanova - Domando a la bestia ReplicaciónJaime Casanova - Domando a la bestia Replicación
Jaime Casanova - Domando a la bestia Replicación
 
Instalacion dns
Instalacion dnsInstalacion dns
Instalacion dns
 
Taller Redis
Taller RedisTaller Redis
Taller Redis
 
Instalacionoracle10 g
Instalacionoracle10 gInstalacionoracle10 g
Instalacionoracle10 g
 
DNS
DNSDNS
DNS
 
Comandos usados en kali linux
Comandos usados en kali linuxComandos usados en kali linux
Comandos usados en kali linux
 
Realizar un repositorio local en centos 7
Realizar un repositorio local en centos 7Realizar un repositorio local en centos 7
Realizar un repositorio local en centos 7
 
Curso SMTP avanzado
Curso SMTP avanzadoCurso SMTP avanzado
Curso SMTP avanzado
 
2.6.montajes y accesos a medios
2.6.montajes y accesos a medios2.6.montajes y accesos a medios
2.6.montajes y accesos a medios
 

Similar a Mongo db course administration

Integración LDAP + SAMBA
Integración LDAP + SAMBAIntegración LDAP + SAMBA
Integración LDAP + SAMBA
cyberleon95
 
Policyd: Instalacion y configuracion
Policyd: Instalacion y configuracionPolicyd: Instalacion y configuracion
Policyd: Instalacion y configuracion
criscega
 
Fail2ban instalacion configuracion
Fail2ban instalacion configuracionFail2ban instalacion configuracion
Fail2ban instalacion configuracion
criscega
 
Instalación de servidor DHCP en Ubuntu Server 12.04
Instalación de servidor DHCP en Ubuntu Server 12.04Instalación de servidor DHCP en Ubuntu Server 12.04
Instalación de servidor DHCP en Ubuntu Server 12.04
Totus Muertos
 
Trucos directorio activo[1]
Trucos directorio activo[1]Trucos directorio activo[1]
Trucos directorio activo[1]
marcelav02
 
Curso Seminario Zimbra Correo Gye Ecuador
Curso Seminario Zimbra Correo Gye EcuadorCurso Seminario Zimbra Correo Gye Ecuador
Curso Seminario Zimbra Correo Gye Ecuador
JossJorgeArevalo
 

Similar a Mongo db course administration (20)

Instalación y configuración de servidor DNS
Instalación y configuración de servidor DNSInstalación y configuración de servidor DNS
Instalación y configuración de servidor DNS
 
Integración LDAP + SAMBA
Integración LDAP + SAMBAIntegración LDAP + SAMBA
Integración LDAP + SAMBA
 
Instalar servidores en debian
Instalar servidores en debianInstalar servidores en debian
Instalar servidores en debian
 
Cluster MySQL en Windows
Cluster MySQL en WindowsCluster MySQL en Windows
Cluster MySQL en Windows
 
Servidor DNS en Linux
Servidor DNS en LinuxServidor DNS en Linux
Servidor DNS en Linux
 
Manual de Instalación y configuración Zimbra
Manual de Instalación  y configuración Zimbra Manual de Instalación  y configuración Zimbra
Manual de Instalación y configuración Zimbra
 
Mongodb administración
Mongodb administraciónMongodb administración
Mongodb administración
 
Policyd: Instalacion y configuracion
Policyd: Instalacion y configuracionPolicyd: Instalacion y configuracion
Policyd: Instalacion y configuracion
 
Fail2ban instalacion configuracion
Fail2ban instalacion configuracionFail2ban instalacion configuracion
Fail2ban instalacion configuracion
 
Dhcp vlans
Dhcp vlansDhcp vlans
Dhcp vlans
 
File
FileFile
File
 
Manual instalacion y configuracion Dns
Manual instalacion y configuracion DnsManual instalacion y configuracion Dns
Manual instalacion y configuracion Dns
 
PHPVigo #19 - Lightning variables de entorno
PHPVigo #19 - Lightning variables de entornoPHPVigo #19 - Lightning variables de entorno
PHPVigo #19 - Lightning variables de entorno
 
Instalación de servidor DHCP en Ubuntu Server 12.04
Instalación de servidor DHCP en Ubuntu Server 12.04Instalación de servidor DHCP en Ubuntu Server 12.04
Instalación de servidor DHCP en Ubuntu Server 12.04
 
Trucos directorio activo[1]
Trucos directorio activo[1]Trucos directorio activo[1]
Trucos directorio activo[1]
 
Seguridad de las Redes
Seguridad de las RedesSeguridad de las Redes
Seguridad de las Redes
 
Adi samba
Adi sambaAdi samba
Adi samba
 
GOsa+samba+ldap
GOsa+samba+ldapGOsa+samba+ldap
GOsa+samba+ldap
 
Curso Seminario Zimbra Correo Gye Ecuador
Curso Seminario Zimbra Correo Gye EcuadorCurso Seminario Zimbra Correo Gye Ecuador
Curso Seminario Zimbra Correo Gye Ecuador
 
Por qué Symfony2 es tan rápido
Por qué Symfony2 es tan rápidoPor qué Symfony2 es tan rápido
Por qué Symfony2 es tan rápido
 

Último

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 
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
FagnerLisboa3
 

Último (15)

Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
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
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
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
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
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
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
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
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
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
 
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
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.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
 

Mongo db course administration

  • 2. - Indice -  Elementos básicos de un Cluster  Tipos de Cluster  Que es un Shard  Replica Set + Sharding  File Based configuration + Examples  Montaje y configuración del Cluster  Comandos para administración y estado  Preguntas
  • 3. Elementos de un cluster
  • 4. Elementos de un cluster Shards – DB Daemon Arbiters – Supervisor Configuration – “DNS” for Routing daemon Routing – in App server, make query to cluster Estos son los elementos básicos de un cluster en replica set con Shards, a mi parecer es el mas útil, versátil y escalable. (V1.6) Existe la modalidad Master-Slave, es similar a Mysql – (V1.2)
  • 5. Elementos de un cluster Para el montaje de un Cluster hay que basar la configuración en estructuras de 3 servidores. Para poder configurar los demonios de configuración, es necesario levantar 3, exactamente igual para los demonios de bases de datos. Los árbitros son considerados demonios de bases de datos, pero con el Oplog a 0, para que no “pesen” En cambio los enrutadores solo puede haber 1 en cada servidor de aplicación
  • 6. Tipos de Cluster Existen varios tipos de Cluster: Master-Slave Replica Set Replica Set + Shards El Master-Slave se basa en 1 demonio por servidor, ese demonio es o Maestro o esclavo, es muy simple Vamos centrarnos en el Replica Set y RS + Shards que es el mas complicado de configurar.
  • 7. Shards Un shard es un trozo de tu base de datos, extraído de la misma con ciertos patrones de configuración. Lo normal es que esto sea automático, pero si quieres hacer que el sharding tenga una distribución concreta tienes que configurar un Shard Key Es importante matizar que tanto un Shard, como un arbitro, como un configurador tienen por ejecutable el demonio MONGOD En cambio los enrutadores tiene con ejecutable el demonio MONGOS
  • 8. Replica Set Es el modo de replicación que usa el servidor, un replica set contiene un espejo de el servidor/es configurado como tal. Por si solo es un método un poco peculiar de almacenar los datos, ya que todo esta en todos los servidores Puedes meter en un RS tantos servidores como quieras (E.G)
  • 9. RS + Sharding Al juntar estos 2 modos de configuración la cosa se complica, requisitos: Debe haber tantos RS como Shards haya en el cluster Debe haber mínimo 3 demonios de DB por replica set Con haber 3 demonios de configuración en general valdría 1 demonio enrutador por servidor de aplicación Mínimo 1 arbitro por replica set Esta es la configuración recomendada para un producto en producción
  • 11. RS + Sharding Este es un esquema típico de produccion: 2 servidores de aplicación con un cluster de 4 servidores de MongoDB Lo he configurado de tal manera que haya 2/3 demonios por servidor Portalmdb1 – 1 demonio de DB + 1 Arbitro Portalmdb2 – 1 demonio de DB + 1 Config server Portalmdb3 – 1 demonio de DB + 1 Config server + 1 Arbitro Portalmdb4 – 1 demonio de DB + 1 Config server Portalweb1-2 – 1 demonio enrutador por servidor de aplicación
  • 12. RS + Sharding Tras Levantar los demonios Arbiter y Shard, nos conectamos a un nodo de cada shard para configurar el replica set: $ mongo 10.25.144.38:10000/admin > rs.initiate({"_id" : "agny", "members" : [ ... {"_id" : 0, "host" : "10.25.144.38:10000"}, ... {"_id" : 1, "host" : "10.25.144.39:10000"}, ... {"_id" : 2, "host" : "10.25.144.40:11000", arbiterOnly : true}]}) { "info" : "Config now saved locally. Should come online in about a minute.", "ok" : 1 } Despues de esto ya tenemos 1 replica set configurado,vamos con las shards
  • 13. RS + Sharding Despues de configurar el RS, tenemos que levantar los demonios restantes, configurador y enrutador. Tras hacerlo nos conectamos al enrutador, a la DB Admin: $ mongo 10.25.144.39:30000/admin > db.runCommand({addshard : "agny/10.25.144.38:10000,10.25.144.39:10000"}) { "shardAdded" : "agny", "ok" : 1 } > db.runCommand({addshard : "rudra/10.25.144.40:10000,10.25.144.41:10000"}) { "shardAdded" : "rudra", "ok" : 1 } Despues solo queda activar el sharding en la base de datos, o sino en alguna coleccion en concreto que sepamos que va a ser la mas concurrida y consultada
  • 14. RS + Sharding Te conectas a la base de datos (siempre a través del Mongos): mongo 10.25.144.39:30000 use globserv #creas el indice mongos> db.user.ensureIndex({"userName" : 1}) use admin #levantas el sharding en globserv mongos> db.runCommand( { enablesharding : "globserv" } );
  • 15. File Based Configuration Para levantar los demonios de base de datos, lo habitual es poner los parametros en el comando: mongod --dbpath /var/lib/mongo/rudra --port 11000 --replSet rudra --oplogSize 1 → Arbitro mongod --dbpath /var/lib/mongo/agny --port 10000 --replSet agny → Shard mongod --dbpath /var/lib/mongo/config --port 20000 → Demonio de configuracion mongos --configdb 10.25.144.39:20000,10.25.144.40:20000,10.25.144.41:20000 --port 30000 → Enrutador Esta no es la manera mas eficaz de levantar los demonios, ya que el comando es muy grande y puedes olvidar o omitir una parte importante Para mejorar esto vamos a usar archivos de configuración, lo cual lo hace mucho mas sencillo, ya que se levantará asi: mongod -f /path/to/conf_file ó mongos -f /path/to/conf_file
  • 16. Ejemplos de archivos de Configuracion Archivo rudra_arbiter.conf → Arbitro Archivo agny_shard.conf → Demonio de Shard dbpath = /var/lib/mongo/rudra dbpath = /var/lib/mongo/agny logpath = /var/log/mongo/rudra.log logpath = /var/log/mongo/agny.log logappend = true logappend = true bind_ip = 10.25.144.38 bind_ip = 10.25.144.38 port = 11000 port = 10000 fork = true fork = true nohttpinterface = true nohttpinterface = true shardsvr = true shardsvr = true replSet = rudra replSet = agny oplogSize = 1
  • 17. Ejemplos de archivos de Configuracion Archivo config_server.conf → Demonio de Configuracion Archivo mongos_server.conf → Demonio de enrutamiento dbpath = /var/lib/mongo/config logpath = /var/log/mongo/mongos.log logpath = /var/log/mongo/config.log logappend = true logappend = true port = 30000 bind_ip = 10.25.144.39 fork = true port = 20000 configdb = 10.25.144.38:20000,10.25.144.40:20000,10.25.144.39:20000 configsvr = true fork = true nohttpinterface = true IMPORTANTE: El orden para levantar los demonios es el siguiente: Shard>Arbitros>Configurador>Enrutador
  • 18. Configurando un Cluster...  Configurar un cluster es relativamente sencillo si se hace en la propia maquina, no debería llevar mas de 5 minutos.  Vamos a usar la siguiente configuracion: 1 enrutador 1 configurador 1 arbitro 2 Shards de base de datos Podemos usar ficheros o en su defecto levantar los servicios con los demonios unicamente
  • 19. Configurando un Cluster...  Hay que tener en cuenta que la ip siempre será localhost, lo unico que va a variar es el puerto al que te conectas.  Los pasos son los siguientes: Levantamos los demonios Shards y Arbitros Nos conectamos a la base de datos Configuramos el RS Levantamos los demonios Configuradores y enrutadores Nos conectamos al enrutador Configuramos el Sharding y despues shardeamos una DB
  • 20. Comandos de adminsitracion  Ahora solo faltan los comandos para ver el estado del sharding, el estado del replica set y demas, en principio a no ser que lo esteis configurando o haya algun problema, generalmente no necesitareis dicha información pero aun no habiendo lentitud en la DB no esta demas echarle un ojo  Depende que necesites consultar, será necesario que te conectes a un demonio u a otro: Si necesitas informacion del estado del replica set, es necesario conectarse a lo Shard de DB Si necesitas consultar el estado del sharding, te debes conectar al enrutador
  • 21. Comandos para Replica Set  rs.status(): Status del Replica Set  rs.conf(): Muestra la configuracion del replica set  rs.reconfig(): reconfigura el RS  rs.isMaster(): Muestra si el servidor al que te conectas es el primario o el secundario  rs.stepDown(): Obliga a un nodo primario a ser secundario  rs.freeze(): configura un tiempo de "congelacion" antes de que el secundario se haga primario  Existen mas aqui
  • 22. Comandos para Sharding  db.printShardingStatus(): Muestra la infotmacion del Sharding actual  sh.splitAt(): parte en 2 un chunk donde tu le indiques  sh.splitAt( "records.people", { "zipcode": 63109 } sh.splitFind(): Busca los splits dentro de tu DB  No recomiendo realizar acciones de Split sin haberlas consultado antes con la gente de BE, ya que puede incrementar los tiempos de busqueda  Los chunks por defecto ocupan 64 Mb, se puede modificar su tamaño pero 10Gen no suele recomendarlo
  • 23. Comandos en general Mongotop y Mongostat: Ambos dan información sobre el estado de la base de datos, (mongotop no esta en todas las versiones) db.stats(): Datos sobre el estado de una DB dentro de MongoDB sh.getBalancerState().pretty(): Muestra el estado del balanceador interno de MongoDB Mucha mas informacion aqui
  • 25. Creditos Nombre: Juan Manuel Parrilla Puesto: Release Engineer en Telefonica I+D por Amaris Contacto: juanmanuel.parrilla@amaris.com Contacto Adicional: jmp.tid@gmail.com Skype: jmp_tid Twitter: @kerbeross

Notas del editor

  1. Un Shard pueden ser todos los registros de tu base de datos que tengan como letra inicial de nombre de usuario la A o A-D.
  2. Con “tipico” me refiero a que la configuración de los servidores la ha creado alguien que no sabía como escala MongoDB respecto al numero de servidores con el que contamos. Lo normal sería que en vez de 4 fueran 6 servidores para que la replicación fuese perfecta. Con esta configuración, consigues un HA bastante robusto y ademas de eso se caiga el servidor que se caiga, nunca se quedará como maestro un arbitro. Los arbitros al tener el Oplog a 0, no almacenan base de datos, simplemente observan que si el servidor maestro esta caido, le convierten en esclavo hasta que vuelva a levantar, durante ese periodo de tiempo, un esclavo toma el role de maestro. Cuando un Maestro caido, se levanta, comienza a drenar los datos del actual maestro hasta que quedan sincronizados. Cuando terminan dicha sincronización es cuando el que ahora es Maestro pasa a ser esclavo y el que inicialmente había caído pasa a ser Maestro de nuevo.
  3. Con “tipico” me refiero a que la configuración de los servidores la ha creado alguien que no sabía como escala MongoDB respecto al numero de servidores con el que contamos. Lo normal sería que en vez de 4 fueran 6 servidores para que la replicación fuese perfecta. Con esta configuración, consigues un HA bastante robusto y ademas de eso se caiga el servidor que se caiga, nunca se quedará como maestro un arbitro. Los arbitros al tener el Oplog a 0, no almacenan base de datos, simplemente observan que si el servidor maestro esta caido, le convierten en esclavo hasta que vuelva a levantar, durante ese periodo de tiempo, un esclavo toma el role de maestro. Cuando un Maestro caido, se levanta, comienza a drenar los datos del actual maestro hasta que quedan sincronizados. Cuando terminan dicha sincronización es cuando el que ahora es Maestro pasa a ser esclavo y el que inicialmente había caído pasa a ser Maestro de nuevo.
  4. Con “tipico” me refiero a que la configuración de los servidores la ha creado alguien que no sabía como escala MongoDB respecto al numero de servidores con el que contamos. Lo normal sería que en vez de 4 fueran 6 servidores para que la replicación fuese perfecta. Con esta configuración, consigues un HA bastante robusto y ademas de eso se caiga el servidor que se caiga, nunca se quedará como maestro un arbitro. Los arbitros al tener el Oplog a 0, no almacenan base de datos, simplemente observan que si el servidor maestro esta caido, le convierten en esclavo hasta que vuelva a levantar, durante ese periodo de tiempo, un esclavo toma el role de maestro. Cuando un Maestro caido, se levanta, comienza a drenar los datos del actual maestro hasta que quedan sincronizados. Cuando terminan dicha sincronización es cuando el que ahora es Maestro pasa a ser esclavo y el que inicialmente había caído pasa a ser Maestro de nuevo.
  5. Con “tipico” me refiero a que la configuración de los servidores la ha creado alguien que no sabía como escala MongoDB respecto al numero de servidores con el que contamos. Lo normal sería que en vez de 4 fueran 6 servidores para que la replicación fuese perfecta. Con esta configuración, consigues un HA bastante robusto y ademas de eso se caiga el servidor que se caiga, nunca se quedará como maestro un arbitro. Los arbitros al tener el Oplog a 0, no almacenan base de datos, simplemente observan que si el servidor maestro esta caido, le convierten en esclavo hasta que vuelva a levantar, durante ese periodo de tiempo, un esclavo toma el role de maestro. Cuando un Maestro caido, se levanta, comienza a drenar los datos del actual maestro hasta que quedan sincronizados. Cuando terminan dicha sincronización es cuando el que ahora es Maestro pasa a ser esclavo y el que inicialmente había caído pasa a ser Maestro de nuevo.