El contenedor Docker de Couchbase puede ejecutarse fácilmente en diversas plataformas de orquestación:
- Contenedor Docker Couchbase
- Couchbase en Docker Swarm
- Couchbase en Kubernetes
- Couchbase en OpenShift 3
Contenedor Docker utilizando Apache Mesos y Marathon explicaba cómo configurar Mesos, Marathon y ejecutar una imagen Docker sencilla. La configuración era bastante envolvente y un poco
flaky. Es necesario descargar e instalar Mesos Master y Slave, ZooKeeper, Docker Engine y Marathon. En algunos casos, es necesario añadir primero el repositorio correcto. Estos componentes tienen que hablar entre sí y por lo tanto debe ser configurado
en consecuencia. Incluso si se supera esa configuración, ¿cómo se supervisa toda la infraestructura como una sola entidad?
Conozca DC/OS - Sistema operativo para centros de datos. Es un sistema operativo distribuido que utiliza Apache Mesos
como núcleo.
DC/OS puede instalarse
de diversas maneras:
- Local con Vagrant
- Nube utilizando Amazon/CloudFormation, Microsoft Azure y Packet
- En local con CentOS o CoreOS
Este blog mostrará cómo configurar un Clúster DC/OS utilizando plantillas CloudFormation en Amazon y ejecuta un contenedor Docker de Couchbase.
Iniciar clúster DC/OS
Asigne un nombre a la plantilla, seleccione un llavero creado previamente y cambie el número de esclavos:
Verifique la configuración:
Haga clic en "Reconozco que..." y en Crear para iniciar la creación de la plantilla. Estado de la pila CloudFormation aparece la página:
Asegúrese de elegir la región adecuada. Tras unos 10-15 minutos, el estado cambia:
Espere a que el estado cambie de CREAR_EN_PROGRESO
a CREAR_COMPLETAR.
Descarga y configuración de DC/OS CLI
DC/OS CLI se puede utilizar para gestionar los nodos del clúster, instalar paquetes de DC/OS, inspeccionar el estado del clúster y administrar los subcomandos de servicio de DC/OS. Instalar DC/OS CLI en
su máquina local.
En su Estado de la pila CloudFormation seleccione la pila creada, Salidas
y copie la dirección de
Maestro Mesos
.
Configure la CLI de DC/OS para utilizar este clúster:
1 2 |
./papelera/dcos config configure núcleo.dcos_url https://couchbase-ElasticL-14LTDN783Y89T-1791879285.us-west-1.elb.amazonaws.com [núcleo.dcos_url]: cambiado de http://couchbase-ElasticL-UJ5K6BOZQX59-570103311.us-west-1.elb.amazonaws.com a https://couchbase-ElasticL-14LTDN783Y89T-1791879285.us-west-1.elb.amazonaws.com |
Autentícate:
1 2 3 4 5 6 7 8 |
./papelera/dcos auth inicio de sesión Eliminado [núcleo.dcos_acs_token] Por favor, ir a el siguiente enlace en su navegador: https://couchbase-ElasticL-14LTDN783Y89T-1791879285.us-west-1.elb.amazonaws.com/login?redirect_uri=urn:ietf:wg:oauth:2.0:oob Entre en autenticación ficha: |
Introduzca la URL en el navegador, proceda a la URL no segura:
Copie el token en el portapapeles:
Pegue el token de autenticación en la ventana del terminal:
1 2 3 |
Entre en autenticación ficha: eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ik9UQkVOakZFTWtWQ09VRTRPRVpGTlRNMFJrWXlRa015Tnprd1JrSkVRemRCTWpBM1FqYzVOZyJ9.eyJlbWFpbCI6ImFydW4uZ3VwdGFAZ21haWwuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImlzcyI6Imh0dHBzOi8vZGNvcy5hdXRoMC5jb20vIiwic3ViIjoiZ29vZ2xlLW9hdXRoMnwxMDExOTUyMTI0MDUxOTA0Njc1MTIiLCJhdWQiOiIzeUY1VE9TemRsSTQ1UTF4c3B4emVvR0JlOWZOeG05bSIsImV4cCI6MTQ2MzM1MjA1MSwiaWF0IjoxNDYyOTIwMDUxfQ.tFOy6GBPhnDbP0hI1ZU6jjlogHi4DX2bAGcdYsLywfCEMmv5OU9fUL88v2Kebjgd6gNAJoDF8QiO8zkQ3c4PGifXjiEoay8USjSWpnMbbezkH3AwIZM_-WNVVm0nfIBnCiY5wIgHkCpG_n4oBGdBbMgggtRPUrwPasNPtC_eYbQfwJeM3ByTUaTsarNe3FERbTpQbhKx2Lfc8Xp8AXuW8Up65SbOZr3Kp_jehiLgR-DL6llB4wZDopf8mjnq_5lpOYMtSaHPTlA33tdnhmHi6dPCPeRQEI1qBM6sWUWKs02kT1u42nOF9IYrKrfkzjb4LxwtZdsQt8Jb8CtJHkU0KA [núcleo.dcos_acs_token]: configure Inicio de sesión éxito! |
Mesos y Marathon UI
Mesos UI está disponible utilizando la dirección del maestro Mesos:
Haga clic en Servicios
para ver el servicio Marathon ya instalado:
Haga clic en maratón para ver la lista de tareas:
Como era de esperar para un clúster recién creado, aún no se ha asignado ninguna tarea. Haga clic en Nodos
para ver los nodos:
Instalación y configuración de Marathon Load Balancer
Los nodos esclavos de DC/OS no están expuestos directamente en Internet. Se puede configurar un equilibrador de carga "externo" para exponer las tareas que se ejecutan en los esclavos. Maratón-lbabreviatura de Maratón
Load Balancer, es un equilibrador de carga disponible como servicio Mesos. Se basa en HAProxy que proporciona proxy y balanceo de carga para aplicaciones basadas en TCP y HTTP, con características como soporte SSL, compresión HTTP, comprobación de salud y más.
Marathon-lb se suscribe al bus de eventos de Marathon y actualiza la configuración de HAProxy en tiempo real.
1 2 3 4 5 6 |
dcos paquete instale maratón-lb Nosotros recomiende a mínimo de 0.5 CPUs y 256 MB de RAM disponible para el Maratón-LB DCOS Servicio. Continúe en instalación de? [sí/no] sí Instalación de Maratón aplicación para paquete [maratón-lb] versión [1.2.1] Maratón-lb DCOS Servicio tiene ha sido con éxito instalado! Véase https://github.com/mesosphere/marathon-lb para la documentación. |
La interfaz de usuario del servicio Marathon mostrará la tarea LB en ejecución:
AWS Load Balancer permite los puertos 80 y 443 por defecto. Ejecutaremos un servidor Couchbase que se expondrá en el puerto 8091.
En Estado de la pila CloudFormation copie el valor de Valores
columna de PublicSlaveDnsAddress
:
En Consola de AWS, seleccione Balanceadores de cargaañada una nueva regla de cortafuegos para permitir el puerto 8091 en TCP:
Ejecutar el contenedor Docker de Couchbase Server en DC/OS
Ejecute el contenedor Docker de Couchbase Server en DC/OS utilizando el siguiente archivo de configuración:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
{ "id": "couchbase-mesos", "contenedor": { "tipo": "DOCKER", "docker": { "imagen": "arungupta/couchbase", "red": "PUENTE", "portMappings": [ { "hostPort": 0, "containerPort": 8091, "servicePort": 8091 }, { "hostPort": 0, "containerPort": 8092, "servicePort": 8092 }, { "hostPort": 0, "containerPort": 8093, "servicePort": 8093 }, { "hostPort": 0, "containerPort": 11210, "servicePort": 11210 } ], "forcePullImage":true } }, "instancias": 1, "cpus": 2.0, "mem": 2048, "etiquetas":{ "HAPROXY_GROUP": "externo" } } |
Este archivo de configuración utiliza arungupta/couchbase imagen que configura el Servidor Couchbase utilizando API REST de Couchbase.
Esta imagen es Imagen Docker de Couchbase. cpus
y mem
definen la memoria de procesamiento necesaria para ejecutar esta tarea. Indique al comando
para ejecutar Couchbase en un clúster DC/OS:
1 |
~/herramientas/dcos/dcos/papelera/dcos maratón aplicación añada couchbase-mesos.json |
Utilice la copia anterior para PublicSlaveDnsAddress
y acceder al Consola web de Couchbase en http://:8091. En nuestro caso, la URL es: http://couchbase-publicsl-vjzmwpa38k6d-429093455.us-west-1.elb.amazonaws.com:8091/index.html.
Esto muestra la página de inicio de sesión como:
Introduzca las credenciales de inicio de sesión como Administrador
y contraseña
:
Haga clic en Iniciar sesión
para ver:
Más información Consola web de Couchbase.
La interfaz de usuario de Maratón se actualiza para mostrar todos los servicios en ejecución:
El registro de la imagen Docker de Couchbase se puede ver en Log Viewer:
Y la vista de salida estándar:
El panel de control de Mesos se actualiza para mostrar los recursos consumidos:
Por último, la pila completa se puede eliminar desde la página de plantillas StackFormation:
Más información:
- Últimos documentos sobre DC/OS
- Guía de instalación de DC/OS
- Introducción a DC/OS
- Gestione su clúster DC/OS
- Descubrimiento de servicios y equilibrio de carga con DC/OS
- Canal Slack de DC/OS
- Introducción a Couchbase
¡Que aproveche!
Ahora, has visto Couchbase en Docker Swarm, Couchbase en Kubernetes, Couchbase en OpenShift 3.
Este blog mostraba cómo ejecutar una imagen Docker de Couchbase en Mesos y DC/OS.
¿Dónde más le gustaría que se ejecutara el contenedor Couchbase?
Hola Arun Gupta,
En primer lugar, gracias por todas tus aportaciones, nos han ayudado mucho a trabajar con Couchbase.
En realidad tengo una pregunta: estamos tratando de ejecutar una instancia de Couchbase en DCOS. Todo está funcionando bien, excepto que no somos capaces de acceder a esta instancia a través del cliente SDK "cbc n1ql..." o la biblioteca PHP (por ejemplo, la clase CouchbaseN1qlQuery). REST API está funcionando bien.
Constantemente obtenemos LCB_ECONNREFUSED o LCB_NETWORK_ERROR dependiendo de la acción intentada.
Instalamos la biblioteca PHP utilizando https://developer.couchbase.com/documentation/server/4.6/sdk/php/start-using-sdk.html.
Aquí está el puerto de enrutamiento que ponemos en el maratón json :
"docker": {
"image": "registry.marathon.l4lb.thisdcos.directory/couchbase/server:4.6.1",
"red": "PUENTE",
"portMappings": [
{
"containerPort": 8091,
"hostPort": 0,
"servicePort": 10114,
"protocolo": "tcp",
"etiquetas": {
"VIP_0": "/projects/ccu/couchbase/couchbaseccu:8091"
}
},
{
"containerPort": 8092,
"hostPort": 0,
"servicePort": 10115,
"protocolo": "tcp",
"etiquetas": {
"VIP_0": "/projects/ccu/couchbase/couchbaseccu:8092"
}
},
{
"containerPort": 8093,
"hostPort": 0,
"servicePort": 10116,
"protocolo": "tcp",
"etiquetas": {
"VIP_0": "/projects/ccu/couchbase/couchbaseccu:8093"
}
},
{
"containerPort": 8094,
"hostPort": 0,
"servicePort": 10117,
"protocolo": "tcp",
"etiquetas": {
"VIP_0": "/projects/ccu/couchbase/couchbaseccu:8094"
}
},
{
"containerPort": 11210,
"hostPort": 0,
"servicePort": 10118,
"protocolo": "tcp",
"etiquetas": {
"VIP_0": "/projects/ccu/couchbase/couchbaseccu:11210"
}
}
Agradecería cualquier ayuda,
Gracias
cbc n1ql -U couchbase://couchbasecouchbaseccu.marathon.l4lb.thisdcos.directory/bucket_name 'CREATE INDEX profile_given_name...'
salidas772ms [I3bcc1f16] {7396} [TRACE] (http-io - L:249) POST http://172.17.0.28:8093/query/service. Body=192 bytes
772ms [I3bcc1f16] {7396} [DEBUG] (lcbio_mgr - L:448) [DEBUG] (lcbio_mgr - L:448) (HE=0xaf2520) Creando nueva conexión porque no hay ninguna disponible en el pool.
773ms [I3bcc1f16] {7396} [TRACE] (lcbio_mgr - L:359) (HE=0xaf2520) [TRACE] (lcbio_mgr - L:359) (HE=0xaf2520) Nueva entrada en el pool: I=0xaf2940
773ms [I3bcc1f16] {7396} [INFO] (conexión - L:474) (SOCK=000000005708fc0d) Iniciando. Tiempo de espera=75000000us
773ms [I3bcc1f16] {7396} [DEBUG] (conexión - L:238) [DEBUG] (conexión - L:238) (SOCK=000000005708fc0d) Creado nuevo socket con FD=7
773ms [I3bcc1f16] {7396} [TRACE] (conexión - L:339) [TRACE] (connection - L:339) (SOCK=000000005708fc0d) Programando vigilante de E/S para finalización de conexión asíncrona.
773ms [I3bcc1f16] {7396} [TRACE] (conexión - L:354) (SOCK=000000005708fc0d) connect() falló. errno=111 [Conexión rechazada]
773ms [I3bcc1f16] {7396} [ERROR] (conexión - L:156) (SOCK=000000005708fc0d) Error al establecer la conexión: LCB_ECONNREFUSED (0x2C), os errno=111
773ms [I3bcc1f16] {7396} [DEBUG] (lcbio_mgr - L:318) [DEBUG] (lcbio_mgr - L:318) (HE=0xaf2520) Resultado recibido para I=0xaf2940,C=(nil); E=0x2c
773ms [I3bcc1f16] {7396} [ERROR] (http-io - L:226) [ERROR] (http-io - L:226) Error en la conexión con Err=0x2c
773ms [I3bcc1f16] {7396} [WARN] (http-io - L:85) No reintentando. No hay nodos disponibles
773ms [I3bcc1f16] {7396} [TRACE] (confmon - L:275) [TRACE] (confmon - L:275) Actualizando el mapa de cluster actual