Cómo configurar replicación en MongoDB
Configurar replicación en MongoDB es sumamente fácil. El mecanismo principal de replicación de MongoDB se llama "replica sets". Este mecanismo consiste en varios servidores de MongoDB conteniendo bases de datos que se replican entre sí. Siempre hay un primario, esta instancia es el único servidor que permite escribir en la base de datos. Los servidores utilizan unos algoritmos para "celebrar elecciones" y determinar cuál es el servidor primario. Están los secundarios, estos servidores tienen datos replicados desde el servidor primario y pudieran tomar el rol de servidor primario en caso de que este no se encuentre disponible. Finalmente, se pudiera asignar un servidor como árbitro. La única función del árbitro es dar voto cuando se elige el servidor primario. En la versión 3.0, un "replica set" puede tener 7 miembros con voto y 50 miembros sin voto. El número de servidores con voto debe ser impar, ya que un servidor debe tener una mayoría absoluta de votos para poder asumir el rol de primario. Por mayoría absoluta, quiero decir más de un 50 por ciento. Si solo hay un cincuenta por ciento de votos, ningún servidor asumiría el rol de primario.
Esta es una explicación a grandes rasgos de cómo funciona replicación en MongoDB. Hay muchas configuraciones que pueden afinar ciertas funciones dentro de MongoDB, pero hablaremos de esto en otros artículos.
En este artículo, veremos lo fácil que es configurar un "replica set". Para propósito de prueba utilizaremos un servidor CentOS. Pero claro está, por lo general se utilizarían tres servidores o más. Si necesita ayuda instalando MongoDB, en la página de documentación de MongoDB hay una explicación detallada de cómo instalarlo.
Después de instalarlo deberá crear 3 carpetas, una para cada instancia de MongoDB. Para este ejercicio crearemos las carpetas /data/logs, /data/r1, /data/r2 y /data/r3. Puede utilizar el siguiente comando:
[code language="sql"]sudo mkdir /data/logs /data/r{1,2,3} -p[/code]
Es una Buena práctica que todas las carpetas y archivos de MongoDB pertenezcan al usuario mongod. Utilize el siguiente comando para asignar a mongod como dueño de todas las carpetas bajo /data:
[code language="sql"]sudo chown mongod:mongod /data -R[/code]
Ejecute el siguiente commando:
[code language="sql"]sudo ls /data -l[/code]
Asegúrese que vea algo como lo siguiente:
[code language="sql"]ls /data/ -l
total 0
drwxr-xr-x. 2 mongod mongod 6 Mar 17 03:04 logs
drwxr-xr-x. 2 mongod mongod 6 Mar 17 03:04 r1
drwxr-xr-x. 2 mongod mongod 6 Mar 17 03:04 r2
drwxr-xr-x. 2 mongod mongod 6 Mar 17 03:04 r3[/code]
Desde este momento, todos los comandos que ejecutaremos, lo haremos como usuario mongod. Para iniciar los servicios mongod ejecute los siguientes comandos:
[code language="sql"]sudo -u mongod mongod --dbpath /data/r1
--logpath /data/logs/r1.log --replSet allsql --smallfiles
--oplogSize 128 --port 27001 --fork[/code]
[code language="sql"]sudo -u mongod mongod --dbpath /data/r2
--logpath /data/logs/r2.log --replSet allsql --smallfiles
--oplogSize 128 --port 27002 --fork[/code]
[code language="sql"]sudo -u mongod mongod --dbpath /data/r3
--logpath /data/logs/r3.log --replSet allsql --smallfiles
--oplogSize 128 --port 27003 --fork[/code]
Los commandos comienzan con sudo -u mongod. Esto es para ejecutar los comandos como el usuario mongod. Es una buena práctica ejecutar todos los comandos relacionados con MongoDB como el usuario mongod. Luego espicificamos dónde guardar los archivos y carpetas relacionadas con MongoDB en el parámetro –dbpath. El parámetro --logpath lo usamos para especificar en dónde guardamos los archivos de "log". El parámetro replSet es para especificar el nombre del "replica set". Todos los miembros de un "replica set" tienen que tener el mismo nombre en el parámetro –replSet. Si no, no podrá iniciar el "replica set". Debe tener en cuenta que MongoDB distingue mayúsculas y minúsculas. --smallfiles y --oplogSet se utiliza para controlar el tamaño de los archivos en MongoDB. Estos parámetros nunca deben utilizarse en ambiente de producción, ya que puede afectar el rendimiento de la base de datos como veremos en otros artículos. El parámetro --port se utiliza para especificar qué puerto del servidor va a utilizar. Si no especifica un puerto, tratará de utilizar el puerto 27017. Como estamos utilizando un solo servidor, debemos utilizar un puerto por cada MongoDB. El parámetro --fork es para que mongod funcione en el servidor sin bloquear la sesión que lo inició.
Ahora para poder configurar el "replica set" deberá entrar utilizando mongo en cualquiera de los mongod que inició. Puede utilizar el siguiente comando:
[code language="sql"]mongo --port 27001[/code]
Por ahora ignore las alertas que ve. No podrá hacer nada en el servidor sin que inicie el "replica set". Para iniciar el "replica set", vamos a guardar la configuración en una variable con el siguiente comando:
[code language="sql"]cfg = {"_id":"allsql", "members":[
{"_id":0, "host":"localhost:27001"},
{"_id":1, "host":"localhost:27002"},
{"_id":2, "host":"localhost:27003"}
]
}[/code]
Utilizaremos "localhost" en este ejemplo porque solo tenemos un servidor pero lo mejor es utilizar el nombre del servicor tal y como está registrado en el DNS. Utilizando la configuración guardada en cfg, ahora vamos a iniciar replicación con el siguiente comando:
[code language="sql"]rs.initiate(cfg)[/code]
Si ve el mensaje { "ok" : 1 }, listo, ya configuró replicación. Ahora asegúrese de que todo esté bien con el comando:
[code language="sql"]rs.status()[/code]
Ya configuró replicación en MongoDB.