Mudando de máquinas virtuais para contêineres LXC: razões, vantagens e instruções prontas para uso

Sobre o que falaremos:

- Por que decidimos mudar para contêineres LXC?
- Como criar um contêiner e executar um host baseado em Bitrix nele?

Para quem será útil:

Para todos que desejam experimentar uma nova solução, usando menos recursos.

Benefícios do LXC sobre máquinas virtuais


Mudamos para contêineres quando encontramos uma falta de recursos do servidor, a dificuldade de diferenciar direitos de acesso para diferentes projetos e conflitos de software em uma máquina virtual. Aqui estão alguns dos principais benefícios do LXC sobre máquinas virtuais:

  1. Menos perda de desempenho da CPU, operações de disco e RAM. Quase tudo o que está disponível no contêiner funciona na velocidade do servidor.
  2. Não há necessidade de alocar RAM para o kernel do SO, memória de vídeo, buffers de disco, etc.
  3. Início rápido. De fato, apenas os aplicativos lançados são necessários para o contêiner funcionar.
  4. Ele suporta o lançamento de aplicativos individuais no contêiner, em vez do sistema completo. É conveniente que os acessos possam ser concedidos simplesmente adicionando um usuário (em vez de chroot), pois temos apenas um projeto no contêiner (havia vários nas máquinas virtuais).
  5. A capacidade de gerenciar os recursos de cada contêiner.
  6. Mova contêineres entre servidores de maneira rápida e fácil.

Nós usamos o rsync. Basta criar um contêiner com o mesmo nome no novo servidor e copiar:

rsync -alvz :/var/lib/lxd/container/test/ /var/lib/lxd/container/test/ 

Precisamos elaborar no quinto parágrafo e falar sobre gerenciamento de recursos. Devemos fornecer ao contêiner recursos suficientes para funcionar e, ao mesmo tempo, garantir que o contêiner não consuma recursos desnecessários, interferindo, assim, no trabalho do restante do sistema.

Você pode visualizar as estatísticas do consumo de recursos pelo comando: lxc info test

 Remote: unix:// : x86_64 : 2018/12/04 14:27 UTC Status: Running Type: persistent : default Pid: 28317 IPs: eth0: inet 172.27.2.204 vethF91F2U Resources: : 56 CPU usage:   ( ): 20583 Memory usage: Memory (current): 1.03GB Memory (peak): 3.11GB Network usage: eth0:  : 17.45GB  : 9.93GB 

De acordo com essas estatísticas, é possível rastrear quantos recursos um contêiner consome e, se necessário, limitar seu consumo usando comandos especiais:

  • limites de teste do conjunto de configuração lxc. memória 2048M # define o limite de memória.
  • lxc config set test limits.cpu 1,2,3,8 # vincula o contêiner aos núcleos da CPU.
  • lxc config set test cpu.allowance 10% # limit consumo de CPU.
  • O tamanho da raiz do teste de configuração do lxc config 50GB # limita a quantidade de espaço em disco usado pelo contêiner (funciona apenas com ZFS ou btrfs).
  • lxc config get test limits.memory - exibe o valor limite definido

Como resultado, os contêineres permitem que você pegue dezenas de contêineres em uma área de trabalho muito padrão, mantendo um desempenho suficiente.

Configuramos o servidor e transferimos o host padrão com o Bitrix da máquina virtual para o contêiner


1. Configuração do servidor

1.1 Instale a versão mais recente do servidor Ubuntu 18.04 no servidor. Ele já tem LXD. O LXD é um complemento para o LXC, um hipervisor que simplifica a interação com o sistema de contêiner.
1.2 apt install bridge-utils # install bridge-utils
1.3 lxd init # inicializa o lxd
1.4 padrão de edição do perfil lxc # edite o arquivo de perfil:

 devices: eth0: name: eth0 nictype: bridged parent: br0 type: nic root: path: / pool: default type: disk name: default 

1.5 lxc launch ubuntu: 04/18 test # crie um container chamado test. Ele fará o download da imagem, criará e lançará. Isso completa a configuração e a criação do contêiner, depois prossiga para configurá-lo e transfira o host para ele.

