美文网首页HDFS
通过代理服务访问 HDFS 集群

通过代理服务访问 HDFS 集群

作者: xudong1991 | 来源:发表于2021-09-07 16:42 被阅读0次

背景

在 HDFS 使用过程中,有时会需要一个类似代理的机制,即:通过一台或多台代理服务器,来代理某一批机器的 HDFS 访问。需要注意的是,大部分情况下,代理服务器只需要代理 NameNode 流量即可,不需要代理 DataNode 流量,因为认证、鉴权等关键操作只涉及到 NameNode。

方案一: iptables 方案

linux 的 iptables 是一个非常强大的工具,在本场景下,混合使用 iptables 的 SNAT 和 DNAT 功能就可以满足需求,方案概览如下:


前提:

  1. 需要确保所有内部机器都能够连接到代理服务器, 且代理服务器能够连接到所有 HDFS NameNode。
  2. 代理服务器上不需要安装 HDFS 客户端,只需要做单纯的网络代理即可。

要点:

  1. 首先,在内部机器上,使用 iptables 对 HDFS NameNode 流量配置 DNAT,destination 为代理服务器。
  2. 其次,在代理服务器上,使用 iptables 对 HDFS NameNode 流量组合配置 DNAT + SNAT,作为路由器使用。

优点:

  1. 部署简单,不需要引入任何额外的软件,仅仅使用 iptables 就可以满足需求。
  2. iptables 实际上是操作了 linux 内核中的 netfilter 组件,netfilter 组件整体运行在内核态,效率很高。

缺点:

  1. 配置复杂,在每个内部机器上,都需要对所有 NameNode 配置 DNAT(如果有多个目标集群的话)。
  2. 同样,在代理服务器上,也需要对所有 NameNode 组合配置 DNAT + SNAT.
  3. 不过,iptable 配置可以通过脚本来批量完成,因此问题不大。

详细步骤

以下面这个场景为例:

  1. HDFS 集群为 ns1,三个 NameNode 分别为:172.16.1.1,172.16.1.2,172.16.1.3
  2. 代理服务器为:172.31.100.100
  3. 内部机器为:192.168.1.5
配置步骤
  1. 在内部机器 192.168.1.5 上,针对三个 NameNode 分别配置 DNAT,destination 统一为代理服务器,如果存在多个代理服务器,则可以任选一个。注意这里使用了三个中转端口(50000、50001、50002):
echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A OUTPUT -d 172.16.1.1 -p tcp --dport 9000 -j DNAT --to-destination 172.31.100.100:50000
iptables -t nat -A OUTPUT -d 172.16.1.2 -p tcp --dport 9000 -j DNAT --to-destination 172.31.100.100:50001
iptables -t nat -A OUTPUT -d 172.16.1.3 -p tcp --dport 9000 -j DNAT --to-destination 172.31.100.100:50002
  1. 在代理服务器 172.31.100.100 上,针对三个 NameNode 组合配置 DNAT + SNAT,作为路由器使用:
echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A PREROUTING -p tcp --dport 50000 -j DNAT --to-destination 172.16.1.1:9000
iptables -t nat -A POSTROUTING -d 172.16.1.1 -p tcp --dport 9000 -j SNAT --to 172.31.100.100

iptables -t nat -A PREROUTING -p tcp --dport 50001 -j DNAT --to-destination 172.16.1.2:9000
iptables -t nat -A POSTROUTING -d 172.16.1.2 -p tcp --dport 9000 -j SNAT --to 172.31.100.100

iptables -t nat -A PREROUTING -p tcp --dport 50002 -j DNAT --to-destination 172.16.1.3:9000
iptables -t nat -A POSTROUTING -d 172.16.1.3 -p tcp --dport 9000 -j SNAT --to 172.31.100.100

其它

  1. 通过代理服务器访问 HDFS NameNode 时,NameNode 的审计日志中将无法记录准确的客户端 IP 地址,而是统一记录为代理服务器的 IP 地址。
  2. 可以设置多个代理服务器,此时,在内部机器的 iptables DNAT 配置中,可以选择合适的 server 作为 destination.
  3. iptables 支持域名,可以使用域名代替 IP,更方便一点。
  4. iptables 中配置中转端口的时候,一些 HDFS 的内部端口需要避开,免得混淆(比如 9000、8020 等),最好找一些不常用的端口范围来配置(例如50000-60000)。

方案二:socks5 代理软件方案

socks5 代理比 http 更加底层,效率也更高,是比 http 代理更好的选择,该方案概览如下。这种方式比较复杂,另外也涉及一些关于代理上网的敏感内容,因此不再详述。

相关文章

  • 通过代理服务访问 HDFS 集群

    背景 在 HDFS 使用过程中,有时会需要一个类似代理的机制,即:通过一台或多台代理服务器,来代理某一批机器的 H...

  • nginx之 正向代理、反向代理、负载均衡

    1. 正向代理 就是服务器作为代理,类似跳板机,客服端不直接访问需要访问的服务器,而是通过代理服务器作为代理访问,...

  • 第十九周作业

    1、搭建Tomcat集群,并通过nginx反向代理访问 反向代理示意图 测试环境: Nginx: 172.16.1...

  • NGINX反向代理非80端口无法访问

    故障现象: 1、被代理机器单独访问正常; 2、通过集群访问,连接不带端口,无法访问(502); 配置如下: 原因:...

  • 第二十周

    1、搭建Tomcat集群,并通过nginx反向代理访问 测试环境: Nginx: 172.16.100.151 T...

  • java中设置网络代理

    代理服务器概述 许多系统通过代理服务器访问Web,有时还会访问Internet的其它非HTTP部分。代理服务器接收...

  • 使用JAVA-API访问开启kerberos集群下的HDFS

    使用API访问开启安全Kerberos的Hdfs hadoop集群(cdh集群)在开启kerberos安全认证方式...

  • es实战-收集Nginx日志可视化监控

    需求场景:ES 集群通过 Nginx 做了网关代理,需要把访问 ES 集群的请求进行统计监控。使用组件:Fileb...

  • 正向代理和反向代理

    正向代理 正向代理代理就好比是一个跳板。例如:我想访问A服务器的内容,但是我没法访问,我可以通过B服务器去访问A服...

  • 使用开发联调神器做k8s的ingress

    背景 K8S集群内部的服务在外部不能访问,如需外部访问需要ingress做代理。官方有nginx-ingress,...

网友评论

    本文标题:通过代理服务访问 HDFS 集群

    本文链接:https://www.haomeiwen.com/subject/ojrpwltx.html