Buenas prácticas para plataformas virtualizadas proporcionan las mejores prácticas para ejecutar Couchbase en una plataforma virtualizada como Amazon Web Services y Azure.
Además, también proporciona algunas recomendaciones para ejecutarlo como contenedor Docker.
Una de las recomendaciones es mapear los datos específicos del nodo Couchbase a una carpeta local.
Entendámoslo con más detalle.
Almacenamiento implícito por contenedor
Si un contenedor Couchbase se inicia como:
1 |
docker ejecute -d -p 8091-8093:8091-8093 -p 11210:11210 --nombre db couchbase/servidor:arenero |
Este contenedor:
- Se inicia en modo independiente utilizando
-d
- Los distintos puertos de consulta, almacenamiento en caché y administración se asignan mediante
-p
- Se proporciona un nombre utilizando
--name
- La imagen es
couchbase/servidor:sandbox
Por defecto, los datos del contenedor se almacenan en un archivo volumen gestionado. Comprobación de los montajes de volumen mediante el docker inspeccionar
muestra:
1 2 3 4 5 6 7 8 9 10 11 12 |
docker inspeccionar --formato '{{json .Montajes }}' db | jq [ { "Nombre": "aa3c06f9c506d52bfb5d3d265f7b63045df0fea996998f12ce08b2543345e948", "Fuente": "/var/lib/docker/volumes/aa3c06f9c506d52bfb5d3d265f7b63045df0fea996998f12ce08b2543345e948/_data", "Destino": "/opt/couchbase/var", "Conductor": "local", "Modo": "", "RW": verdadero, "Propagación": "" } ] |
Los datos de Couchbase se almacenan en el sistema de archivos del contenedor definido por el valor de Fuente
atributo. Para Docker para Mac o Windows, esto puede verificarse accediendo al sistema de archivos raíz:
1 |
docker ejecute -it --pid=host --privilegiado debian:jessie nsenter -t 1 -m -p -n |
En un equipo Linux, esto puede verificarse directamente en el sistema de archivos del host.
Ahora puedes ver el directorio de datos:
1 2 |
010e52853bc6:~# ls /var/lib/docker/volumes | grep aa3c aa3c06f9c506d52bfb5d3d265f7b63045df0fea996998f12ce08b2543345e948 |
Se crea un nuevo directorio para una nueva ejecución del contenedor. Este directorio sigue existiendo cuando el contenedor se detiene y se elimina, pero ya no es fácilmente accesible. Por lo tanto, no se conserva ningún dato al reiniciar el contenedor. El volumen puede ser explícitamente
eliminado, junto con el contenedor, utilizando el comando:
1 |
docker rm -v db |
Si el contenedor se cierra, se pierde todo el estado de la aplicación.
Asignación explícita de directorios de host
Ahora, vamos a iniciar un contenedor Couchbase con mapeo explícito de volúmenes:
1 |
docker ejecute -d -p 8091-8093:8091-8093 -p 11210:11210 --nombre db -v ~/couchbase:/op/couchbase/var couchbase/servidor:arenero |
Este contenedor es muy similar al iniciado anteriormente. La principal diferencia es que un directorio del host ~/couchbase
se asigna a un directorio del contenedor /opt/couchbase/var
. El contenedor Couchbase persiste
cualquier dato en /opt/couchbase/var
en el sistema de archivos del contenedor. Ahora ese directorio es mapeado a un directorio en el sistema de archivos del host. Esto permite mantener el estado del contenedor fuera del sistema de archivos del host. La dirección
evita el sistema de archivos de unión utilizado por Docker y expone el sistema de archivos del host al contenedor. Esto permite que el estado persista a través de los reinicios del contenedor. El nuevo contenedor sólo necesita comenzar con exactamente el mismo mapeo de volúmenes. Más información
sobre el contenedor puede verse como:
1 |
docker inspeccionar --formato '{{json .Montajes }}' db | jq |
jq es un procesador JSON que debe instalarse por separado. Y la salida se muestra como:
1 2 3 4 5 6 7 8 9 |
[ { "Fuente": "/Usuarios/arungupta/couchbase", "Destino": "/opt/couchbase/var", "Modo": "", "RW": verdadero, "Propagación": "rprivate" } ] |
Muestra el directorio de origen y de destino. RW
muestra que el volumen es de lectura/escritura. Si el contenedor se inicia utilizando Docker para Mac, entonces Consola web de Couchbase es
accesible en http://localhost:8091. El sitio Cubos de datos
muestra los valores por defecto viaje-muestra
cubo:
Haga clic en Crear nuevo cubo de datos
para crear un nuevo cubo de datos. Dale el nombre muestra
:
En Cubos de datos
se actualiza con este cubo recién creado:
Ahora detente y retira el contenedor:
1 2 |
docker stop db docker rm db |
Inicie de nuevo el contenedor utilizando el mismo comando:
1 |
docker ejecute -d -p 8091-8093:8091-8093 -p 11210:11210 --nombre db -v ~/couchbase:/op/couchbase/var couchbase/servidor:arenero |
Cubos de datos
mostrará los mismos dos buckets en la Consola Web de Couchbase. En este caso, si el contenedor se inicia en un host diferente, el estado no estará disponible. O si el host muere entonces el estado se pierde.
Una alternativa y una forma más robusta e infalible de gestionar la persistencia en contenedores es utilizar un sistema de archivos de red compartido como Ceph, GlusterFS o Sistema de archivos de red.
Otros métodos habituales son Plugins de volumen Docker como Flocker de ClusterHQ o almacenamiento definido por software
como PortWorx. Todas estas técnicas de almacenamiento simplifican la forma de guardar el estado de un contenedor en un entorno multicontenedor multihost. Un futuro blog cubrirá estas técnicas en detalle.
Más información en Gestión de datos en contenedores.
couchbase.com/contenedores proporcionan más detalles sobre cómo ejecutar Couchbase en diferentes marcos de contenedores.
Más información sobre Couchbase:
Para la posteridad, el enfoque anterior no funcionará ya que la dirección IP en el contenedor cambiará al reiniciar.
Ver:
https://github.com/couchbase/docker/issues/82
https://github.com/couchbase/kubernetes/issues/27