Metadadoscomo, por exemplo rótulospode ser anexado a um daemon do Docker. Um rótulo é um par de chave/valor e permite que o host do Docker seja um alvo de contêineres. A semântica dos rótulos é totalmente definida pelo aplicativo. Um novo Docker restrição podem ser especificados durante a criação do serviço, visando às tarefas em um host específico. Vamos ver como podemos usar rótulos e restrições no Docker para um aplicativo do mundo real.
Couchbase usando escalonamento multidimensional (ou MDS) nos permite dividir o serviço de pesquisa de índice, dados, consulta e texto completo
em vários nós. As necessidades de cada serviço são diferentes. Por exemplo, a consulta exige muita CPU, o índice exige muito disco e os dados são uma combinação de memória e leitura/gravação rápida, como SSD. O MDS permite que os recursos de hardware sejam atribuídos e otimizados de forma independente por nó, à medida que os requisitos do aplicativo mudam.
Leia mais sobre Escala multidimensional.
Vamos ver como isso pode ser feito facilmente em um cluster de três nós usando Modo de enxame do Docker.
Iniciar instâncias do Ubuntu
Inicie três instâncias no EC2 do Ubuntu Server 14.04 LTS (HVM) (AMI ID: ami-06116566
). Adote os padrões em todos os casos, exceto para o grupo de segurança. O modo Swarm requer os três itens a seguir portas abertas entre hosts:
- Porta TCP 2377 para comunicações de gerenciamento de cluster
- TCP e Porta UDP 7946 para comunicação entre os nós
- TCP e Porta UDP 4789 para tráfego de rede de sobreposição
Certifique-se de criar um novo grupo de segurança com essas regras:
Aguarde alguns minutos para que as instâncias sejam provisionadas.
Configurar o Docker no Ubuntu
O modo Swarm foi introduzido no Docker 1.12. No momento em que este artigo foi escrito, o 1.12 RC4 era o candidato mais recente. Use o script a seguir para instalar a versão RC4 com recursos experimentais:
1 2 3 4 5 6 7 |
publicIp=`aws ec2 descrever-instâncias --filtros Nome=instância-estado-nome,Valores=em execução | jq -r .Reservas[].Instâncias[].PublicDnsName` para nó em $publicIp fazer ssh -o Verificação de StrictHostKey=não -i ~/.ssh/aruncouchbase.pem ubuntu@$nó 'curl -fsSL https://experimental.docker.com/ | sh' ssh -i ~/.ssh/aruncouchbase.pem ubuntu@$nó 'sudo usermod -aG docker ubuntu' ssh -i ~/.ssh/aruncouchbase.pem ubuntu@$nó 'docker version' (versão da plataforma) feito |
Esse script pressupõe que A CLI do AWS já está configurada e realiza a seguinte configuração para todos instâncias em execução em seu EC2 configurado
conta:
- Obter o endereço IP público de cada instância
- Para cada instância
- Instale a versão mais recente do Docker com recursos experimentais
- Adiciona
ubuntu
usuário para odoca
group. Isso permite que o Docker seja usado como um usuário não raiz. - Imprime a versão do Docker
Esse script simples configurará o host do Docker em todas as três instâncias.
Atribuir rótulos ao Docker Daemon
Os rótulos podem ser definidos usando DOCKER_OPTS
. Para o Ubuntu, isso é definido na seção /etc/default/docker
arquivo. Rótulos distintos precisam ser atribuídos a cada nó. Por exemplo, use couchbase.mds
chave
e
índice
valor.
1 2 3 4 |
ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'sudo sed -i '/#DOCKER_OPTS/cDOCKER_OPTS="--label=couchbase.mds=index"' /etc/default/docker'; ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'sudo restart docker' ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'docker info'; |
Você também precisa reiniciar o daemon do Docker. Por fim, informações da plataforma
exibe informações de todo o sistema:
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 |
Contêineres: 0 Em execução: 0 Em pausa: 0 Parado: 0 Imagens: 0 Servidor Versão: 1.12.0-rc4 Armazenamento Motorista: aufs Raiz Dir: /var/lib/doca/aufs Apoio Sistema de arquivos: extfs Diretores: 0 Dirperm1 Com suporte: falso Registro em log Motorista: json-arquivo Grupo C Motorista: cgroupfs Plugins: Volume: local Rede: nulo hospedeiro ponte sobreposição Enxame: inativo Tempos de execução: runc Padrão Tempo de execução: runc Segurança Opções: armadura Kernel Versão: 3.13.0-74-genérico Operacional Sistema: Ubuntu 14.04.3 LTS OSType: linux Arquitetura: x86_64 CPUs: 1 Total Memória: 992.5 MiB Nome: ip-172-31-14-15 ID: KISZ:RSMD:4YOZ:2FKL:GJTN:EVGC:U3GH:CHC3:XUJN:4UJ2:H3QF:GZFH Docker Raiz Dir: /var/lib/doca Depurar Modo (cliente): falso Depurar Modo (servidor): falso Registro: https://index.docker.io/v1/ Rótulos: couchbase.mds=índice Experimental: verdadeiro Inseguro Registros: 127.0.0.0/8 AVISO: Não troca limite suporte |
Como você pode ver, os rótulos estão visíveis nessas informações. Para o segundo nó, atribua um rótulo diferente:
1 2 3 4 |
ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'sudo sed -i '/#DOCKER_OPTS/cDOCKER_OPTS="--label=couchbase.mds=data"' /etc/default/docker'; ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'sudo restart docker' ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'docker info'; |
Certifique-se de usar o endereço IP da segunda instância do EC2. As informações atualizadas sobre o daemon do Docker nesse caso serão:
1 2 |
Rótulos: couchbase.mds=dados |
E, finalmente, o último nó:
1 2 3 4 |
ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'sudo sed -i '/#DOCKER_OPTS/cDOCKER_OPTS="--label=couchbase.mds=query"' /etc/default/docker'; ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'sudo restart docker' ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'docker info'; |
As informações atualizadas sobre o daemon do Docker para esse host serão exibidas:
1 2 |
Rótulos: couchbase.mds=consulta |
No nosso caso, é criado um cluster homogêneo em que as máquinas são exatamente iguais, incluindo o sistema operacional, a CPU, o disco e a capacidade de memória. No mundo real, você normalmente tem o mesmo sistema operacional, mas a capacidade da instância, como disco, CPU e memória, seria diferente com base nos serviços do Couchbase que você deseja executar nelas. Esses rótulos fariam todo o sentido nesse caso, mas eles mostram o ponto aqui.
Ativar o modo Swarm e criar o cluster
Vamos ativar o modo Swarm e criar um cluster de 1 nó Manager e 2 nós Worker. Por padrão, os gerentes também são nós de trabalho. Inicialize o Swarm no primeiro nó:
1 |
ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'docker swarm init --secret mySecret --listen-addr :2377' |
Isso mostrará o resultado:
1 2 3 4 5 6 |
Enxame inicializado: atual nó (ezrf5ap238kpmyq5h0lf55hxi) é agora a gerente. Para adicionar a trabalhador para este enxame, executar o seguintes comando: doca enxame unir-se --segredo mySecret --ca-hash sha256:ebda297c36a9d4c772f9e7867c453da42f69fe37cdfb1ba087f073051593a683 ip-172-31-14-15.us-oeste-1.compute.internal:2377 |
Adicione outros dois nós como trabalhadores:
1 2 |
ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'docker swarm join --secret mySecret :2377' ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'docker swarm join --secret mySecret :2377' |
Os comandos exatos e a saída, nesse caso, são:
1 2 3 |
ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-oeste-1.compute.amazonaws.com 'docker swarm init --secret mySecret --listen-addr ip-172-31-14-15.us-west-1.compute.internal:2377' ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ec2-52-53-223-255.us-oeste-1.compute.amazonaws.com 'docker swarm join --secret mySecret ip-172-31-14-15.us-west-1.compute.internal:2377' ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ec2-52-53-251-64.us-oeste-1.compute.amazonaws.com 'docker swarm join --secret mySecret ip-172-31-14-15.us-west-1.compute.internal:2377' |
Agora é possível obter detalhes completos sobre o cluster:
1 |
ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-oeste-1.compute.amazonaws.com 'docker info' |
E isso mostra o resultado:
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 |
Contêineres: 0 Em execução: 0 Em pausa: 0 Parado: 0 Imagens: 0 Servidor Versão: 1.12.0-rc4 Armazenamento Motorista: aufs Raiz Dir: /var/lib/doca/aufs Apoio Sistema de arquivos: extfs Diretores: 0 Dirperm1 Com suporte: falso Registro em log Motorista: json-arquivo Grupo C Motorista: cgroupfs Plugins: Volume: local Rede: ponte nulo hospedeiro sobreposição Enxame: ativo NodeID: ezrf5ap238kpmyq5h0lf55hxi IsManager: Sim Gerentes: 1 Nós: 3 CACertHash: sha256:ebda297c36a9d4c772f9e7867c453da42f69fe37cdfb1ba087f073051593a683 Tempos de execução: runc Padrão Tempo de execução: runc Segurança Opções: armadura Kernel Versão: 3.13.0-74-genérico Operacional Sistema: Ubuntu 14.04.3 LTS OSType: linux Arquitetura: x86_64 CPUs: 1 Total Memória: 992.5 MiB Nome: ip-172-31-14-15 ID: KISZ:RSMD:4YOZ:2FKL:GJTN:EVGC:U3GH:CHC3:XUJN:4UJ2:H3QF:GZFH Docker Raiz Dir: /var/lib/doca Depurar Modo (cliente): falso Depurar Modo (servidor): falso Registro: https://index.docker.io/v1/ Rótulos: couchbase.mds=índice Experimental: verdadeiro Inseguro Registros: 127.0.0.0/8 AVISO: Não troca limite suporte |
Isso mostra que criamos um cluster de 3 nós com um gerenciador.
Executar o serviço do Docker com restrições
Agora, vamos executar três serviços do Couchbase com restrições diferentes. Cada serviço do Docker especifica as restrições usando--constraint engine.labels.
em que há correspondências com os rótulos definidos anteriormente para os nós. Cada serviço recebe um nome exclusivo, pois isso permite dimensioná-los individualmente. Todos os comandos são direcionados para o gerenciador do Swarm:
1 2 3 |
ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'docker service create --name=cb-mds-index --constraint engine.labels.couchbase.mds==index couchbase' ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'docker service create --name=cb-mds-data --constraint engine.labels.couchbase.mds==data couchbase' ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'docker service create --name=cb-mds-query --constraint engine.labels.couchbase.mds==query couchbase' |
Os comandos exatos em nosso caso são:
1 2 3 4 5 |
> ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-oeste-1.compute.amazonaws.com 'docker service create --name=cb-mds-index --constraint engine.labels.couchbase.mds==index couchbase' 34lcko519mvr32hxw2m8dwp5c > ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-oeste-1.compute.amazonaws.com 'docker service create --name=cb-mds-data --constraint engine.labels.couchbase.mds==data couchbase' 0drcucii08tnx5sm9prug30m1 > ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-oeste-1.compute.amazonaws.com 'docker service create --name=cb-mds-query --constraint engine.labels.couchbase.mds==query couchbase' |
A lista de serviços pode ser verificada como:
1 |
ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'docker service ls' |
Isso mostra a saída como:
1 2 3 4 |
ID NOME RÉPLICAS IMAGEM COMANDO 0drcucii08tn cb-mds-dados 1/1 couchbase 34lcko519mvr cb-mds-índice 1/1 couchbase bxjqjm6mashw cb-mds-consulta 1/1 couchbase |
E a lista de tarefas (essencialmente contêineres dentro desse serviço) para cada serviço pode ser verificada como:
1 |
> ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ 'tarefas de serviço do docker' |
E o resultado em nosso caso:
1 2 3 4 5 6 7 8 9 |
> ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-oeste-1.compute.amazonaws.com 'tarefas de serviço do docker cb-mds-index' ID NOME SERVIÇO IMAGEM ÚLTIMA ESTADO DESEJADO ESTADO NÓ 58jxojx32nf66jwqwt7nyg3cf cb-mds-índice.1 cb-mds-índice couchbase Em execução 6 minutos atrás Em execução ip-172-31-14-15 > ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-oeste-1.compute.amazonaws.com 'tarefas de serviço do docker cb-mds-data' ID NOME SERVIÇO IMAGEM ÚLTIMA ESTADO DESEJADO ESTADO NÓ af9zpuh6956fcih0sr70hfban cb-mds-dados.1 cb-mds-dados couchbase Em execução 6 minutos atrás Em execução ip-172-31-14-14 > ssh -i ~/.ssh/aruncouchbase.pem ubuntu@ec2-54-153-101-215.us-oeste-1.compute.amazonaws.com 'tarefas de serviço do docker cb-mds-query' ID NOME SERVIÇO IMAGEM ÚLTIMA ESTADO DESEJADO ESTADO NÓ ceqaza4xk02ha7t1un60jxtem cb-mds-consulta.1 cb-mds-consulta couchbase Em execução 6 minutos atrás Em execução ip-172-31-14-13 |
Isso mostra que os serviços estão bem distribuídos em diferentes nós. Sinta-se à vontade para verificar se a tarefa está de fato agendada no nó com o rótulo correto. Todas as instâncias do Couchbase podem ser configuradas em um cluster para fornecer uma solução completa de banco de dados para seus aplicativos da Web, móveis e de IoT. Quer saber mais?
- Modo Docker Swarm
- Couchbase em contêineres
- Siga-nos em @couchbasedev ou @couchbase
- Faça perguntas sobre Fóruns do Couchbase
[...] guzel bir ornek ise arastiriken Couchbase blogunda buldum, Interstellar filmini seyredeniz var ise Cocuhbase tam size gore ? Multidimensional [...]