Arkadiusz Borucki trabaja como a Ingeniero de fiabilidad de sitios en Amadeus, centrado en bases de datos NoSQL y automatización. En su trabajo diario, utiliza Couchbase, MongoDB, Oracle, Python y Ansible. Es un autoproclamado entusiasta de los grandes datos, interesado en las tecnologías de almacenamiento de datos, sistemas distribuidos, análisis y automatización. Es ponente en varias conferencias y grupos de usuarios en Estados Unidos y Europa. Puedes encontrarle en Twitter en @_Aras_B
{{ Couchbase - escribiendo tu primera automatización Ansible }}
Couchbase es una tecnología moderna, rápida, escalable y fácil de automatizar. Cuando estás ejecutando una granja de Couchbase con miles de nodos no quieres tener que iniciar sesión en cada máquina y aplicar la configuración manualmente. Esto podría resultar en una enorme sobrecarga, inconsistencias y errores humanos. Una buena solución es empezar a usar Ansible para la automatización y orquestación de su granja. Puede ejecutar sistema operativo de Ansible, make API de Couchbase desde Ansible, o utilizar Couchbase CLI desde Ansible. Este blog te mostrará cómo empezar a usar Ansible con tu granja de Couchbase.
Cuando se crea una automatización Ansible para un Clúster Couchbase deberías pensar en lo que quieres conseguir. Si no quieres aplicar un conjunto complicado de comandos en tu granja de Couchbase la solución más simple es crear un playbook básico de Ansible y poner las tareas de tu playbook en un orden específico. Esta solución es muy simple y rápida. La sintaxis de un playbook no es complicada y la creación de un playbook básico sólo lleva unos minutos. Los playbooks son esencialmente conjuntos de instrucciones (plays) que enviarás a tu host o grupo de hosts. Ansible ejecutará esas instrucciones en los objetivos y le devolverá el código de retorno. Podrás validar si las instrucciones se han aplicado correctamente o no. Así es básicamente como funciona un playbook.
Si quieres conseguir resultados más complicados deberías aprovechar los roles de Ansible y organizar tus tareas en roles. Los roles no son más que una abstracción adicional para hacer tu playbook más modular. Un rol es un conjunto de tareas y archivos adicionales para configurar tu entorno Couchbase. Los roles de Ansible serán descritos en breve.
{{ Playbook }}
Vamos a construir nuestro primer playbook. Este playbook instalará Couchbase Server en nuestros hosts y pondrá el servidor en marcha. ¡Ya no tendrás que iniciar sesión en cada máquina y ejecutar comandos allí! Si quieres ahorrar mucho tiempo en operaciones repetitivas y evitar errores humanos necesitas invertir algo de tiempo en automatizar y codificar. ¡Todo lo que necesitas hacer es crear Ansible playbook! Teniendo esto en mente, necesitas entender la lógica que necesita ser ejecutada en una granja de Couchbase. Ansible asume que sabes lo que estás intentando hacer y lo automatiza. Los playbooks son instrucciones o direcciones para Ansible.
Un playbook es un archivo de texto escrito en formato YAML, y se guarda con extensión yml. Un playbook utiliza sangría con caracteres de espacio para indicar la estructura de sus datos. Existen dos reglas básicas:
- los elementos de datos del mismo nivel jerárquico deben tener esta misma sangría
- los elementos que son hijos de otro elemento deben tener una sangría mayor que sus padres
{{ ejemplo }} - playbook de una sola tarea:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
--- - nombre configure Couchbase usuario en su granja alberga: todos tareas: - nombre: crear couchbase usuario con UID 5000 usuario: nombre: couchbase uid: 3000 estado: presente |
Los libros de jugadas comienzan con una línea formada por tres guiones (-) y también pueden terminar con tres puntos (...). Entre esos marcadores, el libro de jugadas se define como una lista de jugadas. Un elemento de una lista YAML comienza con un guión seguido de un espacio. Las listas YAML pueden tener este aspecto:
1 2 3 4 5 6 7 8 9 10 11 |
--- - nombre sólo ejemplo alberga: todos tareas: primero segundo tercera |
Nombre, alberga, y tareas son las teclas. Todas esas teclas tienen la misma sangría. El Creación de usuarios Couchbase comienza con un guión y un espacio y, a continuación, la primera tecla - la tecla nombre atributo. El nombre asociado a la cadena que es una etiqueta. Esto ayuda a identificar para qué sirve la obra. La dirección nombre es opcional, pero se recomienda porque documenta el libro de jugadas, especialmente cuando éste tiene varias jugadas. La segunda clave es alberga que especifica los hosts contra los que deben ejecutarse las tareas de la obra. La dirección alberga toma un nombre de host como valor o grupos de hosts del inventario. Finalmente, la última clave de la obra es el atributo tareas cuyo valor especifica una lista de tareas a ejecutar para esta obra. En nuestro ejemplo, ejecutamos una única tarea que ejecuta el programa usuario con argumentos específicos. Vale la pena mencionar que Ansible viene con una serie de módulos (denominado "biblioteca de módulos") que pueden ejecutarse directamente en hosts remotos o a través de playbooks. Estos módulos pueden controlar recursos del sistema como servicios, paquetes o archivos (cualquier cosa en realidad), o manejar la ejecución de comandos del sistema.
{{ segundo ejemplo }}
Instalar Couchbase cluster desde un único playbook - llamemos a este playbook couchbase-install.yml. Los datos de inicio de sesión de los clusters se guardarán por motivos de seguridad en Bóveda. Ansible-vault es una herramienta de línea de comandos que usamos en Ansible para encriptar información. No deberíamos guardar los datos de acceso a Couchbase en texto plano. Las contraseñas deberían siempre ¡estar encriptado!
- Cree encriptado datos de acceso para el clúster Couchbase:
Vamos a crear dos archivos: variables.yml y bóveda.yml. Estos dos archivos deben estar bajo la siguiente estructura de directorios: /ansible/group_vars/all.
ansible
1 2 3 4 5 6 7 8 9 10 11 12 13 |
├── couchbase-instale.yml ├── grupo_vars │ └── todos │ ├── varibales.yml │ └── bóveda.yml ├── inventario.inv └── plantilla-añada-nodo.j2 |
En archivo variables.yml pongamos las variables nombre de usuario, tamaño de RAM y contraseña para nuestro nuevo cluster. El valor real de la contraseña se pondrá en el segundo archivo bóveda.yml y encriptado.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# cat variables.yml usuario: admin contraseña: "{{ vault_password }}" ram: 512 réplicas: 2 bucket_ram: 256 cubo: Ansible # cat vault.yml contraseña: couchbase321 |
Utilicemos ansible-vault y cifremos la contraseña en bóveda.yml file:
1 |
ansible-bóveda codificar bóveda.yml |
Nueva contraseña de la Bóveda:
A partir de ahora la contraseña estará encriptada y segura. Tendremos que proporcionar la contraseña que establecimos durante la creación de la bóveda cada vez que ejecutemos el playbook. Nota: Ansible proporciona el algoritmo de cifrado AES-256.
1 2 3 4 5 |
cat bóveda.yml $ANSIBLE_VAULT;1.1;AES256 6339353631303431626531306636313862396434306661356432373434623834653 |
Libro de jugadas principal couchbase-install.yml contendrá muchas tareas, y esas tareas utilizarán módulos de Ansible como: plantilla, shell, servicio o yum.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
cat couchbase-instale.yml --- - nombre: Instale y configure 3 nodo Couchbase grupo alberga: todos tareas: - nombre: Descargar el apropiado meta paquete de el paquete descargar ubicación obtener_url: url: http://packages.couchbase.com/releases/couchbase-release/ couchbase-liberar-1.0-1-x86_64.rpm dest: /tmp/couchbase-liberar-1.0-1-x86_64.rpm - nombre: instale el paquete fuente y el Couchbase público llaves yum: nombre: /tmp/couchbase-liberar-1.0-1-x86_64.rpm estado: presente - nombre: Instale Couchbase Servidor paquete yum: nombre: couchbase-servidor estado: presente - nombre: escriba a seguro Couchbase Servidor iniciado servicio: nombre: couchbase-servidor estado: iniciado - nombre: Inicializar el grupo y añada el nodos a el grupo alberga: couchbase-maestro tareas: - nombre: configure-arriba Couchbase central nodo - init Couchbase grupo concha: /op/couchbase/papelera/couchbase-cli grupo-init -c 127.0.0.1 --grupo-nombre de usuario={{ usuario }} --grupo-contraseña={{ contraseña }} --grupo-puerto=8091 --grupo-ramsize={{ ram }} - nombre: plantilla utilice caso ejemplo - utilice Jinja2 plantillas plantilla: src=plantilla-añada-nodo.j2 dest=/tmp/añadir_nodos.sh modo=750 - nombre: iniciar config script - añada resto nodos a el grupo concha: /tmp/añadir_nodos.sh - nombre: reequilibrar Couchbase grupo concha: /op/couchbase/papelera/couchbase-cli reequilibrar -c 127.0.0.1:8091 -u {{ usuario }} -p {{ contraseña }} - nombre: crear cubo Ansible con 2 réplicas concha: /op/couchbase/papelera/couchbase-cli cubo-crear -c 127.0.0.1:8091 --cubo={{ cubo }} --cubo-tipo=couchbase --cubo-puerto=11222 --cubo-ramsize={{ cubo_ram }} --cubo-réplica={{ réplicas }} -u {{ usuario }} -p {{ contraseña }} Couchbase grupo es listo en a algunos segundos - este es cómo rápido Ansible puede crear it! |
Analicemos el libro de jugadas. El libro de jugadas se divide en dos partes separadas por diferente niveles de hendiduras. Los hosts en los que se instala Couchbase se describen en inventario.inv archivo. Un archivo inventory.inv consta de grupos de hosts y hosts dentro de esos grupos. A continuación se muestra un ejemplo de nuestro archivo de hosts Ansible muy básico:
1 2 3 4 5 6 7 8 9 10 11 |
cat inventario.inv [couchbase-maestro] 192.168.178.83 [couchbase-nodos] 192.168.178.84 192.168.178.85 |
La primera parte de las tareas se ejecutará en los tres hosts (hosts: all). En cada host Ansible instala el repositorio de Couchbase y luego instala a través de la herramienta de Linux YUM Couchbase Server. Al final Couchbase Server debe estar funcionando. Se ejecutan los siguientes módulos:
get_url: Descarga archivos desde HTTP, HTTPS o FTP al servidor remoto. El servidor remoto debe tener acceso directo al recurso remoto.
yum: Instala, actualiza, desactualiza, elimina y lista paquetes y grupos con el gestor de paquetes yum.
servicio: Controla servicios en hosts remotos. Los sistemas init soportados incluyen BSD init, OpenRC, SysV, Solaris SMF, systemd, upstart.
La segunda parte de las tareas se ejecutará en el nodo "maestro" de Couchbase Server (hosts: couchbase-master). En la segunda parte se ejecutan los siguientes módulos:
concha: El módulo shell toma el nombre del comando seguido de una lista de argumentos delimitados por espacios. Es casi exactamente igual que el módulo comando pero ejecuta el comando a través de un shell en el nodo remoto. Utilizamos concha para ejecutar el módulo Couchbase CLI como cluster-init, rebalance o bucket-create.
plantilla: Las plantillas son procesadas por el lenguaje de plantillas Jinja2. Una plantilla en Ansible es un archivo que contiene parámetros de configuración, pero los valores dinámicos se dan como variables. Durante la ejecución del playbook, dependiendo de las condiciones como el cluster que estés usando, las variables serán reemplazadas por los valores relevantes. En nuestro escenario la plantilla tiene este aspecto:
1 2 3 4 5 6 7 |
cat plantilla-añada-nodo.j2 {% para host en grupos[couchbase-nodos] %} /op/couchbase/papelera/couchbase-cli servidor-añada -c 127.0.0.1:8091 -u {{ usuario }} -p {{ contraseña }} --servidor-añada={{ hostvars[host][ansible_default_ipv4][dirección] }}:8091 --servidor-añada-nombre de usuario={{ usuario }} --servidor-añada-contraseña={{ contraseña }} {% finpara %} |
Nuestra plantilla crea el siguiente script en el directorio /tmp: (este script será llamado en el siguiente tarea).
1 2 3 4 5 |
cat /tmp/addnodes.sh /op/couchbase/papelera/couchbase-cli servidor-añada -c 127.0.0.1:8091 -u admin -p couchbase321 --servidor-añada=192.168.178.84:8091 --servidor-añada-nombre de usuario=admin --servidor-añada-contraseña=couchbase321 /op/couchbase/papelera/couchbase-cli servidor-añada -c 127.0.0.1:8091 -u admin -p couchbase321 --servidor-añada=192.168.178.85:8091 --servidor-añada-nombre de usuario=admin --servidor-añada-contraseña=couchbase321 |
Creado dinámicamente mediante el módulo de plantillas /tmp/add_nodes.sh añadirá los dos nodos restantes al clúster de Couchbase.
Las dos últimas tareas utilizarán Ansible concha y ejecutar comandos CLI de Couchbase:
- nombre: rebalance Couchbase cluster,
- nombre: crear cubo Ansible con 2 réplicas
Después de todas estas tareas nuestro cluster Couchbase de 3 nodos está listo para ser usado. Ha sido rápido y sencillo, y podemos reutilizar este playbook para nuestras próximas instalaciones simplemente añadiendo más hosts al archivo inventory.inv.
{{ Roles }}
Un playbook Ansible de un solo archivo es bueno cuando necesitas ejecutar unas pocas tareas simples. Cuando la complejidad del playbook aumente deberías pensar en usar Ansible papeles. Un rol es una forma de organizar tu playbook en una estructura de directorios predefinida para que Ansible pueda descubrirlo todo automáticamente.
-
Creación de un marco de funciones
Para que Ansible pueda manejar correctamente los roles, necesitamos construir una estructura de directorios que pueda encontrar y entender. Hacemos esto creando un directorio "roles" en nuestro directorio de trabajo para Ansible.
Empecemos a crear una estructura de roles para nuestra instalación de Couchbase. Mostraré cómo "traducir" nuestro playbook de archivo único en roles.
- Crear estructura de directorios de roles para la instalación de Couchbase. Una estructura sencilla de roles puede tener este aspecto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
ansible └── papeles └── couchbase ├── valores predeterminados ├── manipuladores ├── meta ├── tareas ├── plantillas ├── pruebas └── vars |
Para eso están todos:
- couchbase: nombre del rol
- valores predeterminadosvariables por defecto para el rol
- manipuladoresTodos los manejadores que estaban en su libro de jugadas anteriormente ahora se pueden añadir en este directorio
- metadefine algunos metadatos para este rol
- plantillas: mantén ahí las plantillas jinja2
- tareas: contiene la lista principal de tareas que debe ejecutar el rol
- varsOtras variables para el papel
2. Divida el libro de jugadas creado anteriormente en roles de Ansible. Debe empezar desde el directorio de tareas. Todas las tareas de couchbase-install.yml debe ser dividido en archivos separados y trasladados al directorio /tareas. tasks/main.yml debe indicar a Ansible el orden de ejecución de las tareas. Nuestro escenario de solución se parece a esto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
ls -ltr ./tareas descargar_paquete_meta.yml instalar_fuente.yml instalar_couchbase.yml start_couchbase.ylm inicializar-grupo.yml usar_plantilla.ymp start_addnode_script.yml reequilibrar_cluster.yml crear_cubo.yml principal.yml |
Voy a mostrar lo que está dentro de nuestros archivos yml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
descargar_paquete_meta.yml --- - nombre: Descargar el apropiado meta paquete de el paquete descargar ubicación obtener_url: url: http://packages.couchbase.com/releases/couchbase-release/ couchbase-liberar-1.0-1-x86_64.rpm dest: /tmp/couchbase-liberar-1.0-1-x86_64.rpm reequilibrar_cluster.yml --- - nombre: Reequilibrar Couchbase grupo concha: /op/couchbase/papelera/couchbase-cli reequilibrar -c 127.0.0.1:8091 -u {{ usuario }} -p {{ contraseña }} inicializar-grupo.yml --- - nombre: Establecer-arriba Couchbase central nodo - init Couchbase grupo concha: /op/couchbase/papelera/couchbase-cli grupo-init -c 127.0.0.1 --grupo-nombre de usuario={{ usuario }} --grupo-contraseña={{ contraseña }} --grupo-puerto=8091 --grupo-ramsize={{ ram }} |
Como sabemos, el libro de jugadas se ha dividido en pequeñas tareas bajo tareas directorio. Ahora tenemos que decirle a Ansible el orden de ejecución y también Ansible necesita saber qué tareas deben ejecutarse en todos los hosts y qué tareas deben ejecutarse sólo en el nodo couchbase-master. Veamos nuestro main.yml file:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
principal.yml --- - incluir: descargar_paquete_meta.yml - incluir: instalar_fuente.yml - incluir: instalar_couchbase.yml - incluir: start_couchbase.ylm - incluir: inicializar-grupo.yml cuando: nombres_grupo[0] == couchbase-master - incluir: usar_plantilla.yml cuando: nombres_grupo[0] == couchbase-master - incluir: start_addnode_script.yml cuando: nombres_grupo[0] == couchbase-master - incluir: reequilibrar_cluster.yml cuando: nombres_grupo[0] == couchbase-master - incluir: crear_cubo.yml cuando: nombres_grupo[0] == couchbase-master |
Las tareas se ejecutarán según el orden indicado en el main.yml archivo. Las tareas que deben ejecutarse sólo en la máquina couchbase-master contienen la condición "donde" en el archivo main.yml. Estas tareas se omitirán en los equipos con nodos couchbase.
Estructura final:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
ansible ├── couchbase-instale.yml ├── grupo_vars │ └── todos │ ├── variables.yml │ └── bóveda.yml ├── inventario.inv └── papeles └── couchbase ├── valores predeterminados ├── manipuladores ├── meta ├── tareas │ ├── crear_cubo.yml │ ├── descargar_paquete_meta.yml │ ├── inicializar-grupo.yml │ ├── instalar_couchbase.yml │ ├── instalar_fuente.yml │ ├── principal.yml │ ├── reequilibrar_cluster.yml │ ├── start_addnode_script.yml │ ├── start_couchbase.ylm │ └── usar_plantilla.ymp ├── plantillas │ └── añadir_plantilla-nodo.j2 ├── pruebas └── vars |
libro de jugadas couchbase-install.yml contiene sólo esas líneas:
1 2 3 4 5 6 7 |
--- - alberga: todos papeles: - couchbase |
3. Ejecute couchbase-install.yml e instale su clúster Couchbase.
1 2 3 |
ansible-libro de jugadas -i inventario.inv ./couchbase-instale.yml --pregunte a-bóveda-pase Bóveda contraseña: |
{{ Resumen }}
El ejemplo anterior muestra que Couchbase es una tecnología flexible, ideal para la automatización y orquestación con Ansible. El mejor método para aprender es haciendo¡! Ansible proporciona muy buena documentación con ejemplos y descripciones detalladas de los módulos. ¡Ansible te permite ejecutar comandos Playbook Couchbase CLI para hacer la administración de tu granja de bases de datos agradable y fácil! También existe la posibilidad de escribir tus propios módulos en Ansible. Si no puedes encontrar lo que estás buscando en los módulos proporcionados por Ansible hay una manera fácil de escribir tu propio módulo.
También existe la posibilidad de utilizar roles Ansible creados por la comunidad Ansible. Galaxia Ansible es un sitio web donde los usuarios pueden compartir roles, y tiene una herramienta de línea de comandos para instalar, crear y gestionar roles. Galaxy es un sitio gratuito para encontrar, descargar y compartir roles desarrollados por la comunidad. Descargar funciones de Galaxy es una buena forma de poner en marcha tus proyectos de automatización. También puede utilizar el sitio para compartir funciones creadas por usted. Autentícate en el sitio utilizando tu cuenta de GitHub.
Este post forma parte del Programa de Escritura de la Comunidad Couchbase