Memcached прослушивает на выбранных интерфейсах

9

Я устанавливаю Memcached на сервере Debian, который имеет два интерфейса - eth0 (общедоступный) и eth1 (частный).

Я хочу, чтобы Memcached прослушивал как eth1, так и lo (loopback), чтобы к нему можно было получить доступ, даже если частная сеть не работает, но НЕ eth0 (public).

Со страницы man для memcached я понимаю, что -lопция может принимать только один IP-адрес. Я думал об использовании UNIX-сокетов для локальных подключений, но на странице руководства написано

-s
Unix путь к сокету для прослушивания ( отключает поддержку сети ).

Единственный известный мне метод - это блокировать соединения через eth0 с помощью IPTables. Есть ли другое решение, которое не использует брандмауэр?

A.Jesin
источник

Ответы:

8

Это не так удобно, как перечисление интерфейса и получение всех его связанных адресов, и для этого требуется знать все адреса, связанные с интерфейсом, но это можно сделать. (Обратите внимание, что вы не можете просто перечислить некоторые интерфейсы, как вы обнаружили - либо один интерфейс, все интерфейсы, либо список IP-адресов.)

-lОпция может принимать интерфейс, INADDR_ANY (что означает все адреса всех интерфейсов), или разделенный запятыми список адресов IP. IP-адрес может иметь дополнительную спецификацию порта. Так, например

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

memcached будет прослушивать lo0 только на 127.0.0.1 на портах 11211 и 11212, а также на адрес 10.1.2.3 (на каком бы интерфейсе он ни находился) на любом порту, установленном с помощью -pили -U.

Вы должны знать / иметь все адреса, которые вы хотите связать. Возможно, это большой разрыв между lo0списком IP-адресов (поскольку ограничения внутренних ресурсов memcached по умолчанию не разрешают привязку к адресам ~ 2 ^ 24 на этом интерфейсе)

Эрик Тауэрс
источник
Использование списка IP-адресов через запятую работает. Большое спасибо! Эта функция была введена в определенной версии? Потому что я не могу найти строку "или список IP-адресов через запятую" на любой странице man.
А.Джесин
1
@ A.Jesin: роется старых конфигураций, это было примерно с 2009 года , по крайней мере выглядит как патч для нескольких IP - адресов была добавлена в 2007 grokbase.com/t/danga/memcached/078qdmzphz/... и lists.danga.com/ pipermail / memcached / attachments / 20070823 /… . Мне неясно, является ли это восходящим memcached или какими-то локальными модами, которые в конечном итоге сделали его восходящим.
Эрик Тауэрс
@ A.Jesin: Кроме того, не забывайте, что на сайтах StackExchange вы можете «принять» ответ, который лучше всего подходит для вас (так что в будущем другие, имеющие такой же вопрос, сразу найдут лучший ответ).
Эрик Тауэрс
Интересно! Это, кажется, сделало его апстрим, но версия в CentOS 6.x пока не поддерживает его.
Факер
10

Как указано в принятом ответе, новые версии поддерживают его:

memcached -l 127.0.0.1:11211,127.0.0.2:11211  

или

memcached -l 127.0.0.1:11211 -l 127.0.0.2:11211  

Старые версии (поставляемые с CentOS 6.5 или более ранней версии) еще не поддерживают это, они могут прослушивать все интерфейсы, один IP-адрес или сокет.
Не любая комбинация тех.

Единственный способ решить эту проблему - это связать его со всеми интерфейсами и межсетевым экраном с открытым интерфейсом или привязать его только к 127.0.0.1 и перенаправить запросы к eth1: 11211 на lo0: 11211 через iptables.

обманщик
источник