Arkadiusz Borucki trabalha como a Engenheiro de confiabilidade de sites na Amadeus, com foco em bancos de dados NoSQL e automação. Em seu trabalho diário, ele usa Couchbase, MongoDB, Oracle, Python e Ansible. Ele se autoproclama um entusiasta de big data, interessado em tecnologias de armazenamento de dados, sistemas distribuídos, análise e automação. Ele dá palestras em várias conferências e grupos de usuários nos Estados Unidos e na Europa. Você pode encontrá-lo no Twitter em @_Aras_B

{{ Couchbase - escrevendo sua primeira automação Ansible }}
O Couchbase é uma tecnologia moderna, rápida, dimensionável e fácil de automatizar. Ao executar um farm do Couchbase com milhares de nós, você não quer ter que fazer logon em cada máquina e aplicar as configurações manualmente. Isso pode resultar em uma enorme sobrecarga, inconsistências e erros humanos. Uma boa solução é começar a usar Ansible para a automação e orquestração de seu farm. Você pode executar sistema operacional do Ansible, make API do Couchbase do Ansible, ou use as chamadas CLI do Couchbase a partir do Ansible. Este blog mostrará como começar a usar o Ansible com seu farm do Couchbase.
Quando você cria a automação do Ansible para um Cluster do Couchbase você deve pensar no que deseja alcançar. Se não quiser aplicar um conjunto complicado de comandos em seu farm do Couchbase, a solução mais simples é criar um playbook básico do Ansible e colocar as tarefas do playbook em uma ordem específica. Essa solução é muito simples e rápida. A sintaxe do playbook não é complicada e a criação de um playbook básico leva apenas alguns minutos! Os playbooks são essencialmente conjuntos de instruções (execuções) que você enviará ao seu host ou grupo de hosts. O Ansible executará essas instruções nos alvos e lhe enviará o código de retorno. Você poderá validar se as instruções foram aplicadas com êxito ou não. É basicamente assim que um playbook funciona.
Se quiser obter resultados mais complicados, você deve aproveitar as funções do Ansible e organizar suas tarefas em funções. As funções nada mais são do que uma abstração adicional para tornar seu playbook mais modular. Uma função é um conjunto de tarefas e arquivos adicionais para configurar seu ambiente do Couchbase. As funções do Ansible serão descritas em breve.
{{ Playbook }}
Vamos criar nosso primeiro playbook. Esse playbook instalará o Couchbase Server em nossos hosts e colocará o servidor em funcionamento. Você não precisa mais fazer login em cada máquina e executar comandos nela! Se você quiser economizar muito tempo em operações repetitivas e evitar erros humanos, precisará investir algum tempo em automação e codificação. Tudo o que você precisa fazer é criar um playbook do Ansible! Tendo isso em mente, você precisa entender a lógica que precisa ser executada em um farm do Couchbase. O Ansible pressupõe que você sabe o que está tentando fazer e o automatiza. Os playbooks são instruções ou direções para o Ansible.
Um playbook é um arquivo de texto escrito no formato YAML e é salvo com a extensão yml. Um playbook usa indentação com caracteres de espaço para indicar a estrutura de seus dados. Há duas regras básicas:
- os elementos de dados no mesmo nível da hierarquia devem ter o mesmo recuo
- os itens que são filhos de outro item devem ser recuados mais do que seus pais
{{ exemplo }} - playbook de tarefa única:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
--- - nome configurar Couchbase usuário em seu fazenda anfitriões: todos tarefas: - nome: criar couchbase usuário com UID 5000 usuário: nome: couchbase uid: 3000 estado: presente |
Os manuais começam com uma linha composta por três traços (-) e também podem terminar com três pontos (...). Entre esses marcadores, o playbook é definido como uma lista de execuções. Um item em uma lista YAML começa com um único traço seguido de um espaço. As listas YAML podem ter a seguinte aparência:
|
1 2 3 4 5 6 7 8 9 10 11 |
--- - nome apenas exemplo anfitriões: todos tarefas: primeiro segundo terceiro |
Nome, anfitriões, e tarefas são as teclas. Todas essas teclas têm o mesmo recuo. O Criação de usuário do Couchbase exemplo, a reprodução começa com um traço e um espaço e, em seguida, a primeira tecla - a nome ocorrer. O nome associado à string, que é um rótulo. Isso ajuda a identificar para que serve a reprodução. O nome nome é opcional, mas é recomendada porque documenta seu manual, especialmente quando ele tem várias jogadas. A segunda chave é um anfitriões que especifica os hosts nos quais as tarefas da peça devem ser executadas. O atributo anfitriões recebe um nome de host como valor ou grupos de hosts do inventário. Por fim, a última chave na peça é o atributo tarefas cujo valor especifica uma lista de tarefas a serem executadas para essa peça. Em nosso exemplo, executamos uma única tarefa que executa o usuário com argumentos específicos. Vale a pena mencionar que o Ansible vem com uma série de módulos (chamado de "biblioteca de módulos") que podem ser executados diretamente em hosts remotos ou por meio de playbooks. Esses módulos podem controlar os recursos do sistema, como serviços, pacotes ou arquivos (qualquer coisa na verdade), ou lidar com a execução de comandos do sistema.
{{segundo exemplo }}
Instalar o Couchbase a partir de um único playbook - vamos chamar esse playbook de couchbase-install.yml. Os dados de login dos clusters serão mantidos, por motivos de segurança, em Cofre. O Ansible-vault é uma ferramenta de linha de comando que usamos no Ansible para criptografar informações. Não devemos manter os dados de login do Couchbase em texto simples. As senhas devem sempre ser criptografado!
- Criar criptografado dados de login para o cluster do Couchbase:
Vamos criar dois arquivos: variables.yml e vault.yml. Esses dois arquivos devem estar na seguinte estrutura de diretórios: /ansible/group_vars/all.
ansível
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
├── couchbase-instalar.yml ├── grupo_vars │ └── todos │ ├── varibales.yml │ └── cofre.yml ├── inventário.inv └── modelo-adicionar-nó.j2 |
Em arquivo variables.yml vamos colocar as variáveis de nome de usuário, tamanho da RAM e senha para nosso novo cluster. O valor real da senha será colocado no segundo arquivo vault.yml e criptografados.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# cat variables.yml usuário: administrador senha: "{{ vault_password }}" ram: 512 réplicas: 2 bucket_ram: 256 balde: Ansible # cat vault.yml senha: couchbase321 |
Vamos usar o ansible-vault e criptografar a senha em vault.yml file:
|
1 |
ansível-cofre criptografar cofre.yml |
Nova senha do Vault:
A partir de agora, a senha estará criptografada e segura. Teremos que fornecer a senha que definimos durante a criação do vault sempre que executarmos o playbook. Observação: o Ansible fornece o algoritmo de criptografia AES-256.
|
1 2 3 4 5 |
gato cofre.yml $ANSIBLE_VAULT;1.1;AES256 6339353631303431626531306636313862396434306661356432373434623834653 |
Manual principal couchbase-install.yml conterá muitas tarefas, e essas tarefas usarão módulos do Ansible, como: modelo, shell, serviço ou 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 |
gato couchbase-instalar.yml --- - nome: Instalar e configurar 3 nó Couchbase agrupamento anfitriões: todos tarefas: - nome: Baixar o apropriado meta pacote de o pacote download localização get_url: url: https://packages.couchbase.com/releases/couchbase-release/ couchbase-liberação-1.0-1-x86_64.rpm dest: /tmp/couchbase-liberação-1.0-1-x86_64.rpm - nome: instalar o pacote fonte e o Couchbase público chaves yum: nome: /tmp/couchbase-liberação-1.0-1-x86_64.rpm estado: presente - nome: Instalar Couchbase Servidor pacote yum: nome: couchbase-servidor estado: presente - nome: fazer com certeza Couchbase Servidor iniciado serviço: nome: couchbase-servidor estado: iniciado - nome: Inicializar o agrupamento e adicionar o nós para o agrupamento anfitriões: couchbase-mestre tarefas: - nome: definir-para cima Couchbase central nó - inicial Couchbase agrupamento casca: /optar/couchbase/caixa/couchbase-cli agrupamento-inicial -c 127.0.0.1 --agrupamento-nome de usuário={{ usuário }} --agrupamento-senha={{ senha }} --agrupamento-porto=8091 --agrupamento-tamanho de rams={{ ram }} - nome: modelo uso caso exemplo - uso Jinja2 modelagem modelo: src=modelo-adicionar-nó.j2 dest=/tmp/add_nodes.sh modo=750 - nome: iniciar configuração script - adicionar restantes nós para o agrupamento casca: /tmp/add_nodes.sh - nome: reequilíbrio Couchbase agrupamento casca: /optar/couchbase/caixa/couchbase-cli reequilíbrio -c 127.0.0.1:8091 -u {{ usuário }} -p {{ senha }} - nome: criar balde Ansible com 2 réplicas casca: /optar/couchbase/caixa/couchbase-cli balde-criar -c 127.0.0.1:8091 --balde={{ balde }} --balde-tipo=couchbase --balde-porto=11222 --balde-tamanho de rams={{ balde_ram }} --balde-réplica={{ réplicas }} -u {{ usuário }} -p {{ senha }} Couchbase agrupamento é pronto em a poucos segundos - este é como rápido Ansible pode criar ele! |


