Memcached Listen auf ausgewählten Schnittstellen

9

Ich richte Memcached auf einem Debian-Server ein, der zwei Schnittstellen hat - eth0 (öffentlich) und eth1 (privat).

Ich möchte, dass Memcached sowohl eth1 als auch lo (Loopback) abhört, damit auf es zugegriffen werden kann, auch wenn das private Netzwerk ausfällt, aber NICHT eth0 (öffentlich).

Aus der Manpage für memcached geht hervor, dass die -lOption nur eine IP-Adresse annehmen kann. Ich dachte daran, UNIX-Sockets für lokale Verbindungen zu verwenden, aber die Manpage sagt

-s
Unix-Socket-Pfad zum Abhören ( deaktiviert die Netzwerkunterstützung ).

Die einzige andere Methode, die ich kenne, ist das Blockieren von Verbindungen über eth0 mithilfe von IPTables. Gibt es eine andere Lösung, die die Firewall nicht nutzt?

A. Jesus
quelle

Antworten:

8

Es ist nicht so bequem wie das Auflisten einer Schnittstelle und das Abrufen aller gebundenen Adressen, und es erfordert das Kennen aller an eine Schnittstelle gebundenen Adressen, aber es kann durchgeführt werden. (Beachten Sie, dass Sie nicht nur einige Schnittstellen auflisten können, wie Sie festgestellt haben - entweder eine einzelne Schnittstelle, alle Schnittstellen oder eine Liste von IPs.)

Die -lOption kann eine Schnittstelle, INADDR_ANY (dh alle Adressen auf allen Schnittstellen) oder eine durch Kommas getrennte Liste von IP-Adressen verwenden. Eine IP-Adresse kann eine optionale Portspezifikation haben. So zum Beispiel

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

Memcached hört lo0 nur auf 127.0.0.1 an den Ports 11211 und 11212 und auch auf die Adresse 10.1.2.3 (auf welcher Schnittstelle auch immer) auf dem von -poder eingestellten Port -U.

Sie müssen alle Adressen kennen / haben, die Sie binden möchten. Dies ist möglicherweise eine große Lücke zwischen lo0und einer Liste von IPs (da die standardmäßigen internen Ressourcenbeschränkungen von memcached keine Bindung an die ~ 2 ^ 24-Adressen auf dieser Schnittstelle zulassen).

Eric Towers
quelle
Die Verwendung einer durch Kommas getrennten Liste von IP-Adressen funktioniert. Vielen Dank! Wurde diese Funktion in einer bestimmten Version eingeführt? Weil ich die Zeile "oder eine durch Kommas getrennte Liste von IP-Adressen" auf keiner Manpage finden kann.
A. Jesus
1
@ A.Jesin: In alten Konfigurationen gibt es das seit mindestens 2009. Es sieht so aus, als ob 2007 ein Patch für mehrere IPs hinzugefügt wurde. Grokbase.com/t/danga/memcached/078qdmzphz/… und lists.danga.com/ pipermail / memcached / attachments / 20070823 /… . Es ist mir unklar, ob dies Upstream-Memcached ist oder einige lokale Mods, die es schließlich Upstream gemacht haben.
Eric Towers
@ A.Jesin: Vergessen Sie auch nicht, dass Sie auf StackExchange-Websites die Antwort "akzeptieren" können, die für Sie am besten funktioniert (damit in Zukunft andere, die dieselbe Frage haben, sofort die beste Antwort finden).
Eric Towers
Interessant! Dies scheint es Upstream gemacht zu haben, aber die Version in CentOS 6.x unterstützt es noch nicht.
Fälscher
10

Wie in der akzeptierten Antwort ausgeführt, unterstützen neuere Versionen dies:

memcached -l 127.0.0.1:11211,127.0.0.2:11211  

oder

memcached -l 127.0.0.1:11211 -l 127.0.0.2:11211  

Ältere Versionen (im Lieferumfang von CentOS 6.5 oder früher enthalten) unterstützen dies noch nicht. Sie können entweder alle Schnittstellen, eine einzelne IP-Adresse oder einen Socket abhören .
Keine Kombination davon.

Ihre einzige Möglichkeit, dies zu lösen, besteht darin, es an alle Schnittstellen zu binden und die öffentliche Schnittstelle zu Firewall oder nur an 127.0.0.1 zu binden und Anforderungen über iptables an eth1: 11211 an lo0: 11211 weiterzuleiten.

Schwindler
quelle