Si eres un administrador que busca una forma automatizada de desplegar Couchbase a escala, no busques más - Chef es una gran solución de plataforma. Una vez configurada, es una solución muy limpia que puede funcionar en cualquier número de servidores físicos, virtuales o en la nube, independientemente del tamaño de la infraestructura. Chef te permite programar el despliegue de tu infraestructura utilizando código para que puedas automatizar el proceso de aprovisionamiento y despliegue sin mucho esfuerzo. 

En este blog, vamos a repasar las recetas de chef utilizadas para instalar couchbase, configurar un cluster de nodos couchbase, añadir algunos buckets y finalmente añadir replicación xdcr entre clusters.

Antes de empezar - Asegúrese de que está familiarizado con los conceptos básicos de servidor de chef, libros de cocina y chef-clientes. Chef tiene una enorme pila de plantillas, recetas, plugins cuchillo que puede ser muy útil para mantener configuraciones a gran escala. http://wiki.opscode.com tiene buenos ejemplos e información al respecto.

Configure un servidor chef, una estación de trabajo y añada algunos nodos como clientes chef. Una vez que los 3 anteriores están configurados, usted está listo para escribir su Couchbase Cookbook. Una versión bifurcada del libro de cocina opscode está aquí https://github.com/ketakigangal/couchbase

Requisitos previos 
Instale los siguientes libros de cocina antes de descargar el libro de cocina couchbase - yum, apt-get, windows, build-essential

Obtenga el libro de recetas de Couchbase
clonar git  https://github.com/ketakigangal/couchbase

Un vistazo rápido a los recursos del libro de recetas y las personalizaciones disponibles
En función de las necesidades de su sistema, puede añadir atributos, recursos y plantillas más flexibles para los nodos y clústeres. Idealmente utilizar las bolsas de datos para definir el nombre de tu cluster, aquí he usado role para describir una implementación muy simple de dos clusters - "cluster_oeste" y "cluster_este", más detalles adelante.

Atributos
El server.rb y client.rb tienen la configuración por defecto para el servidor y los clientes. Asegúrese de reflejar las versiones de couchbase necesarias, nombre de usuario/contraseña para el server.rb en los atributos. Por ejemplo, lo siguiente instala un servidor 2.0.1-community edition -

por defecto[couchbase][servidor][edición] = "comunidad"

por defecto[couchbase][servidor][versión] = “2.0.1”

por defecto[couchbase][servidor][nombre de usuario] = "Administrador"

por defecto[couchbase][servidor][contraseña] = "contraseña"

Recetas

En server.rb y client.rb contienen la lógica para instalar y configurar Couchbase-Server y Clients respectivamente. Adicionalmente el test_buckets.rb tiene código de ejemplo para crear cubos y jugar con la configuración de los cubos.

En setup_cluster.rb se puede utilizar para configurar un clúster, tenga en cuenta que esto requiere un rol "west_cluster" ( say) que se asignará a cada uno de los nodos del clúster. Requisito previo para ejecutar esto es asegurarse de que cada uno de los nodos tiene un servidor couchbase instalado e iniciado.

Del mismo modo setup_xdcr.rb se utiliza para configurar xdcr entre dos clusters. El prerrequisito para usar esto es que ya tenga 2 clusters couchbase configurados con roles "east_cluster" y "west_cluster".

* Nota : Para que este script se ejecute, debe tener nodos asignados con roles "cluster_este", "cluster_oeste" para dos clusters separados.

Bibliotecas

Los recursos y proveedores se definen a nivel de nodo, cluster, bucket en este directorio.

Sube el Libro de Cocina usando -

cuchillo cookbook subir couchbase

Añade recetas y roles al nodo run_list utilizando -

knife node run_list add fqdn-su-nombre-de-nodo "recipe[couchbase::server]"

knife node run_list add fqdn-su-nombre-de-nodo "recipe[couchbase::setup_cluster]"

knife node run_list add fqdn-su-nombre-de-nodo "recipe[couchbase::test_buckets]"

knife node run_list add role fqdn-your-node-name 'role[west_cluster]'

Lo anterior añadirá las recetas server, setup_cluster, test_bucket para su ejecución ( en ese orden) en el nodo chef-client. Aquí, hemos asignado un rol "west_cluster" a los nodos para formar un west_cluster.

knife show nodo fqdn-nombre-de-tu-nodo

   "receta[couchbase::servidor]",    

   "recipe[couchbase::setup_cluster]",

   "recipe[couchbase::test_buckets]",

   "role[west_cluster]"

 

