我有一个网络,其中运行多个服务器,每个服务器专用于一项给定的服务。
由于大多数服务都在不同的端口上运行,因此我目前正在寻找一种将“所有”服务统一到单个“代理”机器中的方法。这个想法是抽象出正在访问哪台机器,但仍允许在需要/请求时进行直接连接。
该“代理”机器只有一个网络接口,该接口与所有其他服务提供机器属于同一网络。
我研究过路由和 NAT,但至今还没搞清楚如何让它工作。我尝试使用 shorewall 来实现这一点,但找不到清晰的示例。然而,我并不完全确定这是最佳/最简单的策略。
话虽如此,实现这一结果的最佳方法是什么?
示例案例:
Proxy IP - Listening port - Send requests to
192.168.0.50 80 (http) 192.168.0.1:80
" 22 (ssh) 192.168.0.2:2222
" 3306 (mysql) 192.168.0.3:3000
" 5432 (postgres) 192.168.0.4:5432
" 5222 (jabber) 192.168.0.5:5222
PS:我并不关心代理的单点故障特性。
谢谢
答案1
正如 Ansgar 所说,你需要使用反向代理,Haproxy 可以做到这一点,甚至更多。而且只需要很少的资源
请注意:
- 代理现在是一个潜在的瓶颈
- 它也是一个单点故障(在故障转移中运行两个,单独的交换机电源、主机等)
我认为 Ansgar 原本希望您使用 DNS SRV 记录,它们允许您解析 DNS 条目和 IP 端口。
http://en.wikipedia.org/wiki/SRV_record
更新
我建议您计算所有服务的组合带宽,如果低于预期的代理主机网络接口的最大吞吐量,那么应该基本没问题,可能需要进行一些网络 IO 调整。
答案2
你需要反向代理连接,并非所有协议(例如 SSH)都支持该功能。为了避免造成这种单点故障,我建议CNAME
在 DNS 中添加指向相应服务器的服务特定记录。