O que faz este módulo #
O memcached configura-se com um ficheiro de texto e um punhado de flags: quanta RAM lhe dar, quantas threads, quantas ligações. Acertar nesses números depende do tamanho da instância, e errar sai caro — ou fica sem cache suficiente ou come a RAM de que o sistema precisa.
O módulo memcached trata disso e de tudo o que rodeia o serviço: calcula o tuning a partir da RAM real da máquina, gere as credenciais SASL (obrigatórias nesta imagem), mantém o certificado TLS gerado no primeiro arranque —nunca embutido na AMI— e dá-lhe o estado ao vivo com as estatísticas do serviço.
Os comandos que leem credenciais ou mexem na configuração precisam de root (use sudo). Atenção ao optimize: aplicar valores novos reinicia o serviço, e um reinício esvazia a cache. Se preferir reiniciar você mesmo, use --no-restart.
Guia rápido #
Escolha o que quer fazer. Cada receita traz o comando já escrito — copie-o e carregue em Copiar.
1
Ver o estado do serviço
Confirme de relance que a cache está saudável e que tuning tem aplicado.
Ligue-se por SSH à sua instância com o utilizador ubuntu.
Peça o estado: verá em que portas escuta, se TLS e SASL estão activos, o tuning aplicado e as estatísticas ao vivo (memória em uso, elementos, acertos e falhas):
$ sudo imaxe memcached statusQuer isto para um painel ou um script? Junte --json:
$ sudo imaxe memcached status --jsonhits cresce e evictions se mantém baixo, a cache está bem dimensionada. Se as expulsões dispararem, salte para Ajustar o tamanho.2
Ligar-me à cache
Obtenha o utilizador, a palavra-passe e a porta para apontar a sua aplicação.
Esta imagem exige SASL: não há acesso anónimo. Peça as credenciais desta instância (a palavra-passe sai mascarada):
$ sudo imaxe memcached credentialsQuando a for copiar a sério, mostre-a em claro:
$ sudo imaxe memcached credentials --show-password11211 fala TLS; a 11212 é texto simples e só escuta em loopback, para as ferramentas do próprio sistema. Não abra a 11211 à Internet: abra-a ao CIDR da sua VPC.3
Ajustar o tamanho da cache
Recalcule memória, threads e ligações para o tamanho real da máquina.
Veja primeiro que valores sairiam, sem mexer em nada:
$ sudo imaxe memcached optimize --showSe o convencerem, aplique-os. O serviço reinicia e a cache esvazia-se:
$ sudo imaxe memcached optimizeQuer mais cache e menos margem para o sistema? Suba a percentagem de RAM:
$ sudo imaxe memcached optimize --memory-pct 75--dry-run vê também o bloco de configuração que seria escrito. E com --no-restart aplica-se sem reiniciar: os valores novos entram no arranque seguinte.4
Criar utilizadores SASL
Crie, rode ou apague as credenciais que as suas aplicações usam.
Liste os utilizadores que existem na base SASL:
$ sudo imaxe memcached users listCrie um por aplicação, com palavra-passe aleatória:
$ sudo imaxe memcached users add app1Palavra-passe concreta? Passe-a pela entrada padrão para que não fique no ps nem no histórico:
$ sudo imaxe memcached users add app1 --stdinimaxe memcached users rotate <utilizador>. Sem nome, roda a do utilizador do produto.5
Rever o certificado TLS
Verifique a validade e renove o certificado da instância.
O certificado é gerado no primeiro arranque de cada instância, por isso nunca é partilhado entre máquinas. Veja o que está em uso:
$ sudo imaxe memcached tls showRenove-o quando quiser, mesmo que o actual continue válido:
$ sudo imaxe memcached tls renew --forcetls show imprime.A credencial e o certificado são materializados pelo instance-setup em cada arranque, chamado pelo systemd. Se um comando responder com o código 65, essa instância não completou o primeiro arranque: verifique sudo systemctl status memcached antes de mexer em mais nada.
Sinopse #
imaxe memcached <subcomando> [flags]Quase todos os subcomandos precisam de root (use sudo) porque leem a base SASL, o certificado ou a configuração do serviço. Junte --json a status, credentials, users list ou tls show para saída legível por máquina.
Subcomandos #
| Subcomando | O que faz | Flags relevantes |
|---|---|---|
| optimize | Calcula e aplica o melhor tamanho de cache, threads e ligações para esta instância. | --memory-pct --dry-run --show --no-restart |
| status | Estado do serviço: escutas, TLS, SASL, tuning aplicado e estatísticas ao vivo. | --json |
| credentials | Mostra as credenciais SASL desta instância e como ligar-se. | --json --show-password |
| users | Gere os utilizadores SASL: list, add, rotate e delete. | --password --stdin --json |
| set-password | Altera a password do utilizador SASL do produto. Atalho de users rotate. | --random --stdin |
| open-port | Abre a porta do memcached na firewall do host (ufw). | --cidr --json |
| close-port | Fecha a porta na firewall do host e remove as regras existentes. | --json |
| tls | Certificado TLS desta instância: show e renew. | --force --json |
| instance-setup | Prepara a instância antes de arrancar o serviço. É chamado pelo systemd em cada arranque. | --bake |
Argumentos e flags #
| Flag | Tipo | Por omissão | Descrição |
|---|---|---|---|
| --memory-pct | int | 60 | Em optimize: percentagem da RAM utilizável dedicada à cache. |
| --reserve-mem-mb | int | 512 | Em optimize: RAM em MB que não se toca, reservada ao sistema e aos restantes serviços. |
| --threads | int | 0 | Em optimize: threads de trabalho. 0 deriva-as do número de CPUs. |
| --max-connections | int | 0 | Em optimize: ligações simultâneas. 0 deriva-as do tamanho da cache. |
| --dry-run | bool | false | Em optimize: não escreve nada; mostra os valores e o bloco de configuração que seria aplicado. |
| --show | bool | false | Em optimize: só imprime os valores calculados. |
| --no-restart | bool | false | Em optimize: escreve a configuração mas não reinicia o serviço. Um reinício esvazia a cache. |
| --password | string | — | Em users add/rotate: palavra-passe concreta. Se for omitida, gera-se uma aleatória. |
| --stdin | bool | false | Em users add/rotate: lê a palavra-passe da entrada padrão, para que não apareça no ps nem no histórico. |
| --show-password | bool | false | Em credentials: imprime a palavra-passe em claro. Por omissão é mascarada. |
| --force | bool | false | Em tls renew: regenera mesmo que o certificado actual seja válido e desta instância. |
| --random | bool | false | Em set-password: gera uma password forte e imprime-a uma única vez. |
| --cidr | string | — | Em open-port: limita a regra a essa origem. Sem ele, qualquer origem é permitida. |
| --json | bool | false | Emite o resultado como JSON estruturado em stdout. |
Ficheiros e caminhos #
| Caminho | Conteúdo |
|---|---|
| /etc/imaxe/memcached.yml | Configuração do módulo: serviço, caminhos e os valores por omissão de optimize, TLS e SASL. |
| /etc/memcached.conf | Configuração do memcached. É escrita pelo optimize: não a edite à mão. |
| /etc/systemd/system/memcached.service.d/ | Drop-in do systemd com os parâmetros de arranque que o módulo aplica. |
| /etc/memcached/tls/ | Certificado e chave privada desta instância, gerados no primeiro arranque. |
| /etc/sasl2/memcached-sasldb2 | Base de dados SASL com os utilizadores e as suas palavras-passe. |
Exemplo de memcached.yml:
service: memcached
port: 11211
optimize:
memory_pct: 60
memory_min_mb: 64
reserve_mem_mb: 512
threads: 0
max_connections: 0
tls:
enabled: true
days: 3650
plain_local_port: 11212
sasl:
enabled: true
user: memcachedCódigos de saída e registos #
Cada execução devolve um código que pode verificar com echo $? — útil para encadear em scripts:
Siga o serviço ao vivo enquanto trabalha:
$ sudo systemctl status memcached
$ sudo journalctl -u memcached -fResolução de problemas #
| Sintoma | Causa provável | Solução |
|---|---|---|
| Sai NOSECRET (código 65) | A instância não completou o primeiro arranque, que é quando a credencial se materializa. | Verifique sudo systemctl status memcached e tente de novo. |
| Sai NOMEMCACHED (código 64) | O módulo está instalado mas o memcached não está no host. | Está numa imagem que não é a do produto: instale o memcached ou use a AMI correcta. |
Muitas evictions no status | A cache é pequena para o que guarda: expulsam-se elementos para abrir espaço. | Suba a percentagem com optimize --memory-pct ou mude para uma instância com mais RAM. |
| A cache aparece vazia de repente | O serviço reiniciou, e o memcached não persiste nada em disco. | Normal depois de optimize. Para aplicar sem reiniciar, use --no-restart. |
| O cliente rejeita o certificado | É autoassinado e próprio de cada instância. | Confie nele no seu cliente ou valide a impressão digital com tls show. |
Ficou bloqueado com o módulo Memcached?
Escreva-nos com a saída de «imaxe <module> status --json» e respondemos rapidamente.