Una vez que haya cargado el libro de recetas en el servidor chef, puede utilizar el cliente chef para ejecutar el libro de recetas o las recetas.

Chef-Client

Desde el cliente chef,

   sudo chef-client (puede utilizar -l debug para obtener información de registro a nivel de depuración).  

Como salida, verá un mensaje similar al siguiente - 

* couchbase_bucket[modificación % modificado] acción crear[2013-07-08T22:57:49-07:00] INFO: Procesando couchbase_bucket[modificado modificación %] action create (couchbase::test_buckets línea 77)

[2013-07-08T22:57:49-07:00] INFO: couchbase_bucket[modificación % modificado] memory_quota_mb cambiado a 500

[2013-07-08T22:57:49-07:00] INFO: Chef Run completa en 187.264660646 segundos

[2013-07-08T22:57:49-07:00] INFO: Ejecutando manejadores de informes

[2013-07-08T22:57:49-07:00] INFO: Manejadores de informes completos

¡Y listo! 

Pasos para ejecutar la receta "setup_xdcr.rb"

lista de funciones del cuchillo

cluster_este

cluster_oeste

knife node edit fqdn-nombre-de-tu-nodo

   "recipe[couchbase::setup_cluster]",

   "recipe[couchbase::test_buckets]",

   "role[east_cluster]"

lo mismo para el clúster oeste.

knife search node "role:west_cluster" -i

2 artículos encontrados

nodo1-fqdn

nodo2-fqdn

Configurar xdcr añadiendo la receta "setup_xdcr" al cluster de origen, digamos "east_cluster".

knife node edit fqdn-nombre-de-tu-nodo

 "recipe[couchbase::setup_xdcr]",

  "role[east_cluster]"

Esto creará una referencia de cluster remoto xdcr e iniciará la replicación desde el "cluster_este" al "cluster_oeste".

Para clústeres a gran escala, el uso de data-bags es ideal para definir y mantener clústeres. Asimismo, el mantenimiento de plantillas para las operaciones de clúster y la creación de recursos serán útiles en la configuración inicial. ¡Que aproveche!

Autor

Publicado por Ketaki Gangal

Ketaki Gangal es Arquitecto de Soluciones en Couchbase. Tiene experiencia en tecnologías como Python, NoSQL, SDKs, Docker, Splunk, Nagios, Kubernetes, AWS.

7 Comentarios

  1. Hola Ketaki,

    Soy el mantenedor del libro de cocina "couchbase". Me encantaría a) que integraras los cambios de tu fork en él, o b) dar acceso al mantenedor a CouchBase. ¿Serías tan amable de ponerte en contacto?

    - Julian (jdunn@opscode.com)

    1. Hola Julian,

      Claro, me pondré en contacto contigo sin conexión.

      - Ketaki

  2. ¿Puedo ver cómo es su archivo de roles?

  3. Hola,

    Estoy teniendo problemas con la receta setup_cluster.rb - ¿hay alguna manera de conseguir que tome el nombre del cluster de los atributos override? Parece que establece el nombre del cluster desde el nombre del rol, lo que significa que no puedo usar un FQDN, lo que hace difícil conseguir que los nodos se unan sin usar archivos hosts locales, etc.

    El atributo cluster_name parece ser ignorado: He intentado las siguientes anulaciones:

    {\ "defaults":{\ "cluster_name":\ "default.fqdn.local",{\ "couchbase":{\ "server":{\ "password":\ "changeoninstall"}},{\ "overrides":{\ "cluster_name":\ "override.fqdn.local\",³"couchbase\":³"server\":³"password\":³"changeoninstall\"}}}}

    (donde default.fqdn.local y override.fqdn.local se resuelven correctamente)

    Las anulaciones de contraseña funcionan bien, pero cluster_name parece ser ignorado :-(

    Agradecería cualquier ayuda.

    Saludos,
    Alan

    1. Hola Alan, sólo por curiosidad, ¿pudiste resolver este problema de establecer cluster_name a través de un atributo override?

      1. Hola Terry - Lo siento, no, no lo era, en realidad estoy manualmente clustering hasta después de la implementación.

        1. el cluster_name está codificado en setup_cluster.rb

          #cluster_name = nodo[\"cluster_name\"]

          cluster_name = \ "west_cluster\"

Dejar una respuesta