MongoDB replicada para desarrollo local utilizando Podman
Configurar un Replica Set en MongoDB es esencial cuando trabajamos con funcionalidades como Transactions. Aunque normalmente se piensa en clústeres de varios nodos, para el desarrollo local es suficiente y mucho más eficiente utilizar una réplica de un solo nodo. En este post vamos a levantar una base de datos replicada de MongoDB utilizando Podman, aunque también es perfectamente viable hacerlo utilizando Docker, solo hay que cambiar el comando podman por docker.
Archivo de configuración compose
El siguiente archivo podman-compose.yaml define el servicio con el parámetro --replSet, que activa el modo de replicación:
services:
db1:
restart: always
image: mongo:latest
command: --replSet rs0 --port 27017 --bind_ip_all
ports:
- 27017:27017
volumes:
- db1:/data/db
volumes:
db1:podman-compose.yaml
Pasos para levantar el entorno
- Iniciar el contenedor: Ejecuta el comando para levantar la máquina virtual en segundo plano:
# Si estás en la ubicación del archivo podman-compose.yml
podman-compose up -d
# Si estas en otro directorio debes apuntar al podman-compose.yml
podman-compose -p mongo -f /ubidacion/del/compose/podman-compose.yml up -d- Acceder al shell de MongoDB: Una vez que el contenedor esté corriendo, entra para realizar la configuración inicial:
# Listar contendores
podman ps
# Accede al contenedor
podman exec -it <id-del-contenedor> mongo
# Ejemplo
podman exec -it 1a5f5e82bed8 mongoshInicialización del replica set
Dentro de la terminal de MongoDB (mongosh), ejecuta el siguiente comando para inicializar el conjunto de réplicas con un solo miembro:
rs.initiate({
"_id": "rs0",
"members": [
{
"_id": 0,
"host": "localhost:27017",
"priority": 1
}
]
})Conexión desde aplicaciones
Por último para verificar que todo ha ido correctamente debes conectarte desde tu mongosh local:
mongosh "mongodb://localhost?replicaSet=rs0"Notas importantes sobre persistencia
- Reinicio del sistema: Al reiniciar tu computadora, es necesario volver a ejecutar podman-compose up para que el contenedor esté disponible.
- Automatización: La opción podman generate systemd se encuentra deprecada actualmente. Aunque existen alternativas como Quadlets, para un flujo de trabajo de desarrollo ágil, el uso de Compose suele ser suficiente.