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
- 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.
- Si el/los servidores no disponen de mongo, instalar mongo (mediante el repositorio oficial 10gen).
- 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.
- 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:
- 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.
- Repetir el proceso para el resto de config servers que se deseen configurar.
mkdir /config_srv
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
echo «Starting config server»
rm /config_srv/mongod.lock
/usr/bin/mongod -f /etc/mongo/configsrv.confg
sleep 1
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.
- 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:
- Parar todos los procesos del cluster (mongod, mongos, config_servers y árbitros).
- 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:
- Una vez copiados los datos del config server original a los nuevos config servers, iniciaremos todos los config servers.
- 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).
- Y finalmente iniciaremos los mongod y los árbitros.
tar -czvf config.tar.gz /config_srv01
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:
- Instalar mongod en el servidor de aplicaciones
- 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».
- Iniciar mongos y testear el funcionamiento.
- 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.
Como hacemos para hacer sharding partiendo de una sola base de datos? Me estoy quedando sin espacio en disco y necesito mas nodos, pero no quiero perder los datos que ya tengo.
Sé que llego muy tarde, pero aquí está la respuesta:
http://two4seven.me/sharding/
Adri