One place for hosting & domains

      Cómo instalar y configurar Ansible en Ubuntu 18.04


      Introducción

      Los sistemas de gestión de la configuración están diseñados para hacer que el control de un gran número de servidores sea fácil para los administradores y los equipos de operaciones. Le permiten controlar muchos sistemas diferentes de forma automatizada desde una ubicación central.

      Aunque existen muchos sistemas populares de gestión de la configuración disponibles para los sistemas Linux, como Chef y Puppet, estos suelen ser más complejos de lo que muchas personas desean o necesitan. Ansible es una gran alternativa a estas opciones, porque requiere un gasto inicial mucho menor.

      En esta guía, explicaremos cómo instalar Ansible en un servidor Ubuntu 18.04 y repasaremos algunos puntos básicos sobre cómo utilizar el software.

      ¿Cómo funciona Ansible?

      Ansible funciona configurando máquinas cliente desde un equipo que tiene los componentes de Ansible instalados y configurados.

      Se comunica por medio de canales SSH habituales para recuperar información de las máquinas remotas, emitir comandos y copiar archivos. Gracias a esto, los sistemas Ansible no requieren la instalación de ningún software adicional en los equipos cliente.

      Esta es una de las formas en las que Ansible simplifica la administración de los servidores. Cualquier servidor que tenga un puerto SSH expuesto puede llevarse al marco de configuración de Ansible, independientemente de la etapa de su ciclo de vida en la que se encuentre. Esto significa que cualquier equipo que pueda administrar mediante SSH, también podrá administrarlo a través de Ansible.

      Ansible adopta un enfoque modular, lo que facilita su ampliación para usar las funcionalidades del sistema principal para abordar escenarios específicos. Los módulos pueden escribirse en cualquier lenguaje y comunicarse en JSON estándar.

      Los archivos de configuración están redactados, principalmente, en formato de serialización de datos YAML, debido a su naturaleza expresiva y su similitud con los lenguajes de marcado populares. Ansible puede interactuar con hosts a través de herramientas de línea de comandos o de sus secuencias de comandos de configuración, que se conocen como Playbooks.

      Requisitos previos

      Para seguir este tutorial, necesitará lo siguiente:

      • Dos o más servidores Ubuntu 18.04. Uno de ellos se utilizará como su servidor de Ansible y el otro, como su host de Ansible. Cada uno deberá tener un usuario no root con privilegios sudo y un firewall básico configurado. Puede establecerlos siguiendo nuestra Guía inicial de configuración del servidor para Ubuntu 18.04. Tenga en cuenta que los ejemplos de esta guía especifican tres hosts de Ansible, pero los comandos y las configuraciones que se indican pueden ajustarse para cualquier número de clientes.

      • Claves SSH generadas para el usuario no root en su servidor de Ansible. Para hacerlo, siga el Paso 1 de nuestra guía sobre Cómo configurar claves SSH en Ubuntu 18.04. Para los fines de este tutorial, puede guardar el par de claves en la ubicación predeterminada (~/.ssh/id_rsa), y no necesita una contraseña para protegerlas.

      Paso 1: instalación de Ansible

      Para comenzar a usar Ansible como medio para administrar sus diferentes servidores, deberá instalar el software de Ansible en, al menos, una máquina.

      Para obtener la versión más reciente de Ansible para Ubuntu puede añadir el PPA (archivo personal de paquete) del proyecto a su sistema. Antes de hacerlo, sin embargo, primero, debería asegurarse de tener el paquete software-properties-common instalado. Este software facilitará la gestión de este y otros repositorios de software independientes:

      • sudo apt update
      • sudo apt install software-properties-common

      Luego, añada el PPA de Ansible escribiendo el siguiente comando:

      • sudo apt-add-repository ppa:ansible/ansible

      Pulse ENTERpara aceptar la adición del PPA.

      A continuación, vuelva a actualizar el índice de paquetes del sistema para que tenga conocimiento de los paquetes disponibles en el PPA:

      Tras esta actualización, podrá instalar el software Ansible:

      Su servidor de Ansible, ahora, tiene todo el software necesario para administrar sus hosts.

      Paso 2: configuración del acceso de SSH a los hosts de Ansible

      Como se mencionó anteriormente, Ansible se comunica, principalmente, con equipos cliente a través de SSH. Aunque, ciertamente, tiene la capacidad de gestionar autenticación SSH basada en contraseña, usar claves SSH puede ayudar a hacer que todo sea más sencillo.

      En su servidor de Ansible, utilice el comando cat para imprimir los contenidos del archivo de clave pública SSH de su usuario no root en la salida de la terminal:

      Copie el resultado en su portapapeles, luego, abra una nueva terminal y establezca la conexión con uno de sus hosts de Ansible usando SSH:

      • ssh sammy@ansible_host_ip

      Cambie al usuario root de la máquina cliente:

      Como usuario root, abra authorized_keys en el directorio ~/.ssh:

      • nano ~/.ssh/authorized_keys

      En el archivo, pegue su servidor de Ansible usando la clave SSH del usuario, luego, guarde el archivo y cierre el editor (pulse CTRL + X, Y y, luego, ENTER). A continuación, ejecute el comando exit para volver a usar el usuario no root del host:

      Por último, debido a que Ansible utiliza un intérprete de python ubicado en /usr/bin/python para ejecutar sus módulos, deberá instalar Python 2 en el host para que Ansible se pueda comunicar con él. Ejecute los siguientes comandos para actualizar el índice de paquete del host e instalar el paquete python:

      • sudo apt update
      • sudo apt install python

      Tras esto, puede volver a ejecutar el comando exit para cerrar la conexión con el cliente:

      Repita este proceso para cada servidor que desee controlar con su servidor de Ansible. A continuación, configuraremos el servidor de Ansible para conectar con estos hosts usando el archivo hostsde Ansible.

      Paso 3: configuración de hosts de Ansible

      Ansible mantiene un seguimiento de todos los servidores que conoce a través de un archivo de hosts. Deberá configurar este archivo para poder comenzar a comunicarse con los otros equipos.

      Abra el archivo con privilegios sudo, de la siguiente manera:

      • sudo nano /etc/ansible/hosts

      Dentro del archivo, verá varias configuraciones de ejemplo comentadas (con un #antes de cada línea). En realidad, estos ejemplos no nos funcionarán, ya que los hosts enumerados en cada una de ellas son inventados. Sin embargo, los conservaremos en el archivo para ayudarnos con la configuración si deseamos implementar escenarios más complejos en el futuro.

      El archivo de hosts es bastante flexible y puede configurarse de varias formas diferentes. La sintaxis que vamos a usar, sin embargo, tiene el siguiente aspecto:

      [group_name]
      alias ansible_host=your_server_ip
      

      Nota: con el lanzamiento de Ansible versión 2.0, la variable de configuración ansible_hostsustituyó a la variable original, ansible_ssh_host. Si está usando una versión anterior de Ansible, deberá usar la variable más antigua de mayor longitud.

      En este ejemplo, group_namees una etiqueta de organización que le permite dirigirse a cualquiera de los servidores enumerados en ella con una palabra, mientras que aliases solo un nombre para referirse a un servidor específico.

      Por lo tanto, en nuestro escenario, estamos imaginando que tenemos tres servidores que vamos a controlar con Ansible. En este momento, es posible acceder a estos servidores desde el servidor de Ansible escribiendo lo siguiente:

      No se le debería pedir una contraseña si configuró esto correctamente. Con fines demostrativos, asumiremos que las direcciones IP de nuestros hosts son 203.0.113.1, 203.0.113.2, y 203.0.113.3. Configuraremos esto para que podamos referirnos a ellas individualmente como host1, host2, y host3, o como un grupo con el nombre servers.

      Este es el bloque que deberíamos añadir a nuestro archivo de hosts para obtener lo siguiente:

      /etc/ansible/hosts

      [servers]
      host1 ansible_host=203.0.113.1
      host2 ansible_host=203.0.113.2
      host3 ansible_host=203.0.113.3
      

      Los hosts pueden estar en múltiples grupos, y los grupos pueden configurar parámetros para todos sus miembros. Vamos a probar esto ahora.

      Con nuestra configuración actual, si intentásemos conectar con cualquiera de estos hosts con Ansible, el comando fallaría (asumiendo que no está operando como usuario root). Esto se debe a que su clave SSH está integrada para el usuario root en los sistemas remotos y Ansible, por defecto, intentará conectar como su usuario actual. Un intento de conexión provocará este error:

      Output

      host1 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true }

      En el servidor de Ansible, estamos usando un usuario llamado sammy. Ansible intentará conectarse a cada host con ssh sammy@server. Esto no funcionará si el usuario sammy no se encuentra también en el sistema remoto.

      Podemos crear un archivo que le indique a todos los servidores del grupo “servers” que se conecten como usuario root.

      Para hacerlo, crearemos un directorio en la estructura de configuración de Ansible llamado group_vars. En esta carpeta, podemos crear archivos con formato YAML para cada grupo que queramos configurar:

      • sudo mkdir /etc/ansible/group_vars
      • sudo nano /etc/ansible/group_vars/servers

      Los archivos YAML comienzan con “—”, por lo tanto, asegúrese de no olvidar esa parte.

      /etc/ansible/group_vars/servers

      ---
      ansible_user: root
      

      Nota: de forma similar a la variable ansible_host, ansible_userreemplazó a la variable ansible_ssh_useren la versión 2.0. Si está usando una versión de Ansible anterior a 2.0, asegúrese de usar la variable más antigua de mayor longitud.

      Guarde y cierre este archivo cuando haya terminado.

      Si desea especificar los detalles de la configuración para cada servidor, independientemente de la asociación de grupo, puede incluir estos detalles en un archivo en /etc/ansible/group_vars/all. Los hosts individuales pueden configurarse creando archivos que lleven el nombre de sus alias en un directorio en /etc/ansible/host_vars.

      Paso 4: uso de comandos de Ansible sencillos

      Ahora que tenemos nuestros hosts configurados y contamos con suficientes detalles de configuración para poder conectar correctamente con nuestros hosts, podemos probar nuestro primer comando.

      Haga ping a todos los servidores que configuró escribiendo lo siguiente:

      Ping output

      host1 | SUCCESS => {
          "changed": false,
          "ping": "pong"
      }
      
      host3 | SUCCESS => {
          "changed": false,
          "ping": "pong"
      }
      
      host2 | SUCCESS => {
          "changed": false,
          "ping": "pong"
      }
      

      Esta es una prueba básica para garantizar que Ansible pueda conectarse con todos sus hosts.

      Aquí, all significa todos los hosts. Podríamos especificar un grupo con la misma facilidad:

      También podríamos especificar un host individual:

      Podemos especificar múltiples hosts separándolos con comas:

      • ansible -m ping host1:host2

      La parte de -m ping del comando es una instrucción que le indica a Ansible que utilice el módulo “ping”. Estos son, básicamente, comandos que puede ejecutar en sus hosts remotos. El módulo ping funciona, en muchos aspectos, como una herramienta de pingnormal en Linux, pero, en su lugar, comprueba la conectividad de Ansible.

      El módulo ping, en realidad, no toma ningún argumento, pero podemos probar otro comando para ver cómo funciona. Pasamos los argumentos a una secuencia de comandos escribiendo -a.

      El módulo “shell” nos permite enviar un comando de terminal al host remoto y obtener los resultados. Por ejemplo, para conocer el uso de memoria de nuestra máquina host1, podríamos usar lo siguiente:

      • ansible -m shell -a 'free -m' host1

      Shell output

      host1 | SUCCESS | rc=0 >>
                   total       used       free     shared    buffers     cached
      Mem:          3954        227       3726          0         14         93
      -/+ buffers/cache:        119       3834
      Swap:            0          0          0
      

      Con esto, su servidor de Ansible queda configurado, y podrá comunicarse con sus hosts y controlarlos correctamente.

      Conclusión

      En este tutorial, hemos configurado Ansible y verificado que puede comunicarse con cada host. También hemos usado el comando ansiblepara ejecutar tareas sencillas de forma remota.

      Aunque esto es útil, no hemos cubierto la función más potente de Ansible en este artículo: Playbooks. Los playbooks de Ansible son una forma sencilla y potente de administrar configuraciones de servidores e implementaciones con múltiples máquinas. Para ver una introducción a Playbooks, consulte esta guía. Además, lo animamos a consultar la documentación oficial de Ansible para obtener más información sobre la herramienta.



      Source link

      Cómo instalar Docker Compose en Ubuntu 18.04


      Introducción

      Docker es una excelente herramienta para automatizar la implementación de aplicaciones de Linux dentro de contenedores de software, pero para aprovechar plenamente su potencial cada componente de una aplicación debería ejecutarse en su propio contenedor individual. En el caso de aplicaciones complejas con muchos componentes, la estrategia de organizar todos los contenedores para que se inicien, se comuniquen y se desconecten juntos puede volverse poco productiva en poco tiempo.

      La comunidad de Docker propuso una solución popular llamada Fig, que permitió el uso de un archivo YAML único para organizar la totalidad de sus contenedores y configuraciones de Docker. La popularidad de esto fue tal que el equipo de Docker decidió crear Docker Compose en base a la fuente de Fig, que ahora es obsoleta. Docker Compose permite que los usuarios organicen de forma más sencilla los procesos de los contenedores de Docker, incluidos los de inicio, cierre y configuración de enlaces y volúmenes dentro de los contenedores.

      En este tutorial, le mostraremos la forma de instalar la versión más reciente de Docker Compose para ayudarlo a administrar aplicaciones en varios contenedores.

      Requisitos previos

      Para seguir los pasos de este artículo, necesitará un servidor Ubuntu 18.04. con lo siguiente:

      Una vez implementado esto, estará listo para seguir adelante.

      Nota: Aunque en los requisitos previos se brindan instrucciones para instalar Docker en Ubuntu 18.04, los comandos de Dockerde este artículo deben funcionar en otros sistemas operativos mientras Docker esté instalado.

      Paso 1: Instalar Docker Compose

      Si bien se puede instalar Docker Compose desde los repositorios oficiales de Ubuntu, la versión está considerablemente atrasada respecto de la más reciente. Por lo tanto, instalaremos Docker Compose desde el repositorio de GitHub. El comando que se muestra a continuación difiere ligeramente respecto del que encontrará en la página Versiones. Al usar el indicador -o para especificar primero el archivo de salida en lugar de redirigirla, esta sintaxis evita que se produzca un error de denegación de permiso al usar sudo.

      Revisaremos la versión actual y, si es necesario, la actualizaremos en el comando que se muestra a continuación:

      • sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

      Luego, configuraremos los permisos:

      • sudo chmod +x /usr/local/bin/docker-compose

      A continuación, comprobaremos que la instalación se haya realizado de forma correcta revisando la versión:

      Con esto se imprimirá la versión que instalamos:

      Output

      docker-compose version 1.21.2, build a133471

      Ahora que instalamos Docker Compose, estamos listos para ejecutar un ejemplo “Hello World”.

      Paso 2: Ejecución de un contenedor con Docker Compose

      En Docker Hub, el registro público de Docker, se incluye una imagen de Hello World para demostración y pruebas. En ella se muestra la configuración mínima requerida para ejecutar un contenedor usando Docker Compose; un archivo YAML que llama a una única imagen:

      Primero, crearemos un directorio para el archivo YAML y nos ubicaremos en él:

      • mkdir hello-world
      • cd hello-world

      Luego, crearemos el archivo YAML:

      Introduzca el siguiente contenido en el archivo, guárdelo y cierre el editor de texto:

      docker-compose.yml

      my-test:
       image: hello-world
      

      La primera línea del archivo YAML se utiliza como parte del nombre del contenedor. En la segunda línea se especifica la imagen que se debe usar para crear el contenedor. Cuando ejecutamos el comando docker-compose se buscará una imagen local con el nombre que precisamos: hello-world. Una vez implementado esto, guardaremos el archivo y lo cerraremos.

      Podemos ver de forma manual imágenes de nuestro sistema con el comando docker images:

      Cuando no hay imágenes locales, solo se muestran los encabezados de columnas:

      Output

      REPOSITORY TAG IMAGE ID CREATED SIZE

      Ahora, aunque aún nos encontremos en el directorio ~/hello-world, ejecutaremos el siguiente comando:

      La primera vez que ejecutemos el comando, si no aparece una imagen local con el nombre hello-world Docker Compose la extraerá del repositorio público de Docker Hub:

      Output

      Pulling my-test (hello-world:latest)... latest: Pulling from library/hello-world c04b14da8d14: Downloading [==================================================>]c04b14da8d14: Extracting [==================================================>]c04b14da8d14: Extracting [==================================================>]c04b14da8d14: Pull complete Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9 Status: Downloaded newer image for hello-world:latest . . .

      Tras extraer la imagen, docker-compose crea un contenedor, adjunta y ejecuta el programa hello, lo que a su vez confirma que la instalación parece funcionar:

      Output

      . . . Creating helloworld_my-test_1... Attaching to helloworld_my-test_1 my-test_1 | my-test_1 | Hello from Docker. my-test_1 | This message shows that your installation appears to be working correctly. my-test_1 | . . .

      Luego imprime una explicación de lo que hizo:

      Output of docker-compose up

      1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.

      Los contenedores de Docker solo se ejecutan mientras el comando está activo, de modo que cuando hello termina de ejecutarse, el contenedor se detiene. Por consiguiente, cuando examinamos procesos activos los encabezados de columna aparecerán, pero el contenedor de hello-world no figurará por no estar en ejecución.

      Output

      CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

      Podemos ver la información del contenedor, la cual necesitaremos en el siguiente paso, usando el indicador -a que muestra todos los contenedores, no solo los activos:

      Output

      CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 06069fd5ca23 hello-world "/hello" 35 minutes ago Exited (0) 35 minutes ago drunk_payne

      Esto muestra la información que deberemos eliminar del contenedor cuando terminemos con él.

      Paso 3: Eliminación de la imagen (opcional)

      Para evitar ocupar espacio innecesario en el disco, eliminaremos la imagen local. Para hacerlo, tendremos que eliminar todos los contenedores que hagan referencia a la imagen usando el comandodocker rm, seguido del ID DEL CONTENEDOR o del NOMBRE. A continuación, usaremos el ID del CONTENEDOR del comando docker ps -a que acabamos de ejecutar. Asegúrese de sustituir el ID de su contenedor:

      Una vez eliminados todos los contenedores que hagan referencia a la imagen, podemos eliminar la imagen:

      Conclusión

      De esta manera, instalamos Docker Compose, probamos nuestra instalación ejecutando un ejemplo de Hello World y eliminamos la imagen de prueba y el contenedor.

      Aunque el ejemplo de Hello World confirmó nuestra instalación, la configuración sencilla no muestra uno de los principales beneficios de Docker Compose: crear y eliminar un grupo de contenedores de Docker al mismo tiempo. Para ver el poder de Docker Compose en acción, tal vez desee revisar el ejemplo práctico Cómo configurar un entorno de integración continua de prueba con Docker y Docker Compose en Ubuntu 16.04 (nota: este artículo es para Ubuntu 16.04 y no responde a la versión 18.04).



      Source link

      Como Adicionar Espaço de Swap (troca) no Ubuntu 18.04


      Justin Ellingwood escreveu uma versão anterior deste tutorial.

      Introdução

      Uma das formas mais fáceis de se proteger contra erros fora da memória em aplicativos é adicionar um pouco de espaço de swap no seu servidor. Neste guia, falaremos sobre como adicionar um arquivo swap a um servidor Ubuntu 18.04.

      Aviso: Embora o swap seja geralmente recomendado para sistemas utilizando discos rígidos tradicionais, usar o swap com SSDs pode causar problemas de degradação de hardware ao longo do tempo. Devido a essa consideração, não recomendamos a habilitação do swap no DigitalOcean ou em qualquer outro provedor que utiliza armazenamento SSD. Fazer isso pode afetar a confiabilidade do hardware subjacente para você e seus vizinhos. Este guia é fornecido como referência para usuários que possam ter sistemas de disco rígido tradicional em outro lugar.

      Se você precisa melhorar o desempenho do seu servidor na DigitalOcean, recomendamos que atualize seu Droplet. Isso resultará em melhores resultados no geral e diminuirá a probabilidade de contribuir para problemas de hardware que possam afetar seu serviço.

      O que é o Swap?

      Swap é uma área em um disco rígido que foi designada como um lugar onde o sistema operacional pode armazenar temporariamente dados que ele já não pode manter em RAM. Basicamente, isso dá a você a capacidade de aumentar a quantidade de informações que seu servidor pode manter em sua “memória” operacional, com algumas limitações. O espaço de swap no disco rígido será usado principalmente quando já não houver espaço suficiente em RAM para manter os dados do aplicativo em uso.

      As informações gravadas no disco ficarão significativamente mais lentas do que as informações mantidas em RAM, mas o sistema operacional preferirá manter os dados do aplicativo em memória e usar o swap para os dados mais antigos. De maneira geral, ter espaço de swap como uma alternativa para quando a RAM do seu sistema estiver esgotada pode ser uma boa estratégia de segurança contra exceções de memória insuficiente nos sistemas com armazenamento disponível que não seja SSD.

      Passo 1 – Verificando o Sistema em Relação às Informações de Swap (troca)

      Antes de começarmos, podemos verificar se o sistema já tem algum espaço de swap (troca) disponível. É possível ter vários arquivos de swap ou partições de swap, mas geralmente um deve ser o suficiente.

      Podemos descobrir se o sistema tem algum swap configurado digitando:

      Se você não receber nenhum resultado, isso significa que seu sistema não tem espaço de swap disponível atualmente.

      Você pode verificar se não existe um swap ativo usando o utilitário free:

      Output

      total used free shared buff/cache available Mem: 985M 84M 222M 680K 678M 721M Swap: 0B 0B 0B

      Como você pode ver na linha Swap do resultado, nenhum swap está ativo no sistema.

      Passo 2 – Verificando o Espaço Disponível na Partição do Disco Rígido

      Antes de criarmos nosso arquivo de swap, verificaremos o uso atual do disco para garantir que temos espaço suficiente. Faça isso digitando:

      Output

      Filesystem Size Used Avail Use% Mounted on udev 481M 0 481M 0% /dev tmpfs 99M 656K 98M 1% /run /dev/vda1 25G 1.4G 23G 6% / tmpfs 493M 0 493M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 493M 0 493M 0% /sys/fs/cgroup /dev/vda15 105M 3.4M 102M 4% /boot/efi tmpfs 99M 0 99M 0% /run/user/1000

      O dispositivo com / na coluna Mounted on é o nosso disco neste caso. Temos bastante espaço disponível neste exemplo (apenas 1,4 GB usado). Seu uso provavelmente será diferente.

      Apesar da divergência de opiniões quanto ao tamanho adequado de um espaço de swap, isso realmente dependerá de suas preferências pessoais e das exigências da sua aplicação. Geralmente, um espaço igual ou duas vezes o tamanho do espaço da RAM no seu sistema é um bom ponto de partida. Outra boa regra de ouro é que qualquer coisa acima de 4 GB de swap é provavelmente desnecessária se você somente estiver usando-o como uma alternativa para a RAM.

      Passo 3 – Criando um Arquivo de Swap

      Agora que sabemos qual é o espaço disponível em nosso disco rígido, podemos criar um arquivo de swap no nosso sistema de arquivos. Alocaremos um arquivo do tamanho do swap que desejarmos chamar de swapfile no nosso diretório raiz (/).

      A melhor maneira de criar um arquivo de swap é com o programa fallocate. Este comando cria instantaneamente um arquivo do tamanho especificado.

      Uma vez que o servidor no nosso exemplo tem 1 GB de RAM, criaremos um arquivo de 1 GB neste guia. Ajuste isso para atender às necessidades do seu próprio servidor:

      • sudo fallocate -l 1G /swapfile

      Podemos verificar se a quantidade correta de espaço foi reservada digitando:

      • -rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile

      Nosso arquivo foi criado com a quantidade correta do espaço reservado.

      Passo 4 – Habilitando o Arquivo de Swap

      Agora que temos um arquivo do tamanho correto disponível, precisamos realmente transformar isso em espaço de swap.

      Primeiro, precisamos bloquear as permissões do arquivo para que apenas os usuários com privilégios root possam ler o conteúdo. Isso impede que os usuários normais possam acessar o arquivo, o que teria implicações de segurança significativas.

      Torne o arquivo acessível somente para root digitando:

      Verifique a alteração de permissões digitando:

      Output

      -rw------- 1 root root 1.0G Apr 25 11:14 /swapfile

      Como você pode ver, apenas o usuário root tem os sinalizadores de leitura e gravação habilitados.

      Podemos agora marcar o arquivo como espaço de swap digitando:

      Output

      Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf

      Depois de marcar o arquivo, podemos habilitar o arquivo de swap, permitindo que nosso sistema comece a usá-lo:

      Verifique se o swap está disponível digitando:

      Output

      NAME TYPE SIZE USED PRIO /swapfile file 1024M 0B -2

      Podemos verificar a saída do utilitário free novamente para corroborar nossos resultados:

      Output

      total used free shared buff/cache available Mem: 985M 84M 220M 680K 680M 722M Swap: 1.0G 0B 1.0G

      Nosso swap foi configurado com sucesso e nosso sistema operacional começará a usá-lo conforme necessário.

      Passo 5 – Tornando o Arquivo de Swap Permanente

      Nossas alterações recentes habilitaram o arquivo de swap para a sessão atual. No entanto, se reiniciarmos, o servidor não manterá as configurações de swap automaticamente. Podemos alterar isso adicionando o arquivo de swap ao nosso arquivo /etc/fstab.

      Faça um backup do arquivo /etc/fstab para o caso de algo dar errado:

      • sudo cp /etc/fstab /etc/fstab.bak

      Adicione a informação do arquivo de swap no final do seu arquivo /etc/fstab digitando:

      • echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

      Em seguida, avaliaremos algumas configurações que podemos atualizar para ajustar nosso espaço de swap.

      Passo 6 – Ajustando as Configurações de Swap

      Há algumas opções que você pode configurar que terão um impacto no desempenho do seu sistema quando estiver lidando com o swap.

      Ajustando a propriedade Swappiness

      O parâmetro swappiness configura a frequência com que o seu sistema transfere dados da RAM para o espaço de swap. Esse é um valor entre 0 e 100 que representa uma porcentagem.

      Com valores próximos de zero, o kernel não irá transferir dados para o disco a menos que seja absolutamente necessário. Lembre-se, as interações com o arquivo de swap são “dispendiosas”, no sentido de que demoram mais que as interações com a RAM e podem causar uma redução significativa no desempenho. Dizer ao sistema para não depender tanto do swap irá geralmente tornar o seu sistema mais rápido.

      Valores que estão mais próximos de 100 irão tentar colocar mais dados no swap em um esforço para manter mais espaço da RAM livre. Dependendo do perfil de memória de seus aplicativos ou do motivo pelo qual você está usando o seu servidor, isso pode ser melhor em alguns casos.

      Podemos ver o valor atual do parâmetro swappiness digitando:

      • cat /proc/sys/vm/swappiness

      Output

      60

      Para um desktop, um valor de swappiness de 60 não é um valor ruim. Para um servidor, você pode deixá-lo mais próximo de 0.

      Podemos definir o parâmetro swappiness para um valor diferente usando o comando sysctl.

      Por exemplo, para definir o valor do parâmetro swappiness em 10, poderíamos digitar:

      • sudo sysctl vm.swappiness=10

      Output

      vm.swappiness = 10

      Este valor persistirá até a próxima reinicialização. Podemos definir este valor automaticamente na reinicialização, adicionando a linha no nosso arquivo /etc/sysctl.conf:

      • sudo nano /etc/sysctl.conf

      No final, você pode adicionar:

      /etc/sysctl.conf

      vm.swappiness=10
      

      Salve e feche o arquivo quando você terminar.

      Ajustando a Configuração da Pressão por Cache

      Outro valor relacionado que você pode querer modificar é o vfs_cache_pressure. Este ajuste configura o quanto o sistema escolherá para as informações cache dos objetos inode e dentry em detrimento de outros dados.

      Basicamente, tratam-se de dados de acesso sobre o sistema de arquivos. De maneira geral, isso é difícil de consultar e, com frequência, muito solicitado. Assim, é algo muito bom que o seu sistema armazene dados em cache. Você pode ver o valor atual questionando o sistema de arquivos proc novamente:

      • cat /proc/sys/vm/vfs_cache_pressure

      Output

      100

      Uma vez que ele está atualmente configurado, o nosso sistema remove as informações de inode do cache muito rapidamente. Podemos definir isso em um valor mais conservador como 50, digitando:

      • sudo sysctl vm.vfs_cache_pressure=50

      Output

      vm.vfs_cache_pressure = 50

      Novamente, isso é apenas válido para a nossa sessão atual. Podemos alterar esse valor, adicionando-o ao nosso arquivo de configuração como fizemos com a nossa configuração do parâmetro swappiness:

      • sudo nano /etc/sysctl.conf

      No final, adicione a linha que especifica o seu novo valor:

      /etc/sysctl.conf

      vm.vfs_cache_pressure=50
      

      Salve e feche o arquivo quando você terminar.

      Conclusão

      Seguir as etapas deste guia lhe dará algum espaço para respirar em casos que de outra forma conduziriam a exceções de falta de memória. O espaço de swap pode ser incrivelmente útil para evitar alguns desses problemas comuns.

      Se você está encontrando erros de OOM (out of memory - falta de memória), ou se você descobrir que o seu sistema não consegue usar os aplicativos de que você precisa, a melhor solução é otimizar as configurações do seu aplicativo ou atualizar o seu servidor.



      Source link