Écoute Memcached sur les interfaces sélectionnées

9

J'installe Memcached sur un serveur Debian qui a deux interfaces - eth0 (public) et eth1 (privé).

Je veux que Memcached écoute à la fois sur eth1 et lo (bouclage) afin qu'il soit accessible même si le réseau privé tombe en panne mais PAS eth0 (public).

D'après la page de manuel de memcached, je comprends que l' -loption ne peut prendre qu'une seule adresse IP. J'ai pensé à utiliser des sockets UNIX pour les connexions locales mais la page de manuel dit

-s
Chemin de socket Unix sur lequel écouter ( désactive la prise en charge réseau ).

La seule autre méthode que je connaisse est de bloquer les connexions via eth0 en utilisant IPTables. Existe-t-il une autre solution qui n'utilise pas le pare-feu?

A.Jesin
la source

Réponses:

8

Ce n'est pas aussi pratique que de répertorier une interface et d'obtenir toutes ses adresses liées, et cela nécessite de connaître toutes les adresses liées à une interface, mais cela peut être fait. (Notez que vous ne pouvez pas simplement lister certaines interfaces, comme vous l'avez découvert - soit une seule interface, toutes les interfaces ou une liste d'adresses IP.)

L' -loption peut prendre une interface, INADDR_ANY (ce qui signifie toutes les adresses sur toutes les interfaces) ou une liste d'adresses IP séparées par des virgules. Une adresse IP peut avoir une spécification de port facultative. Ainsi, par exemple

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

aura memcached écouter lo0 uniquement sur 127.0.0.1 sur les ports 11211 et 11212 et aussi sur l'adresse 10.1.2.3 (quelle que soit l'interface) sur le port défini par -pou -U.

Vous devez connaître / avoir toutes les adresses que vous souhaitez lier. C'est peut-être un grand écart entre lo0et une liste d'adresses IP (car les limitations de ressources internes par défaut de memcached ne permettront pas la liaison aux ~ 2 ^ 24 adresses sur cette interface)

Eric Towers
la source
L'utilisation d'une liste d'adresses IP séparées par des virgules fonctionne. Merci beaucoup! Cette fonctionnalité a-t-elle été introduite dans une version spécifique? Parce que je ne trouve pas la ligne "ou une liste d'adresses IP séparées par des virgules" sur aucune page de manuel.
A.Jesin
1
@ A.Jesin: En fouillant dans les anciennes configurations, cela existe depuis au moins 2009. On dirait qu'un patch pour plusieurs IP a été ajouté en 2007 grokbase.com/t/danga/memcached/078qdmzphz/… et lists.danga.com/ pipermail / memcached / attachments / 20070823 /… . Il n'est pas clair pour moi s'il s'agit d'un memcached en amont ou de certains mods locaux qui l'ont finalement fait en amont.
Eric Towers
@ A.Jesin: N'oubliez pas non plus que sur les sites StackExchange, vous pouvez «accepter» la réponse qui vous convient le mieux (pour qu'à l'avenir, d'autres personnes ayant votre même question trouvent immédiatement la meilleure réponse).
Eric Towers du
Intéressant! Cela semble l'avoir fait en amont, mais la version de CentOS 6.x ne le prend pas encore en charge.
faker
10

Comme indiqué dans la réponse acceptée, les nouvelles versions le prennent en charge:

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  

Les versions plus anciennes (livrées avec CentOS 6.5 ou version antérieure) ne prennent pas encore en charge cela, elles peuvent écouter sur toutes les interfaces, une seule adresse IP ou un socket.
Pas une combinaison de ceux-ci.

Votre seul moyen de résoudre ce problème est de le lier à toutes les interfaces et de pare-feu l'interface publique ou de le lier à 127.0.0.1 uniquement et de transmettre les demandes à eth1: 11211 à lo0: 11211 via iptables.

truqueur
la source