Memcached: Instalar, configurar, proteger, analisar
Memcached é um serviço desenvolvido para aliviar o carregamento de bancos de dados em aplicações web dinâmicas armazenando objetos na memória.
Fazer repetitivas solicitações no banco de dados através do comando SELECT
pode sobrecarregar o sistema, tornando-o lento demais.
Então o memcached chegou para resolver esse problema, ao invés de fazer repetidos comandos no banco de dados você pode salvar as informações obtidas através do SELECT
diretamente na memória RAM. O que torna a resposta da sua aplicação muito mais rápida e desafoga o banco de dados.
Neste exemplo foi utilizado uma VM rodando Debian 8 com 512 MB de RAM e IP estático 192.168.1.21.
Instalar
Em distribuições Debian podemos instalar o memcached através do apt:
sudo apt install memcached
Configurar
Por padrão, o memcached vem configurado para rodar na porta 11211, listando em todas as interfaces de rede e capacidade de cachear 64 MB na RAM.
Como esse servidor será exclusivo para cache, irei aumentar a capacidade de armazenamento de dados para 450 MB e modificar a interface padrão (127.0.0.1) para o IP estático dessa máquina (192.168.1.21).
O arquivo de configuração do memcached fica em /etc/memcached.conf e podemos abri-lo com o Vi:
sudo vi /etc/memcached.conf
O arquivo é bem documentado e sugiro que você comente as linhas que for alterar e adicione seus valores personalizados logo abaixo:
- /etc/memcached.conf
-
# memcached default config file # 2003 - Jay Bonci <jaybonci@debian.org> # This configuration file is read by the start-memcached script provided as # part of the Debian GNU/Linux distribution. # Run memcached as a daemon. This command is implied, and is not needed for the # daemon to run. See the README.Debian that comes with this package for more # information. -d # Log memcached's output to /var/log/memcached logfile /var/log/memcached.log # Be verbose # -v # Be even more verbose (print client commands as well) # -vv # Start with a cap of 64 megs of memory. It's reasonable, and the daemon default # Note that the daemon will grow to this size, but does not start out holding this much # memory #-m 64 -m 450 # Quantidade personalizada de memória em MegaBytes # Default connection port is 11211 -p 11211 # Run the daemon as root. The start-memcached will default to running as root if no # -u command is present in this config file -u memcache # Specify which IP address to listen on. The default is to listen on all IP addresses # This parameter is one of the only security measures that memcached has, so make sure # it's listening on a firewalled interface. #-l 127.0.0.1 -l 192.168.1.21 # Único endereço IP em que o memcached irá atender # Limit the number of simultaneous incoming connections. The daemon default is 1024 # -c 1024 # Lock down all paged memory. Consult with the README and homepage before you do this # -k # Return error when memory is exhausted (rather than removing items) # -M # Maximize core file limit # -r
Realizadas as alterações, podemos reiniciar o serviço:
sudo service memcached restart
Proteger
O memcached atenderá apenas no IP 192.168.1.21, na porta 11211. Porém qualquer máquina que possa se comunicar com esse servidor irá poder executar comandos, setar novas informações no cache e também pegar informações salvas e isso pode ser um grave risco a segurança da aplicação.
Uma solução prática é proteger o memcached através de um firewall. Então, vamos instalar o UFW:
sudo apt install ufw
A primeira coisa a ser feita depois da instalação é definir a regra padrão do nosso firewall.
O UFW irá permitir todas as requisições de saída e bloquer todas as requisições de entrada:
sudo ufw default allow outgoing
sudo ufw default deny incoming
Se você deseja que o memcached atenda somente para um endereço IP, pode setar uma regra assim como essa:
sudo ufw allow from 192.168.1.2 to any port 11211 proto tcp
Mas se deseja que o memcached fique disponível em qualquer máquina da sua rede, pode definir desta maneira:
sudo ufw allow from 192.168.1.0/24 to any port 11211 proto tcp
Confira se as regras estão ativas:
sudo ufw status numbered
O UFW possui um manual bem explicativo e com exemplos. Veja a sua manpage sempre que necessário.
Analisar
Uma das maneiras mais práticas de monitorar o uso do seu servidor de cache, ou até mesmo de clusters, é a utilização do PHPMemcachedAdmin.
Supondo que você já possua um servidor web instalado em uma das máquinas da sua rede, você pode entrar no diretório desejado e instalar o PHPMemcachedAdmin desta forma:
wget https://github.com/elijaa/phpmemcachedadmin/archive/master.zip
unzip master.zip
mv phpmemcacheadmin-master phpmemcacheadmin
cd phpmemcacheadmin
chmod +rx *
chmod 777 Config/Memcache.php
chmod 777 Temp/
Depois de fazer o download, descompactar, renomear, entrar e setar as permissões corretas nos arquivos do sistema, você poderá acessar a interface web em seu navegador.
O PHPMemcachedAdmin permite que você adicione quantos servidores desejar, tanto pela interface web como pelo arquivo de configuração em phpmemcacheadmin/Config/Memcache.php. Dessa vez, já irei deixar o servidor recém configurado disponível no cluster Default:
vi phpmemcacheadmin/Config/Memcache.php
- phpmemcacheadmin/Config/Memcache.php
-
<?php return array( 'stats_api' => 'Server', 'slabs_api' => 'Server', 'items_api' => 'Server', 'get_api' => 'Server', 'set_api' => 'Server', 'delete_api' => 'Server', 'flush_all_api' => 'Server', 'connection_timeout' => '1', 'max_item_dump' => '100', 'refresh_rate' => 2, 'memory_alert' => '80', 'hit_rate_alert' => '90', 'eviction_alert' => '0', 'file_path' => 'Temp/', 'servers' => array( 'Default' => array( '192.168.1.21:11211' => array( 'hostname' => '192.168.1.21', 'port' => '11211', ), ), ), );
À partir de agora podemos analisar em tempo real o uso do nosso servidor memcached.
Fontes
O que acha de me comprar um café? Comprar um café