2. Configuração de contêiner de host e migração de site

2.1 lxc exec test / bin / bash # Vá para o contêiner criado.
2.2 add-apt-repository ppa: ondrej / php # Adicione um repositório.
2.3 apt update # Atualize o repositório.
2.4 apt install
php7.1 {fpm, bcmath, bz2, cli, comum, curl, dev, enchant, fpm, gd, gmp, imap, intl, json,
ldap, mbstring, mcrypt, mysql, odbc, opcache, phpdbg, pspell, readline, recode, soap,
arrumado, xml, xmlrpc, xsl, zip} # Instale o php e todos os módulos necessários para o bitrix.
2.5 apt install nginx # Instale o nginx.
2.6 vim /etc/netplan/50-cloud-init.yaml # Torne o IP estático:

 network: version: 2 ethernets: eth0: addresses: [172.27.2.108/16] gateway4: 172.27.0.1 nameservers: addresses: [172.27.1.1] dhcp4: false 

2.7 Copie as configurações php e nginx da nossa máquina virtual, verifique se tudo começa e funciona.
2.8 Transferimos todo o site da nossa máquina virtual. Por exemplo:

Virtual antigo do rsync -alvz: / var / www / / var / www /

3. Criando um contêiner separado para o banco de dados

3.1 Repita as etapas 1 .5, 2.1 e 2.6 , nomeando o contêiner, por exemplo, test-db.
3.2 apt install mysql-server # instala o banco de dados
3.3 apt install pv # Instale o PV para ver o progresso quando carregarmos o banco de dados.

4. Configurando um Novo Servidor de Banco de Dados

Para começar, coletamos informações do servidor antigo:

4.1 Precisamos de usuário e passamos do banco de dados desejado.
4.2 mysql -u test -p'test '-e "show cria banco de dados testDB;" # Descubra como o banco de dados foi criado (o que precisamos destacar):

 mysql: [Warning] Using a password on the command line interface can be insecure. +----------+--------------------------------------------------------------------------+ | Database | Create Database | +----------+--------------------------------------------------------------------------+ | demoshop | <b>CREATE DATABASE `demoshop` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */ |</b> +----------+--------------------------------------------------------------------------+ 

4.3 mysqldump -ER - única transação - teste rápidoDB | gzip> testDB.sql.gz # Execute este comando no servidor em que nosso banco de dados está localizado. Ela vai despejar e compactar no arquivo.

Iremos ao nosso novo banco de dados e executaremos as seguintes ações:

4.4 DB antigo rsync -alvz: / root / testDB.sql.gz / root / # transfere o archive com o dump para o nosso contêiner.
4.5 mysql # Vamos ao nosso banco de dados
4.5.1 CRIAR USUÁRIO 'usuário' @ '%' IDENTIFICADO POR 'passe'; # crie o mesmo usuário e senha.
4.5.2 A partir do parágrafo 4.2, inserimos o comando: CREATE DATABASE `DBName` / *! 40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci * / ;
4.5.3 CONCEDE TODOS OS PRIVILÉGIOS NO nome do banco de dados. * PARA 'user' @ '%' IDENTIFICADO por 'pass'; # Nós daremos direitos ao nosso banco de dados.
4.6 Saímos do banco de dados e executamos o console do contêiner: pv testDB.sql.gz | zcat | mysql testDB # Preencha o dump no nosso banco de dados

5. Verificação

5.1 Altere os parâmetros de conexão com o banco de dados, indique o novo IP do nosso banco de dados.
5.2 Depois disso, o site deve abrir por IP ou DNS, depende da sua configuração.

Conclusão


Assim, os contêineres LXC nos ajudam a reduzir o consumo de recursos do servidor de teste e ajustam mais hosts em um servidor, mantendo a capacidade de gerenciar convenientemente os recursos consumidos de cada host. Agora você tem instruções prontas que mostram como é fácil implementar.

Source: https://habr.com/ru/post/pt458658/


All Articles