Escuta Memcached nas interfaces selecionadas

9

Estou configurando o Memcached em um servidor Debian que possui duas interfaces - eth0 (público) e eth1 (privado).

Eu quero que o Memcached escute eth1 e lo (loopback) para que ele possa ser acessado mesmo se a rede privada cair, mas NOT eth0 (público).

Na página de manual do memcached, entendo que a -lopção pode ter apenas um endereço IP. Pensei em usar soquetes UNIX para conexões locais, mas a página de manual diz

-s
Caminho do soquete Unix para escutar ( desativa o suporte de rede ).

O único outro método que conheço é bloquear conexões via eth0 usando IPTables. Existe alguma outra solução que não faça uso do firewall?

A.Jesin
fonte

Respostas:

8

Não é tão conveniente quanto listar uma interface e obter todos os seus endereços vinculados, e exige conhecer todos os endereços vinculados a uma interface, mas isso pode ser feito. (Observe que você não pode apenas listar algumas interfaces, como você descobriu - uma única interface, todas as interfaces ou uma lista de IPs.)

A -lopção pode usar uma interface, INADDR_ANY (que significa todos os endereços em todas as interfaces) ou uma lista de endereços IP separados por vírgula. Um endereço IP pode ter uma especificação de porta opcional. Então, por exemplo

memcached -l 127.0.0.1:11211,127.0.0.1:11212,10.1.2.3

o memcached escutará lo0 apenas nas portas 127.0.0.1 nas portas 11211 e 11212 e também no endereço 10.1.2.3 (em qualquer interface que seja) em qualquer porta definida por -pou -U.

Você é obrigado a conhecer / ter todos os endereços que deseja vincular. Talvez essa seja uma grande lacuna entre lo0e uma lista de IPs (já que as limitações de recursos internos padrão do memcached não permitirão a ligação aos endereços ~ 2 ^ 24 nessa interface)

Eric Towers
fonte
Usar uma lista de endereços IP separados por vírgula funciona. Muito obrigado! Esse recurso foi introduzido em uma versão específica? Porque não consigo encontrar a linha "ou uma lista de endereços IP separados por vírgula" em nenhuma página de manual.
A.Jesin
1
@ A.Jesin: Procurando por configurações antigas, isso existe desde pelo menos 2009. Parece que um patch para vários IPs foi adicionado em 2007 grokbase.com/t/danga/memcached/078qdmzphz/… e lists.danga.com/ pipermail / memcached / anexos / 20070823 /… . Não está claro para mim se este é o cache de memórias upstream ou alguns mods locais que eventualmente o fizeram upstream.
Eric Towers
@ A.Jesin: Além disso, não se esqueça de que, nos sites StackExchange, você pode "aceitar" a resposta que melhor funciona para você (para que, no futuro, outras pessoas com a mesma pergunta encontrem a melhor resposta imediatamente).
Eric Towers
Interessante! Isso parece ter feito upstream, mas a versão no CentOS 6.x ainda não é compatível.
faker
10

Como apontado na resposta aceita, as versões mais recentes o suportam:

memcached -l 127.0.0.1:11211,127.0.0.2:11211  

ou

memcached -l 127.0.0.1:11211 -l 127.0.0.2:11211  

As versões mais antigas (fornecidas com o CentOS 6.5 ou anterior) ainda não suportam isso, elas podem ouvir em todas as interfaces, em um único endereço IP ou em um soquete.
Não é nenhuma combinação desses.

Sua única maneira de resolver isso é vinculá-lo a todas as interfaces e firewall a interface pública ou vinculá-lo apenas ao 127.0.0.1 e encaminhar solicitações para eth1: 11211 para lo0: 11211 via iptables.

falsificador
fonte