Vamos analisar o manual. O manual é dividido em duas partes, separadas por diferente níveis de recuos. Os hosts nos quais o Couchbase está instalado são descritos em inventory.inv arquivo. Um arquivo inventory.inv consiste em grupos de hosts e hosts dentro desses grupos. Abaixo está um exemplo do nosso arquivo de hosts muito básico do Ansible:
|
1 2 3 4 5 6 7 8 9 10 11 |
gato inventário.inv [couchbase-mestre] 192.168.178.83 [couchbase-nós] 192.168.178.84 192.168.178.85 |
A primeira parte das tarefas será executada em todos os três hosts (hosts: todos). Em cada host, o Ansible instala o repositório do Couchbase e, em seguida, instala o Couchbase Server por meio da ferramenta Linux YUM. No final, o Couchbase Server deve estar instalado e funcionando. Os seguintes módulos são executados:
get_url: Faz download de arquivos de HTTP, HTTPS ou FTP para o servidor remoto. O servidor remoto deve ter acesso direto ao recurso remoto.
yum: Instala, faz upgrade, downgrade, remove e lista pacotes e grupos com o gerenciador de pacotes yum.
serviço: Controla os serviços em hosts remotos. Os sistemas de inicialização compatíveis incluem BSD init, OpenRC, SysV, Solaris SMF, systemd, upstart.
A segunda parte das tarefas será executada no nó "mestre" do Couchbase Server (hosts: couchbase-master). Os módulos a seguir são executados na segunda parte:
casca: O módulo shell recebe o nome do comando seguido de uma lista de argumentos delimitados por espaço. Ele é quase exatamente como o módulo comando mas executa o comando por meio de um shell no nó remoto. Usamos o casca para executar o módulo CLI do Couchbase comandos como cluster-init, rebalance ou bucket-create.
modelo: Os modelos são processados pela linguagem de modelos Jinja2. Um modelo no Ansible é um arquivo que contém parâmetros de configuração, mas os valores dinâmicos são fornecidos como variáveis. Durante a execução do playbook, dependendo das condições, como qual cluster você está usando, as variáveis serão substituídas pelos valores relevantes. Em nosso cenário, o modelo tem a seguinte aparência:
|
1 2 3 4 5 6 7 |
gato modelo-adicionar-nó.j2 {% para hospedeiro em grupos['couchbase-nodes'] %} /optar/couchbase/caixa/couchbase-cli servidor-adicionar -c 127.0.0.1:8091 -u {{ usuário }} -p {{ senha }} --servidor-adicionar={{ hostvars[hospedeiro]['ansible_default_ipv4']["endereço] }}:8091 --servidor-adicionar-nome de usuário={{ usuário }} --servidor-adicionar-senha={{ senha }} {% para %} |
Nosso modelo cria o seguinte script no diretório /tmp: (esse script será chamado no próximo tarefa).
|
1 2 3 4 5 |
gato /tmp/nós adicionais.sh /optar/couchbase/caixa/couchbase-cli servidor-adicionar -c 127.0.0.1:8091 -u administrador -p couchbase321 --servidor-adicionar=192.168.178.84:8091 --servidor-adicionar-nome de usuário=administrador --servidor-adicionar-senha=couchbase321 /optar/couchbase/caixa/couchbase-cli servidor-adicionar -c 127.0.0.1:8091 -u administrador -p couchbase321 --servidor-adicionar=192.168.178.85:8091 --servidor-adicionar-nome de usuário=administrador --servidor-adicionar-senha=couchbase321 |
Criado dinamicamente por meio do módulo de modelo /tmp/add_nodes.sh adicionará dois nós restantes ao cluster do Couchbase.
As duas últimas tarefas usarão o Ansible casca e executar comandos da CLI do Couchbase:
- name: rebalancear o cluster do Couchbase,
- nome: criar o bucket Ansible com 2 réplicas
Depois de todas essas tarefas, nosso cluster de 3 nós do Couchbase está pronto para ser usado! Foi rápido e simples, e podemos reutilizar esse playbook em nossas próximas instalações simplesmente adicionando mais hosts ao arquivo inventory.inv.
{{Roles }}
Um playbook do Ansible de arquivo único é bom quando você precisa executar algumas tarefas simples. Quando a complexidade do playbook aumenta, você deve pensar em usar o Ansible funções. Uma função é uma maneira de organizar seu playbook em uma estrutura de diretório predefinida para que o Ansible possa descobrir tudo automaticamente.
-
Criação de estrutura de funções
Para que o Ansible lide corretamente com as funções, precisamos criar uma estrutura de diretórios que ele possa encontrar e entender. Fazemos isso criando um diretório "roles" em nosso diretório de trabalho para o Ansible.
Vamos começar a criar uma estrutura de funções para nossa instalação do Couchbase. Mostrarei como "traduzir" nosso playbook de arquivo único em funções.
- Crie uma estrutura de diretório de funções para a instalação do Couchbase. Uma estrutura simples de funções pode ter a seguinte aparência:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
ansível └── funções └── couchbase ├── padrões ├── manipuladores ├── meta ├── tarefas ├── modelos ├── testes └── vars |
É para isso que eles servem:
- couchbase: nome da função
- padrões: variáveis padrão para a função
- manipuladoresTodos os manipuladores que estavam em seu playbook anteriormente podem agora ser adicionados a esse diretório
- metadefine alguns metadados para essa função
- modelos: continue assim modelos jinja2
- tarefascontém a lista principal de tarefas a serem executadas pela função
- vars: outras variáveis para a função
2. Divida o playbook criado acima em funções do Ansible. Você deve iniciar no diretório de tarefas. Todas as tarefas de couchbase-install.yml deve ser dividido em arquivos separados e movidos para o diretório /tasks. tasks/main.yml deve informar ao Ansible a ordem de execução das tarefas. Nossa solução de cenário é parecida com esta:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
ls -ltr ./tarefas download_meta_package.yml install_source.yml install_couchbase.yml start_couchbase.ylm inicializar-agrupamento.yml use_template.ymp start_addnode_script.yml rebalance_cluster.yml criar_bucket.yml principal.yml |
Mostrarei o que está dentro de nossos arquivos 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 |
download_meta_package.yml --- - nome: Baixar o apropriado meta pacote de o pacote download localização get_url: url: https://packages.couchbase.com/releases/couchbase-release/ couchbase-liberação-1.0-1-x86_64.rpm dest: /tmp/couchbase-liberação-1.0-1-x86_64.rpm rebalance_cluster.yml --- - nome: Reequilíbrio Couchbase agrupamento casca: /optar/couchbase/caixa/couchbase-cli reequilíbrio -c 127.0.0.1:8091 -u {{ usuário }} -p {{ senha }} inicializar-agrupamento.yml --- - nome: Conjunto-para cima Couchbase central nó - inicial Couchbase agrupamento casca: /optar/couchbase/caixa/couchbase-cli agrupamento-inicial -c 127.0.0.1 --agrupamento-nome de usuário={{ usuário }} --agrupamento-senha={{ senha }} --agrupamento-porto=8091 --agrupamento-tamanho de rams={{ ram }} |
Como sabemos, o manual foi dividido em pequenas tarefas sob tarefas diretório. Agora temos que informar a ordem de execução do Ansible e também o Ansible precisa saber quais tarefas precisam ser executadas em todos os hosts e quais tarefas devem ser executadas apenas no nó couchbase-master. Vamos ver nosso 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: download_meta_package.yml - incluir: install_source.yml - incluir: install_couchbase.yml - incluir: start_couchbase.ylm - incluir: inicializar-agrupamento.yml quando: group_names[0] == 'couchbase-master' - incluir: use_template.yml quando: group_names[0] == 'couchbase-master' - incluir: start_addnode_script.yml quando: group_names[0] == 'couchbase-master' - incluir: rebalance_cluster.yml quando: group_names[0] == 'couchbase-master' - incluir: criar_bucket.yml quando: group_names[0] == 'couchbase-master' |
As tarefas serão executadas de acordo com a ordem mostrada no main.yml arquivo. As tarefas que precisam ser executadas apenas na máquina do couchbase-master contêm a condição "onde" no arquivo main.yml. Essas tarefas serão ignoradas nos computadores com nós couchbase.
Estrutura 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 |
ansível ├── couchbase-instalar.yml ├── grupo_vars │ └── todos │ ├── variáveis.yml │ └── cofre.yml ├── inventário.inv └── funções └── couchbase ├── padrões ├── manipuladores ├── meta ├── tarefas │ ├── criar_bucket.yml │ ├── download_meta_package.yml │ ├── inicializar-agrupamento.yml │ ├── install_couchbase.yml │ ├── install_source.yml │ ├── principal.yml │ ├── rebalance_cluster.yml │ ├── start_addnode_script.yml │ ├── start_couchbase.ylm │ └── use_template.ymp ├── modelos │ └── template_add-nó.j2 ├── testes └── vars |
manual couchbase-install.yml contém exatamente essas linhas:
|
1 2 3 4 5 6 7 |
--- - anfitriões: todos funções: - couchbase |
3. Executar couchbase-install.yml e instale seu cluster do Couchbase.
|
1 2 3 |
ansível-manual -i inventário.inv ./couchbase-instalar.yml --perguntar-cofre-passe Cofre senha: |
{{ Resumo }}
O exemplo acima mostra que o Couchbase é uma tecnologia flexível, ideal para automação e orquestração com o Ansible. O melhor método para aprender é ao fazer! O Ansible fornece uma documentação muito boa com exemplos e descrições detalhadas dos módulos. O Ansible permite que você execute comandos Playbook Couchbase CLI para tornar a administração do seu farm de banco de dados agradável e fácil! Também há a possibilidade de escrever seus próprios módulos no Ansible. Se não conseguir encontrar o que está procurando nos módulos fornecidos pelo Ansible, há uma maneira fácil de escrever seu próprio módulo.
Há também a possibilidade de usar as funções do Ansible criadas pela comunidade do Ansible. Galáxia Ansible é um site em que os usuários podem compartilhar funções e tem uma ferramenta de linha de comando para instalar, criar e gerenciar funções. O Galaxy é um site gratuito para encontrar, fazer download e compartilhar funções desenvolvidas pela comunidade. O download de funções do Galaxy é uma ótima maneira de iniciar seus projetos de automação. Você também pode usar o site para compartilhar funções criadas por você. Ao se autenticar no site usando sua conta do GitHub.
Esta postagem faz parte do Programa de Redação da Comunidade Couchbase