Memcached侦听选定的接口

我在具有两个接口(eth0(public)和eth1(private))的Debian服务器上设置Memcached。

我希望Memcached在eth1和lo(loopback)上监听,以便即使专用networking发生故障但不是eth0(public),也可以访问它。

memcached的手册页我明白, -l选项只能采取一个IP地址。 我想使用UNIX套接字本地连接,但手册页说

-s
侦听的Unix套接字path( 禁用networking支持 )。

我知道的唯一的其他方法是阻止通过eth0使用IPTables的连接。 有没有其他解决scheme不使用防火墙?

这并不像列出接口和获取所有绑定地址一样方便,而且需要知道绑定到接口的所有地址,但是可以完成。 (请注意,您不能只列出一些接口,因为您已经发现 – 单个接口,所有接口或IP列表)。

-l选项可以带一个接口,INADDR_ANY(意思是所有接口上的所有地址),或一个以逗号分隔的IP地址列表。 一个IP地址可能有一个可选的端口规范。 所以,比如说

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

将memcached监听端口11211和11212上的127.0.0.1上的lo0,以及任何由-p-U设置的端口上的地址10.1.2.3(在哪个接口上)。

您需要知道/拥有您想要绑定的所有地址。 这可能是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,并通过iptables将请求转发到eth1:11211到lo0:11211。