El tema que nos ocupa hoy es Mongodb. Se trata de una base de datos Nosql que se base en un modelo orientado a documentos.
Hoy vamos a explicar cómo se instala y cómo activar la replicación de los datos entre varios servidores.
Instalación mongodb.
Aunque cada distribución tiene sus propios paquetes listos para instalarse con su correspondiente gestor de paquetes, es mejor instalar los de 10gen, que son los desarrolladores de Mongodb.
Instalación en Ubuntu.
Para importar la clave pública GPG 10gen, ejecuta lo siguiente:
:$ sudo apt-key adv –keyserver keyserver.ubuntu.com –recv 7F0CEB10
Crea el archivo / etc/apt/sources.list.d/10gen.list e incluyen la siguiente línea para el repositorio de 10gen.
:$ deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen
Actualiza el repositorio con:
$: sudo apt-get update
E instala el paquete:
:$ sudo apt-get install mongodb-10gen
Puedes iniciar el demonio con el comando:
:$ service mongodb start
Instalación en Centos.
Crea el archivo /etc/yum.repos.d/10gen.repo. Para guardar información acerca del repositorio, añade las siguientes lineas:
[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/i686
gpgcheck=0
enabled=1
Si tu sistema operativo es de 64 bits, añade estas líneas:
[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
enabled=1
Para instalar Mongodb, ejecuta este comando:
:$ yum install mongo-10gen mongo-10gen-server
Puedes iniciar el demonio con el comando:
:$ service mongodb start
Configuración de la replicación.
El archivo de configuración de mongodb está en la ruta /etc/mongodb.conf (para Ubuntu), o en /etc/mongod.conf (para Centos).
En este supuesto práctico, vamos a poner en marcha un sistema de replicación de 3 servidores Mongodb siguiendo el método «Replica set». Este método consiste es un tipo asincrónico de repliación «maestro/esclavo», que permite failover y recuperación automática de los nodos miembros del sistema.
Servidor 1:
Hostname: mongo_server1.dominio.com
Servidor 2
Hostname: mongo_server2.dominio.com
Servidor 3
Hosname: mongo_server3.dominio.com
Edita el archivo /etc/mongodb.conf (Ubuntu) o /etc/mongod.conf (Centos), y cambia o añade las siguientes lineas para que quede tal que así:
port = 27017
bind_ip = 10.8.0.10
fork = true
replSet = rs0
Para añadir un poco de seguridad, puedes hacer que Mongodb escuche en una interfaz en concreto y no en todas (tal y como viene por defecto). Para ello añade en el archivo de configuración la siguiente linea:
bind_ip = 192.168.2.5
En esta directiva pon la ip de la interfaz de red por la que quieras que escuche el demonio de Mongodb.
Reinicia el Mongodb en cada uno de los servidores.
Ahora sitúate en el servidor «mongo_server1.dominio.com» y ejecuta por consola:
:$ mongo
Con este comando entras en la consola de Mongodb. Ahora nos queda iniciar la replicación con el siguiente comando:
MongoDB shell version: 2.2.0
connecting to: test
> rs.initiate();
En este momento «mongo_server1» será el servidor principal (primario).
Después añade los otros 2 servidores:
MongoDB shell version: 2.2.0
connecting to: test
> rs.add(«mongo_server2.domino.com»);
> rs.add(«mongo_server3.dominio.com»);
Puedes comprobar el estado del sistema de replica de datos con el comando rs.status().
Para entornos en producción con un replica set de 2 miembros, lo cual no es nada recomendable, o con un número par de éstos, es necesario crear un árbitro.
Los árbitros son instancias de mongod que no reciben copia de los datos. Los árbitros existen solamente participar en las elecciones, cuando el servidor primario cae, para elegir a un nuevo primario.
Los árbitros no manejan copias de los datos, por lo que no necesita una gran cantidad de recursos y no requieren hardware adicional. Por ello puedes instalar el árbitro en cualquier otro servidor que desees, pero nunca en el primario ni en los secundarios.
MongoDB shell version: 2.2.0
connecting to: test
> rs.addArb(«[hostname]:[port]»)
Ten en cuanta que lo que se usa para añadir nodos al sistema de replicación son los nombres de los servidores (hostnames), por ello cada servidor del grupo debe poder obtener la ip de los otros 2, por lo que debes valerte de un servidor DNS que resuelva la ip de cada servidor, o bien hacer uso del archivo /etc/hosts.
Estoy tratando de hacer una replicacion usando maquinas virtuales.
Mi pregunta es la siguiente cuando le agrego las ip se la tengo que poner a cada uno de los servidores y
Cuando le pongo el dominio solo tengo que colocar las Ip de los servidores a replicar
Si pudes mandarme algun video donde lo hayan hecho seria de mucha ayuda gracias
Hola Carlos.
No tenemos vídeo explicativo, pero voy a intentar poner un ejemplo más claro:
Supongamos que tenemos 3 máquinas virtuales, como es tu caso:
virtual1 -> con ip 192.168.89.1 y hostname virtual1.dominio.com
virtual2 -> con ip 192.168.89.2 y hostname virtual2.dominio.com
virtual3 -> con ip 192.168.89.3 y hostname virtual2.dominio.com
En el archivo de configuración /etc/mongodb.conf de virtual1 pon estas lineas:
port = 27017
bind_ip = 192.168.89.1
fork = true
replSet = rs0
En el archivo de configuración /etc/mongodb.conf de virtual2 pon estas lineas:
port = 27017
bind_ip = 192.168.89.2
fork = true
replSet = rs0
Y en el archivo de configuración /etc/mongodb.conf de virtual3 pon estas lineas:
port = 27017
bind_ip = 192.168.89.3
fork = true
replSet = rs0
Recuerda reiniciar el servicio /etc/init.d/mongodb restart
Luego accede por ssh al servidor virtual1 y ejecuta:
:$ mongo
Una vez dentro de la consola de mongodb:
rs.initiate();
rs.add("virtual2.dominio.com")
rs.add("virtual3.dominio.com")
Como puedes ver es en el servidor principal (virtual1) donde se establecen cuales son los servidores secundarios.
Espero que te sirva de ayuda
epa una pregunta, yo configure las replicas, tengo 2 segundarias y una primaria, ahora necesito configurar el dbpath a cada una para que tengan la misma data, ya que las 3 manejan la data totalmente diferente :/ ayuda?
Hola.
En principio, no es necesario que todas las instancias que participan en «replica set» tengan el mismo dbpath.
Ejecuta el comando rs.status() en la consola de Mongodb en la instancia primaria y comprueba que aparezcan todas las instancias secundarias.
¿Ha probado a insertar datos en el primario y ver si se replica al resto?
Un saludo.
Hola una pregunta, ya tengo mis equipos con la replica y mi servidor arbitrario, ahora, yo tengo definido un servidor que ya contiene datos pero no es el servidor principal, como se si estos datos que contiene se estan replicando en el otro servidor secundario y en el primario, estan utilizando la misma base de datos pero solo el que contiene datos me muestra el total de espacio ocupado, los otros dos (primario y el otro secuandario) me siguen mostrando el espacio de la base de datos local de cada uno, no de la base de datos que ya contiene datos. Gracias por atender mi duda