MongoDB: Añadir miembros al shard

23 mayo 2012 at 15:19 by Adrián Pérez

MongoDB
Si partimos de un entorno con sharding y replica sets, es posible que tengamos un entorno con un único mongos y un único config_server, cuando idealmente deberíamos tener 3 config_servers y tantos mongos como servidores de aplicaciones que conectan con mongo (idealmente, cada servidor de aplicaciones tendrá su propio mongos local). Ésta no es una situación extraña, puesto que se recoge en la documentación oficial de mongo, "Upgrading from one config server to three".

Si ya se dispone de un entorno en producción como el anterior, se deberá seguir el siguiente proceso para añadir los config_servers y mongos extras:

Config Servers - preparar el entorno

  1. Decidir los servidores donde se alojarán los nuevos config servers, teniendo en cuenta que un config server apenas consume recursos y pueden ubicarse en cualquier servidor sin necesidad de ser dedicado (Fuente). Sin embargo, sí que es verdad que el directorio de datos del config server, puede llegar a ocupar varias gigas, dependiendo del tamaño de las bases de datos.
  2. Si el/los servidores no disponen de mongo, instalar mongo (mediante el repositorio oficial 10gen).
  3. Una vez se tenga mongo instalado en los servidores que alojarán los config servers, preparar el directorio donde se ubicarán los datos del config server. Por ejemplo, si se desea almacenar los datos en /config_srv, se deberá crear el directorio, con propietario root:root y permisos 755. Éste será el directorio a indicarle al parámetro "dbpath" en la configuración del config server.
  4. mkdir /config_srv

  5. Posteriormente, se deberá definir el fichero de configuración del config server, por ejemplo en /etc/mongo/configsrv.confg, con una configuración similar a la siguiente, indicándo el dbpath creado en el punto anterior, así como la dirección ip y puerto de escucha, fichero de logs y pid:
  6. dbpath = /config_srv
    bind_ip = 80.81.82.83
    noauth = true
    verbose = false
    port = 27019
    logpath = /var/log/mongod_configsrv.log
    configsvr= true
    fork = true
    pidfilepath=/var/run/mongodb/mongod_configsrv.pid

  7. Si se dispone de algún script de inicio, se deberán incluir los comandos para iniciar el config server durante el proceso de boot. Si no, se puede indicar en el /etc/rc.local.
  8. echo "Starting config server"
    rm /config_srv/mongod.lock
    /usr/bin/mongod -f /etc/mongo/configsrv.confg
    sleep 1

  9. Repetir el proceso para el resto de config servers que se deseen configurar.

MongoS - Adaptar al nuevo entorno

Una vez se tenga configurados (que no iniciados) los config servers, se deberá modificar el fichero de configuración del mongos, para usar a todos los config servers añadidos, más el ya existente.

  1. Se deberá editar el fichero de configuración del mongos, para incluir en el parámetro "configdb" los nuevos config servers mediante IP y puerto (Fuente)

configdb = c1.acme.com:27019,c2.acme.com:27019,c3.acme.com:27019

Es importante no reiniciar el proceso mongos para aplicar los cambios, ya que ésto se realizará a posteriori siguiendo un orden específico.

Config Servers - Aplicar los cambios

Para aplicar los cambios, desafortunadamente se deberá parar todo el cluster, siguiendo los pasos descritos a continuación, en orden:

  1. Parar todos los procesos del cluster (mongod, mongos, config_servers y árbitros).
  2. Copiar todos los subdirectorios de datos del único config server del clúster a los directorios de datos de los nuevos config servers recién configurados. Una opción es usar el comando tar para comprimir todo el árbol de subdirectorios con los datos del config server original y facilitar así la copia de datos:
  3. tar -czvf config.tar.gz /config_srv01

  4. Una vez copiados los datos del config server original a los nuevos config servers, iniciaremos todos los config servers.
  5. A continuación, iniciaremos el (o los) mongos (que ya estarán usando todos los config servers, puesto que así se ha configurado en el apartado anterior).
  6. Y finalmente iniciaremos los mongod y los árbitros.

MongoS - Añadir nuevos mongos

Una vez configurados los nuevos config servers, se podrán añadir nuevos procesos mongos en los servidores de aplicaciones que usen mongo, para mejorar el rendimiento global del cluster mongo. Para ello, bastará con:

  1. Instalar mongod en el servidor de aplicaciones
  2. Crear un fichero de configuración de mongos indicando el "configdb" con los 3 config servers, tal y como se ha indicado en el punto 1 del apartado "MongoS - Adaptar al nuevo entorno".
  3. Iniciar mongos y testear el funcionamiento.
  4. Adaptar el código del proyecto del servidor de aplicaciones para usar el mongos local y en caso de fallo, el mongos remoto, para asegurar así, alta disponibilidad y mejora de rendimiento.