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