Memcached прослушивает на выбранных интерфейсах
Я устанавливаю Memcached на сервере Debian, который имеет два интерфейса - eth0 (общедоступный) и eth1 (частный).
Я хочу, чтобы Memcached прослушивал как eth1, так и lo (loopback), чтобы к нему можно было получить доступ, даже если частная сеть не работает, но НЕ eth0 (public).
Со страницы man для memcached я понимаю, что -l
Опция может принимать только один IP-адрес. Я думал об использовании UNIX-сокетов для локальных подключений, но на странице руководства написано
-s
Путь к сокету Unix для прослушивания (отключает поддержку сети).
Единственный другой метод, который я знаю, - это блокирование соединений через eth0 с использованием IPTables. Есть ли другое решение, которое не использует брандмауэр?
2 ответа
Это не так удобно, как перечисление интерфейса и получение всех его связанных адресов, и для этого требуется знать все адреса, связанные с интерфейсом, но это можно сделать. (Обратите внимание, что вы не можете просто перечислить некоторые интерфейсы, как вы обнаружили - либо один интерфейс, все интерфейсы, либо список IP-адресов.)
-l
option может принимать интерфейс, 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 на этом интерфейсе)
Как указано в принятом ответе, новые версии поддерживают его:
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.